@o2vend/theme-cli 1.0.36 → 1.0.38

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.
Files changed (90) hide show
  1. package/README.md +4 -0
  2. package/lib/lib/dev-server.js +344 -48
  3. package/lib/lib/liquid-engine.js +3 -1
  4. package/lib/lib/mock-data.js +473 -119
  5. package/lib/lib/widget-service.js +12 -4
  6. package/package.json +2 -2
  7. package/test-theme/assets/async-sections.js +32 -24
  8. package/test-theme/assets/cart-drawer.js +20 -22
  9. package/test-theme/assets/cart-manager.js +1 -15
  10. package/test-theme/assets/checkout-price-handler.js +12 -11
  11. package/test-theme/assets/checkout.css +1415 -0
  12. package/test-theme/assets/checkout.js +3174 -0
  13. package/test-theme/assets/components.css +178 -29
  14. package/test-theme/assets/delivery-zone.js +1 -1
  15. package/test-theme/assets/product-detail.css +1050 -0
  16. package/test-theme/assets/product-detail.js +2940 -0
  17. package/test-theme/assets/theme.css +95 -120
  18. package/test-theme/assets/theme.js +781 -186
  19. package/test-theme/layout/theme.liquid +91 -17
  20. package/test-theme/sections/content.liquid +64 -57
  21. package/test-theme/sections/footer-fallback.liquid +57 -7
  22. package/test-theme/sections/footer.liquid +63 -12
  23. package/test-theme/sections/header-fallback.liquid +41 -41
  24. package/test-theme/sections/header.liquid +41 -51
  25. package/test-theme/sections/hero-fallback.liquid +1 -1
  26. package/test-theme/sections/hero.liquid +159 -136
  27. package/test-theme/snippets/account-sidebar.liquid +121 -29
  28. package/test-theme/snippets/add-to-cart-modal.liquid +258 -206
  29. package/test-theme/snippets/breadcrumbs.liquid +98 -11
  30. package/test-theme/snippets/cart-drawer.liquid +93 -0
  31. package/test-theme/snippets/delivery-zone-city-selector.liquid +101 -15
  32. package/test-theme/snippets/delivery-zone-modal.liquid +529 -84
  33. package/test-theme/snippets/delivery-zone-search.liquid +104 -18
  34. package/test-theme/snippets/login-modal.liquid +269 -82
  35. package/test-theme/snippets/mega-menu.liquid +130 -43
  36. package/test-theme/snippets/news-thumbnail.liquid +120 -28
  37. package/test-theme/snippets/pagination.liquid +1 -1
  38. package/test-theme/snippets/price.liquid +100 -9
  39. package/test-theme/snippets/product-card-related.liquid +22 -4
  40. package/test-theme/snippets/product-card-simple.liquid +521 -25
  41. package/test-theme/snippets/product-card.liquid +145 -232
  42. package/test-theme/snippets/rating.liquid +100 -9
  43. package/test-theme/snippets/skeleton-collection-grid.liquid +94 -8
  44. package/test-theme/snippets/skeleton-product-card.liquid +102 -16
  45. package/test-theme/snippets/skeleton-product-grid.liquid +87 -1
  46. package/test-theme/snippets/social-sharing.liquid +133 -32
  47. package/test-theme/templates/account/dashboard.liquid +30 -0
  48. package/test-theme/templates/account/loyalty-redemption.liquid +29 -28
  49. package/test-theme/templates/account/loyalty.liquid +45 -43
  50. package/test-theme/templates/account/order-detail.liquid +15 -8
  51. package/test-theme/templates/account/orders.liquid +189 -35
  52. package/test-theme/templates/account/profile.liquid +509 -114
  53. package/test-theme/templates/account/register.liquid +18 -8
  54. package/test-theme/templates/account/return-orders.liquid +31 -30
  55. package/test-theme/templates/account/store-credit.liquid +27 -26
  56. package/test-theme/templates/account/subscriptions.liquid +22 -5
  57. package/test-theme/templates/account/wishlist.liquid +88 -19
  58. package/test-theme/templates/address-book.liquid +166 -69
  59. package/test-theme/templates/categories.liquid +90 -30
  60. package/test-theme/templates/checkout.liquid +137 -3834
  61. package/test-theme/templates/error.liquid +23 -21
  62. package/test-theme/templates/index.liquid +29 -0
  63. package/test-theme/templates/login.liquid +33 -6
  64. package/test-theme/templates/order-confirmation.liquid +67 -9
  65. package/test-theme/templates/page.liquid +418 -206
  66. package/test-theme/templates/product-detail.liquid +124 -3878
  67. package/test-theme/templates/products.liquid +155 -30
  68. package/test-theme/templates/search.liquid +739 -225
  69. package/test-theme/widgets/brand-carousel.liquid +102 -82
  70. package/test-theme/widgets/brand.liquid +78 -50
  71. package/test-theme/widgets/carousel.liquid +253 -121
  72. package/test-theme/widgets/category-list-carousel.liquid +32 -8
  73. package/test-theme/widgets/category-list.liquid +21 -6
  74. package/test-theme/widgets/category.liquid +104 -37
  75. package/test-theme/widgets/discount-time.liquid +326 -119
  76. package/test-theme/widgets/footer-menu.liquid +115 -23
  77. package/test-theme/widgets/footer.liquid +118 -5
  78. package/test-theme/widgets/gallery.liquid +29 -5
  79. package/test-theme/widgets/header-menu.liquid +25 -13
  80. package/test-theme/widgets/header.liquid +64 -26
  81. package/test-theme/widgets/html.liquid +29 -6
  82. package/test-theme/widgets/news.liquid +6 -0
  83. package/test-theme/widgets/product-canvas.liquid +20 -12
  84. package/test-theme/widgets/product-carousel.liquid +118 -56
  85. package/test-theme/widgets/shared/product-grid.liquid +12 -0
  86. package/test-theme/widgets/single-product.liquid +688 -250
  87. package/test-theme/widgets/spacebar-carousel.liquid +39 -10
  88. package/test-theme/widgets/spacebar.liquid +77 -6
  89. package/test-theme/widgets/splash.liquid +40 -30
  90. package/test-theme/widgets/testimonial-carousel.liquid +111 -67
