@o2vend/theme-cli 1.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +425 -0
- package/assets/Logo_o2vend.png +0 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-white.png +0 -0
- package/bin/o2vend +42 -0
- package/config/widget-map.json +50 -0
- package/lib/commands/check.js +201 -0
- package/lib/commands/generate.js +33 -0
- package/lib/commands/init.js +214 -0
- package/lib/commands/optimize.js +216 -0
- package/lib/commands/package.js +208 -0
- package/lib/commands/serve.js +105 -0
- package/lib/commands/validate.js +191 -0
- package/lib/lib/api-client.js +357 -0
- package/lib/lib/dev-server.js +2618 -0
- package/lib/lib/file-watcher.js +80 -0
- package/lib/lib/hot-reload.js +106 -0
- package/lib/lib/liquid-engine.js +822 -0
- package/lib/lib/liquid-filters.js +671 -0
- package/lib/lib/mock-api-server.js +989 -0
- package/lib/lib/mock-data.js +1468 -0
- package/lib/lib/widget-service.js +321 -0
- package/package.json +70 -0
- package/test-theme/README.md +27 -0
- package/test-theme/assets/async-sections.js +446 -0
- package/test-theme/assets/cart-drawer.js +463 -0
- package/test-theme/assets/cart-manager.js +223 -0
- package/test-theme/assets/checkout-price-handler.js +368 -0
- package/test-theme/assets/components.css +4629 -0
- package/test-theme/assets/delivery-zone.css +299 -0
- package/test-theme/assets/delivery-zone.js +396 -0
- package/test-theme/assets/logo.png +0 -0
- package/test-theme/assets/sections.css +48 -0
- package/test-theme/assets/theme.css +3500 -0
- package/test-theme/assets/theme.js +3745 -0
- package/test-theme/config/settings_data.json +292 -0
- package/test-theme/config/settings_schema.json +1050 -0
- package/test-theme/layout/theme.liquid +195 -0
- package/test-theme/locales/en.default.json +260 -0
- package/test-theme/sections/content-fallback.liquid +53 -0
- package/test-theme/sections/content.liquid +57 -0
- package/test-theme/sections/footer-fallback.liquid +328 -0
- package/test-theme/sections/footer.liquid +278 -0
- package/test-theme/sections/header-fallback.liquid +1805 -0
- package/test-theme/sections/header.liquid +1145 -0
- package/test-theme/sections/hero-fallback.liquid +212 -0
- package/test-theme/sections/hero.liquid +136 -0
- package/test-theme/snippets/account-sidebar.liquid +200 -0
- package/test-theme/snippets/add-to-cart-modal.liquid +484 -0
- package/test-theme/snippets/breadcrumbs.liquid +134 -0
- package/test-theme/snippets/cart-drawer.liquid +467 -0
- package/test-theme/snippets/delivery-zone-city-selector.liquid +79 -0
- package/test-theme/snippets/delivery-zone-modal.liquid +337 -0
- package/test-theme/snippets/delivery-zone-search.liquid +78 -0
- package/test-theme/snippets/icon.liquid +105 -0
- package/test-theme/snippets/login-modal.liquid +346 -0
- package/test-theme/snippets/mega-menu.liquid +812 -0
- package/test-theme/snippets/news-thumbnail.liquid +187 -0
- package/test-theme/snippets/pagination.liquid +120 -0
- package/test-theme/snippets/price.liquid +92 -0
- package/test-theme/snippets/product-card-related.liquid +78 -0
- package/test-theme/snippets/product-card-simple.liquid +41 -0
- package/test-theme/snippets/product-card.liquid +697 -0
- package/test-theme/snippets/rating.liquid +85 -0
- package/test-theme/snippets/skeleton-collection-grid.liquid +114 -0
- package/test-theme/snippets/skeleton-product-card.liquid +124 -0
- package/test-theme/snippets/skeleton-product-grid.liquid +34 -0
- package/test-theme/snippets/social-sharing.liquid +185 -0
- package/test-theme/templates/account/dashboard.liquid +401 -0
- package/test-theme/templates/account/loyalty-redemption.liquid +405 -0
- package/test-theme/templates/account/loyalty.liquid +588 -0
- package/test-theme/templates/account/order-detail.liquid +230 -0
- package/test-theme/templates/account/orders.liquid +349 -0
- package/test-theme/templates/account/profile.liquid +758 -0
- package/test-theme/templates/account/register.liquid +232 -0
- package/test-theme/templates/account/return-orders.liquid +348 -0
- package/test-theme/templates/account/store-credit.liquid +464 -0
- package/test-theme/templates/account/subscriptions.liquid +601 -0
- package/test-theme/templates/account/wishlist.liquid +419 -0
- package/test-theme/templates/address-book.liquid +1092 -0
- package/test-theme/templates/categories.liquid +452 -0
- package/test-theme/templates/checkout.liquid +4511 -0
- package/test-theme/templates/error.liquid +384 -0
- package/test-theme/templates/index.liquid +11 -0
- package/test-theme/templates/login.liquid +185 -0
- package/test-theme/templates/order-confirmation.liquid +720 -0
- package/test-theme/templates/page.liquid +297 -0
- package/test-theme/templates/product-detail.liquid +4363 -0
- package/test-theme/templates/products.liquid +518 -0
- package/test-theme/templates/search.liquid +922 -0
- package/test-theme/theme.json.example +19 -0
- package/test-theme/widgets/brand-carousel.liquid +676 -0
- package/test-theme/widgets/brand.liquid +245 -0
- package/test-theme/widgets/carousel.liquid +843 -0
- package/test-theme/widgets/category-list-carousel.liquid +656 -0
- package/test-theme/widgets/category-list.liquid +340 -0
- package/test-theme/widgets/category.liquid +475 -0
- package/test-theme/widgets/discount-time.liquid +176 -0
- package/test-theme/widgets/footer-menu.liquid +695 -0
- package/test-theme/widgets/footer.liquid +179 -0
- package/test-theme/widgets/gallery.liquid +271 -0
- package/test-theme/widgets/header-menu.liquid +932 -0
- package/test-theme/widgets/header.liquid +159 -0
- package/test-theme/widgets/html.liquid +214 -0
- package/test-theme/widgets/news.liquid +217 -0
- package/test-theme/widgets/product-canvas.liquid +235 -0
- package/test-theme/widgets/product-carousel.liquid +502 -0
- package/test-theme/widgets/product.liquid +45 -0
- package/test-theme/widgets/recently-viewed.liquid +26 -0
- package/test-theme/widgets/shared/product-grid.liquid +339 -0
- package/test-theme/widgets/simple-product.liquid +42 -0
- package/test-theme/widgets/single-product.liquid +610 -0
- package/test-theme/widgets/spacebar-carousel.liquid +663 -0
- package/test-theme/widgets/spacebar.liquid +279 -0
- package/test-theme/widgets/splash.liquid +378 -0
- package/test-theme/widgets/testimonial-carousel.liquid +709 -0
|
@@ -0,0 +1,1468 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mock Data Generator
|
|
3
|
+
* Generates realistic mock data for development
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Generate mock data
|
|
8
|
+
* @returns {Object} Mock data object
|
|
9
|
+
*/
|
|
10
|
+
function generateMockData() {
|
|
11
|
+
return {
|
|
12
|
+
store: {
|
|
13
|
+
id: 'mock-store-1',
|
|
14
|
+
name: 'My O2VEND Store',
|
|
15
|
+
description: 'A beautiful e-commerce store powered by O2VEND',
|
|
16
|
+
domain: 'localhost:3000',
|
|
17
|
+
email: 'store@example.com',
|
|
18
|
+
phone: '+1234567890',
|
|
19
|
+
address: {
|
|
20
|
+
address1: '123 Main Street',
|
|
21
|
+
city: 'New York',
|
|
22
|
+
state: 'NY',
|
|
23
|
+
zip: '10001',
|
|
24
|
+
country: 'US'
|
|
25
|
+
},
|
|
26
|
+
currency: 'USD',
|
|
27
|
+
currencySymbol: '$',
|
|
28
|
+
locale: 'en-US',
|
|
29
|
+
timezone: 'America/New_York',
|
|
30
|
+
settings: {
|
|
31
|
+
currencySymbol: '$',
|
|
32
|
+
currencyFormat: '#,##0.00',
|
|
33
|
+
currencyDecimalDigits: 2,
|
|
34
|
+
currencyGroupSeparator: ',',
|
|
35
|
+
currencyDecimalSeparator: '.'
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
settings: {
|
|
40
|
+
shopName: 'My O2VEND Store',
|
|
41
|
+
shopEmail: 'store@example.com',
|
|
42
|
+
shopPhone: '+1234567890'
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
products: generateMockProducts(30), // At least 30 products for better testing
|
|
46
|
+
categories: generateMockCategories(10), // 10 categories (more than 5)
|
|
47
|
+
brands: generateMockBrands(10), // 10 brands (more than 5)
|
|
48
|
+
widgets: generateMockWidgets(),
|
|
49
|
+
cart: {
|
|
50
|
+
id: 'mock-cart-1',
|
|
51
|
+
items: [],
|
|
52
|
+
total: 0,
|
|
53
|
+
itemCount: 0,
|
|
54
|
+
currency: 'USD'
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Generate mock products
|
|
61
|
+
* @param {number} count - Number of products to generate
|
|
62
|
+
* @returns {Array} Mock products
|
|
63
|
+
*/
|
|
64
|
+
function generateMockProducts(count = 20) {
|
|
65
|
+
console.log(`[MOCK DATA] Generating ${count} mock products with variations and stock...`);
|
|
66
|
+
const products = [];
|
|
67
|
+
|
|
68
|
+
// Product data with images from picsum.photos (reliable placeholder service)
|
|
69
|
+
const productData = [
|
|
70
|
+
{ name: 'Wireless Headphones', category: 'Electronics', imageId: 1 },
|
|
71
|
+
{ name: 'Smart Watch', category: 'Electronics', imageId: 2 },
|
|
72
|
+
{ name: 'Laptop Stand', category: 'Electronics', imageId: 3 },
|
|
73
|
+
{ name: 'USB-C Cable', category: 'Electronics', imageId: 4 },
|
|
74
|
+
{ name: 'Wireless Mouse', category: 'Electronics', imageId: 5 },
|
|
75
|
+
{ name: 'Mechanical Keyboard', category: 'Electronics', imageId: 6 },
|
|
76
|
+
{ name: '4K Monitor', category: 'Electronics', imageId: 7 },
|
|
77
|
+
{ name: 'HD Webcam', category: 'Electronics', imageId: 8 },
|
|
78
|
+
{ name: 'Bluetooth Speaker', category: 'Electronics', imageId: 9 },
|
|
79
|
+
{ name: 'iPad Pro', category: 'Electronics', imageId: 10 },
|
|
80
|
+
{ name: 'iPhone 15 Pro', category: 'Electronics', imageId: 11 },
|
|
81
|
+
{ name: 'DSLR Camera', category: 'Electronics', imageId: 12 },
|
|
82
|
+
{ name: 'DJI Drone', category: 'Electronics', imageId: 13 },
|
|
83
|
+
{ name: 'Ergonomic Gaming Chair', category: 'Furniture', imageId: 14 },
|
|
84
|
+
{ name: 'LED Desk Lamp', category: 'Home', imageId: 15 },
|
|
85
|
+
{ name: 'Premium Notebook', category: 'Office', imageId: 16 },
|
|
86
|
+
{ name: 'Executive Pen Set', category: 'Office', imageId: 17 },
|
|
87
|
+
{ name: 'Travel Backpack', category: 'Accessories', imageId: 18 },
|
|
88
|
+
{ name: 'Insulated Water Bottle', category: 'Sports', imageId: 19 },
|
|
89
|
+
{ name: 'Ceramic Coffee Mug', category: 'Home', imageId: 20 },
|
|
90
|
+
{ name: 'Cotton T-Shirt', category: 'Clothing', imageId: 21 },
|
|
91
|
+
{ name: 'Slim Fit Jeans', category: 'Clothing', imageId: 22 },
|
|
92
|
+
{ name: 'Running Sneakers', category: 'Footwear', imageId: 23 },
|
|
93
|
+
{ name: 'Polarized Sunglasses', category: 'Accessories', imageId: 24 },
|
|
94
|
+
{ name: 'Yoga Mat', category: 'Sports', imageId: 25 },
|
|
95
|
+
{ name: 'Fitness Tracker', category: 'Electronics', imageId: 26 },
|
|
96
|
+
{ name: 'Portable Charger', category: 'Electronics', imageId: 27 },
|
|
97
|
+
{ name: 'Leather Wallet', category: 'Accessories', imageId: 28 },
|
|
98
|
+
{ name: 'Stainless Steel Watch', category: 'Accessories', imageId: 29 },
|
|
99
|
+
{ name: 'Noise Cancelling Earbuds', category: 'Electronics', imageId: 30 }
|
|
100
|
+
];
|
|
101
|
+
|
|
102
|
+
const productNames = productData.map(p => p.name);
|
|
103
|
+
|
|
104
|
+
// Products that typically have size variations
|
|
105
|
+
const sizeBasedProducts = ['T-Shirt', 'Jeans', 'Sneakers', 'Backpack'];
|
|
106
|
+
// Products that typically have color variations
|
|
107
|
+
const colorBasedProducts = ['Wireless Headphones', 'Smart Watch', 'Water Bottle', 'Coffee Mug', 'Backpack', 'Sunglasses'];
|
|
108
|
+
// Products that have both size and color
|
|
109
|
+
const multiVariationProducts = ['T-Shirt', 'Jeans', 'Sneakers'];
|
|
110
|
+
|
|
111
|
+
const sizes = ['XS', 'S', 'M', 'L', 'XL', 'XXL'];
|
|
112
|
+
const colors = ['Black', 'White', 'Red', 'Blue', 'Green', 'Gray', 'Navy', 'Brown'];
|
|
113
|
+
|
|
114
|
+
for (let i = 0; i < count; i++) {
|
|
115
|
+
const productId = `product-${i + 1}`;
|
|
116
|
+
const basePrice = Math.floor(Math.random() * 50000) + 1000; // $10 to $500 (in cents)
|
|
117
|
+
const comparePrice = basePrice * 1.5;
|
|
118
|
+
const productName = productNames[i % productNames.length];
|
|
119
|
+
|
|
120
|
+
// Determine stock quantity - mix of low stock, high stock, and out of stock
|
|
121
|
+
const stockType = i % 5;
|
|
122
|
+
let stock, inStock;
|
|
123
|
+
if (stockType === 0) {
|
|
124
|
+
// Out of stock
|
|
125
|
+
stock = 0;
|
|
126
|
+
inStock = false;
|
|
127
|
+
} else if (stockType === 1) {
|
|
128
|
+
// Low stock (1-5 items)
|
|
129
|
+
stock = Math.floor(Math.random() * 5) + 1;
|
|
130
|
+
inStock = true;
|
|
131
|
+
} else if (stockType === 2) {
|
|
132
|
+
// Medium stock (6-20 items)
|
|
133
|
+
stock = Math.floor(Math.random() * 15) + 6;
|
|
134
|
+
inStock = true;
|
|
135
|
+
} else {
|
|
136
|
+
// High stock (21-100+ items)
|
|
137
|
+
stock = Math.floor(Math.random() * 80) + 21;
|
|
138
|
+
inStock = true;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Determine if product should have variations
|
|
142
|
+
const hasVariations = i % 3 !== 0; // 2/3 of products have variations
|
|
143
|
+
const hasSizeVariations = hasVariations && (sizeBasedProducts.includes(productName) || multiVariationProducts.includes(productName));
|
|
144
|
+
const hasColorVariations = hasVariations && (colorBasedProducts.includes(productName) || multiVariationProducts.includes(productName));
|
|
145
|
+
const hasMultiVariations = hasVariations && multiVariationProducts.includes(productName);
|
|
146
|
+
|
|
147
|
+
// Generate variants
|
|
148
|
+
const variants = [];
|
|
149
|
+
if (hasMultiVariations) {
|
|
150
|
+
// Product with both size and color variations
|
|
151
|
+
let variantIndex = 1;
|
|
152
|
+
for (const size of sizes.slice(0, 4)) { // Use first 4 sizes
|
|
153
|
+
for (const color of colors.slice(0, 3)) { // Use first 3 colors
|
|
154
|
+
const variantPrice = basePrice + (variantIndex % 3 === 0 ? 500 : 0); // Some variants slightly more expensive
|
|
155
|
+
const variantMrp = Math.round(variantPrice * 1.5);
|
|
156
|
+
const variantStock = Math.floor(Math.random() * stock) + (stock > 0 ? 1 : 0);
|
|
157
|
+
const variantProductId = (i + 1) * 1000 + variantIndex; // Unique productId for variant
|
|
158
|
+
variants.push({
|
|
159
|
+
id: `variant-${i + 1}-${variantIndex}`,
|
|
160
|
+
productId: variantProductId, // Required by product-card template
|
|
161
|
+
title: `${size} / ${color}`,
|
|
162
|
+
option1: size,
|
|
163
|
+
option2: color,
|
|
164
|
+
option1Name: 'Size',
|
|
165
|
+
option2Name: 'Color',
|
|
166
|
+
price: variantPrice,
|
|
167
|
+
compareAtPrice: variantMrp,
|
|
168
|
+
// prices object required by product-card template
|
|
169
|
+
prices: {
|
|
170
|
+
price: variantPrice,
|
|
171
|
+
mrp: variantMrp
|
|
172
|
+
},
|
|
173
|
+
sku: `SKU-${i + 1}-${size}-${color}`,
|
|
174
|
+
inStock: variantStock > 0,
|
|
175
|
+
stock: variantStock,
|
|
176
|
+
available: variantStock > 0
|
|
177
|
+
});
|
|
178
|
+
variantIndex++;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
} else if (hasSizeVariations) {
|
|
182
|
+
// Product with size variations only
|
|
183
|
+
sizes.slice(0, 5).forEach((size, idx) => {
|
|
184
|
+
const variantPrice = basePrice + (idx * 200); // Larger sizes cost more
|
|
185
|
+
const variantMrp = Math.round(variantPrice * 1.5);
|
|
186
|
+
const variantStock = Math.floor(Math.random() * stock) + (stock > 0 ? 1 : 0);
|
|
187
|
+
const variantProductId = (i + 1) * 1000 + idx + 1;
|
|
188
|
+
variants.push({
|
|
189
|
+
id: `variant-${i + 1}-${idx + 1}`,
|
|
190
|
+
productId: variantProductId,
|
|
191
|
+
title: size,
|
|
192
|
+
option1: size,
|
|
193
|
+
option1Name: 'Size',
|
|
194
|
+
price: variantPrice,
|
|
195
|
+
compareAtPrice: variantMrp,
|
|
196
|
+
prices: {
|
|
197
|
+
price: variantPrice,
|
|
198
|
+
mrp: variantMrp
|
|
199
|
+
},
|
|
200
|
+
sku: `SKU-${i + 1}-${size}`,
|
|
201
|
+
inStock: variantStock > 0,
|
|
202
|
+
stock: variantStock,
|
|
203
|
+
available: variantStock > 0
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
} else if (hasColorVariations) {
|
|
207
|
+
// Product with color variations only
|
|
208
|
+
colors.slice(0, 4).forEach((color, idx) => {
|
|
209
|
+
const variantPrice = basePrice + (idx % 2 === 0 ? 300 : 0); // Some colors cost more
|
|
210
|
+
const variantMrp = Math.round(variantPrice * 1.5);
|
|
211
|
+
const variantStock = Math.floor(Math.random() * stock) + (stock > 0 ? 1 : 0);
|
|
212
|
+
const variantProductId = (i + 1) * 1000 + idx + 1;
|
|
213
|
+
variants.push({
|
|
214
|
+
id: `variant-${i + 1}-${idx + 1}`,
|
|
215
|
+
productId: variantProductId,
|
|
216
|
+
title: color,
|
|
217
|
+
option1: color,
|
|
218
|
+
option1Name: 'Color',
|
|
219
|
+
price: variantPrice,
|
|
220
|
+
compareAtPrice: variantMrp,
|
|
221
|
+
prices: {
|
|
222
|
+
price: variantPrice,
|
|
223
|
+
mrp: variantMrp
|
|
224
|
+
},
|
|
225
|
+
sku: `SKU-${i + 1}-${color}`,
|
|
226
|
+
inStock: variantStock > 0,
|
|
227
|
+
stock: variantStock,
|
|
228
|
+
available: variantStock > 0
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
} else {
|
|
232
|
+
// Single variant product (no variations)
|
|
233
|
+
const variantProductId = (i + 1) * 1000 + 1;
|
|
234
|
+
variants.push({
|
|
235
|
+
id: `variant-${i + 1}-1`,
|
|
236
|
+
productId: variantProductId,
|
|
237
|
+
title: 'Default',
|
|
238
|
+
price: basePrice,
|
|
239
|
+
compareAtPrice: comparePrice,
|
|
240
|
+
prices: {
|
|
241
|
+
price: basePrice,
|
|
242
|
+
mrp: comparePrice
|
|
243
|
+
},
|
|
244
|
+
sku: `SKU-${i + 1}`,
|
|
245
|
+
inStock: inStock,
|
|
246
|
+
stock: stock,
|
|
247
|
+
available: inStock
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// Calculate total stock from variants
|
|
252
|
+
const totalStock = variants.reduce((sum, v) => sum + (v.stock || 0), 0);
|
|
253
|
+
const hasAnyStock = variants.some(v => v.inStock || v.available);
|
|
254
|
+
|
|
255
|
+
const productHandle = `product-${i + 1}`.toLowerCase();
|
|
256
|
+
products.push({
|
|
257
|
+
id: productId,
|
|
258
|
+
productId: i + 1, // Numeric product ID for API compatibility
|
|
259
|
+
title: productName + (i > 0 ? ` ${i + 1}` : ''),
|
|
260
|
+
name: productName + (i > 0 ? ` ${i + 1}` : ''), // Also provide name for templates
|
|
261
|
+
handle: productHandle,
|
|
262
|
+
slug: productHandle,
|
|
263
|
+
url: `/products/${productHandle}`, // URL for product detail page
|
|
264
|
+
link: `/products/${productHandle}`, // Alternative URL property
|
|
265
|
+
description: `Description for ${productName}. High quality product with excellent features.${hasVariations ? ' Available in multiple options.' : ''}`,
|
|
266
|
+
price: basePrice,
|
|
267
|
+
compareAtPrice: comparePrice,
|
|
268
|
+
// Prices object used by product-card snippet
|
|
269
|
+
prices: {
|
|
270
|
+
price: basePrice,
|
|
271
|
+
mrp: comparePrice,
|
|
272
|
+
currency: 'USD'
|
|
273
|
+
},
|
|
274
|
+
discountPercentage: Math.floor(((comparePrice - basePrice) / comparePrice) * 100),
|
|
275
|
+
currency: 'USD',
|
|
276
|
+
inStock: hasAnyStock,
|
|
277
|
+
available: hasAnyStock, // Alternative property for availability
|
|
278
|
+
stock: totalStock,
|
|
279
|
+
stockQuantity: totalStock, // Alternative property for stock
|
|
280
|
+
sku: `SKU-${i + 1}`,
|
|
281
|
+
categoryId: `category-${(i % 10) + 1}`,
|
|
282
|
+
brandId: `brand-${(i % 8) + 1}`,
|
|
283
|
+
// Primary thumbnail for product cards
|
|
284
|
+
thumbnailImage1: {
|
|
285
|
+
url: `https://picsum.photos/seed/${productData[i % productData.length].imageId}/800/800`,
|
|
286
|
+
altText: productName
|
|
287
|
+
},
|
|
288
|
+
imageUrl: `https://picsum.photos/seed/${productData[i % productData.length].imageId}/800/800`,
|
|
289
|
+
images: [
|
|
290
|
+
{
|
|
291
|
+
id: `img-${i + 1}-1`,
|
|
292
|
+
url: `https://picsum.photos/seed/${productData[i % productData.length].imageId}/800/800`,
|
|
293
|
+
alt: productName,
|
|
294
|
+
altText: productName,
|
|
295
|
+
width: 800,
|
|
296
|
+
height: 800
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
id: `img-${i + 1}-2`,
|
|
300
|
+
url: `https://picsum.photos/seed/${productData[i % productData.length].imageId + 100}/800/800`,
|
|
301
|
+
alt: `${productName} - View 2`,
|
|
302
|
+
altText: `${productName} - View 2`,
|
|
303
|
+
width: 800,
|
|
304
|
+
height: 800
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
id: `img-${i + 1}-3`,
|
|
308
|
+
url: `https://picsum.photos/seed/${productData[i % productData.length].imageId + 200}/800/800`,
|
|
309
|
+
alt: `${productName} - View 3`,
|
|
310
|
+
altText: `${productName} - View 3`,
|
|
311
|
+
width: 800,
|
|
312
|
+
height: 800
|
|
313
|
+
}
|
|
314
|
+
],
|
|
315
|
+
variants: variants,
|
|
316
|
+
options: hasMultiVariations
|
|
317
|
+
? [
|
|
318
|
+
{ name: 'Size', values: sizes.slice(0, 4) },
|
|
319
|
+
{ name: 'Color', values: colors.slice(0, 3) }
|
|
320
|
+
]
|
|
321
|
+
: hasSizeVariations
|
|
322
|
+
? [{ name: 'Size', values: sizes.slice(0, 5) }]
|
|
323
|
+
: hasColorVariations
|
|
324
|
+
? [{ name: 'Color', values: colors.slice(0, 4) }]
|
|
325
|
+
: [],
|
|
326
|
+
tags: ['featured', 'new', 'sale'],
|
|
327
|
+
createdAt: new Date(Date.now() - Math.random() * 365 * 24 * 60 * 60 * 1000).toISOString(),
|
|
328
|
+
// Required fields for product-detail JSON template
|
|
329
|
+
productType: 0, // 0 = simple product, 1 = variable, 2 = subscription
|
|
330
|
+
// additionalData uses | default:null without | json, so we use string 'null'
|
|
331
|
+
// This outputs as literal null in JSON (without quotes)
|
|
332
|
+
additionalData: 'null',
|
|
333
|
+
// These fields use | json filter, so they should be actual arrays
|
|
334
|
+
combinations: [],
|
|
335
|
+
subscriptions: [],
|
|
336
|
+
shippingMethods: [],
|
|
337
|
+
variations: variants // Also expose as variations for template compatibility
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
// Log summary
|
|
342
|
+
const productsWithVariations = products.filter(p => (p.variants?.length || 0) > 1).length;
|
|
343
|
+
const productsWithOptions = products.filter(p => (p.options?.length || 0) > 0).length;
|
|
344
|
+
const outOfStock = products.filter(p => !p.inStock || (p.stock || 0) === 0).length;
|
|
345
|
+
console.log(`[MOCK DATA] ✅ Generated ${products.length} products:`);
|
|
346
|
+
console.log(` - With variations: ${productsWithVariations}`);
|
|
347
|
+
console.log(` - With options: ${productsWithOptions}`);
|
|
348
|
+
console.log(` - Out of stock: ${outOfStock}`);
|
|
349
|
+
|
|
350
|
+
return products;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/**
|
|
354
|
+
* Generate mock categories
|
|
355
|
+
* @param {number} count - Number of categories to generate
|
|
356
|
+
* @returns {Array} Mock categories
|
|
357
|
+
*/
|
|
358
|
+
function generateMockCategories(count = 10) {
|
|
359
|
+
const categories = [];
|
|
360
|
+
const categoryData = [
|
|
361
|
+
{ name: 'Electronics', imageId: 50, description: 'Latest gadgets, smartphones, laptops, and tech accessories' },
|
|
362
|
+
{ name: 'Clothing', imageId: 51, description: 'Fashion apparel for men, women, and kids' },
|
|
363
|
+
{ name: 'Accessories', imageId: 52, description: 'Watches, bags, jewelry, and more' },
|
|
364
|
+
{ name: 'Home & Garden', imageId: 53, description: 'Furniture, decor, and gardening supplies' },
|
|
365
|
+
{ name: 'Sports & Fitness', imageId: 54, description: 'Sports equipment, gym gear, and outdoor activities' },
|
|
366
|
+
{ name: 'Books & Media', imageId: 55, description: 'Books, e-books, music, and movies' },
|
|
367
|
+
{ name: 'Toys & Games', imageId: 56, description: 'Toys, board games, and video games' },
|
|
368
|
+
{ name: 'Beauty & Health', imageId: 57, description: 'Skincare, makeup, and wellness products' },
|
|
369
|
+
{ name: 'Automotive', imageId: 58, description: 'Car parts, accessories, and maintenance tools' },
|
|
370
|
+
{ name: 'Food & Beverages', imageId: 59, description: 'Gourmet food, snacks, and drinks' }
|
|
371
|
+
];
|
|
372
|
+
|
|
373
|
+
for (let i = 0; i < count; i++) {
|
|
374
|
+
const catData = categoryData[i] || { name: `Category ${i + 1}`, imageId: 60 + i, description: `Products in Category ${i + 1}` };
|
|
375
|
+
categories.push({
|
|
376
|
+
id: `category-${i + 1}`,
|
|
377
|
+
name: catData.name,
|
|
378
|
+
handle: catData.name.toLowerCase().replace(/\s+/g, '-').replace(/&/g, 'and'),
|
|
379
|
+
description: catData.description,
|
|
380
|
+
image: `https://picsum.photos/seed/cat${catData.imageId}/400/300`,
|
|
381
|
+
productCount: Math.floor(Math.random() * 50) + 5,
|
|
382
|
+
parentId: i > 5 ? `category-${Math.floor(Math.random() * 5) + 1}` : null
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
return categories;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Generate mock brands
|
|
391
|
+
* @param {number} count - Number of brands to generate
|
|
392
|
+
* @returns {Array} Mock brands
|
|
393
|
+
*/
|
|
394
|
+
function generateMockBrands(count = 10) {
|
|
395
|
+
const brands = [];
|
|
396
|
+
const brandData = [
|
|
397
|
+
{ name: 'TechNova', tagline: 'Innovation in Every Device', imageId: 70 },
|
|
398
|
+
{ name: 'StyleVerse', tagline: 'Fashion Forward', imageId: 71 },
|
|
399
|
+
{ name: 'HomeNest', tagline: 'Comfort Meets Design', imageId: 72 },
|
|
400
|
+
{ name: 'SportEdge', tagline: 'Performance Unleashed', imageId: 73 },
|
|
401
|
+
{ name: 'PageTurner', tagline: 'Stories That Inspire', imageId: 74 },
|
|
402
|
+
{ name: 'PlayZone', tagline: 'Fun for All Ages', imageId: 75 },
|
|
403
|
+
{ name: 'GlowUp', tagline: 'Beauty Redefined', imageId: 76 },
|
|
404
|
+
{ name: 'AutoElite', tagline: 'Drive Excellence', imageId: 77 },
|
|
405
|
+
{ name: 'UrbanStyle', tagline: 'Street to Suite', imageId: 78 },
|
|
406
|
+
{ name: 'PowerTech', tagline: 'Energy for Life', imageId: 79 }
|
|
407
|
+
];
|
|
408
|
+
|
|
409
|
+
for (let i = 0; i < count; i++) {
|
|
410
|
+
const brand = brandData[i] || { name: `Brand ${i + 1}`, tagline: 'Quality Products', imageId: 80 + i };
|
|
411
|
+
brands.push({
|
|
412
|
+
id: `brand-${i + 1}`,
|
|
413
|
+
name: brand.name,
|
|
414
|
+
handle: brand.name.toLowerCase().replace(/\s+/g, '-'),
|
|
415
|
+
description: `${brand.tagline}. Premium products from ${brand.name}`,
|
|
416
|
+
logo: `https://picsum.photos/seed/brand${brand.imageId}/200/100`,
|
|
417
|
+
image: `https://picsum.photos/seed/brand${brand.imageId}/400/200`,
|
|
418
|
+
productCount: Math.floor(Math.random() * 30) + 5
|
|
419
|
+
});
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
return brands;
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* Generate mock widgets for different sections
|
|
427
|
+
* Comprehensive widget data matching O2VEND webstore expected structures
|
|
428
|
+
* @returns {Array} Mock widgets
|
|
429
|
+
*/
|
|
430
|
+
function generateMockWidgets() {
|
|
431
|
+
const widgets = [
|
|
432
|
+
// ==================== HEADER SECTION ====================
|
|
433
|
+
{
|
|
434
|
+
id: 'widget-header-1',
|
|
435
|
+
type: 'Header',
|
|
436
|
+
section: 'header',
|
|
437
|
+
sectionName: 'header',
|
|
438
|
+
status: 'active',
|
|
439
|
+
Position: 1,
|
|
440
|
+
settings: {
|
|
441
|
+
showSearch: true,
|
|
442
|
+
showCart: true,
|
|
443
|
+
showAccount: true,
|
|
444
|
+
stickyHeader: true,
|
|
445
|
+
showWidgetTitle: 'No'
|
|
446
|
+
},
|
|
447
|
+
data: {
|
|
448
|
+
content: {
|
|
449
|
+
Logo: '/assets/logo.png',
|
|
450
|
+
logo: '/assets/logo.png'
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
id: 'widget-header-menu-1',
|
|
456
|
+
type: 'HeaderMenu',
|
|
457
|
+
section: 'header',
|
|
458
|
+
sectionName: 'header',
|
|
459
|
+
status: 'active',
|
|
460
|
+
Position: 2,
|
|
461
|
+
settings: {
|
|
462
|
+
menuId: 'main-menu',
|
|
463
|
+
showWidgetTitle: 'No'
|
|
464
|
+
},
|
|
465
|
+
data: {
|
|
466
|
+
content: {
|
|
467
|
+
menuId: 'main-menu'
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
|
|
472
|
+
// ==================== HERO SECTION ====================
|
|
473
|
+
// Carousel Widget - Hero Slider
|
|
474
|
+
{
|
|
475
|
+
id: 'widget-carousel-1',
|
|
476
|
+
type: 'Carousel',
|
|
477
|
+
section: 'hero',
|
|
478
|
+
sectionName: 'hero',
|
|
479
|
+
status: 'active',
|
|
480
|
+
Position: 1,
|
|
481
|
+
settings: {
|
|
482
|
+
showWidgetTitle: 'No',
|
|
483
|
+
showContainer: 'Yes',
|
|
484
|
+
showWidgetBottomMargin: 'Yes',
|
|
485
|
+
autoplay: true,
|
|
486
|
+
interval: 5000,
|
|
487
|
+
hideArrow: false,
|
|
488
|
+
hideDot: false,
|
|
489
|
+
captionHorizontalAlignment: 'left',
|
|
490
|
+
captionVerticalAlignment: 'center'
|
|
491
|
+
},
|
|
492
|
+
data: {
|
|
493
|
+
content: {
|
|
494
|
+
Items: [
|
|
495
|
+
{
|
|
496
|
+
ImageUrl: 'https://picsum.photos/seed/hero1/1400/600',
|
|
497
|
+
imageUrl: 'https://picsum.photos/seed/hero1/1400/600',
|
|
498
|
+
Caption: 'New Season Collection',
|
|
499
|
+
caption: 'New Season Collection',
|
|
500
|
+
SubCaption: 'Discover the latest trends and styles for this season',
|
|
501
|
+
subCaption: 'Discover the latest trends and styles for this season',
|
|
502
|
+
LinkText: 'Shop Now',
|
|
503
|
+
linkText: 'Shop Now',
|
|
504
|
+
TargetUrl: '/products',
|
|
505
|
+
targetUrl: '/products'
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
ImageUrl: 'https://picsum.photos/seed/hero2/1400/600',
|
|
509
|
+
imageUrl: 'https://picsum.photos/seed/hero2/1400/600',
|
|
510
|
+
Caption: 'Summer Sale - Up to 50% Off',
|
|
511
|
+
caption: 'Summer Sale - Up to 50% Off',
|
|
512
|
+
SubCaption: 'Limited time offer on selected items. Don\'t miss out!',
|
|
513
|
+
subCaption: 'Limited time offer on selected items. Don\'t miss out!',
|
|
514
|
+
LinkText: 'View Deals',
|
|
515
|
+
linkText: 'View Deals',
|
|
516
|
+
TargetUrl: '/collections',
|
|
517
|
+
targetUrl: '/collections'
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
ImageUrl: 'https://picsum.photos/seed/hero3/1400/600',
|
|
521
|
+
imageUrl: 'https://picsum.photos/seed/hero3/1400/600',
|
|
522
|
+
Caption: 'Premium Quality Products',
|
|
523
|
+
caption: 'Premium Quality Products',
|
|
524
|
+
SubCaption: 'Shop from top brands worldwide with guaranteed quality',
|
|
525
|
+
subCaption: 'Shop from top brands worldwide with guaranteed quality',
|
|
526
|
+
LinkText: 'Explore',
|
|
527
|
+
linkText: 'Explore',
|
|
528
|
+
TargetUrl: '/products',
|
|
529
|
+
targetUrl: '/products'
|
|
530
|
+
}
|
|
531
|
+
]
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
content: JSON.stringify({
|
|
535
|
+
Items: [
|
|
536
|
+
{ ImageUrl: 'https://picsum.photos/seed/hero1/1400/600', Caption: 'New Season Collection', SubCaption: 'Discover the latest trends', LinkText: 'Shop Now', TargetUrl: '/products' },
|
|
537
|
+
{ ImageUrl: 'https://picsum.photos/seed/hero2/1400/600', Caption: 'Summer Sale', SubCaption: 'Up to 50% Off', LinkText: 'View Deals', TargetUrl: '/collections' },
|
|
538
|
+
{ ImageUrl: 'https://picsum.photos/seed/hero3/1400/600', Caption: 'Premium Products', SubCaption: 'Top brands worldwide', LinkText: 'Explore', TargetUrl: '/products' }
|
|
539
|
+
]
|
|
540
|
+
})
|
|
541
|
+
},
|
|
542
|
+
|
|
543
|
+
// SpaceBar Widget - Feature Icons/Cards
|
|
544
|
+
{
|
|
545
|
+
id: 'widget-spacebar-1',
|
|
546
|
+
type: 'SpaceBar',
|
|
547
|
+
section: 'hero',
|
|
548
|
+
sectionName: 'hero',
|
|
549
|
+
status: 'active',
|
|
550
|
+
Position: 2,
|
|
551
|
+
settings: {
|
|
552
|
+
showWidgetTitle: 'No',
|
|
553
|
+
backgroundColor: '#f8f9fa',
|
|
554
|
+
textColor: '#1a1a2e'
|
|
555
|
+
},
|
|
556
|
+
data: {
|
|
557
|
+
content: {
|
|
558
|
+
Items: [
|
|
559
|
+
{
|
|
560
|
+
Title: 'Free Shipping',
|
|
561
|
+
title: 'Free Shipping',
|
|
562
|
+
Description: 'On orders over $50',
|
|
563
|
+
description: 'On orders over $50',
|
|
564
|
+
IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M5 18H3c-.6 0-1-.4-1-1V7c0-.6.4-1 1-1h10c.6 0 1 .4 1 1v11"/><path d="M14 9h4l4 4v4c0 .6-.4 1-1 1h-2"/><circle cx="7" cy="18" r="2"/><circle cx="17" cy="18" r="2"/></svg>',
|
|
565
|
+
iconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M5 18H3c-.6 0-1-.4-1-1V7c0-.6.4-1 1-1h10c.6 0 1 .4 1 1v11"/><path d="M14 9h4l4 4v4c0 .6-.4 1-1 1h-2"/><circle cx="7" cy="18" r="2"/><circle cx="17" cy="18" r="2"/></svg>',
|
|
566
|
+
ImageUrl: 'https://picsum.photos/seed/feature1/100/100',
|
|
567
|
+
imageUrl: 'https://picsum.photos/seed/feature1/100/100'
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
Title: '24/7 Support',
|
|
571
|
+
title: '24/7 Support',
|
|
572
|
+
Description: 'Dedicated support team',
|
|
573
|
+
description: 'Dedicated support team',
|
|
574
|
+
IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>',
|
|
575
|
+
iconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/></svg>',
|
|
576
|
+
ImageUrl: 'https://picsum.photos/seed/feature2/100/100',
|
|
577
|
+
imageUrl: 'https://picsum.photos/seed/feature2/100/100'
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
Title: 'Secure Payment',
|
|
581
|
+
title: 'Secure Payment',
|
|
582
|
+
Description: '100% secure checkout',
|
|
583
|
+
description: '100% secure checkout',
|
|
584
|
+
IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>',
|
|
585
|
+
iconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/></svg>',
|
|
586
|
+
ImageUrl: 'https://picsum.photos/seed/feature3/100/100',
|
|
587
|
+
imageUrl: 'https://picsum.photos/seed/feature3/100/100'
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
Title: 'Easy Returns',
|
|
591
|
+
title: 'Easy Returns',
|
|
592
|
+
Description: '30-day return policy',
|
|
593
|
+
description: '30-day return policy',
|
|
594
|
+
IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg>',
|
|
595
|
+
iconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg>',
|
|
596
|
+
ImageUrl: 'https://picsum.photos/seed/feature4/100/100',
|
|
597
|
+
imageUrl: 'https://picsum.photos/seed/feature4/100/100'
|
|
598
|
+
}
|
|
599
|
+
]
|
|
600
|
+
}
|
|
601
|
+
},
|
|
602
|
+
content: JSON.stringify({
|
|
603
|
+
Items: [
|
|
604
|
+
{ Title: 'Free Shipping', Description: 'On orders over $50', ImageUrl: 'https://picsum.photos/seed/feature1/100/100' },
|
|
605
|
+
{ Title: '24/7 Support', Description: 'Dedicated support team', ImageUrl: 'https://picsum.photos/seed/feature2/100/100' },
|
|
606
|
+
{ Title: 'Secure Payment', Description: '100% secure checkout', ImageUrl: 'https://picsum.photos/seed/feature3/100/100' },
|
|
607
|
+
{ Title: 'Easy Returns', Description: '30-day return policy', ImageUrl: 'https://picsum.photos/seed/feature4/100/100' }
|
|
608
|
+
]
|
|
609
|
+
})
|
|
610
|
+
},
|
|
611
|
+
|
|
612
|
+
// ==================== CONTENT SECTION ====================
|
|
613
|
+
// CategoryList Widget
|
|
614
|
+
{
|
|
615
|
+
id: 'widget-category-list-1',
|
|
616
|
+
type: 'CategoryList',
|
|
617
|
+
section: 'content',
|
|
618
|
+
sectionName: 'content',
|
|
619
|
+
status: 'active',
|
|
620
|
+
Position: 1,
|
|
621
|
+
Title: 'Shop by Category',
|
|
622
|
+
settings: {
|
|
623
|
+
title: 'Shop by Category',
|
|
624
|
+
subtitle: 'Browse our popular categories',
|
|
625
|
+
showWidgetTitle: 'Yes',
|
|
626
|
+
widgetTitleAlignment: 'center',
|
|
627
|
+
columns: 5,
|
|
628
|
+
showProductCount: true
|
|
629
|
+
},
|
|
630
|
+
data: {
|
|
631
|
+
// Categories will be enriched by widget service, but provide fallback
|
|
632
|
+
categories: [
|
|
633
|
+
{ Id: 1, id: 1, Name: 'Electronics', name: 'Electronics', Slug: '/categories/electronics', slug: '/categories/electronics', thumbnailImage: { url: 'https://picsum.photos/seed/cat1/400/300' }, productCount: 45 },
|
|
634
|
+
{ Id: 2, id: 2, Name: 'Clothing', name: 'Clothing', Slug: '/categories/clothing', slug: '/categories/clothing', thumbnailImage: { url: 'https://picsum.photos/seed/cat2/400/300' }, productCount: 120 },
|
|
635
|
+
{ Id: 3, id: 3, Name: 'Home & Garden', name: 'Home & Garden', Slug: '/categories/home-garden', slug: '/categories/home-garden', thumbnailImage: { url: 'https://picsum.photos/seed/cat3/400/300' }, productCount: 78 },
|
|
636
|
+
{ Id: 4, id: 4, Name: 'Sports', name: 'Sports', Slug: '/categories/sports', slug: '/categories/sports', thumbnailImage: { url: 'https://picsum.photos/seed/cat4/400/300' }, productCount: 56 },
|
|
637
|
+
{ Id: 5, id: 5, Name: 'Beauty', name: 'Beauty', Slug: '/categories/beauty', slug: '/categories/beauty', thumbnailImage: { url: 'https://picsum.photos/seed/cat5/400/300' }, productCount: 89 }
|
|
638
|
+
],
|
|
639
|
+
Categories: [
|
|
640
|
+
{ Id: 1, Name: 'Electronics', Slug: '/categories/electronics', ThumbnailImage: { Url: 'https://picsum.photos/seed/cat1/400/300' }, ProductCount: 45 },
|
|
641
|
+
{ Id: 2, Name: 'Clothing', Slug: '/categories/clothing', ThumbnailImage: { Url: 'https://picsum.photos/seed/cat2/400/300' }, ProductCount: 120 },
|
|
642
|
+
{ Id: 3, Name: 'Home & Garden', Slug: '/categories/home-garden', ThumbnailImage: { Url: 'https://picsum.photos/seed/cat3/400/300' }, ProductCount: 78 },
|
|
643
|
+
{ Id: 4, Name: 'Sports', Slug: '/categories/sports', ThumbnailImage: { Url: 'https://picsum.photos/seed/cat4/400/300' }, ProductCount: 56 },
|
|
644
|
+
{ Id: 5, Name: 'Beauty', Slug: '/categories/beauty', ThumbnailImage: { Url: 'https://picsum.photos/seed/cat5/400/300' }, ProductCount: 89 }
|
|
645
|
+
]
|
|
646
|
+
},
|
|
647
|
+
content: JSON.stringify({
|
|
648
|
+
Categories: [
|
|
649
|
+
{ Id: 1, Name: 'Electronics' },
|
|
650
|
+
{ Id: 2, Name: 'Clothing' },
|
|
651
|
+
{ Id: 3, Name: 'Home & Garden' },
|
|
652
|
+
{ Id: 4, Name: 'Sports' },
|
|
653
|
+
{ Id: 5, Name: 'Beauty' }
|
|
654
|
+
]
|
|
655
|
+
})
|
|
656
|
+
},
|
|
657
|
+
|
|
658
|
+
// ==================== PRODUCT CAROUSELS (Client Favorites) ====================
|
|
659
|
+
|
|
660
|
+
// 1. Featured Products Carousel - Most Common
|
|
661
|
+
{
|
|
662
|
+
id: 'widget-product-carousel-featured',
|
|
663
|
+
type: 'ProductCarousel',
|
|
664
|
+
section: 'content',
|
|
665
|
+
sectionName: 'content',
|
|
666
|
+
status: 'active',
|
|
667
|
+
Position: 2,
|
|
668
|
+
Title: 'Featured Products',
|
|
669
|
+
settings: {
|
|
670
|
+
title: 'Featured Products',
|
|
671
|
+
subtitle: 'Handpicked just for you',
|
|
672
|
+
showWidgetTitle: 'Yes',
|
|
673
|
+
widgetTitleAlignment: 'center',
|
|
674
|
+
NumberOfProducts: 8,
|
|
675
|
+
numberOfProducts: 8,
|
|
676
|
+
limit: 8,
|
|
677
|
+
IsFeatured: true,
|
|
678
|
+
isFeatured: true,
|
|
679
|
+
autoplay: false,
|
|
680
|
+
showArrows: true,
|
|
681
|
+
showDots: false
|
|
682
|
+
},
|
|
683
|
+
data: {
|
|
684
|
+
content: {
|
|
685
|
+
Title: 'Featured Products',
|
|
686
|
+
Limit: 8,
|
|
687
|
+
IsFeatured: true,
|
|
688
|
+
Products: []
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
content: JSON.stringify({
|
|
692
|
+
NumberOfProducts: 8,
|
|
693
|
+
Limit: 8,
|
|
694
|
+
IsFeatured: true
|
|
695
|
+
})
|
|
696
|
+
},
|
|
697
|
+
|
|
698
|
+
// 2. Best Sellers Carousel - Very Popular
|
|
699
|
+
{
|
|
700
|
+
id: 'widget-product-carousel-bestsellers',
|
|
701
|
+
type: 'ProductCarousel',
|
|
702
|
+
section: 'content',
|
|
703
|
+
sectionName: 'content',
|
|
704
|
+
status: 'active',
|
|
705
|
+
Position: 3,
|
|
706
|
+
Title: 'Best Sellers',
|
|
707
|
+
settings: {
|
|
708
|
+
title: 'Best Sellers',
|
|
709
|
+
subtitle: 'Our most popular products',
|
|
710
|
+
showWidgetTitle: 'Yes',
|
|
711
|
+
widgetTitleAlignment: 'center',
|
|
712
|
+
NumberOfProducts: 10,
|
|
713
|
+
numberOfProducts: 10,
|
|
714
|
+
limit: 10,
|
|
715
|
+
OrderBy: 'BestSelling',
|
|
716
|
+
orderBy: 'bestselling',
|
|
717
|
+
autoplay: false,
|
|
718
|
+
showArrows: true
|
|
719
|
+
},
|
|
720
|
+
data: {
|
|
721
|
+
content: {
|
|
722
|
+
Title: 'Best Sellers',
|
|
723
|
+
Limit: 10,
|
|
724
|
+
OrderBy: 'BestSelling',
|
|
725
|
+
Products: []
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
content: JSON.stringify({
|
|
729
|
+
NumberOfProducts: 10,
|
|
730
|
+
OrderBy: 'BestSelling'
|
|
731
|
+
})
|
|
732
|
+
},
|
|
733
|
+
|
|
734
|
+
// 3. New Arrivals Carousel
|
|
735
|
+
{
|
|
736
|
+
id: 'widget-product-carousel-newarrivals',
|
|
737
|
+
type: 'ProductCarousel',
|
|
738
|
+
section: 'content',
|
|
739
|
+
sectionName: 'content',
|
|
740
|
+
status: 'active',
|
|
741
|
+
Position: 4,
|
|
742
|
+
Title: 'New Arrivals',
|
|
743
|
+
settings: {
|
|
744
|
+
title: 'New Arrivals',
|
|
745
|
+
subtitle: 'Fresh from our collection',
|
|
746
|
+
showWidgetTitle: 'Yes',
|
|
747
|
+
widgetTitleAlignment: 'center',
|
|
748
|
+
NumberOfProducts: 8,
|
|
749
|
+
numberOfProducts: 8,
|
|
750
|
+
limit: 8,
|
|
751
|
+
OrderBy: 'Newest',
|
|
752
|
+
orderBy: 'newest',
|
|
753
|
+
autoplay: false
|
|
754
|
+
},
|
|
755
|
+
data: {
|
|
756
|
+
content: {
|
|
757
|
+
Title: 'New Arrivals',
|
|
758
|
+
Limit: 8,
|
|
759
|
+
OrderBy: 'Newest',
|
|
760
|
+
Products: []
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
content: JSON.stringify({
|
|
764
|
+
NumberOfProducts: 8,
|
|
765
|
+
OrderBy: 'Newest'
|
|
766
|
+
})
|
|
767
|
+
},
|
|
768
|
+
|
|
769
|
+
// 4. Sale/Discount Products Carousel
|
|
770
|
+
{
|
|
771
|
+
id: 'widget-product-carousel-sale',
|
|
772
|
+
type: 'ProductCarousel',
|
|
773
|
+
section: 'content',
|
|
774
|
+
sectionName: 'content',
|
|
775
|
+
status: 'active',
|
|
776
|
+
Position: 5,
|
|
777
|
+
Title: 'On Sale',
|
|
778
|
+
settings: {
|
|
779
|
+
title: '🔥 Hot Deals',
|
|
780
|
+
subtitle: 'Limited time offers - Save up to 50%',
|
|
781
|
+
showWidgetTitle: 'Yes',
|
|
782
|
+
widgetTitleAlignment: 'center',
|
|
783
|
+
NumberOfProducts: 8,
|
|
784
|
+
numberOfProducts: 8,
|
|
785
|
+
limit: 8,
|
|
786
|
+
OnSale: true,
|
|
787
|
+
onSale: true,
|
|
788
|
+
backgroundColor: '#fff3cd',
|
|
789
|
+
autoplay: true,
|
|
790
|
+
autoplayInterval: 4000
|
|
791
|
+
},
|
|
792
|
+
data: {
|
|
793
|
+
content: {
|
|
794
|
+
Title: 'On Sale',
|
|
795
|
+
Limit: 8,
|
|
796
|
+
OnSale: true,
|
|
797
|
+
Products: []
|
|
798
|
+
}
|
|
799
|
+
},
|
|
800
|
+
content: JSON.stringify({
|
|
801
|
+
NumberOfProducts: 8,
|
|
802
|
+
OnSale: true
|
|
803
|
+
})
|
|
804
|
+
},
|
|
805
|
+
|
|
806
|
+
// 5. Trending Products Carousel
|
|
807
|
+
{
|
|
808
|
+
id: 'widget-product-carousel-trending',
|
|
809
|
+
type: 'ProductCarousel',
|
|
810
|
+
section: 'content',
|
|
811
|
+
sectionName: 'content',
|
|
812
|
+
status: 'active',
|
|
813
|
+
Position: 6,
|
|
814
|
+
Title: 'Trending Now',
|
|
815
|
+
settings: {
|
|
816
|
+
title: 'Trending Now',
|
|
817
|
+
subtitle: 'What everyone is buying',
|
|
818
|
+
showWidgetTitle: 'Yes',
|
|
819
|
+
widgetTitleAlignment: 'center',
|
|
820
|
+
NumberOfProducts: 6,
|
|
821
|
+
numberOfProducts: 6,
|
|
822
|
+
limit: 6,
|
|
823
|
+
OrderBy: 'Trending',
|
|
824
|
+
orderBy: 'trending',
|
|
825
|
+
autoplay: false
|
|
826
|
+
},
|
|
827
|
+
data: {
|
|
828
|
+
content: {
|
|
829
|
+
Title: 'Trending Now',
|
|
830
|
+
Limit: 6,
|
|
831
|
+
OrderBy: 'Trending',
|
|
832
|
+
Products: []
|
|
833
|
+
}
|
|
834
|
+
},
|
|
835
|
+
content: JSON.stringify({
|
|
836
|
+
NumberOfProducts: 6,
|
|
837
|
+
OrderBy: 'Trending'
|
|
838
|
+
})
|
|
839
|
+
},
|
|
840
|
+
|
|
841
|
+
// 6. Electronics Category Carousel
|
|
842
|
+
{
|
|
843
|
+
id: 'widget-product-carousel-electronics',
|
|
844
|
+
type: 'ProductCarousel',
|
|
845
|
+
section: 'content',
|
|
846
|
+
sectionName: 'content',
|
|
847
|
+
status: 'active',
|
|
848
|
+
Position: 7,
|
|
849
|
+
Title: 'Electronics',
|
|
850
|
+
settings: {
|
|
851
|
+
title: 'Top Electronics',
|
|
852
|
+
subtitle: 'Latest gadgets and tech',
|
|
853
|
+
showWidgetTitle: 'Yes',
|
|
854
|
+
widgetTitleAlignment: 'left',
|
|
855
|
+
NumberOfProducts: 8,
|
|
856
|
+
numberOfProducts: 8,
|
|
857
|
+
limit: 8,
|
|
858
|
+
CategoryId: 1,
|
|
859
|
+
categoryId: 1,
|
|
860
|
+
CategoryName: 'Electronics',
|
|
861
|
+
autoplay: false
|
|
862
|
+
},
|
|
863
|
+
data: {
|
|
864
|
+
content: {
|
|
865
|
+
Title: 'Top Electronics',
|
|
866
|
+
Limit: 8,
|
|
867
|
+
CategoryId: 1,
|
|
868
|
+
Products: []
|
|
869
|
+
}
|
|
870
|
+
},
|
|
871
|
+
content: JSON.stringify({
|
|
872
|
+
NumberOfProducts: 8,
|
|
873
|
+
CategoryId: 1
|
|
874
|
+
})
|
|
875
|
+
},
|
|
876
|
+
|
|
877
|
+
// 7. Clothing Category Carousel
|
|
878
|
+
{
|
|
879
|
+
id: 'widget-product-carousel-clothing',
|
|
880
|
+
type: 'ProductCarousel',
|
|
881
|
+
section: 'content',
|
|
882
|
+
sectionName: 'content',
|
|
883
|
+
status: 'active',
|
|
884
|
+
Position: 8,
|
|
885
|
+
Title: 'Fashion',
|
|
886
|
+
settings: {
|
|
887
|
+
title: 'Fashion Collection',
|
|
888
|
+
subtitle: 'Style for every occasion',
|
|
889
|
+
showWidgetTitle: 'Yes',
|
|
890
|
+
widgetTitleAlignment: 'left',
|
|
891
|
+
NumberOfProducts: 8,
|
|
892
|
+
numberOfProducts: 8,
|
|
893
|
+
limit: 8,
|
|
894
|
+
CategoryId: 2,
|
|
895
|
+
categoryId: 2,
|
|
896
|
+
CategoryName: 'Clothing',
|
|
897
|
+
autoplay: false
|
|
898
|
+
},
|
|
899
|
+
data: {
|
|
900
|
+
content: {
|
|
901
|
+
Title: 'Fashion Collection',
|
|
902
|
+
Limit: 8,
|
|
903
|
+
CategoryId: 2,
|
|
904
|
+
Products: []
|
|
905
|
+
}
|
|
906
|
+
},
|
|
907
|
+
content: JSON.stringify({
|
|
908
|
+
NumberOfProducts: 8,
|
|
909
|
+
CategoryId: 2
|
|
910
|
+
})
|
|
911
|
+
},
|
|
912
|
+
|
|
913
|
+
// 8. You May Also Like Carousel (for product pages)
|
|
914
|
+
{
|
|
915
|
+
id: 'widget-product-carousel-related',
|
|
916
|
+
type: 'ProductCarousel',
|
|
917
|
+
section: 'content',
|
|
918
|
+
sectionName: 'content',
|
|
919
|
+
status: 'active',
|
|
920
|
+
Position: 9,
|
|
921
|
+
Title: 'You May Also Like',
|
|
922
|
+
settings: {
|
|
923
|
+
title: 'You May Also Like',
|
|
924
|
+
subtitle: 'Based on your browsing',
|
|
925
|
+
showWidgetTitle: 'Yes',
|
|
926
|
+
widgetTitleAlignment: 'center',
|
|
927
|
+
NumberOfProducts: 6,
|
|
928
|
+
numberOfProducts: 6,
|
|
929
|
+
limit: 6,
|
|
930
|
+
RelatedProducts: true,
|
|
931
|
+
autoplay: false
|
|
932
|
+
},
|
|
933
|
+
data: {
|
|
934
|
+
content: {
|
|
935
|
+
Title: 'You May Also Like',
|
|
936
|
+
Limit: 6,
|
|
937
|
+
RelatedProducts: true,
|
|
938
|
+
Products: []
|
|
939
|
+
}
|
|
940
|
+
},
|
|
941
|
+
content: JSON.stringify({
|
|
942
|
+
NumberOfProducts: 6,
|
|
943
|
+
RelatedProducts: true
|
|
944
|
+
})
|
|
945
|
+
},
|
|
946
|
+
|
|
947
|
+
// 9. Frequently Bought Together
|
|
948
|
+
{
|
|
949
|
+
id: 'widget-product-carousel-fbt',
|
|
950
|
+
type: 'ProductCarousel',
|
|
951
|
+
section: 'content',
|
|
952
|
+
sectionName: 'content',
|
|
953
|
+
status: 'active',
|
|
954
|
+
Position: 10,
|
|
955
|
+
Title: 'Frequently Bought Together',
|
|
956
|
+
settings: {
|
|
957
|
+
title: 'Frequently Bought Together',
|
|
958
|
+
subtitle: 'Complete your purchase',
|
|
959
|
+
showWidgetTitle: 'Yes',
|
|
960
|
+
widgetTitleAlignment: 'center',
|
|
961
|
+
NumberOfProducts: 4,
|
|
962
|
+
numberOfProducts: 4,
|
|
963
|
+
limit: 4,
|
|
964
|
+
FrequentlyBoughtTogether: true,
|
|
965
|
+
autoplay: false,
|
|
966
|
+
showArrows: true
|
|
967
|
+
},
|
|
968
|
+
data: {
|
|
969
|
+
content: {
|
|
970
|
+
Title: 'Frequently Bought Together',
|
|
971
|
+
Limit: 4,
|
|
972
|
+
FrequentlyBoughtTogether: true,
|
|
973
|
+
Products: []
|
|
974
|
+
}
|
|
975
|
+
},
|
|
976
|
+
content: JSON.stringify({
|
|
977
|
+
NumberOfProducts: 4,
|
|
978
|
+
FrequentlyBoughtTogether: true
|
|
979
|
+
})
|
|
980
|
+
},
|
|
981
|
+
|
|
982
|
+
// 10. Staff Picks / Editor's Choice
|
|
983
|
+
{
|
|
984
|
+
id: 'widget-product-carousel-staffpicks',
|
|
985
|
+
type: 'ProductCarousel',
|
|
986
|
+
section: 'content',
|
|
987
|
+
sectionName: 'content',
|
|
988
|
+
status: 'active',
|
|
989
|
+
Position: 11,
|
|
990
|
+
Title: "Editor's Choice",
|
|
991
|
+
settings: {
|
|
992
|
+
title: "Editor's Choice",
|
|
993
|
+
subtitle: 'Curated by our experts',
|
|
994
|
+
showWidgetTitle: 'Yes',
|
|
995
|
+
widgetTitleAlignment: 'center',
|
|
996
|
+
NumberOfProducts: 6,
|
|
997
|
+
numberOfProducts: 6,
|
|
998
|
+
limit: 6,
|
|
999
|
+
StaffPicks: true,
|
|
1000
|
+
autoplay: false,
|
|
1001
|
+
backgroundColor: '#f0f7ff'
|
|
1002
|
+
},
|
|
1003
|
+
data: {
|
|
1004
|
+
content: {
|
|
1005
|
+
Title: "Editor's Choice",
|
|
1006
|
+
Limit: 6,
|
|
1007
|
+
StaffPicks: true,
|
|
1008
|
+
Products: []
|
|
1009
|
+
}
|
|
1010
|
+
},
|
|
1011
|
+
content: JSON.stringify({
|
|
1012
|
+
NumberOfProducts: 6,
|
|
1013
|
+
StaffPicks: true
|
|
1014
|
+
})
|
|
1015
|
+
},
|
|
1016
|
+
|
|
1017
|
+
// ==================== PRODUCT GRIDS (Client Favorites) ====================
|
|
1018
|
+
|
|
1019
|
+
// ProductGrid Widget - All Products
|
|
1020
|
+
{
|
|
1021
|
+
id: 'widget-product-grid-all',
|
|
1022
|
+
type: 'ProductGrid',
|
|
1023
|
+
section: 'content',
|
|
1024
|
+
sectionName: 'content',
|
|
1025
|
+
status: 'active',
|
|
1026
|
+
Position: 12,
|
|
1027
|
+
Title: 'Shop All Products',
|
|
1028
|
+
settings: {
|
|
1029
|
+
title: 'Shop All Products',
|
|
1030
|
+
subtitle: 'Browse our complete collection',
|
|
1031
|
+
showWidgetTitle: 'Yes',
|
|
1032
|
+
widgetTitleAlignment: 'center',
|
|
1033
|
+
columns: 4,
|
|
1034
|
+
rows: 3,
|
|
1035
|
+
NumberOfProducts: 12,
|
|
1036
|
+
numberOfProducts: 12,
|
|
1037
|
+
limit: 12,
|
|
1038
|
+
showPagination: true,
|
|
1039
|
+
showFilters: false
|
|
1040
|
+
},
|
|
1041
|
+
data: {
|
|
1042
|
+
content: {
|
|
1043
|
+
Title: 'Shop All Products',
|
|
1044
|
+
Limit: 12,
|
|
1045
|
+
Columns: 4,
|
|
1046
|
+
Products: []
|
|
1047
|
+
}
|
|
1048
|
+
},
|
|
1049
|
+
content: JSON.stringify({
|
|
1050
|
+
NumberOfProducts: 12,
|
|
1051
|
+
Columns: 4
|
|
1052
|
+
})
|
|
1053
|
+
},
|
|
1054
|
+
|
|
1055
|
+
// ProductGrid Widget - Featured Grid
|
|
1056
|
+
{
|
|
1057
|
+
id: 'widget-product-grid-featured',
|
|
1058
|
+
type: 'ProductGrid',
|
|
1059
|
+
section: 'content',
|
|
1060
|
+
sectionName: 'content',
|
|
1061
|
+
status: 'active',
|
|
1062
|
+
Position: 13,
|
|
1063
|
+
Title: 'Featured Collection',
|
|
1064
|
+
settings: {
|
|
1065
|
+
title: 'Featured Collection',
|
|
1066
|
+
subtitle: 'Our handpicked selection',
|
|
1067
|
+
showWidgetTitle: 'Yes',
|
|
1068
|
+
widgetTitleAlignment: 'center',
|
|
1069
|
+
columns: 3,
|
|
1070
|
+
rows: 2,
|
|
1071
|
+
NumberOfProducts: 6,
|
|
1072
|
+
numberOfProducts: 6,
|
|
1073
|
+
limit: 6,
|
|
1074
|
+
IsFeatured: true
|
|
1075
|
+
},
|
|
1076
|
+
data: {
|
|
1077
|
+
content: {
|
|
1078
|
+
Title: 'Featured Collection',
|
|
1079
|
+
Limit: 6,
|
|
1080
|
+
Columns: 3,
|
|
1081
|
+
IsFeatured: true,
|
|
1082
|
+
Products: []
|
|
1083
|
+
}
|
|
1084
|
+
},
|
|
1085
|
+
content: JSON.stringify({
|
|
1086
|
+
NumberOfProducts: 6,
|
|
1087
|
+
Columns: 3,
|
|
1088
|
+
IsFeatured: true
|
|
1089
|
+
})
|
|
1090
|
+
},
|
|
1091
|
+
|
|
1092
|
+
// Banner Widget - Promotional Banner (maps to carousel.liquid)
|
|
1093
|
+
{
|
|
1094
|
+
id: 'widget-banner-1',
|
|
1095
|
+
type: 'Banner',
|
|
1096
|
+
section: 'content',
|
|
1097
|
+
sectionName: 'content',
|
|
1098
|
+
status: 'active',
|
|
1099
|
+
Position: 4,
|
|
1100
|
+
Title: 'Special Offers',
|
|
1101
|
+
settings: {
|
|
1102
|
+
showWidgetTitle: 'No',
|
|
1103
|
+
showContainer: 'Yes'
|
|
1104
|
+
},
|
|
1105
|
+
data: {
|
|
1106
|
+
content: {
|
|
1107
|
+
Items: [
|
|
1108
|
+
{
|
|
1109
|
+
ImageUrl: 'https://picsum.photos/seed/promo1/1200/400',
|
|
1110
|
+
imageUrl: 'https://picsum.photos/seed/promo1/1200/400',
|
|
1111
|
+
Caption: 'Special Offer - Up to 30% Off Electronics',
|
|
1112
|
+
caption: 'Special Offer - Up to 30% Off Electronics',
|
|
1113
|
+
SubCaption: 'Limited time only! Shop now and save big on top brands.',
|
|
1114
|
+
subCaption: 'Limited time only! Shop now and save big on top brands.',
|
|
1115
|
+
LinkText: 'Shop Electronics',
|
|
1116
|
+
linkText: 'Shop Electronics',
|
|
1117
|
+
TargetUrl: '/categories/electronics',
|
|
1118
|
+
targetUrl: '/categories/electronics'
|
|
1119
|
+
}
|
|
1120
|
+
]
|
|
1121
|
+
}
|
|
1122
|
+
},
|
|
1123
|
+
content: JSON.stringify({
|
|
1124
|
+
Items: [
|
|
1125
|
+
{ ImageUrl: 'https://picsum.photos/seed/promo1/1200/400', Caption: 'Special Offer', LinkText: 'Shop Now', TargetUrl: '/categories/electronics' }
|
|
1126
|
+
]
|
|
1127
|
+
})
|
|
1128
|
+
},
|
|
1129
|
+
|
|
1130
|
+
// SimpleProduct Widget - Similar products section
|
|
1131
|
+
{
|
|
1132
|
+
id: 'widget-simple-product-1',
|
|
1133
|
+
type: 'SimpleProduct',
|
|
1134
|
+
section: 'content',
|
|
1135
|
+
sectionName: 'content',
|
|
1136
|
+
status: 'active',
|
|
1137
|
+
Position: 5,
|
|
1138
|
+
Title: 'Best Sellers',
|
|
1139
|
+
settings: {
|
|
1140
|
+
title: 'Best Sellers',
|
|
1141
|
+
subtitle: 'Our most popular products',
|
|
1142
|
+
showWidgetTitle: 'Yes',
|
|
1143
|
+
widgetTitleAlignment: 'center',
|
|
1144
|
+
columns: 4,
|
|
1145
|
+
show_add_to_cart: true,
|
|
1146
|
+
NumberOfProducts: 4,
|
|
1147
|
+
limit: 4
|
|
1148
|
+
},
|
|
1149
|
+
data: {
|
|
1150
|
+
products: [] // Will be enriched by dev server
|
|
1151
|
+
}
|
|
1152
|
+
},
|
|
1153
|
+
|
|
1154
|
+
// SingleProduct Widget - Featured single product
|
|
1155
|
+
{
|
|
1156
|
+
id: 'widget-single-product-1',
|
|
1157
|
+
type: 'SingleProduct',
|
|
1158
|
+
section: 'content',
|
|
1159
|
+
sectionName: 'content',
|
|
1160
|
+
status: 'active',
|
|
1161
|
+
Position: 6,
|
|
1162
|
+
Title: 'Deal of the Day',
|
|
1163
|
+
settings: {
|
|
1164
|
+
title: 'Deal of the Day',
|
|
1165
|
+
subtitle: 'Limited time offer!',
|
|
1166
|
+
showWidgetTitle: 'Yes',
|
|
1167
|
+
widgetTitleAlignment: 'center',
|
|
1168
|
+
showAddToCartButton: true,
|
|
1169
|
+
backgroundColor: '#f8f9fa'
|
|
1170
|
+
},
|
|
1171
|
+
data: {
|
|
1172
|
+
products: [] // Will be enriched by dev server (uses first product)
|
|
1173
|
+
}
|
|
1174
|
+
},
|
|
1175
|
+
|
|
1176
|
+
// RecentlyViewed Widget
|
|
1177
|
+
{
|
|
1178
|
+
id: 'widget-recently-viewed-1',
|
|
1179
|
+
type: 'RecentlyViewed',
|
|
1180
|
+
section: 'content',
|
|
1181
|
+
sectionName: 'content',
|
|
1182
|
+
status: 'active',
|
|
1183
|
+
Position: 7,
|
|
1184
|
+
Title: 'Recently Viewed',
|
|
1185
|
+
settings: {
|
|
1186
|
+
title: 'Recently Viewed',
|
|
1187
|
+
subtitle: 'Products you\'ve looked at',
|
|
1188
|
+
showWidgetTitle: 'Yes',
|
|
1189
|
+
columns: 4,
|
|
1190
|
+
show_add_to_cart: false
|
|
1191
|
+
},
|
|
1192
|
+
data: {
|
|
1193
|
+
products: [] // Will be enriched by dev server
|
|
1194
|
+
}
|
|
1195
|
+
},
|
|
1196
|
+
|
|
1197
|
+
// BrandCarousel Widget
|
|
1198
|
+
{
|
|
1199
|
+
id: 'widget-brand-carousel-1',
|
|
1200
|
+
type: 'BrandCarousel',
|
|
1201
|
+
section: 'content',
|
|
1202
|
+
sectionName: 'content',
|
|
1203
|
+
status: 'active',
|
|
1204
|
+
Position: 8,
|
|
1205
|
+
Title: 'Our Brands',
|
|
1206
|
+
settings: {
|
|
1207
|
+
title: 'Our Brands',
|
|
1208
|
+
subtitle: 'Shop from top brands',
|
|
1209
|
+
showWidgetTitle: 'Yes',
|
|
1210
|
+
widgetTitleAlignment: 'center'
|
|
1211
|
+
},
|
|
1212
|
+
data: {
|
|
1213
|
+
brands: [
|
|
1214
|
+
{ Id: 1, id: 1, Name: 'TechCorp', name: 'TechCorp', Slug: '/brands/techcorp', slug: '/brands/techcorp', thumbnailImage: { url: 'https://picsum.photos/seed/brand1/200/80' }, Logo: 'https://picsum.photos/seed/brand1/200/80' },
|
|
1215
|
+
{ Id: 2, id: 2, Name: 'StyleMax', name: 'StyleMax', Slug: '/brands/stylemax', slug: '/brands/stylemax', thumbnailImage: { url: 'https://picsum.photos/seed/brand2/200/80' }, Logo: 'https://picsum.photos/seed/brand2/200/80' },
|
|
1216
|
+
{ Id: 3, id: 3, Name: 'HomeLife', name: 'HomeLife', Slug: '/brands/homelife', slug: '/brands/homelife', thumbnailImage: { url: 'https://picsum.photos/seed/brand3/200/80' }, Logo: 'https://picsum.photos/seed/brand3/200/80' },
|
|
1217
|
+
{ Id: 4, id: 4, Name: 'SportPro', name: 'SportPro', Slug: '/brands/sportpro', slug: '/brands/sportpro', thumbnailImage: { url: 'https://picsum.photos/seed/brand4/200/80' }, Logo: 'https://picsum.photos/seed/brand4/200/80' },
|
|
1218
|
+
{ Id: 5, id: 5, Name: 'BeautyGlow', name: 'BeautyGlow', Slug: '/brands/beautyglow', slug: '/brands/beautyglow', thumbnailImage: { url: 'https://picsum.photos/seed/brand5/200/80' }, Logo: 'https://picsum.photos/seed/brand5/200/80' },
|
|
1219
|
+
{ Id: 6, id: 6, Name: 'GadgetZone', name: 'GadgetZone', Slug: '/brands/gadgetzone', slug: '/brands/gadgetzone', thumbnailImage: { url: 'https://picsum.photos/seed/brand6/200/80' }, Logo: 'https://picsum.photos/seed/brand6/200/80' }
|
|
1220
|
+
],
|
|
1221
|
+
Brands: [
|
|
1222
|
+
{ Id: 1, Name: 'TechCorp', Slug: '/brands/techcorp', Logo: 'https://picsum.photos/seed/brand1/200/80' },
|
|
1223
|
+
{ Id: 2, Name: 'StyleMax', Slug: '/brands/stylemax', Logo: 'https://picsum.photos/seed/brand2/200/80' },
|
|
1224
|
+
{ Id: 3, Name: 'HomeLife', Slug: '/brands/homelife', Logo: 'https://picsum.photos/seed/brand3/200/80' },
|
|
1225
|
+
{ Id: 4, Name: 'SportPro', Slug: '/brands/sportpro', Logo: 'https://picsum.photos/seed/brand4/200/80' },
|
|
1226
|
+
{ Id: 5, Name: 'BeautyGlow', Slug: '/brands/beautyglow', Logo: 'https://picsum.photos/seed/brand5/200/80' },
|
|
1227
|
+
{ Id: 6, Name: 'GadgetZone', Slug: '/brands/gadgetzone', Logo: 'https://picsum.photos/seed/brand6/200/80' }
|
|
1228
|
+
]
|
|
1229
|
+
},
|
|
1230
|
+
content: JSON.stringify({
|
|
1231
|
+
Brands: [
|
|
1232
|
+
{ Id: 1, Name: 'TechCorp', Logo: 'https://picsum.photos/seed/brand1/200/80' },
|
|
1233
|
+
{ Id: 2, Name: 'StyleMax', Logo: 'https://picsum.photos/seed/brand2/200/80' },
|
|
1234
|
+
{ Id: 3, Name: 'HomeLife', Logo: 'https://picsum.photos/seed/brand3/200/80' },
|
|
1235
|
+
{ Id: 4, Name: 'SportPro', Logo: 'https://picsum.photos/seed/brand4/200/80' },
|
|
1236
|
+
{ Id: 5, Name: 'BeautyGlow', Logo: 'https://picsum.photos/seed/brand5/200/80' },
|
|
1237
|
+
{ Id: 6, Name: 'GadgetZone', Logo: 'https://picsum.photos/seed/brand6/200/80' }
|
|
1238
|
+
]
|
|
1239
|
+
})
|
|
1240
|
+
},
|
|
1241
|
+
|
|
1242
|
+
// Gallery Widget
|
|
1243
|
+
{
|
|
1244
|
+
id: 'widget-gallery-1',
|
|
1245
|
+
type: 'Gallery',
|
|
1246
|
+
section: 'content',
|
|
1247
|
+
sectionName: 'content',
|
|
1248
|
+
status: 'active',
|
|
1249
|
+
Position: 4,
|
|
1250
|
+
Title: 'Instagram Gallery',
|
|
1251
|
+
settings: {
|
|
1252
|
+
title: 'Follow Us @storename',
|
|
1253
|
+
subtitle: 'Share your style with #OurStore',
|
|
1254
|
+
showWidgetTitle: 'Yes',
|
|
1255
|
+
widgetTitleAlignment: 'center',
|
|
1256
|
+
columns: 6
|
|
1257
|
+
},
|
|
1258
|
+
data: {
|
|
1259
|
+
content: {
|
|
1260
|
+
Items: [
|
|
1261
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery1/400/400', imageUrl: 'https://picsum.photos/seed/gallery1/400/400', TargetUrl: '#', targetUrl: '#' },
|
|
1262
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery2/400/400', imageUrl: 'https://picsum.photos/seed/gallery2/400/400', TargetUrl: '#', targetUrl: '#' },
|
|
1263
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery3/400/400', imageUrl: 'https://picsum.photos/seed/gallery3/400/400', TargetUrl: '#', targetUrl: '#' },
|
|
1264
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery4/400/400', imageUrl: 'https://picsum.photos/seed/gallery4/400/400', TargetUrl: '#', targetUrl: '#' },
|
|
1265
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery5/400/400', imageUrl: 'https://picsum.photos/seed/gallery5/400/400', TargetUrl: '#', targetUrl: '#' },
|
|
1266
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery6/400/400', imageUrl: 'https://picsum.photos/seed/gallery6/400/400', TargetUrl: '#', targetUrl: '#' }
|
|
1267
|
+
]
|
|
1268
|
+
}
|
|
1269
|
+
},
|
|
1270
|
+
content: JSON.stringify({
|
|
1271
|
+
Items: [
|
|
1272
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery1/400/400', TargetUrl: '#' },
|
|
1273
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery2/400/400', TargetUrl: '#' },
|
|
1274
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery3/400/400', TargetUrl: '#' },
|
|
1275
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery4/400/400', TargetUrl: '#' },
|
|
1276
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery5/400/400', TargetUrl: '#' },
|
|
1277
|
+
{ ImageUrl: 'https://picsum.photos/seed/gallery6/400/400', TargetUrl: '#' }
|
|
1278
|
+
]
|
|
1279
|
+
})
|
|
1280
|
+
},
|
|
1281
|
+
|
|
1282
|
+
// TestimonialCarousel Widget
|
|
1283
|
+
{
|
|
1284
|
+
id: 'widget-testimonial-1',
|
|
1285
|
+
type: 'TestimonialCarousel',
|
|
1286
|
+
section: 'content',
|
|
1287
|
+
sectionName: 'content',
|
|
1288
|
+
status: 'active',
|
|
1289
|
+
Position: 5,
|
|
1290
|
+
Title: 'What Our Customers Say',
|
|
1291
|
+
settings: {
|
|
1292
|
+
title: 'What Our Customers Say',
|
|
1293
|
+
subtitle: 'Real reviews from real customers',
|
|
1294
|
+
showWidgetTitle: 'Yes',
|
|
1295
|
+
widgetTitleAlignment: 'center',
|
|
1296
|
+
hideArrow: false,
|
|
1297
|
+
hideDot: false
|
|
1298
|
+
},
|
|
1299
|
+
data: {
|
|
1300
|
+
content: [
|
|
1301
|
+
{
|
|
1302
|
+
Title: 'Amazing Quality!',
|
|
1303
|
+
title: 'Amazing Quality!',
|
|
1304
|
+
Description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
|
|
1305
|
+
description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
|
|
1306
|
+
PersonName: 'Sarah Johnson',
|
|
1307
|
+
personName: 'Sarah Johnson',
|
|
1308
|
+
CompanyName: 'Verified Buyer',
|
|
1309
|
+
companyName: 'Verified Buyer',
|
|
1310
|
+
Rating: 5,
|
|
1311
|
+
rating: 5,
|
|
1312
|
+
ImageUrl: 'https://picsum.photos/seed/user1/100/100',
|
|
1313
|
+
imageUrl: 'https://picsum.photos/seed/user1/100/100'
|
|
1314
|
+
},
|
|
1315
|
+
{
|
|
1316
|
+
Title: 'Great Experience',
|
|
1317
|
+
title: 'Great Experience',
|
|
1318
|
+
Description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
|
|
1319
|
+
description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
|
|
1320
|
+
PersonName: 'Michael Chen',
|
|
1321
|
+
personName: 'Michael Chen',
|
|
1322
|
+
CompanyName: 'Regular Customer',
|
|
1323
|
+
companyName: 'Regular Customer',
|
|
1324
|
+
Rating: 5,
|
|
1325
|
+
rating: 5,
|
|
1326
|
+
ImageUrl: 'https://picsum.photos/seed/user2/100/100',
|
|
1327
|
+
imageUrl: 'https://picsum.photos/seed/user2/100/100'
|
|
1328
|
+
},
|
|
1329
|
+
{
|
|
1330
|
+
Title: 'Will Shop Again',
|
|
1331
|
+
title: 'Will Shop Again',
|
|
1332
|
+
Description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
|
|
1333
|
+
description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
|
|
1334
|
+
PersonName: 'Emily Davis',
|
|
1335
|
+
personName: 'Emily Davis',
|
|
1336
|
+
CompanyName: 'Fashion Enthusiast',
|
|
1337
|
+
companyName: 'Fashion Enthusiast',
|
|
1338
|
+
Rating: 5,
|
|
1339
|
+
rating: 5,
|
|
1340
|
+
ImageUrl: 'https://picsum.photos/seed/user3/100/100',
|
|
1341
|
+
imageUrl: 'https://picsum.photos/seed/user3/100/100'
|
|
1342
|
+
},
|
|
1343
|
+
{
|
|
1344
|
+
Title: 'Fast Delivery',
|
|
1345
|
+
title: 'Fast Delivery',
|
|
1346
|
+
Description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
|
|
1347
|
+
description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
|
|
1348
|
+
PersonName: 'David Wilson',
|
|
1349
|
+
personName: 'David Wilson',
|
|
1350
|
+
CompanyName: 'Tech Reviewer',
|
|
1351
|
+
companyName: 'Tech Reviewer',
|
|
1352
|
+
Rating: 4,
|
|
1353
|
+
rating: 4,
|
|
1354
|
+
ImageUrl: 'https://picsum.photos/seed/user4/100/100',
|
|
1355
|
+
imageUrl: 'https://picsum.photos/seed/user4/100/100'
|
|
1356
|
+
}
|
|
1357
|
+
]
|
|
1358
|
+
},
|
|
1359
|
+
content: JSON.stringify([
|
|
1360
|
+
{ Title: 'Amazing Quality!', Description: 'The quality never disappoints.', PersonName: 'Sarah Johnson', CompanyName: 'Verified Buyer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user1/100/100' },
|
|
1361
|
+
{ Title: 'Great Experience', Description: 'Excellent customer service.', PersonName: 'Michael Chen', CompanyName: 'Regular Customer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user2/100/100' },
|
|
1362
|
+
{ Title: 'Will Shop Again', Description: 'Love the variety.', PersonName: 'Emily Davis', CompanyName: 'Fashion Enthusiast', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user3/100/100' },
|
|
1363
|
+
{ Title: 'Fast Delivery', Description: 'Quick and perfect packaging.', PersonName: 'David Wilson', CompanyName: 'Tech Reviewer', Rating: 4, ImageUrl: 'https://picsum.photos/seed/user4/100/100' }
|
|
1364
|
+
])
|
|
1365
|
+
},
|
|
1366
|
+
|
|
1367
|
+
// ==================== FOOTER SECTION ====================
|
|
1368
|
+
{
|
|
1369
|
+
id: 'widget-footer-1',
|
|
1370
|
+
type: 'Footer',
|
|
1371
|
+
section: 'footer',
|
|
1372
|
+
sectionName: 'footer',
|
|
1373
|
+
status: 'active',
|
|
1374
|
+
Position: 1,
|
|
1375
|
+
settings: {
|
|
1376
|
+
showWidgetTitle: 'No',
|
|
1377
|
+
showNewsletter: true,
|
|
1378
|
+
showSocial: true
|
|
1379
|
+
},
|
|
1380
|
+
data: {
|
|
1381
|
+
content: {
|
|
1382
|
+
columns: [
|
|
1383
|
+
{
|
|
1384
|
+
Title: 'About Us',
|
|
1385
|
+
title: 'About Us',
|
|
1386
|
+
Links: [
|
|
1387
|
+
{ Text: 'Our Story', text: 'Our Story', Url: '/pages/about', url: '/pages/about' },
|
|
1388
|
+
{ Text: 'Careers', text: 'Careers', Url: '/pages/careers', url: '/pages/careers' },
|
|
1389
|
+
{ Text: 'Press', text: 'Press', Url: '/pages/press', url: '/pages/press' }
|
|
1390
|
+
],
|
|
1391
|
+
links: [
|
|
1392
|
+
{ text: 'Our Story', url: '/pages/about' },
|
|
1393
|
+
{ text: 'Careers', url: '/pages/careers' },
|
|
1394
|
+
{ text: 'Press', url: '/pages/press' }
|
|
1395
|
+
]
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
Title: 'Customer Service',
|
|
1399
|
+
title: 'Customer Service',
|
|
1400
|
+
Links: [
|
|
1401
|
+
{ Text: 'Contact Us', text: 'Contact Us', Url: '/pages/contact', url: '/pages/contact' },
|
|
1402
|
+
{ Text: 'FAQs', text: 'FAQs', Url: '/pages/faq', url: '/pages/faq' },
|
|
1403
|
+
{ Text: 'Returns', text: 'Returns', Url: '/pages/returns', url: '/pages/returns' }
|
|
1404
|
+
],
|
|
1405
|
+
links: [
|
|
1406
|
+
{ text: 'Contact Us', url: '/pages/contact' },
|
|
1407
|
+
{ text: 'FAQs', url: '/pages/faq' },
|
|
1408
|
+
{ text: 'Returns', url: '/pages/returns' }
|
|
1409
|
+
]
|
|
1410
|
+
},
|
|
1411
|
+
{
|
|
1412
|
+
Title: 'Legal',
|
|
1413
|
+
title: 'Legal',
|
|
1414
|
+
Links: [
|
|
1415
|
+
{ Text: 'Privacy Policy', text: 'Privacy Policy', Url: '/pages/privacy', url: '/pages/privacy' },
|
|
1416
|
+
{ Text: 'Terms of Service', text: 'Terms of Service', Url: '/pages/terms', url: '/pages/terms' },
|
|
1417
|
+
{ Text: 'Shipping Policy', text: 'Shipping Policy', Url: '/pages/shipping', url: '/pages/shipping' }
|
|
1418
|
+
],
|
|
1419
|
+
links: [
|
|
1420
|
+
{ text: 'Privacy Policy', url: '/pages/privacy' },
|
|
1421
|
+
{ text: 'Terms of Service', url: '/pages/terms' },
|
|
1422
|
+
{ text: 'Shipping Policy', url: '/pages/shipping' }
|
|
1423
|
+
]
|
|
1424
|
+
}
|
|
1425
|
+
],
|
|
1426
|
+
socialLinks: [
|
|
1427
|
+
{ Platform: 'facebook', platform: 'facebook', Url: 'https://facebook.com', url: 'https://facebook.com' },
|
|
1428
|
+
{ Platform: 'twitter', platform: 'twitter', Url: 'https://twitter.com', url: 'https://twitter.com' },
|
|
1429
|
+
{ Platform: 'instagram', platform: 'instagram', Url: 'https://instagram.com', url: 'https://instagram.com' },
|
|
1430
|
+
{ Platform: 'youtube', platform: 'youtube', Url: 'https://youtube.com', url: 'https://youtube.com' }
|
|
1431
|
+
]
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
id: 'widget-footer-menu-1',
|
|
1437
|
+
type: 'FooterMenu',
|
|
1438
|
+
section: 'footer',
|
|
1439
|
+
sectionName: 'footer',
|
|
1440
|
+
status: 'active',
|
|
1441
|
+
Position: 2,
|
|
1442
|
+
settings: {
|
|
1443
|
+
menuId: 'footer-menu',
|
|
1444
|
+
showWidgetTitle: 'No'
|
|
1445
|
+
},
|
|
1446
|
+
data: {
|
|
1447
|
+
content: {
|
|
1448
|
+
menuId: 'footer-menu'
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
];
|
|
1453
|
+
|
|
1454
|
+
return widgets;
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
module.exports = {
|
|
1458
|
+
generateMockData,
|
|
1459
|
+
generateMockProducts,
|
|
1460
|
+
generateMockCategories,
|
|
1461
|
+
generateMockBrands,
|
|
1462
|
+
generateMockWidgets
|
|
1463
|
+
};
|
|
1464
|
+
|
|
1465
|
+
|
|
1466
|
+
|
|
1467
|
+
|
|
1468
|
+
|