@o2vend/theme-cli 1.0.37 → 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 (89) hide show
  1. package/lib/lib/dev-server.js +309 -40
  2. package/lib/lib/liquid-engine.js +3 -1
  3. package/lib/lib/mock-data.js +36 -124
  4. package/lib/lib/widget-service.js +12 -4
  5. package/package.json +1 -1
  6. package/test-theme/assets/async-sections.js +32 -24
  7. package/test-theme/assets/cart-drawer.js +20 -22
  8. package/test-theme/assets/cart-manager.js +1 -15
  9. package/test-theme/assets/checkout-price-handler.js +12 -11
  10. package/test-theme/assets/checkout.css +1415 -0
  11. package/test-theme/assets/checkout.js +3174 -0
  12. package/test-theme/assets/components.css +178 -29
  13. package/test-theme/assets/delivery-zone.js +1 -1
  14. package/test-theme/assets/product-detail.css +1050 -0
  15. package/test-theme/assets/product-detail.js +2940 -0
  16. package/test-theme/assets/theme.css +95 -120
  17. package/test-theme/assets/theme.js +781 -186
  18. package/test-theme/layout/theme.liquid +91 -17
  19. package/test-theme/sections/content.liquid +64 -57
  20. package/test-theme/sections/footer-fallback.liquid +57 -7
  21. package/test-theme/sections/footer.liquid +63 -12
  22. package/test-theme/sections/header-fallback.liquid +41 -41
  23. package/test-theme/sections/header.liquid +41 -51
  24. package/test-theme/sections/hero-fallback.liquid +1 -1
  25. package/test-theme/sections/hero.liquid +159 -136
  26. package/test-theme/snippets/account-sidebar.liquid +121 -29
  27. package/test-theme/snippets/add-to-cart-modal.liquid +258 -206
  28. package/test-theme/snippets/breadcrumbs.liquid +98 -11
  29. package/test-theme/snippets/cart-drawer.liquid +93 -0
  30. package/test-theme/snippets/delivery-zone-city-selector.liquid +101 -15
  31. package/test-theme/snippets/delivery-zone-modal.liquid +529 -84
  32. package/test-theme/snippets/delivery-zone-search.liquid +104 -18
  33. package/test-theme/snippets/login-modal.liquid +269 -82
  34. package/test-theme/snippets/mega-menu.liquid +130 -43
  35. package/test-theme/snippets/news-thumbnail.liquid +120 -28
  36. package/test-theme/snippets/pagination.liquid +1 -1
  37. package/test-theme/snippets/price.liquid +100 -9
  38. package/test-theme/snippets/product-card-related.liquid +22 -4
  39. package/test-theme/snippets/product-card-simple.liquid +521 -25
  40. package/test-theme/snippets/product-card.liquid +145 -232
  41. package/test-theme/snippets/rating.liquid +100 -9
  42. package/test-theme/snippets/skeleton-collection-grid.liquid +94 -8
  43. package/test-theme/snippets/skeleton-product-card.liquid +102 -16
  44. package/test-theme/snippets/skeleton-product-grid.liquid +87 -1
  45. package/test-theme/snippets/social-sharing.liquid +133 -32
  46. package/test-theme/templates/account/dashboard.liquid +30 -0
  47. package/test-theme/templates/account/loyalty-redemption.liquid +29 -28
  48. package/test-theme/templates/account/loyalty.liquid +45 -43
  49. package/test-theme/templates/account/order-detail.liquid +15 -8
  50. package/test-theme/templates/account/orders.liquid +189 -35
  51. package/test-theme/templates/account/profile.liquid +509 -114
  52. package/test-theme/templates/account/register.liquid +18 -8
  53. package/test-theme/templates/account/return-orders.liquid +31 -30
  54. package/test-theme/templates/account/store-credit.liquid +27 -26
  55. package/test-theme/templates/account/subscriptions.liquid +22 -5
  56. package/test-theme/templates/account/wishlist.liquid +88 -19
  57. package/test-theme/templates/address-book.liquid +166 -69
  58. package/test-theme/templates/categories.liquid +90 -30
  59. package/test-theme/templates/checkout.liquid +137 -3834
  60. package/test-theme/templates/error.liquid +23 -21
  61. package/test-theme/templates/index.liquid +29 -0
  62. package/test-theme/templates/login.liquid +33 -6
  63. package/test-theme/templates/order-confirmation.liquid +67 -9
  64. package/test-theme/templates/page.liquid +418 -206
  65. package/test-theme/templates/product-detail.liquid +124 -3878
  66. package/test-theme/templates/products.liquid +155 -30
  67. package/test-theme/templates/search.liquid +739 -225
  68. package/test-theme/widgets/brand-carousel.liquid +102 -82
  69. package/test-theme/widgets/brand.liquid +78 -50
  70. package/test-theme/widgets/carousel.liquid +253 -121
  71. package/test-theme/widgets/category-list-carousel.liquid +32 -8
  72. package/test-theme/widgets/category-list.liquid +21 -6
  73. package/test-theme/widgets/category.liquid +104 -37
  74. package/test-theme/widgets/discount-time.liquid +326 -119
  75. package/test-theme/widgets/footer-menu.liquid +115 -23
  76. package/test-theme/widgets/footer.liquid +118 -5
  77. package/test-theme/widgets/gallery.liquid +29 -5
  78. package/test-theme/widgets/header-menu.liquid +25 -13
  79. package/test-theme/widgets/header.liquid +64 -26
  80. package/test-theme/widgets/html.liquid +29 -6
  81. package/test-theme/widgets/news.liquid +6 -0
  82. package/test-theme/widgets/product-canvas.liquid +20 -12
  83. package/test-theme/widgets/product-carousel.liquid +118 -56
  84. package/test-theme/widgets/shared/product-grid.liquid +12 -0
  85. package/test-theme/widgets/single-product.liquid +688 -250
  86. package/test-theme/widgets/spacebar-carousel.liquid +39 -10
  87. package/test-theme/widgets/spacebar.liquid +77 -6
  88. package/test-theme/widgets/splash.liquid +40 -30
  89. package/test-theme/widgets/testimonial-carousel.liquid +111 -67
