@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.
Files changed (116) hide show
  1. package/README.md +425 -0
  2. package/assets/Logo_o2vend.png +0 -0
  3. package/assets/favicon.png +0 -0
  4. package/assets/logo-white.png +0 -0
  5. package/bin/o2vend +42 -0
  6. package/config/widget-map.json +50 -0
  7. package/lib/commands/check.js +201 -0
  8. package/lib/commands/generate.js +33 -0
  9. package/lib/commands/init.js +214 -0
  10. package/lib/commands/optimize.js +216 -0
  11. package/lib/commands/package.js +208 -0
  12. package/lib/commands/serve.js +105 -0
  13. package/lib/commands/validate.js +191 -0
  14. package/lib/lib/api-client.js +357 -0
  15. package/lib/lib/dev-server.js +2618 -0
  16. package/lib/lib/file-watcher.js +80 -0
  17. package/lib/lib/hot-reload.js +106 -0
  18. package/lib/lib/liquid-engine.js +822 -0
  19. package/lib/lib/liquid-filters.js +671 -0
  20. package/lib/lib/mock-api-server.js +989 -0
  21. package/lib/lib/mock-data.js +1468 -0
  22. package/lib/lib/widget-service.js +321 -0
  23. package/package.json +70 -0
  24. package/test-theme/README.md +27 -0
  25. package/test-theme/assets/async-sections.js +446 -0
  26. package/test-theme/assets/cart-drawer.js +463 -0
  27. package/test-theme/assets/cart-manager.js +223 -0
  28. package/test-theme/assets/checkout-price-handler.js +368 -0
  29. package/test-theme/assets/components.css +4629 -0
  30. package/test-theme/assets/delivery-zone.css +299 -0
  31. package/test-theme/assets/delivery-zone.js +396 -0
  32. package/test-theme/assets/logo.png +0 -0
  33. package/test-theme/assets/sections.css +48 -0
  34. package/test-theme/assets/theme.css +3500 -0
  35. package/test-theme/assets/theme.js +3745 -0
  36. package/test-theme/config/settings_data.json +292 -0
  37. package/test-theme/config/settings_schema.json +1050 -0
  38. package/test-theme/layout/theme.liquid +195 -0
  39. package/test-theme/locales/en.default.json +260 -0
  40. package/test-theme/sections/content-fallback.liquid +53 -0
  41. package/test-theme/sections/content.liquid +57 -0
  42. package/test-theme/sections/footer-fallback.liquid +328 -0
  43. package/test-theme/sections/footer.liquid +278 -0
  44. package/test-theme/sections/header-fallback.liquid +1805 -0
  45. package/test-theme/sections/header.liquid +1145 -0
  46. package/test-theme/sections/hero-fallback.liquid +212 -0
  47. package/test-theme/sections/hero.liquid +136 -0
  48. package/test-theme/snippets/account-sidebar.liquid +200 -0
  49. package/test-theme/snippets/add-to-cart-modal.liquid +484 -0
  50. package/test-theme/snippets/breadcrumbs.liquid +134 -0
  51. package/test-theme/snippets/cart-drawer.liquid +467 -0
  52. package/test-theme/snippets/delivery-zone-city-selector.liquid +79 -0
  53. package/test-theme/snippets/delivery-zone-modal.liquid +337 -0
  54. package/test-theme/snippets/delivery-zone-search.liquid +78 -0
  55. package/test-theme/snippets/icon.liquid +105 -0
  56. package/test-theme/snippets/login-modal.liquid +346 -0
  57. package/test-theme/snippets/mega-menu.liquid +812 -0
  58. package/test-theme/snippets/news-thumbnail.liquid +187 -0
  59. package/test-theme/snippets/pagination.liquid +120 -0
  60. package/test-theme/snippets/price.liquid +92 -0
  61. package/test-theme/snippets/product-card-related.liquid +78 -0
  62. package/test-theme/snippets/product-card-simple.liquid +41 -0
  63. package/test-theme/snippets/product-card.liquid +697 -0
  64. package/test-theme/snippets/rating.liquid +85 -0
  65. package/test-theme/snippets/skeleton-collection-grid.liquid +114 -0
  66. package/test-theme/snippets/skeleton-product-card.liquid +124 -0
  67. package/test-theme/snippets/skeleton-product-grid.liquid +34 -0
  68. package/test-theme/snippets/social-sharing.liquid +185 -0
  69. package/test-theme/templates/account/dashboard.liquid +401 -0
  70. package/test-theme/templates/account/loyalty-redemption.liquid +405 -0
  71. package/test-theme/templates/account/loyalty.liquid +588 -0
  72. package/test-theme/templates/account/order-detail.liquid +230 -0
  73. package/test-theme/templates/account/orders.liquid +349 -0
  74. package/test-theme/templates/account/profile.liquid +758 -0
  75. package/test-theme/templates/account/register.liquid +232 -0
  76. package/test-theme/templates/account/return-orders.liquid +348 -0
  77. package/test-theme/templates/account/store-credit.liquid +464 -0
  78. package/test-theme/templates/account/subscriptions.liquid +601 -0
  79. package/test-theme/templates/account/wishlist.liquid +419 -0
  80. package/test-theme/templates/address-book.liquid +1092 -0
  81. package/test-theme/templates/categories.liquid +452 -0
  82. package/test-theme/templates/checkout.liquid +4511 -0
  83. package/test-theme/templates/error.liquid +384 -0
  84. package/test-theme/templates/index.liquid +11 -0
  85. package/test-theme/templates/login.liquid +185 -0
  86. package/test-theme/templates/order-confirmation.liquid +720 -0
  87. package/test-theme/templates/page.liquid +297 -0
  88. package/test-theme/templates/product-detail.liquid +4363 -0
  89. package/test-theme/templates/products.liquid +518 -0
  90. package/test-theme/templates/search.liquid +922 -0
  91. package/test-theme/theme.json.example +19 -0
  92. package/test-theme/widgets/brand-carousel.liquid +676 -0
  93. package/test-theme/widgets/brand.liquid +245 -0
  94. package/test-theme/widgets/carousel.liquid +843 -0
  95. package/test-theme/widgets/category-list-carousel.liquid +656 -0
  96. package/test-theme/widgets/category-list.liquid +340 -0
  97. package/test-theme/widgets/category.liquid +475 -0
  98. package/test-theme/widgets/discount-time.liquid +176 -0
  99. package/test-theme/widgets/footer-menu.liquid +695 -0
  100. package/test-theme/widgets/footer.liquid +179 -0
  101. package/test-theme/widgets/gallery.liquid +271 -0
  102. package/test-theme/widgets/header-menu.liquid +932 -0
  103. package/test-theme/widgets/header.liquid +159 -0
  104. package/test-theme/widgets/html.liquid +214 -0
  105. package/test-theme/widgets/news.liquid +217 -0
  106. package/test-theme/widgets/product-canvas.liquid +235 -0
  107. package/test-theme/widgets/product-carousel.liquid +502 -0
  108. package/test-theme/widgets/product.liquid +45 -0
  109. package/test-theme/widgets/recently-viewed.liquid +26 -0
  110. package/test-theme/widgets/shared/product-grid.liquid +339 -0
  111. package/test-theme/widgets/simple-product.liquid +42 -0
  112. package/test-theme/widgets/single-product.liquid +610 -0
  113. package/test-theme/widgets/spacebar-carousel.liquid +663 -0
  114. package/test-theme/widgets/spacebar.liquid +279 -0
  115. package/test-theme/widgets/splash.liquid +378 -0
  116. package/test-theme/widgets/testimonial-carousel.liquid +709 -0