@@ -374,6 +374,222 @@ function generateMockProducts(count = 20) {
374
374
  });
375
375
  }
376
376
 
377
+ // Variation product with production-style options structure
378
+ const variationProductId = products.length + 1;
379
+ const variationVariants = [
380
+ {
381
+ id: `variant-var-1`, productId: variationProductId * 1000 + 1, name: 'Wireless Headphones - Black / Standard',
382
+ sku: 'WH-BLK-STD', title: 'Black / Standard',
383
+ prices: { price: 7999, mrp: 9999 }, price: 7999, compareAtPrice: 9999,
384
+ options: [
385
+ { id: 1, optionId: 1, optionName: 'Color', value: 'Black', displayType: 'color', displayValue: '#000000', sortIndex: 1 },
386
+ { id: 2, optionId: 2, optionName: 'Edition', value: 'Standard', displayType: 'text', displayValue: '', sortIndex: 1 }
387
+ ],
388
+ images: [{ url: 'https://picsum.photos/seed/wh-black/800/800', altText: 'Wireless Headphones Black' }],
389
+ inStock: true, available: true, stockQuantity: 25
390
+ },
391
+ {
392
+ id: `variant-var-2`, productId: variationProductId * 1000 + 2, name: 'Wireless Headphones - Black / Pro',
393
+ sku: 'WH-BLK-PRO', title: 'Black / Pro',
394
+ prices: { price: 11999, mrp: 14999 }, price: 11999, compareAtPrice: 14999,
395
+ options: [
396
+ { id: 3, optionId: 1, optionName: 'Color', value: 'Black', displayType: 'color', displayValue: '#000000', sortIndex: 1 },
397
+ { id: 4, optionId: 2, optionName: 'Edition', value: 'Pro', displayType: 'text', displayValue: '', sortIndex: 2 }
398
+ ],
399
+ images: [{ url: 'https://picsum.photos/seed/wh-black-pro/800/800', altText: 'Wireless Headphones Black Pro' }],
400
+ inStock: true, available: true, stockQuantity: 15
401
+ },
402
+ {
403
+ id: `variant-var-3`, productId: variationProductId * 1000 + 3, name: 'Wireless Headphones - White / Standard',
404
+ sku: 'WH-WHT-STD', title: 'White / Standard',
405
+ prices: { price: 7999, mrp: 9999 }, price: 7999, compareAtPrice: 9999,
406
+ options: [
407
+ { id: 5, optionId: 1, optionName: 'Color', value: 'White', displayType: 'color', displayValue: '#ffffff', sortIndex: 2 },
408
+ { id: 6, optionId: 2, optionName: 'Edition', value: 'Standard', displayType: 'text', displayValue: '', sortIndex: 1 }
409
+ ],
410
+ images: [{ url: 'https://picsum.photos/seed/wh-white/800/800', altText: 'Wireless Headphones White' }],
411
+ inStock: true, available: true, stockQuantity: 20
412
+ },
413
+ {
414
+ id: `variant-var-4`, productId: variationProductId * 1000 + 4, name: 'Wireless Headphones - Silver / Pro',
415
+ sku: 'WH-SLV-PRO', title: 'Silver / Pro',
416
+ prices: { price: 12999, mrp: 15999 }, price: 12999, compareAtPrice: 15999,
417
+ options: [
418
+ { id: 7, optionId: 1, optionName: 'Color', value: 'Silver', displayType: 'color', displayValue: '#c0c0c0', sortIndex: 3 },
419
+ { id: 8, optionId: 2, optionName: 'Edition', value: 'Pro', displayType: 'text', displayValue: '', sortIndex: 2 }
420
+ ],
421
+ images: [{ url: 'https://picsum.photos/seed/wh-silver-pro/800/800', altText: 'Wireless Headphones Silver Pro' }],
422
+ inStock: false, available: false, stockQuantity: 0
423
+ }
424
+ ];
425
+ products.push({
426
+ id: variationProductId, productId: variationProductId,
427
+ title: 'Wireless Noise-Cancelling Headphones', name: 'Wireless Noise-Cancelling Headphones',
428
+ handle: 'wireless-noise-cancelling-headphones', slug: 'wireless-noise-cancelling-headphones',
429
+ url: 'wireless-noise-cancelling-headphones', link: 'wireless-noise-cancelling-headphones',
430
+ description: 'Premium wireless headphones with active noise cancellation. Available in multiple colors and editions.',
431
+ price: 7999, compareAtPrice: 9999, prices: { price: 7999, mrp: 9999 },
432
+ inStock: true, available: true, stockQuantity: 60, stockTrackingIsEnabled: true, isAllowToOrder: false,
433
+ sku: 'WH-MAIN', categoryId: 1, category: { id: 1, name: 'Electronics' }, brandId: 1,
434
+ thumbnailImage: 'https://picsum.photos/seed/wh-main/800/800',
435
+ imageUrl: 'https://picsum.photos/seed/wh-main/800/800',
436
+ images: [
437
+ { id: 'img-var-1', url: 'https://picsum.photos/seed/wh-main/800/800', altText: 'Wireless Headphones' },
438
+ { id: 'img-var-2', url: 'https://picsum.photos/seed/wh-side/800/800', altText: 'Wireless Headphones Side View' },
439
+ { id: 'img-var-3', url: 'https://picsum.photos/seed/wh-case/800/800', altText: 'Wireless Headphones with Case' }
440
+ ],
441
+ variants: variationVariants, variations: variationVariants,
442
+ options: [
443
+ { name: 'Color', values: ['Black', 'White', 'Silver'] },
444
+ { name: 'Edition', values: ['Standard', 'Pro'] }
445
+ ],
446
+ tags: ['featured', 'electronics', 'audio'], productType: 0, additionalData: 'null',
447
+ combinations: [], subscriptions: [], shippingMethods: [],
448
+ createdAt: new Date(Date.now() - 10 * 24 * 60 * 60 * 1000).toISOString()
449
+ });
450
+
451
+ // Combination product with group-based add-ons
452
+ const comboProductId = products.length + 1;
453
+ products.push({
454
+ id: comboProductId, productId: comboProductId,
455
+ title: 'Gaming Console Bundle', name: 'Gaming Console Bundle',
456
+ handle: 'gaming-console-bundle', slug: 'gaming-console-bundle',
457
+ url: 'gaming-console-bundle', link: 'gaming-console-bundle',
458
+ description: 'Next-gen gaming console with customizable accessories bundle. Choose your controller, headset, and games.',
459
+ price: 49999, compareAtPrice: 59999, prices: { price: 49999, mrp: 59999 },
460
+ inStock: true, available: true, stockQuantity: 30, stockTrackingIsEnabled: true, isAllowToOrder: false,
461
+ sku: 'GCB-MAIN', categoryId: 1, category: { id: 1, name: 'Electronics' }, brandId: 2,
462
+ thumbnailImage: 'https://picsum.photos/seed/gcb-main/800/800',
463
+ imageUrl: 'https://picsum.photos/seed/gcb-main/800/800',
464
+ images: [
465
+ { id: 'img-combo-1', url: 'https://picsum.photos/seed/gcb-main/800/800', altText: 'Gaming Console Bundle' },
466
+ { id: 'img-combo-2', url: 'https://picsum.photos/seed/gcb-box/800/800', altText: 'Gaming Console Box Contents' }
467
+ ],
468
+ variants: [{ id: 'variant-combo-1', productId: comboProductId * 1000 + 1, title: 'Default', price: 49999, compareAtPrice: 59999, prices: { price: 49999, mrp: 59999 }, sku: 'GCB-DEF', inStock: true, available: true, stockQuantity: 30 }],
469
+ variations: [],
470
+ options: [],
471
+ combinations: [
472
+ {
473
+ productId: comboProductId * 100 + 1, name: 'Extra Wireless Controller', sku: 'GCB-CTRL',
474
+ prices: { price: 5999, mrp: 6999 }, quantity: 1,
475
+ group: { groupDetail: { groupName: 'Controllers', groupType: 1, minimumSelectable: 0, maximumSelectable: 2, isOptional: true } },
476
+ thumbnailImage1: { url: 'https://picsum.photos/seed/gcb-ctrl/200/200' },
477
+ images: [{ url: 'https://picsum.photos/seed/gcb-ctrl/400/400' }],
478
+ additionalData: null
479
+ },
480
+ {
481
+ productId: comboProductId * 100 + 2, name: 'Pro Controller (Elite)', sku: 'GCB-CTRL-PRO',
482
+ prices: { price: 12999, mrp: 14999 }, quantity: 1,
483
+ group: { groupDetail: { groupName: 'Controllers', groupType: 1, minimumSelectable: 0, maximumSelectable: 2, isOptional: true } },
484
+ thumbnailImage1: { url: 'https://picsum.photos/seed/gcb-ctrl-pro/200/200' },
485
+ images: [{ url: 'https://picsum.photos/seed/gcb-ctrl-pro/400/400' }],
486
+ additionalData: null
487
+ },
488
+ {
489
+ productId: comboProductId * 100 + 3, name: 'Gaming Headset 7.1', sku: 'GCB-HS',
490
+ prices: { price: 7999, mrp: 9999 }, quantity: 1,
491
+ group: { groupDetail: { groupName: 'Audio', groupType: 1, minimumSelectable: 1, maximumSelectable: 1, isOptional: false } },
492
+ thumbnailImage1: { url: 'https://picsum.photos/seed/gcb-headset/200/200' },
493
+ images: [{ url: 'https://picsum.photos/seed/gcb-headset/400/400' }],
494
+ additionalData: null
495
+ },
496
+ {
497
+ productId: comboProductId * 100 + 4, name: 'Racing Game Deluxe', sku: 'GCB-GAME1',
498
+ prices: { price: 3999, mrp: 4999 }, quantity: 1,
499
+ group: { groupDetail: { groupName: 'Games', groupType: 1, minimumSelectable: 1, maximumSelectable: 3, isOptional: false } },
500
+ thumbnailImage1: { url: 'https://picsum.photos/seed/gcb-game1/200/200' },
501
+ images: [{ url: 'https://picsum.photos/seed/gcb-game1/400/400' }],
502
+ additionalData: null
503
+ },
504
+ {
505
+ productId: comboProductId * 100 + 5, name: 'Adventure Quest RPG', sku: 'GCB-GAME2',
506
+ prices: { price: 4999, mrp: 5999 }, quantity: 1,
507
+ group: { groupDetail: { groupName: 'Games', groupType: 1, minimumSelectable: 1, maximumSelectable: 3, isOptional: false } },
508
+ thumbnailImage1: { url: 'https://picsum.photos/seed/gcb-game2/200/200' },
509
+ images: [{ url: 'https://picsum.photos/seed/gcb-game2/400/400' }],
510
+ additionalData: null
511
+ }
512
+ ],
513
+ subscriptions: [],
514
+ tags: ['featured', 'electronics', 'gaming', 'bundle'], productType: 0,
515
+ additionalData: 'null', shippingMethods: [],
516
+ createdAt: new Date(Date.now() - 5 * 24 * 60 * 60 * 1000).toISOString()
517
+ });
518
+
519
+ // Subscription product
520
+ const subProductId = products.length + 1;
521
+ const subscriptionAdditionalData = JSON.stringify({
522
+ settings: {
523
+ isScheduleByCustomer: true, typeOfOrder: 10, shippingClassId: 1,
524
+ perOrderPrice: 1999, startDate: new Date().toISOString(),
525
+ endDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString(),
526
+ isProductChoiceEnabled: false, isQuantityChangeAllowed: true,
527
+ minSubscriptionProducts: 1, maxSubscriptionProducts: 5
528
+ },
529
+ subscriptionDetails: {
530
+ shippingFeeAmount: 0, paymentFeeAmount: 0, roundOff: 0,
531
+ discountAmount: 500, subscriptionCoupon: null, orderTotal: '1999'
532
+ },
533
+ frequency: { selectedOption: 'monthly', timeFre: '', ordersCount: 12 },
534
+ frequencyData: {
535
+ selectedOption: 'monthly', ordersCount: 12,
536
+ startDate: new Date().toISOString(),
537
+ endDate: new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toISOString(),
538
+ isDailyFrequency: true, isWeeklyFrequency: true,
539
+ isAlterNativeFrequency: false, isMonthlyFrequency: true, isYearlyFrequency: false
540
+ },
541
+ IsSubscriptionPrice: true,
542
+ items: [
543
+ { Id: 1, Name: 'Organic Coffee Blend - 250g', Price: 1999, Quantity: 1 },
544
+ { Id: 2, Name: 'Single Origin Ethiopian - 250g', Price: 2499, Quantity: 1 },
545
+ { Id: 3, Name: 'Dark Roast Espresso - 250g', Price: 1799, Quantity: 1 }
546
+ ]
547
+ });
548
+ products.push({
549
+ id: subProductId, productId: subProductId,
550
+ title: 'Premium Coffee Subscription Box', name: 'Premium Coffee Subscription Box',
551
+ handle: 'premium-coffee-subscription', slug: 'premium-coffee-subscription',
552
+ url: 'premium-coffee-subscription', link: 'premium-coffee-subscription',
553
+ description: 'Get freshly roasted premium coffee delivered to your door. Choose your frequency and customize your selection.',
554
+ price: 1999, compareAtPrice: 2499, prices: { price: 1999, mrp: 2499 },
555
+ inStock: true, available: true, stockQuantity: 999, stockTrackingIsEnabled: false, isAllowToOrder: true,
556
+ sku: 'SUB-COFFEE', categoryId: 10, category: { id: 10, name: 'Food & Beverages' }, brandId: 5,
557
+ thumbnailImage: 'https://picsum.photos/seed/sub-coffee/800/800',
558
+ imageUrl: 'https://picsum.photos/seed/sub-coffee/800/800',
559
+ images: [
560
+ { id: 'img-sub-1', url: 'https://picsum.photos/seed/sub-coffee/800/800', altText: 'Coffee Subscription Box' },
561
+ { id: 'img-sub-2', url: 'https://picsum.photos/seed/sub-beans/800/800', altText: 'Premium Coffee Beans' },
562
+ { id: 'img-sub-3', url: 'https://picsum.photos/seed/sub-cup/800/800', altText: 'Fresh Brewed Coffee' }
563
+ ],
564
+ variants: [{ id: 'variant-sub-1', productId: subProductId * 1000 + 1, title: 'Monthly Box', price: 1999, compareAtPrice: 2499, prices: { price: 1999, mrp: 2499 }, sku: 'SUB-COFFEE-M', inStock: true, available: true, stockQuantity: 999 }],
565
+ variations: [],
566
+ options: [],
567
+ combinations: [],
568
+ subscriptions: [
569
+ {
570
+ productId: subProductId * 100 + 1, name: 'Organic Coffee Blend - 250g', sku: 'SUB-BLEND',
571
+ prices: { price: 1999, mrp: 2499 }, quantity: 1,
572
+ specification: 'Premium organic blend, medium roast',
573
+ images: [{ url: 'https://picsum.photos/seed/sub-blend/400/400' }], additionalData: null
574
+ },
575
+ {
576
+ productId: subProductId * 100 + 2, name: 'Single Origin Ethiopian - 250g', sku: 'SUB-ETHIOP',
577
+ prices: { price: 2499, mrp: 2999 }, quantity: 1,
578
+ specification: 'Light roast, fruity notes',
579
+ images: [{ url: 'https://picsum.photos/seed/sub-ethiop/400/400' }], additionalData: null
580
+ },
581
+ {
582
+ productId: subProductId * 100 + 3, name: 'Dark Roast Espresso - 250g', sku: 'SUB-ESPRESSO',
583
+ prices: { price: 1799, mrp: 2199 }, quantity: 1,
584
+ specification: 'Bold and intense espresso blend',
585
+ images: [{ url: 'https://picsum.photos/seed/sub-espresso/400/400' }], additionalData: null
586
+ }
587
+ ],
588
+ tags: ['subscription', 'coffee', 'food'], productType: 90,
589
+ additionalData: subscriptionAdditionalData, shippingMethods: [],
590
+ createdAt: new Date(Date.now() - 3 * 24 * 60 * 60 * 1000).toISOString()
591
+ });
592
+
377
593
  // Log summary
