Compare commits
26 Commits
14486451d8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4eef08b30b | ||
|
|
1f87811475 | ||
|
|
d7c910c4b3 | ||
|
|
ee4f3e9c51 | ||
|
|
e9ed033754 | ||
|
|
386e61ee17 | ||
|
|
6a29f899c8 | ||
|
|
c9fa4aeaf7 | ||
|
|
c7c9a90ed8 | ||
|
|
9b986f408d | ||
|
|
6ead6f2102 | ||
|
|
a16979274a | ||
|
|
37d7bacba7 | ||
|
|
1c66279c48 | ||
|
|
af69467d6f | ||
|
|
3f38c5ed10 | ||
|
|
3295dd0502 | ||
|
|
d2cfe49f4b | ||
|
|
33d9c5bf06 | ||
|
|
ab233507bb | ||
|
|
dfc88b5c96 | ||
|
|
19d9c51c67 | ||
|
|
a89d0117f4 | ||
|
|
5c58ab0a6e | ||
|
|
620fb28b00 | ||
|
|
f0e89c1e3f |
1
.astro/content-assets.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
1
.astro/content-modules.mjs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export default new Map();
|
||||||
219
.astro/content.d.ts
vendored
Normal file
@@ -0,0 +1,219 @@
|
|||||||
|
declare module 'astro:content' {
|
||||||
|
export interface RenderResult {
|
||||||
|
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
|
||||||
|
headings: import('astro').MarkdownHeading[];
|
||||||
|
remarkPluginFrontmatter: Record<string, any>;
|
||||||
|
}
|
||||||
|
interface Render {
|
||||||
|
'.md': Promise<RenderResult>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface RenderedContent {
|
||||||
|
html: string;
|
||||||
|
metadata?: {
|
||||||
|
imagePaths: Array<string>;
|
||||||
|
[key: string]: unknown;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
declare module 'astro:content' {
|
||||||
|
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
|
||||||
|
|
||||||
|
export type CollectionKey = keyof AnyEntryMap;
|
||||||
|
export type CollectionEntry<C extends CollectionKey> = Flatten<AnyEntryMap[C]>;
|
||||||
|
|
||||||
|
export type ContentCollectionKey = keyof ContentEntryMap;
|
||||||
|
export type DataCollectionKey = keyof DataEntryMap;
|
||||||
|
|
||||||
|
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
|
||||||
|
type ValidContentEntrySlug<C extends keyof ContentEntryMap> = AllValuesOf<
|
||||||
|
ContentEntryMap[C]
|
||||||
|
>['slug'];
|
||||||
|
|
||||||
|
export type ReferenceDataEntry<
|
||||||
|
C extends CollectionKey,
|
||||||
|
E extends keyof DataEntryMap[C] = string,
|
||||||
|
> = {
|
||||||
|
collection: C;
|
||||||
|
id: E;
|
||||||
|
};
|
||||||
|
export type ReferenceContentEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}) = string,
|
||||||
|
> = {
|
||||||
|
collection: C;
|
||||||
|
slug: E;
|
||||||
|
};
|
||||||
|
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
|
||||||
|
collection: C;
|
||||||
|
id: string;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** @deprecated Use `getEntry` instead. */
|
||||||
|
export function getEntryBySlug<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
// Note that this has to accept a regular string too, for SSR
|
||||||
|
entrySlug: E,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
|
||||||
|
/** @deprecated Use `getEntry` instead. */
|
||||||
|
export function getDataEntryById<C extends keyof DataEntryMap, E extends keyof DataEntryMap[C]>(
|
||||||
|
collection: C,
|
||||||
|
entryId: E,
|
||||||
|
): Promise<CollectionEntry<C>>;
|
||||||
|
|
||||||
|
export function getCollection<C extends keyof AnyEntryMap, E extends CollectionEntry<C>>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => entry is E,
|
||||||
|
): Promise<E[]>;
|
||||||
|
export function getCollection<C extends keyof AnyEntryMap>(
|
||||||
|
collection: C,
|
||||||
|
filter?: (entry: CollectionEntry<C>) => unknown,
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter?: LiveLoaderCollectionFilterType<C>,
|
||||||
|
): Promise<
|
||||||
|
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
|
||||||
|
>;
|
||||||
|
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
entry: ReferenceContentEntry<C, E>,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
entry: ReferenceDataEntry<C, E>,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof ContentEntryMap,
|
||||||
|
E extends ValidContentEntrySlug<C> | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
slug: E,
|
||||||
|
): E extends ValidContentEntrySlug<C>
|
||||||
|
? Promise<CollectionEntry<C>>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getEntry<
|
||||||
|
C extends keyof DataEntryMap,
|
||||||
|
E extends keyof DataEntryMap[C] | (string & {}),
|
||||||
|
>(
|
||||||
|
collection: C,
|
||||||
|
id: E,
|
||||||
|
): E extends keyof DataEntryMap[C]
|
||||||
|
? string extends keyof DataEntryMap[C]
|
||||||
|
? Promise<DataEntryMap[C][E]> | undefined
|
||||||
|
: Promise<DataEntryMap[C][E]>
|
||||||
|
: Promise<CollectionEntry<C> | undefined>;
|
||||||
|
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
|
||||||
|
collection: C,
|
||||||
|
filter: string | LiveLoaderEntryFilterType<C>,
|
||||||
|
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
|
||||||
|
|
||||||
|
/** Resolve an array of entry references from the same collection */
|
||||||
|
export function getEntries<C extends keyof ContentEntryMap>(
|
||||||
|
entries: ReferenceContentEntry<C, ValidContentEntrySlug<C>>[],
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
export function getEntries<C extends keyof DataEntryMap>(
|
||||||
|
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
|
||||||
|
): Promise<CollectionEntry<C>[]>;
|
||||||
|
|
||||||
|
export function render<C extends keyof AnyEntryMap>(
|
||||||
|
entry: AnyEntryMap[C][string],
|
||||||
|
): Promise<RenderResult>;
|
||||||
|
|
||||||
|
export function reference<C extends keyof AnyEntryMap>(
|
||||||
|
collection: C,
|
||||||
|
): import('astro/zod').ZodEffects<
|
||||||
|
import('astro/zod').ZodString,
|
||||||
|
C extends keyof ContentEntryMap
|
||||||
|
? ReferenceContentEntry<C, ValidContentEntrySlug<C>>
|
||||||
|
: ReferenceDataEntry<C, keyof DataEntryMap[C]>
|
||||||
|
>;
|
||||||
|
// Allow generic `string` to avoid excessive type errors in the config
|
||||||
|
// if `dev` is not running to update as you edit.
|
||||||
|
// Invalid collection names will be caught at build time.
|
||||||
|
export function reference<C extends string>(
|
||||||
|
collection: C,
|
||||||
|
): import('astro/zod').ZodEffects<import('astro/zod').ZodString, never>;
|
||||||
|
|
||||||
|
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
|
||||||
|
type InferEntrySchema<C extends keyof AnyEntryMap> = import('astro/zod').infer<
|
||||||
|
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
|
||||||
|
>;
|
||||||
|
|
||||||
|
type ContentEntryMap = {
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
type DataEntryMap = {
|
||||||
|
"blog": Record<string, {
|
||||||
|
id: string;
|
||||||
|
render(): Render[".md"];
|
||||||
|
slug: string;
|
||||||
|
body: string;
|
||||||
|
collection: "blog";
|
||||||
|
data: any;
|
||||||
|
rendered?: RenderedContent;
|
||||||
|
filePath?: string;
|
||||||
|
}>;
|
||||||
|
"products": Record<string, {
|
||||||
|
id: string;
|
||||||
|
render(): Render[".md"];
|
||||||
|
slug: string;
|
||||||
|
body: string;
|
||||||
|
collection: "products";
|
||||||
|
data: any;
|
||||||
|
rendered?: RenderedContent;
|
||||||
|
filePath?: string;
|
||||||
|
}>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
type AnyEntryMap = ContentEntryMap & DataEntryMap;
|
||||||
|
|
||||||
|
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
|
||||||
|
infer TData,
|
||||||
|
infer TEntryFilter,
|
||||||
|
infer TCollectionFilter,
|
||||||
|
infer TError
|
||||||
|
>
|
||||||
|
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
|
||||||
|
: { data: never; entryFilter: never; collectionFilter: never; error: never };
|
||||||
|
type ExtractDataType<T> = ExtractLoaderTypes<T>['data'];
|
||||||
|
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
|
||||||
|
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
|
||||||
|
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
|
||||||
|
|
||||||
|
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
LiveContentConfig['collections'][C]['schema'] extends undefined
|
||||||
|
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
|
||||||
|
: import('astro/zod').infer<
|
||||||
|
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
|
||||||
|
>;
|
||||||
|
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
|
||||||
|
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
|
||||||
|
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
|
||||||
|
LiveContentConfig['collections'][C]['loader']
|
||||||
|
>;
|
||||||
|
|
||||||
|
export type ContentConfig = typeof import("../src/content.config.js");
|
||||||
|
export type LiveContentConfig = never;
|
||||||
|
}
|
||||||
2
.astro/types.d.ts
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
/// <reference types="astro/client" />
|
||||||
|
/// <reference path="content.d.ts" />
|
||||||
58
PUSH_INSTRUCTIONS.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Push Images to Gitea - Manual Instructions
|
||||||
|
|
||||||
|
## Status
|
||||||
|
- 22 commits ready to push
|
||||||
|
- 495 image files committed
|
||||||
|
- Authentication required for Gitea
|
||||||
|
|
||||||
|
## Method 1: Push All at Once (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /Users/kunthawatgreethong/Gitea/dealplustech-new/dealplustech-astro
|
||||||
|
git push origin main --force
|
||||||
|
```
|
||||||
|
|
||||||
|
Enter your Gitea password when prompted.
|
||||||
|
|
||||||
|
## Method 2: Push in Batches
|
||||||
|
|
||||||
|
If Method 1 fails, push in smaller batches:
|
||||||
|
|
||||||
|
### Batch 1: Corporate + Banners (2 commits)
|
||||||
|
```bash
|
||||||
|
git push origin HEAD~22..HEAD~20 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
### Batch 2: Pipe Images (4 commits)
|
||||||
|
```bash
|
||||||
|
git push origin HEAD~20..HEAD~16 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
### Batch 3: Valves + Grilles + Mech (3 commits)
|
||||||
|
```bash
|
||||||
|
git push origin HEAD~16..HEAD~13 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
### Batch 4: More Categories (5 commits)
|
||||||
|
```bash
|
||||||
|
git push origin HEAD~13..HEAD~8 --force
|
||||||
|
```
|
||||||
|
|
||||||
|
### Batch 5: Final Categories (8 commits)
|
||||||
|
```bash
|
||||||
|
git push origin HEAD~8..HEAD --force
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If authentication fails:
|
||||||
|
1. Make sure you're using correct Gitea credentials
|
||||||
|
2. Try: `git config --global credential.helper cache`
|
||||||
|
3. Or use SSH instead of HTTPS (if configured)
|
||||||
|
|
||||||
|
## Verify Push
|
||||||
|
|
||||||
|
After pushing, check:
|
||||||
|
https://git.moreminimore.com/kunthawat/dealplustech/commits/branch/main
|
||||||
|
|
||||||
|
You should see 22 new commits with image files.
|
||||||
7297
package-lock.json
generated
Normal file
BIN
public/images/banners/BANNER_0.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
public/images/banners/BANNER_0_1.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
public/images/banners/BANNER_0_2.png
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
BIN
public/images/banners/Banner-DUKELARRSEN.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/images/banners/Banner-DUKELARRSEN_1.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/images/banners/Banner-DUKELARRSEN_2.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/images/banners/Banner-DUKELARRSEN_3.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
BIN
public/images/banners/Banner-DURGO.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/images/banners/Banner-DURGO_1.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/images/banners/Banner-DURGO_2.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/images/banners/Banner-DURGO_3.jpg
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
public/images/banners/Banner-Grillesl.jpg
Normal file
|
After Width: | Height: | Size: 471 KiB |
BIN
public/images/banners/Banner-Grillesl_1.jpg
Normal file
|
After Width: | Height: | Size: 471 KiB |
BIN
public/images/banners/Banner-Grillesl_2.jpg
Normal file
|
After Width: | Height: | Size: 471 KiB |
BIN
public/images/banners/Banner-Grillesl_3.jpg
Normal file
|
After Width: | Height: | Size: 471 KiB |
BIN
public/images/banners/Banner-HDPE-wel-1.jpg
Normal file
|
After Width: | Height: | Size: 191 KiB |
BIN
public/images/banners/Banner-HDPE-wel-V2.jpg
Normal file
|
After Width: | Height: | Size: 825 KiB |
BIN
public/images/banners/Banner-HDPE-wel-V2_1.jpg
Normal file
|
After Width: | Height: | Size: 825 KiB |
BIN
public/images/banners/Banner-HDPE-wel-V2_2.jpg
Normal file
|
After Width: | Height: | Size: 825 KiB |
BIN
public/images/banners/Banner-HDPE-wel.jpg
Normal file
|
After Width: | Height: | Size: 160 KiB |
BIN
public/images/banners/Banner-MECH.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/images/banners/Banner-MECH_1.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/images/banners/Banner-MECH_2.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/images/banners/Banner-MECH_3.jpg
Normal file
|
After Width: | Height: | Size: 83 KiB |
BIN
public/images/banners/Banner-POLOPLAST.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/banners/Banner-POLOPLAST_1.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/banners/Banner-POLOPLAST_2.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/banners/Banner-POLOPLAST_3.jpg
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/banners/Banner-REALPLEX.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/images/banners/Banner-REALPLEX_1.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/images/banners/Banner-REALPLEX_2.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/images/banners/Banner-REALPLEX_3.jpg
Normal file
|
After Width: | Height: | Size: 117 KiB |
BIN
public/images/banners/Banner-SMCV2-1.jpg
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
public/images/banners/Banner-SMCV2-1_1.jpg
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
public/images/banners/Banner-SMCV2-1_2.jpg
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
public/images/banners/Banner-SMCV2-1_3.jpg
Normal file
|
After Width: | Height: | Size: 677 KiB |
BIN
public/images/banners/Banner-Syler-V2-1024x382.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/images/banners/Banner-Syler-V2-1024x382_1.jpg
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
public/images/banners/Banner-Syler-V2.jpg
Normal file
|
After Width: | Height: | Size: 420 KiB |
BIN
public/images/banners/Banner-Syler-V2_1.jpg
Normal file
|
After Width: | Height: | Size: 420 KiB |
BIN
public/images/banners/Banner-TDV2.jpg
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/images/banners/Banner-XYLENT.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/images/banners/Banner-XYLENT_1.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/images/banners/Banner-XYLENT_2.jpg
Normal file
|
After Width: | Height: | Size: 126 KiB |
BIN
public/images/banners/Banner-ppr-1.jpg
Normal file
|
After Width: | Height: | Size: 746 KiB |
BIN
public/images/banners/Banner-ppr-1_1.jpg
Normal file
|
After Width: | Height: | Size: 746 KiB |
BIN
public/images/banners/Banner-ppr-1_2.jpg
Normal file
|
After Width: | Height: | Size: 746 KiB |
BIN
public/images/banners/Banner-ppr-V3-2.jpg
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/images/banners/Banner-ppr-V3-2_1.jpg
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/images/banners/Banner-ppr-V3-2_2.jpg
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/images/banners/Banner-ppr-V3-2_3.jpg
Normal file
|
After Width: | Height: | Size: 263 KiB |
BIN
public/images/banners/Banner-ppr2-1.jpg
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
public/images/banners/Banner-ppr2-1_1.jpg
Normal file
|
After Width: | Height: | Size: 189 KiB |
BIN
public/images/banners/Banner-ppr2.jpg
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/images/banners/Banner-ppr2_1.jpg
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/images/banners/Banner-ppr2_2.jpg
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/images/banners/Banner-ppr2_3.jpg
Normal file
|
After Width: | Height: | Size: 728 KiB |
BIN
public/images/banners/Banner-pump-1.jpg
Normal file
|
After Width: | Height: | Size: 568 KiB |
BIN
public/images/banners/Banner-pump-1_1.jpg
Normal file
|
After Width: | Height: | Size: 568 KiB |
BIN
public/images/banners/Banner-pump2.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
public/images/banners/Banner-pump2_1.jpg
Normal file
|
After Width: | Height: | Size: 102 KiB |
BIN
public/images/banners/Banner-ต_ด_บเพล_ง.jpg
Normal file
|
After Width: | Height: | Size: 744 KiB |
BIN
public/images/banners/Banner-ต_ด_บเพล_ง_1.jpg
Normal file
|
After Width: | Height: | Size: 744 KiB |
BIN
public/images/banners/Banner-ต_ด_บเพล_ง_2.jpg
Normal file
|
After Width: | Height: | Size: 744 KiB |
BIN
public/images/banners/bannerF01.jpg
Normal file
|
After Width: | Height: | Size: 258 KiB |
BIN
public/images/banners/slider2-store1.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/banners/slider2-store1_1.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
public/images/banners/waterpipe_scg_banner.jpg
Normal file
|
After Width: | Height: | Size: 496 KiB |
BIN
public/images/corporate/icon_about1.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/images/corporate/icon_about1_1.jpg
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
public/images/corporate/icon_about2.jpg
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/images/corporate/icon_about2_1.jpg
Normal file
|
After Width: | Height: | Size: 2.4 KiB |
BIN
public/images/corporate/icon_about3.jpg
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
BIN
public/images/corporate/icon_about4.jpg
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/images/corporate/icon_about4_1.jpg
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/images/corporate/img-about.jpg
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/images/corporate/img-about_1.jpg
Normal file
|
After Width: | Height: | Size: 7.8 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-01.jpg
Normal file
|
After Width: | Height: | Size: 228 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-02.jpg
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-02_1.jpg
Normal file
|
After Width: | Height: | Size: 63 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-03.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-04.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-04_1.jpg
Normal file
|
After Width: | Height: | Size: 74 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-05.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-05_1.jpg
Normal file
|
After Width: | Height: | Size: 82 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-06.jpg
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-08.jpg
Normal file
|
After Width: | Height: | Size: 653 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-08_1.jpg
Normal file
|
After Width: | Height: | Size: 653 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-10.jpg
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-10_1.jpg
Normal file
|
After Width: | Height: | Size: 382 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-11.jpg
Normal file
|
After Width: | Height: | Size: 290 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-11_1.jpg
Normal file
|
After Width: | Height: | Size: 290 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-12.jpg
Normal file
|
After Width: | Height: | Size: 316 KiB |
BIN
public/images/products/dukelarrsen/dukelarrsen-12_1.jpg
Normal file
|
After Width: | Height: | Size: 316 KiB |