@@ -69,27 +69,29 @@
69
69
  </div>
70
70
 
71
71
  <style>
72
- /* CSS Variables - Default Theme Colors */
72
+ /* Template-level variable mappings to global theme variables */
73
73
  :root {
74
- --color-primary: #000000;
75
- --color-secondary: #6b7280;
74
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
75
+ --color-secondary: {{ settings.color_secondary | default: '#666666' }};
76
76
  --color-white: #ffffff;
77
- --color-gray-50: #f9fafb;
78
- --color-gray-100: #f3f4f6;
79
- --color-gray-200: #e5e7eb;
80
- --color-gray-300: #d1d5db;
81
- --color-gray-400: #9ca3af;
82
- --color-gray-500: #6b7280;
83
- --color-gray-600: #4b5563;
84
- --color-gray-700: #374151;
85
- --color-gray-800: #1f2937;
86
- --color-gray-900: #111827;
87
- --font-primary: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
88
- --font-display: 'Playfair Display', Georgia, serif;
89
- --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
90
- --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
91
- --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
92
- --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
77
+ --color-gray-50: {{ settings.color_surface | default: '#f5f5f5' }};
78
+ --color-gray-100: {{ settings.color_surface | default: '#f5f5f5' }};
79
+ --color-gray-200: {{ settings.color_border | default: '#cccccc' }};
80
+ --color-gray-300: {{ settings.color_border | default: '#cccccc' }};
81
+ --color-gray-400: {{ settings.color_text_muted | default: '#666666' }};
82
+ --color-gray-500: {{ settings.color_text_muted | default: '#666666' }};
83
+ --color-gray-600: {{ settings.color_text_muted | default: '#666666' }};
84
+ --color-gray-700: {{ settings.color_text | default: '#000000' }};
85
+ --color-gray-800: {{ settings.color_text | default: '#000000' }};
86
+ --color-gray-900: {{ settings.color_text | default: '#000000' }};
87
+ --font-primary: {{ settings.font_primary | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
88
+ --font-heading: {{ settings.font_heading | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
89
+ --font-display: {{ settings.font_display | default: '' }}, 'Georgia', 'Times New Roman', serif;
90
+ --font-body: {{ settings.font_body | default: '' }}, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Helvetica Neue', Arial, sans-serif;
91
+ --shadow-sm: var(--shadow-sm);
92
+ --shadow: var(--shadow);
93
+ --shadow-md: var(--shadow-md);
94
+ --shadow-lg: var(--shadow-lg);
93
95
  }
94
96
 
95
97
  * {
@@ -358,14 +360,14 @@
358
360
 
359
361
  <script>
360
362
  // Wait for DOM to be ready
361
- (function() {
363
+ (() => {
362
364
  'use strict';
363
365
 
364
366
  function initErrorPage() {
365
367
  const retryButton = document.getElementById('retry-button');
366
368
 
367
369
  if (retryButton) {
368
- retryButton.addEventListener('click', function() {
370
+ retryButton.addEventListener('click', () => {
369
371
  // Reload the page
370
372
  window.location.reload();
371
373
  });
@@ -4,6 +4,35 @@
4
4
  Uses sections for better customization and widget support
5
5
  {% endcomment %}
6
6
 
7
+ <!-- Template-level variable mappings to global theme variables -->
8
+ <style>
9
+ :root {
10
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
11
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
12
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
13
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
14
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
15
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
16
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
17
+ --color-text: {{ settings.color_text | default: '#000000' }};
18
+ --color-text-light: {{ settings.color_text_muted | default: '#666666' }};
19
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
20
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
21
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
22
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
23
+ --shadow-sm: var(--shadow-sm);
24
+ --shadow-md: var(--shadow-md);
25
+ --shadow-lg: var(--shadow-lg);
26
+ --radius-md: var(--radius-md);
27
+ --radius-lg: var(--radius-lg);
28
+ --spacing-xs: var(--space-3);
29
+ --spacing-sm: var(--space-4);
30
+ --spacing-md: var(--space-6);
31
+ --spacing-lg: var(--space-8);
32
+ --spacing-xl: var(--space-12);
33
+ }
34
+ </style>
35
+
7
36
  <!-- Hero Section -->
8
37
  {% section 'sections/hero' %}
9
38
 
@@ -61,6 +61,33 @@
61
61
  </div>
62
62
 
63
63
  <style>
64
+ /* Template-level variable mappings to global theme variables */
65
+ :root {
66
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
67
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
68
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
69
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
70
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
71
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
72
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
73
+ --color-text: {{ settings.color_text | default: '#000000' }};
74
+ --color-text-light: {{ settings.color_text_muted | default: '#666666' }};
75
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
76
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
77
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
78
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
79
+ --shadow-sm: var(--shadow-sm);
80
+ --shadow-md: var(--shadow-md);
81
+ --shadow-lg: var(--shadow-lg);
82
+ --radius-md: var(--radius-md);
83
+ --radius-lg: var(--radius-lg);
84
+ --spacing-xs: var(--space-3);
85
+ --spacing-sm: var(--space-4);
86
+ --spacing-md: var(--space-6);
87
+ --spacing-lg: var(--space-8);
88
+ --spacing-xl: var(--space-12);
89
+ }
90
+
64
91
  .customer-login {
65
92
  min-height: 60vh;
66
93
  display: flex;
@@ -117,10 +144,10 @@
117
144
  color: {{ settings.color_text }};
118
145
  }
119
146
 
120
- .form-input {
147
+ .form-input {
121
148
  width: 100%;
122
149
  padding: 0.75rem 1rem;
123
- border: 1px solid #d1d5db;
150
+ border: 1px solid var(--color-border);
124
151
  border-radius: 0.375rem;
125
152
  font-size: 1rem;
126
153
  transition: border-color 0.2s ease;
@@ -149,15 +176,15 @@
149
176
  }
150
177
 
151
178
  .form-errors {
152
- background: #fee2e2;
153
- border: 1px solid #fecaca;
179
+ background: var(--color-danger-light);
180
+ border: 1px solid var(--color-error);
154
181
  border-radius: 0.375rem;
155
182
  padding: 1rem;
156
183
  margin-bottom: 1.5rem;
157
184
  }
158
185
 
159
186
  .form-error {
160
- color: #991b1b;
187
+ color: var(--color-error);
161
188
  margin: 0;
162
189
  font-size: 0.875rem;
163
190
  }
@@ -170,7 +197,7 @@
170
197
  text-align: center;
171
198
  margin-top: 1.5rem;
172
199
  padding-top: 1.5rem;
173
- border-top: 1px solid #e5e7eb;
200
+ border-top: 1px solid var(--color-border);
174
201
  }
175
202
 
176
203
  .customer-login-footer a {
@@ -1,5 +1,33 @@
1
1
  {% layout 'layout/theme' %}
2
2
 
3
+ <style>
4
+ :root {
5
+ --color-primary: {{ settings.color_primary | default: '#000000' }};
6
+ --color-primary-hover: {{ settings.color_primary_dark | default: '#333333' }};
7
+ --color-primary-light: {{ settings.color_primary_light | default: '#666666' }};
8
+ --color-success: {{ settings.color_success | default: '#22c55e' }};
9
+ --color-success-light: {{ settings.color_success | default: '#22c55e' }};
10
+ --color-danger: {{ settings.color_error | default: '#ef4444' }};
11
+ --color-danger-light: {{ settings.color_error | default: '#ef4444' }};
12
+ --color-text: {{ settings.color_text | default: '#000000' }};
13
+ --color-text-light: {{ settings.color_text_muted | default: '#666666' }};
14
+ --color-background: {{ settings.color_background | default: '#ffffff' }};
15
+ --color-card-bg: {{ settings.color_surface | default: '#f5f5f5' }};
16
+ --color-border: {{ settings.color_border | default: '#cccccc' }};
17
+ --color-border-light: {{ settings.color_surface | default: '#f5f5f5' }};
18
+ --shadow-sm: var(--shadow-sm);
19
+ --shadow-md: var(--shadow-md);
20
+ --shadow-lg: var(--shadow-lg);
21
+ --radius-md: var(--radius-md);
22
+ --radius-lg: var(--radius-lg);
23
+ --spacing-xs: var(--space-3);
24
+ --spacing-sm: var(--space-4);
25
+ --spacing-md: var(--space-6);
26
+ --spacing-lg: var(--space-8);
27
+ --spacing-xl: var(--space-12);
28
+ }
29
+ </style>
30
+
3
31
  <section class="order-confirmation-page">
4
32
  <div class="container">
5
33
 
@@ -20,7 +48,7 @@
20
48
  <strong>#{{ order.orderNumber }}</strong>
21
49
  </div>
22
50
  <div class="order-info">
23
- <div><i class="far fa-calendar"></i> {{ order.createdAt | date: '%d-%m-%Y %H:%M' }}</div>
51
+ <div><i class="far fa-calendar"></i> {{ order.createdAt | date: '%d-%m-%Y' }}</div>
24
52
  <div><span class="status-badge status-{{ order.status | downcase | replace: ' ', '-' }}">{{ order.status }}</span></div>
25
53
  </div>
26
54
  {% endif %}
@@ -120,10 +148,13 @@
120
148
  <div class="summary-row"><span>Discount{% if orderItem.couponCode %} ({{ orderItem.couponCode }}){% endif %}</span><span>-{{ orderItem.discount | money_with_settings: shop.settings }}</span></div>
121
149
  {% endif %}
122
150
  <div class="summary-row"><span>Shipping</span><span>{% if orderItem.shipping > 0 %}{{ orderItem.shipping | money_with_settings: shop.settings }}{% else %}FREE{% endif %}</span></div>
151
+ {% if orderItem.paymentFeeAmount and orderItem.paymentFeeAmount > 0 %}
152
+ <div class="summary-row"><span>Payment Fee</span><span>{{ orderItem.paymentFeeAmount | money_with_settings: shop.settings }}</span></div>
153
+ {% endif %}
123
154
  <div class="summary-row"><span>Tax</span><span>{{ orderItem.tax | money_with_settings: shop.settings }}</span></div>
124
155
  <div class="summary-row total-row"><strong>Total</strong><strong>{{ orderItem.total | money_with_settings: shop.settings }}</strong></div>
125
156
  </div>
126
- <div class="payment-method"><span>Payment:</span> <strong>{{ orderItem.paymentMethod | default: 'Online Payment' }}</strong></div>
157
+ <div class="payment-method"><span>Payment:</span> <strong>{{ orderItem.paymentMethod | default: 'Cash on Delivery' }}</strong></div>
127
158
  </div>
128
159
  </aside>
129
160
  </div>
@@ -237,10 +268,13 @@
237
268
  <div class="summary-row"><span>Discount{% if order.couponCode %} ({{ order.couponCode }}){% endif %}</span><span>-{{ order.discount | money_with_settings: shop.settings }}</span></div>
238
269
  {% endif %}
239
270
  <div class="summary-row"><span>Shipping</span><span>{% if order.shipping > 0 %}{{ order.shipping | money_with_settings: shop.settings }}{% else %}FREE{% endif %}</span></div>
271
+ {% if order.paymentFeeAmount and order.paymentFeeAmount > 0 %}
272
+ <div class="summary-row"><span>Payment Fee</span><span>{{ order.paymentFeeAmount | money_with_settings: shop.settings }}</span></div>
273
+ {% endif %}
240
274
  <div class="summary-row"><span>Tax</span><span>{{ order.tax | money_with_settings: shop.settings }}</span></div>
241
275
  <div class="summary-row total-row"><strong>Total</strong><strong>{{ order.total | money_with_settings: shop.settings }}</strong></div>
242
276
  </div>
243
- <div class="payment-method"><span>Payment:</span> <strong>{{ order.paymentMethod | default: 'Online Payment' }}</strong></div>
277
+ <div class="payment-method"><span>Payment:</span> <strong>{{ order.paymentMethod | default: 'Cash on Delivery' }}</strong></div>
244
278
  </div>
245
279
  </aside>
246
280
  </div>
@@ -512,11 +546,12 @@ body {
512
546
 
513
547
  .order-item {
514
548
  display: grid;
515
- grid-template-columns: 80px 1fr auto;
549
+ grid-template-columns: 80px minmax(0, 1fr) auto;
516
550
  gap: 16px;
517
551
  background: #f9fafb;
518
552
  padding: 16px;
519
553
  border-radius: 8px;
554
+ align-items: center;
520
555
  }
521
556
 
522
557
  .item-image {
@@ -547,6 +582,7 @@ body {
547
582
  font-weight: 600;
548
583
  margin: 0 0 6px;
549
584
  color: #111;
585
+ overflow-wrap: anywhere;
550
586
  }
551
587
 
552
588
  .item-info div {
@@ -557,9 +593,12 @@ body {
557
593
  .item-total {
558
594
  display: flex;
559
595
  align-items: center;
596
+ justify-content: flex-end;
560
597
  font-size: 15px;
561
598
  font-weight: 700;
562
599
  color: #111;
600
+ white-space: nowrap;
601
+ text-align: right;
563
602
  }
564
603
 
565
604
  /* =========================================================
@@ -694,12 +733,14 @@ body {
694
733
 
695
734
  @media (max-width: 768px) {
696
735
  .order-item {
697
- grid-template-columns: 60px 1fr;
736
+ grid-template-columns: 60px minmax(0, 1fr) auto;
737
+ gap: 12px;
698
738
  }
699
739
  .item-total {
700
- grid-column: 2;
701
- margin-top: 6px;
702
- justify-content: flex-start;
740
+ grid-column: 3;
741
+ margin-top: 0;
742
+ justify-content: flex-end;
743
+ align-self: center;
703
744
  }
704
745
  .action-buttons {
705
746
  flex-direction: column;
@@ -717,4 +758,21 @@ body {
717
758
  padding: 10px 20px;
718
759
  }
719
760
  }
720
- </style>
761
+
762
+ @media (max-width: 480px) {
763
+ .order-item {
764
+ grid-template-columns: 52px minmax(0, 1fr);
765
+ }
766
+
767
+ .item-image {
768
+ width: 52px;
769
+ height: 52px;
770
+ }
771
+
772
+ .item-total {
773
+ grid-column: 2;
774
+ justify-content: flex-start;
775
+ margin-top: 4px;
776
+ }
777
+ }
778
+ </style>