378
594
  const productsWithVariations = products.filter(p => (p.variants?.length || 0) > 1).length;
379
595
  const productsWithOptions = products.filter(p => (p.options?.length || 0) > 0).length;
@@ -1120,7 +1336,8 @@ function generateMockWidgets() {
1120
1336
  Limit: 12,
1121
1337
  Columns: 4,
1122
1338
  Products: []
1123
- }
1339
+ },
1340
+ products: []
1124
1341
  },
1125
1342
  content: JSON.stringify({
1126
1343
  NumberOfProducts: 12,
@@ -1157,7 +1374,8 @@ function generateMockWidgets() {
1157
1374
  Columns: 3,
1158
1375
  IsFeatured: true,
1159
1376
  Products: []
1160
- }
1377
+ },
1378
+ products: []
1161
1379
  },
1162
1380
  content: JSON.stringify({
1163
1381
  NumberOfProducts: 6,
@@ -1271,7 +1489,8 @@ function generateMockWidgets() {
1271
1489
  show_add_to_cart: false
1272
1490
  },
1273
1491
  data: {
1274
- products: [] // Will be enriched by dev server
1492
+ products: [],
1493
+ content: { products: [], Products: [] }
1275
1494
  }
1276
1495
  },
1277
1496
 
@@ -1381,142 +1600,277 @@ function generateMockWidgets() {
1381
1600
  hideDot: false
1382
1601
  },
1383
1602
  data: {
1384
- content: [
1385
- {
1386
- Title: 'Amazing Quality!',
1387
- title: 'Amazing Quality!',
1388
- Description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
1389
- description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
1390
- PersonName: 'Sarah Johnson',
1391
- personName: 'Sarah Johnson',
1392
- CompanyName: 'Verified Buyer',
1393
- companyName: 'Verified Buyer',
1394
- Rating: 5,
1395
- rating: 5,
1396
- ImageUrl: 'https://picsum.photos/seed/user1/100/100',
1397
- imageUrl: 'https://picsum.photos/seed/user1/100/100'
1398
- },
1399
- {
1400
- Title: 'Great Experience',
1401
- title: 'Great Experience',
1402
- Description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
1403
- description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
1404
- PersonName: 'Michael Chen',
1405
- personName: 'Michael Chen',
1406
- CompanyName: 'Regular Customer',
1407
- companyName: 'Regular Customer',
1408
- Rating: 5,
1409
- rating: 5,
1410
- ImageUrl: 'https://picsum.photos/seed/user2/100/100',
1411
- imageUrl: 'https://picsum.photos/seed/user2/100/100'
1412
- },
1413
- {
1414
- Title: 'Will Shop Again',
1415
- title: 'Will Shop Again',
1416
- Description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
1417
- description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
1418
- PersonName: 'Emily Davis',
1419
- personName: 'Emily Davis',
1420
- CompanyName: 'Fashion Enthusiast',
1421
- companyName: 'Fashion Enthusiast',
1422
- Rating: 5,
1423
- rating: 5,
1424
- ImageUrl: 'https://picsum.photos/seed/user3/100/100',
1425
- imageUrl: 'https://picsum.photos/seed/user3/100/100'
1426
- },
1427
- {
1428
- Title: 'Fast Delivery',
1429
- title: 'Fast Delivery',
1430
- Description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
1431
- description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
1432
- PersonName: 'David Wilson',
1433
- personName: 'David Wilson',
1434
- CompanyName: 'Tech Reviewer',
1435
- companyName: 'Tech Reviewer',
1436
- Rating: 4,
1437
- rating: 4,
1438
- ImageUrl: 'https://picsum.photos/seed/user4/100/100',
1439
- imageUrl: 'https://picsum.photos/seed/user4/100/100'
1440
- }
1603
+ content: {
1604
+ Items: [
1605
+ {
1606
+ Title: 'Amazing Quality!',
1607
+ title: 'Amazing Quality!',
1608
+ Description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
1609
+ description: 'I\'ve been shopping here for years and the quality never disappoints. Fast shipping and excellent customer service too!',
1610
+ PersonName: 'Sarah Johnson',
1611
+ personName: 'Sarah Johnson',
1612
+ CompanyName: 'Verified Buyer',
1613
+ companyName: 'Verified Buyer',
1614
+ Rating: 5,
1615
+ rating: 5,
1616
+ ImageUrl: 'https://picsum.photos/seed/user1/100/100',
1617
+ imageUrl: 'https://picsum.photos/seed/user1/100/100'
1618
+ },
1619
+ {
1620
+ Title: 'Great Experience',
1621
+ title: 'Great Experience',
1622
+ Description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
1623
+ description: 'The customer service team went above and beyond to help me find exactly what I needed. Highly recommend!',
1624
+ PersonName: 'Michael Chen',
1625
+ personName: 'Michael Chen',
1626
+ CompanyName: 'Regular Customer',
1627
+ companyName: 'Regular Customer',
1628
+ Rating: 5,
1629
+ rating: 5,
1630
+ ImageUrl: 'https://picsum.photos/seed/user2/100/100',
1631
+ imageUrl: 'https://picsum.photos/seed/user2/100/100'
1632
+ },
1633
+ {
1634
+ Title: 'Will Shop Again',
1635
+ title: 'Will Shop Again',
1636
+ Description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
1637
+ description: 'Love the variety of products and the prices are very competitive. The website is easy to navigate too.',
1638
+ PersonName: 'Emily Davis',
1639
+ personName: 'Emily Davis',
1640
+ CompanyName: 'Fashion Enthusiast',
1641
+ companyName: 'Fashion Enthusiast',
1642
+ Rating: 5,
1643
+ rating: 5,
1644
+ ImageUrl: 'https://picsum.photos/seed/user3/100/100',
1645
+ imageUrl: 'https://picsum.photos/seed/user3/100/100'
1646
+ },
1647
+ {
1648
+ Title: 'Fast Delivery',
1649
+ title: 'Fast Delivery',
1650
+ Description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
1651
+ description: 'Ordered on Monday, received on Wednesday! The packaging was perfect and the product exceeded expectations.',
1652
+ PersonName: 'David Wilson',
1653
+ personName: 'David Wilson',
1654
+ CompanyName: 'Tech Reviewer',
1655
+ companyName: 'Tech Reviewer',
1656
+ Rating: 4,
1657
+ rating: 4,
1658
+ ImageUrl: 'https://picsum.photos/seed/user4/100/100',
1659
+ imageUrl: 'https://picsum.photos/seed/user4/100/100'
1660
+ }
1661
+ ]
1662
+ }
1663
+ },
1664
+ content: JSON.stringify({
1665
+ Items: [
1666
+ { Title: 'Amazing Quality!', Description: 'The quality never disappoints.', PersonName: 'Sarah Johnson', CompanyName: 'Verified Buyer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user1/100/100' },
1667
+ { Title: 'Great Experience', Description: 'Excellent customer service.', PersonName: 'Michael Chen', CompanyName: 'Regular Customer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user2/100/100' },
1668
+ { Title: 'Will Shop Again', Description: 'Love the variety.', PersonName: 'Emily Davis', CompanyName: 'Fashion Enthusiast', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user3/100/100' },
1669
+ { Title: 'Fast Delivery', Description: 'Quick and perfect packaging.', PersonName: 'David Wilson', CompanyName: 'Tech Reviewer', Rating: 4, ImageUrl: 'https://picsum.photos/seed/user4/100/100' }
1441
1670
  ]
1671
+ })
1672
+ },
1673
+
1674
+ // DiscountTime Widget (template expects data.couponValid and data.coupon at top level)
1675
+ {
1676
+ id: 'widget-discount-time-1',
1677
+ type: 'DiscountTime',
1678
+ section: 'content',
1679
+ sectionName: 'content',
1680
+ pageId: 'home',
1681
+ status: 'active',
1682
+ Position: 14,
1683
+ Title: 'Limited Time Offer',
1684
+ settings: {
1685
+ title: 'Limited Time Offer',
1686
+ textColor: '#ffffff',
1687
+ backgroundColor: '#1f2937',
1688
+ background_from: '#1f2937',
1689
+ background_to: '#111827',
1690
+ cta_label: 'Shop Now',
1691
+ cta_link: '/products',
1692
+ cta_background: '#ef4444',
1693
+ cta_text: '#ffffff'
1442
1694
  },
1443
- content: JSON.stringify([
1444
- { Title: 'Amazing Quality!', Description: 'The quality never disappoints.', PersonName: 'Sarah Johnson', CompanyName: 'Verified Buyer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user1/100/100' },
1445
- { Title: 'Great Experience', Description: 'Excellent customer service.', PersonName: 'Michael Chen', CompanyName: 'Regular Customer', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user2/100/100' },
1446
- { Title: 'Will Shop Again', Description: 'Love the variety.', PersonName: 'Emily Davis', CompanyName: 'Fashion Enthusiast', Rating: 5, ImageUrl: 'https://picsum.photos/seed/user3/100/100' },
1447
- { Title: 'Fast Delivery', Description: 'Quick and perfect packaging.', PersonName: 'David Wilson', CompanyName: 'Tech Reviewer', Rating: 4, ImageUrl: 'https://picsum.photos/seed/user4/100/100' }
1448
- ])
1695
+ data: {
1696
+ couponValid: true,
1697
+ coupon: {
1698
+ discountAmount: 25,
1699
+ couponCode: 'SAVE25',
1700
+ description: 'Get 25% off on all products! Limited time only.',
1701
+ endOn: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(),
1702
+ startOn: new Date().toISOString(),
1703
+ ruleToApply: 'by_percent',
1704
+ fileName: '',
1705
+ imageUrl: 'https://picsum.photos/seed/discount-banner/1200/400'
1706
+ }
1707
+ }
1449
1708
  },
1450
-
1451
- // ==================== FOOTER SECTION ====================
1709
+
1710
+ // Product Widget (uses product-grid shared template)
1452
1711
  {
1453
- id: 'widget-footer-1',
1454
- type: 'Footer',
1455
- section: 'footer',
1456
- sectionName: 'footer',
1457
- pageId: 'all',
1712
+ id: 'widget-product-1',
1713
+ type: 'Product',
1714
+ section: 'content',
1715
+ sectionName: 'content',
1716
+ pageId: 'home',
1458
1717
  status: 'active',
1459
- Position: 1,
1718
+ Position: 15,
1719
+ Title: 'Our Products',
1460
1720
  settings: {
1461
- showWidgetTitle: 'No',
1462
- showNewsletter: true,
1463
- showSocial: true
1721
+ title: 'Our Products',
1722
+ subtitle: 'Top picks for you',
1723
+ columns: 4,
1724
+ showWidgetTitle: 'Yes',
1725
+ widgetTitleAlignment: 'center',
1726
+ show_add_to_cart: true
1727
+ },
1728
+ data: {
1729
+ content: {
1730
+ products: [],
1731
+ Products: []
1732
+ },
1733
+ products: []
1734
+ }
1735
+ },
1736
+
1737
+ // ProductCanvas Widget
1738
+ {
1739
+ id: 'widget-product-canvas-1',
1740
+ type: 'ProductCanvas',
1741
+ section: 'content',
1742
+ sectionName: 'content',
1743
+ pageId: 'home',
1744
+ status: 'active',
1745
+ Position: 16,
1746
+ Title: 'Shop the Look',
1747
+ settings: {
1748
+ title: 'Shop the Look',
1749
+ showContainer: 'Yes',
1750
+ showWidgetBottomMargin: 'Yes',
1751
+ backgroundColor: '#f9fafb'
1464
1752
  },
1465
1753
  data: {
1466
1754
  content: {
1467
- columns: [
1755
+ ImageUrl: 'https://picsum.photos/seed/canvas-main/1200/600',
1756
+ imageUrl: 'https://picsum.photos/seed/canvas-main/1200/600',
1757
+ ShowContainer: 'Yes',
1758
+ ShowWidgetBottomMargin: 'Yes',
1759
+ Items: [
1760
+ { X: 25, Y: 30, x: 25, y: 30, TargetUrl: '/products', targetUrl: '/products', Url: '/products', url: '/products' },
1761
+ { X: 55, Y: 45, x: 55, y: 45, TargetUrl: '/products', targetUrl: '/products', Url: '/products', url: '/products' },
1762
+ { X: 75, Y: 60, x: 75, y: 60, TargetUrl: '/products', targetUrl: '/products', Url: '/products', url: '/products' }
1763
+ ]
1764
+ }
1765
+ }
1766
+ },
1767
+
1768
+ // SpaceBarCarousel Widget
1769
+ {
1770
+ id: 'widget-spacebar-carousel-1',
1771
+ type: 'SpaceBarCarousel',
1772
+ section: 'content',
1773
+ sectionName: 'content',
1774
+ pageId: 'home',
1775
+ status: 'active',
1776
+ Position: 18,
1777
+ Title: 'Why Shop With Us',
1778
+ settings: {
1779
+ title: 'Why Shop With Us',
1780
+ subtitle: 'We deliver excellence',
1781
+ showWidgetTitle: 'Yes',
1782
+ widgetTitleAlignment: 'center',
1783
+ backgroundColor: '#f8f9fa',
1784
+ textColor: '#111',
1785
+ hideDot: false,
1786
+ hideArrow: false,
1787
+ priorityCount: 4
1788
+ },
1789
+ data: {
1790
+ content: {
1791
+ Items: [
1468
1792
  {
1469
- Title: 'About Us',
1470
- title: 'About Us',
1471
- Links: [
1472
- { Text: 'Our Story', text: 'Our Story', Url: '/pages/about', url: '/pages/about' },
1473
- { Text: 'Careers', text: 'Careers', Url: '/pages/careers', url: '/pages/careers' },
1474
- { Text: 'Press', text: 'Press', Url: '/pages/press', url: '/pages/press' }
1475
- ],
1476
- links: [
1477
- { text: 'Our Story', url: '/pages/about' },
1478
- { text: 'Careers', url: '/pages/careers' },
1479
- { text: 'Press', url: '/pages/press' }
1480
- ]
1793
+ Title: 'Free Shipping', title: 'Free Shipping',
1794
+ Description: 'On orders over $50', description: 'On orders over $50',
1795
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="1" y="3" width="15" height="13"></rect><polygon points="16 8 20 8 23 11 23 16 16 16 16 8"></polygon><circle cx="5.5" cy="18.5" r="2.5"></circle><circle cx="18.5" cy="18.5" r="2.5"></circle></svg>',
1796
+ ImageUrl: 'https://picsum.photos/seed/feat-ship/100/100', imageUrl: 'https://picsum.photos/seed/feat-ship/100/100',
1797
+ Link: '/shipping-info', link: '/shipping-info'
1481
1798
  },
1482
1799
  {
1483
- Title: 'Customer Service',
1484
- title: 'Customer Service',
1485
- Links: [
1486
- { Text: 'Contact Us', text: 'Contact Us', Url: '/pages/contact', url: '/pages/contact' },
1487
- { Text: 'FAQs', text: 'FAQs', Url: '/pages/faq', url: '/pages/faq' },
1488
- { Text: 'Returns', text: 'Returns', Url: '/pages/returns', url: '/pages/returns' }
1489
- ],
1490
- links: [
1491
- { text: 'Contact Us', url: '/pages/contact' },
1492
- { text: 'FAQs', url: '/pages/faq' },
1493
- { text: 'Returns', url: '/pages/returns' }
1494
- ]
1800
+ Title: '24/7 Support', title: '24/7 Support',
1801
+ Description: 'Dedicated support team', description: 'Dedicated support team',
1802
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><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"></path></svg>',
1803
+ ImageUrl: 'https://picsum.photos/seed/feat-support/100/100', imageUrl: 'https://picsum.photos/seed/feat-support/100/100',
1804
+ Link: '/contact', link: '/contact'
1495
1805
  },
1496
1806
  {
1497
- Title: 'Legal',
1498
- title: 'Legal',
1499
- Links: [
1500
- { Text: 'Privacy Policy', text: 'Privacy Policy', Url: '/pages/privacy', url: '/pages/privacy' },
1501
- { Text: 'Terms of Service', text: 'Terms of Service', Url: '/pages/terms', url: '/pages/terms' },
1502
- { Text: 'Shipping Policy', text: 'Shipping Policy', Url: '/pages/shipping', url: '/pages/shipping' }
1503
- ],
1504
- links: [
1505
- { text: 'Privacy Policy', url: '/pages/privacy' },
1506
- { text: 'Terms of Service', url: '/pages/terms' },
1507
- { text: 'Shipping Policy', url: '/pages/shipping' }
1508
- ]
1807
+ Title: 'Secure Payment', title: 'Secure Payment',
1808
+ Description: '100% secure checkout', description: '100% secure checkout',
1809
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>',
1810
+ ImageUrl: 'https://picsum.photos/seed/feat-secure/100/100', imageUrl: 'https://picsum.photos/seed/feat-secure/100/100',
1811
+ Link: '/security', link: '/security'
1812
+ },
1813
+ {
1814
+ Title: 'Easy Returns', title: 'Easy Returns',
1815
+ Description: '30-day return policy', description: '30-day return policy',
1816
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="1 4 1 10 7 10"></polyline><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"></path></svg>',
1817
+ ImageUrl: 'https://picsum.photos/seed/feat-return/100/100', imageUrl: 'https://picsum.photos/seed/feat-return/100/100',
1818
+ Link: '/returns', link: '/returns'
1819
+ },
1820
+ {
1821
+ Title: 'Loyalty Rewards', title: 'Loyalty Rewards',
1822
+ Description: 'Earn points on every purchase', description: 'Earn points on every purchase',
1823
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="8" r="7"></circle><polyline points="8.21 13.89 7 23 12 20 17 23 15.79 13.88"></polyline></svg>',
1824
+ ImageUrl: 'https://picsum.photos/seed/feat-loyalty/100/100', imageUrl: 'https://picsum.photos/seed/feat-loyalty/100/100',
1825
+ Link: '/loyalty', link: '/loyalty'
1826
+ },
1827
+ {
1828
+ Title: 'Quality Assured', title: 'Quality Assured',
1829
+ Description: 'Premium products guaranteed', description: 'Premium products guaranteed',
1830
+ IconHtml: '<svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>',
1831
+ ImageUrl: 'https://picsum.photos/seed/feat-quality/100/100', imageUrl: 'https://picsum.photos/seed/feat-quality/100/100',
1832
+ Link: '/about', link: '/about'
1509
1833
  }
1834
+ ]
1835
+ }
1836
+ }
1837
+ },
1838
+ {
1839
+ id: 'widget-news-1',
1840
+ type: 'News',
1841
+ section: 'content',
1842
+ sectionName: 'content',
1843
+ pageId: 'home',
1844
+ status: 'active',
1845
+ Position: 19,
1846
+ Title: 'Latest News',
1847
+ settings: {
1848
+ title: 'Latest News',
1849
+ showWidgetTitle: 'Yes',
1850
+ widgetTitleAlignment: 'center',
1851
+ showGridView: true,
1852
+ backgroundColor: '#ffffff',
1853
+ textColor: '#111111'
1854
+ },
1855
+ data: {
1856
+ content: {
1857
+ items: [
1858
+ { id: 1, title: 'Welcome to Our Store', slug: 'welcome', excerpt: 'Learn about our new collection and special offers.', thumbnailImage: { url: 'https://picsum.photos/seed/n1/400/220' }, publishedAt: new Date().toISOString() },
1859
+ { id: 2, title: 'Summer Sale 2025', slug: 'summer-sale', excerpt: 'Up to 50% off on selected items.', thumbnailImage: { url: 'https://picsum.photos/seed/n2/400/220' }, publishedAt: new Date().toISOString() },
1860
+ { id: 3, title: 'New Arrivals', slug: 'new-arrivals', excerpt: 'Check out the latest products in our catalog.', thumbnailImage: { url: 'https://picsum.photos/seed/n3/400/220' }, publishedAt: new Date().toISOString() },
1861
+ { id: 4, title: 'Tips & Guides', slug: 'tips-guides', excerpt: 'How to get the most from your purchase.', thumbnailImage: { url: 'https://picsum.photos/seed/n4/400/220' }, publishedAt: new Date().toISOString() }
1510
1862
  ],
1511
- socialLinks: [
1512
- { Platform: 'facebook', platform: 'facebook', Url: 'https://facebook.com', url: 'https://facebook.com' },
1513
- { Platform: 'twitter', platform: 'twitter', Url: 'https://twitter.com', url: 'https://twitter.com' },
1514
- { Platform: 'instagram', platform: 'instagram', Url: 'https://instagram.com', url: 'https://instagram.com' },
1515
- { Platform: 'youtube', platform: 'youtube', Url: 'https://youtube.com', url: 'https://youtube.com' }
1863
+ Items: [
1864
+ { id: 1, Title: 'Welcome to Our Store', slug: 'welcome', Excerpt: 'Learn about our new collection and special offers.', ThumbnailImage: { url: 'https://picsum.photos/seed/n1/400/220' }, PublishedAt: new Date().toISOString() },
1865
+ { id: 2, Title: 'Summer Sale 2025', slug: 'summer-sale', Excerpt: 'Up to 50% off on selected items.', ThumbnailImage: { url: 'https://picsum.photos/seed/n2/400/220' }, PublishedAt: new Date().toISOString() },
1866
+ { id: 3, Title: 'New Arrivals', slug: 'new-arrivals', Excerpt: 'Check out the latest products in our catalog.', ThumbnailImage: { url: 'https://picsum.photos/seed/n3/400/220' }, PublishedAt: new Date().toISOString() },
1867
+ { id: 4, Title: 'Tips & Guides', slug: 'tips-guides', Excerpt: 'How to get the most from your purchase.', ThumbnailImage: { url: 'https://picsum.photos/seed/n4/400/220' }, PublishedAt: new Date().toISOString() }
1516
1868
  ]
1517
1869
  }
1518
1870
  }
1519
1871
  },
1872
+
1873
+ // ==================== FOOTER SECTION ====================
1520
1874
  {
1521
1875
  id: 'widget-footer-menu-1',
1522
1876
  type: 'FooterMenu',