@@ -0,0 +1,405 @@
1
+ {% layout 'layout/theme' %}
2
+
3
+ <section class="account-page">
4
+ <div class="container">
5
+
6
+ <!-- Header -->
7
+ <div class="account-header">
8
+ <h1 class="account-title">Loyalty Redemption</h1>
9
+ <p class="account-subtitle">View your redeemed points and history</p>
10
+ </div>
11
+
12
+ <div class="account-layout">
13
+
14
+ <!-- Sidebar -->
15
+ <aside class="account-sidebar">
16
+ {% render 'snippets/account-sidebar' %}
17
+ </aside>
18
+
19
+ <!-- Content -->
20
+ <div class="account-content">
21
+ {% hook 'account_loyalty_before' %}
22
+
23
+ <div class="account-section-header">
24
+ <h2 class="account-section-title">Redemption History</h2>
25
+ </div>
26
+
27
+ <div class="loyalty-history loyalty-redemptions">
28
+ <div class="loyalty-history-list">
29
+
30
+ {% if loyalty.redemptions and loyalty.redemptions.size > 0 %}
31
+ {% for redemption in loyalty.redemptions %}
32
+ <div class="loyalty-transaction">
33
+
34
+ <!-- Icon -->
35
+ <div class="transaction-icon redeemed">
36
+ <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
37
+ <polyline points="20 6 9 17 4 12"></polyline>
38
+ </svg>
39
+ </div>
40
+
41
+ <!-- Info -->
42
+ <div class="transaction-info">
43
+ <p class="transaction-description">
44
+ {% assign rtype = redemption.redeemType | downcase %}
45
+ {% case rtype %}
46
+ {% when 'cash' %} Redeemed as Cash
47
+ {% when 'giftcards' %} Redeemed as Gift Card
48
+ {% when 'others' %} Redeemed as Other Rewards
49
+ {% else %} Points Redeemed
50
+ {% endcase %}
51
+ </p>
52
+
53
+ <p class="transaction-reference">
54
+ {{ redemption.additionalSettings.OrderNumbers | default: redemption.referenceId }}
55
+ </p>
56
+
57
+ <p class="transaction-date">
58
+ {{ redemption.createdDate | date: '%d-%m-%Y %H:%M' }}
59
+ </p>
60
+ </div>
61
+
62
+ <!-- Points -->
63
+ <div class="transaction-points redeemed">
64
+ -{{ redemption.redeemedPoints | default: redemption.point }}
65
+ </div>
66
+
67
+ </div>
68
+ {% endfor %}
69
+ {% else %}
70
+ <div class="empty-state">
71
+ <p>No redemption history available.</p>
72
+ </div>
73
+ {% endif %}
74
+ <!-- Pagination -->
75
+ {% include 'snippets/pagination', pagination: pagination %}
76
+ </div>
77
+ </div>
78
+
79
+ {% hook 'account_loyalty_after' %}
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </section>
84
+
85
+ <style>
86
+ :root {
87
+ --color-primary: #000000ff;
88
+ --color-primary-hover: #1d4ed8;
89
+ --color-primary-light: #dbeafe;
90
+ --color-success: #10b981;
91
+ --color-success-light: #d1fae5;
92
+ --color-success-dark: #065f46;
93
+ --color-danger: #ef4444;
94
+ --color-danger-light: #fee2e2;
95
+ --color-danger-dark: #991b1b;
96
+ --color-text: #1f2937;
97
+ --color-text-light: #6b7280;
98
+ --color-background: #f9fafb;
99
+ --color-card-bg: #ffffff;
100
+ --color-border: #e5e7eb;
101
+ --color-border-light: #f3f4f6;
102
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
103
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
104
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
105
+ --radius-sm: 0.375rem;
106
+ --radius-md: 0.5rem;
107
+ --radius-lg: 0.75rem;
108
+ --spacing-xs: 0.5rem;
109
+ --spacing-sm: 1rem;
110
+ --spacing-md: 1.5rem;
111
+ --spacing-lg: 2rem;
112
+ --spacing-xl: 3rem;
113
+ }
114
+
115
+ .account-page {
116
+ padding: var(--spacing-xl) var(--spacing-sm);
117
+ background: var(--color-background);
118
+ min-height: 100vh;
119
+ }
120
+
121
+ .container {
122
+ max-width: 1200px;
123
+ margin: 0 auto;
124
+ padding: 0 var(--spacing-sm);
125
+ }
126
+ .pagination {
127
+ display: flex;
128
+ justify-content: flex-end;
129
+ align-items: center;
130
+ }
131
+ .account-header {
132
+ text-align: center;
133
+ margin-bottom: var(--spacing-xl);
134
+
135
+ }
136
+
137
+ .account-title {
138
+ font-size: 2.5rem;
139
+ font-weight: 700;
140
+ color: var(--color-text);
141
+ margin: 0 0 0.5rem 0;
142
+ letter-spacing: -0.025em;
143
+ }
144
+
145
+ .account-subtitle {
146
+ font-size: 1.125rem;
147
+ color: var(--color-text-light);
148
+ margin: 0;
149
+ }
150
+
151
+ .account-layout {
152
+ display: grid;
153
+ grid-template-columns: 280px 1fr;
154
+ gap: var(--spacing-lg);
155
+ align-items: start;
156
+ }
157
+
158
+ .account-sidebar {
159
+ position: sticky;
160
+ top: var(--spacing-lg);
161
+ background: var(--color-card-bg);
162
+ border-radius: var(--radius-lg);
163
+ padding: var(--spacing-md);
164
+ box-shadow: var(--shadow-md);
165
+ border: 1px solid var(--color-border);
166
+ }
167
+
168
+ .account-content {
169
+ background: var(--color-card-bg);
170
+ border-radius: var(--radius-lg);
171
+ padding: var(--spacing-lg);
172
+ box-shadow: var(--shadow-md);
173
+ border: 1px solid var(--color-border);
174
+ }
175
+
176
+ .account-section-header {
177
+ margin-bottom: var(--spacing-lg);
178
+ padding-bottom: var(--spacing-md);
179
+ border-bottom: 1px solid var(--color-border);
180
+ }
181
+
182
+ .account-section-title {
183
+ font-size: 1.75rem;
184
+ font-weight: 600;
185
+ color: var(--color-text);
186
+ margin: 0;
187
+ }
188
+
189
+ .loyalty-program {
190
+ display: grid;
191
+ gap: var(--spacing-xl);
192
+ }
193
+
194
+ .loyalty-points {
195
+ background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-primary-hover) 100%);
196
+ border-radius: var(--radius-lg);
197
+ padding: var(--spacing-xl);
198
+ text-align: center;
199
+ color: white;
200
+ box-shadow: var(--shadow-lg);
201
+ position: relative;
202
+ overflow: hidden;
203
+ }
204
+
205
+ .loyalty-points::before {
206
+ content: '';
207
+ position: absolute;
208
+ top: -50%;
209
+ right: -10%;
210
+ width: 300px;
211
+ height: 300px;
212
+ background: rgba(255, 255, 255, 0.1);
213
+ border-radius: 50%;
214
+ }
215
+
216
+ .loyalty-points-display {
217
+ position: relative;
218
+ z-index: 1;
219
+ max-width: 400px;
220
+ margin: 0 auto;
221
+ }
222
+
223
+ .points-icon {
224
+ margin: 0 auto var(--spacing-md);
225
+ width: 80px;
226
+ height: 80px;
227
+ display: flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ background: rgba(255, 255, 255, 0.2);
231
+ border-radius: 50%;
232
+ }
233
+
234
+ .loyalty-points-value {
235
+ font-size: 4rem;
236
+ font-weight: 700;
237
+ margin: 0 0 var(--spacing-xs) 0;
238
+ line-height: 1;
239
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
240
+ }
241
+
242
+ .loyalty-points-label {
243
+ font-size: 1.25rem;
244
+ margin: 0;
245
+ opacity: 0.95;
246
+ text-transform: uppercase;
247
+ letter-spacing: 0.1em;
248
+ }
249
+
250
+ .loyalty-history {
251
+ background: var(--color-background);
252
+ padding: var(--spacing-lg);
253
+ border-radius: var(--radius-lg);
254
+ border: 1px solid var(--color-border);
255
+ }
256
+
257
+ .loyalty-subtitle {
258
+ font-size: 1.25rem;
259
+ font-weight: 600;
260
+ color: var(--color-text);
261
+ margin: 0 0 var(--spacing-md) 0;
262
+ }
263
+
264
+ .loyalty-history-list {
265
+ display: grid;
266
+ gap: var(--spacing-sm);
267
+ }
268
+
269
+ .loyalty-transaction {
270
+ display: grid;
271
+ grid-template-columns: auto 1fr auto;
272
+ gap: var(--spacing-md);
273
+ align-items: center;
274
+ padding: var(--spacing-md);
275
+ background: var(--color-card-bg);
276
+ border-radius: var(--radius-md);
277
+ border: 1px solid var(--color-border);
278
+ transition: all 0.3s ease;
279
+ }
280
+
281
+ .loyalty-transaction:hover {
282
+ border-color: var(--color-primary);
283
+ box-shadow: var(--shadow-sm);
284
+ }
285
+
286
+ .transaction-icon {
287
+ width: 40px;
288
+ height: 40px;
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ border-radius: 50%;
293
+ flex-shrink: 0;
294
+ }
295
+
296
+
297
+
298
+ .transaction-icon.spent,
299
+ .transaction-icon.redeemed {
300
+ background: var(--color-danger-light);
301
+ color: var(--color-danger-dark);
302
+ }
303
+
304
+ .transaction-info {
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: 0.25rem;
308
+ }
309
+
310
+ .transaction-description {
311
+ font-size: 1.25rem;
312
+ font-weight: 500;
313
+ color: var(--color-text);
314
+ margin: 0;
315
+ }
316
+
317
+ .transaction-date {
318
+ font-size: 1.25rem;
319
+ color: var(--color-text-light);
320
+ margin: 0;
321
+ }
322
+
323
+ .transaction-points {
324
+ font-size: 1.25rem;
325
+ font-weight: 700;
326
+ text-align: right;
327
+ padding: var(--spacing-xs) var(--spacing-sm);
328
+ border-radius: var(--radius-sm);
329
+ min-width: 80px;
330
+ }
331
+
332
+
333
+
334
+ .transaction-points.redeemed,
335
+ .transaction-points.spent {
336
+ color: var(--color-danger-dark);
337
+ background: var(--color-danger-light);
338
+ }
339
+
340
+ .btn {
341
+ display: inline-flex;
342
+ align-items: center;
343
+ justify-content: center;
344
+ padding: 0.625rem 1.5rem;
345
+ font-size: 0.9375rem;
346
+ font-weight: 500;
347
+ text-decoration: none;
348
+ border-radius: var(--radius-md);
349
+ border: none;
350
+ cursor: pointer;
351
+ transition: all 0.3s ease;
352
+ }
353
+
354
+ .btn-primary {
355
+ background: var(--color-primary);
356
+ color: white;
357
+ border: 2px solid var(--color-primary);
358
+ }
359
+
360
+ .btn-primary:hover {
361
+ background: var(--color-primary-hover);
362
+ transform: translateY(-1px);
363
+ box-shadow: var(--shadow-md);
364
+ }
365
+
366
+ .empty-state {
367
+ text-align: center;
368
+ padding: var(--spacing-xl);
369
+ color: var(--color-text-light);
370
+ background: var(--color-card-bg);
371
+ border-radius: var(--radius-md);
372
+ border: 2px dashed var(--color-border);
373
+ }
374
+
375
+ .empty-state p {
376
+ margin: 0 0 var(--spacing-md) 0;
377
+ }
378
+
379
+ @media (max-width: 768px) {
380
+ .account-layout {
381
+ grid-template-columns: 1fr;
382
+ }
383
+
384
+
385
+
386
+ .account-content {
387
+ order: 1;
388
+ }
389
+
390
+ .loyalty-points-value {
391
+ font-size: 3rem;
392
+ }
393
+
394
+ .loyalty-transaction {
395
+ grid-template-columns: auto 1fr;
396
+ gap: var(--spacing-sm);
397
+ }
398
+
399
+ .transaction-points {
400
+ grid-column: 2;
401
+ justify-self: start;
402
+ margin-top: var(--spacing-xs);
403
+ }
404
+ }
405
+ </style>