@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
@@ -554,8 +554,7 @@
554
554
 
555
555
  .category-image {
556
556
  width: 100%;
557
- height: 100%;
558
- object-fit: cover;
557
+ object-fit: contain;
559
558
  transition: transform var(--transition-slow);
560
559
  }
561
560
 
@@ -1063,22 +1062,35 @@
1063
1062
  display: flex;
1064
1063
  align-items: center;
1065
1064
  gap: var(--spacing-element, 0.5rem);
1065
+ width: 100%;
1066
1066
  }
1067
1067
 
1068
1068
  .price-input {
1069
- flex: 1;
1070
- padding: var(--spacing-element, 0.5rem) var(--spacing-element, 0.75rem);
1069
+ flex: 1 1 0;
1070
+ min-width: 0;
1071
+ padding: var(--spacing-element, 0.625rem) var(--spacing-element, 0.75rem);
1071
1072
  border: 1px solid var(--color-gray-300, #d1d5db);
1072
1073
  border-radius: var(--border-radius-small, 4px);
1073
1074
  font-size: var(--text-sm, 0.875rem);
1074
1075
  transition: border-color var(--transition-fast, 0.2s);
1075
1076
  background-color: var(--color-white, #ffffff);
1076
1077
  color: var(--color-gray-900, #111827);
1078
+ text-align: center;
1079
+ appearance: none;
1080
+ -webkit-appearance: none;
1081
+ -moz-appearance: textfield;
1082
+ }
1083
+
1084
+ .price-input::-webkit-outer-spin-button,
1085
+ .price-input::-webkit-inner-spin-button {
1086
+ -webkit-appearance: none;
1087
+ margin: 0;
1077
1088
  }
1078
1089
 
1079
1090
  .price-input:focus {
1080
1091
  outline: none;
1081
1092
  border-color: var(--color-primary, #2563eb);
1093
+ box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
1082
1094
  }
1083
1095
 
1084
1096
  .price-input::placeholder {
@@ -1087,8 +1099,10 @@
1087
1099
 
1088
1100
  .price-separator {
1089
1101
  color: var(--color-gray-700, #374151);
1090
- font-weight: var(--font-weight-normal, 400);
1091
- padding: 0 var(--spacing-element, 0.25rem);
1102
+ font-weight: var(--font-weight-medium, 500);
1103
+ padding: 0 var(--spacing-element, 0.5rem);
1104
+ flex-shrink: 0;
1105
+ line-height: 1;
1092
1106
  }
1093
1107
 
1094
1108
  .price-range-slider {
@@ -1466,6 +1480,11 @@
1466
1480
  .collection-toolbar {
1467
1481
  padding: var(--spacing-element, 0.5rem) 0;
1468
1482
  margin-bottom: var(--spacing-element, 0.5rem);
1483
+ overflow: visible;
1484
+ }
1485
+
1486
+ .collection-toolbar .container {
1487
+ overflow: visible;
1469
1488
  }
1470
1489
 
1471
1490
  .collection-header-content {
@@ -1484,16 +1503,39 @@
1484
1503
  justify-content: space-between;
1485
1504
  gap: var(--spacing-element, 0.75rem);
1486
1505
  flex-wrap: nowrap;
1506
+ position: relative;
1507
+ overflow: visible;
1487
1508
  }
1488
1509
 
1489
1510
  .filters-section {
1490
1511
  flex: 0 0 auto;
1491
1512
  margin-right: auto;
1513
+ position: relative;
1514
+ }
1515
+
1516
+ .filter-toggle {
1517
+ white-space: nowrap;
1492
1518
  }
1493
1519
 
1494
1520
  .sort-section {
1495
1521
  flex: 0 0 auto;
1496
1522
  margin-left: 0;
1523
+ position: relative;
1524
+ }
1525
+
1526
+ .sort-dropdown {
1527
+ position: relative;
1528
+ }
1529
+
1530
+ .sort-menu {
1531
+ position: absolute;
1532
+ left: 0;
1533
+ right: 0;
1534
+ top: calc(100% + var(--space-2, 0.5rem));
1535
+ min-width: 100%;
1536
+ max-width: 100%;
1537
+ width: 100%;
1538
+ z-index: var(--z-dropdown);
1497
1539
  }
1498
1540
 
1499
1541
  .filter-dropdown {
@@ -1506,6 +1548,64 @@
1506
1548
  border-radius: 0;
1507
1549
  margin-top: 0;
1508
1550
  z-index: var(--z-modal);
1551
+ display: flex;
1552
+ flex-direction: column;
1553
+ }
1554
+
1555
+ .filter-header {
1556
+ padding: var(--space-4, 1rem) var(--space-4, 1rem) var(--space-3, 0.75rem);
1557
+ flex-shrink: 0;
1558
+ }
1559
+
1560
+ .filter-content {
1561
+ padding: var(--space-4, 1rem);
1562
+ flex: 1 1 auto;
1563
+ overflow-y: auto;
1564
+ -webkit-overflow-scrolling: touch;
1565
+ }
1566
+
1567
+ .filter-group {
1568
+ margin-bottom: var(--space-6, 1.5rem);
1569
+ }
1570
+
1571
+ .filter-group:last-child {
1572
+ margin-bottom: 0;
1573
+ }
1574
+
1575
+ .price-inputs {
1576
+ display: flex;
1577
+ align-items: center;
1578
+ gap: var(--space-3, 0.75rem);
1579
+ width: 100%;
1580
+ }
1581
+
1582
+ .price-input {
1583
+ flex: 1 1 0;
1584
+ min-width: 0;
1585
+ padding: var(--space-3, 0.75rem) var(--space-4, 1rem);
1586
+ font-size: var(--text-base, 1rem);
1587
+ text-align: center;
1588
+ }
1589
+
1590
+ .price-separator {
1591
+ flex-shrink: 0;
1592
+ padding: 0 var(--space-2, 0.5rem);
1593
+ font-weight: var(--font-weight-medium, 500);
1594
+ color: var(--color-gray-600, #4b5563);
1595
+ }
1596
+
1597
+ .filter-actions {
1598
+ flex-direction: column;
1599
+ gap: var(--space-3, 0.75rem);
1600
+ padding: var(--space-4, 1rem);
1601
+ flex-shrink: 0;
1602
+ }
1603
+
1604
+ .filter-actions .btn {
1605
+ width: 100%;
1606
+ padding: var(--space-4, 1rem) var(--space-6, 1.5rem);
1607
+ font-size: var(--text-base, 1rem);
1608
+ justify-content: center;
1509
1609
  }
1510
1610
 
1511
1611
  /* Products grid responsive rules handled by main grid above */
@@ -2294,6 +2394,10 @@
2294
2394
  background-color: var(--color-error);
2295
2395
  color: var(--color-white);
2296
2396
  }
2397
+ .notification-info {
2398
+ background-color: var(--color-info);
2399
+ color: var(--color-white);
2400
+ }
2297
2401
 
2298
2402
  .notification-warning {
2299
2403
  background-color: var(--color-warning);
@@ -2548,12 +2652,13 @@
2548
2652
  }
2549
2653
 
2550
2654
  .product-info .product-title {
2551
- font-size: var(--text-4xl);
2655
+ font-size: var(--text-lg);
2552
2656
  font-weight: 700;
2553
2657
  color: var(--color-gray-900);
2554
2658
  margin-bottom: var(--space-4);
2555
2659
  line-height: 1.2;
2556
2660
  letter-spacing: -0.025em;
2661
+ text-align: left;
2557
2662
  }
2558
2663
 
2559
2664
  .product-price {
@@ -2980,15 +3085,8 @@
2980
3085
  .collection-card {
2981
3086
  background-color: var(--color-white);
2982
3087
  border-radius: var(--radius-lg);
2983
- overflow: hidden;
2984
- transition: all var(--transition);
2985
- position: relative;
2986
- group: hover;
2987
- }
2988
-
2989
- .collection-card:hover {
2990
- transform: translateY(-4px);
2991
- box-shadow: var(--shadow-lg);
3088
+ overflow: hidden;
3089
+ position: relative;
2992
3090
  }
2993
3091
 
2994
3092
  .collection-image-container {
@@ -3001,14 +3099,8 @@
3001
3099
  .collection-image {
3002
3100
  width: 100%;
3003
3101
  height: 100%;
3004
- object-fit: cover;
3005
- transition: transform var(--transition-slow);
3006
- }
3007
-
3008
- .collection-card:hover .collection-image {
3009
- transform: scale(1.05);
3102
+ object-fit: cover;
3010
3103
  }
3011
-
3012
3104
  .collection-placeholder {
3013
3105
  display: flex;
3014
3106
  align-items: center;
@@ -3159,8 +3251,7 @@
3159
3251
  width: 60px;
3160
3252
  height: 60px;
3161
3253
  border-radius: var(--radius-lg);
3162
- overflow: hidden;
3163
- box-shadow: var(--shadow);
3254
+ overflow: hidden;
3164
3255
  }
3165
3256
 
3166
3257
  .collection-image img {
@@ -3634,7 +3725,12 @@
3634
3725
 
3635
3726
  /* Filter Open State */
3636
3727
  .filter-open {
3637
- overflow: hidden;
3728
+ overflow: hidden !important;
3729
+ position: fixed;
3730
+ width: 100%;
3731
+ left: 0;
3732
+ right: 0;
3733
+ padding-right: var(--scrollbar-width, 0px);
3638
3734
  }
3639
3735
 
3640
3736
  .filter-open .filter-dropdown {
@@ -4089,6 +4185,59 @@
4089
4185
  font-size: var(--text-3xl);
4090
4186
  }
4091
4187
 
4188
+ .toolbar-content {
4189
+ gap: var(--space-2, 0.5rem);
4190
+ }
4191
+
4192
+ .filter-toggle,
4193
+ .sort-toggle {
4194
+ font-size: var(--text-xs, 0.75rem);
4195
+ padding: var(--space-2, 0.5rem) var(--space-3, 0.75rem);
4196
+ }
4197
+
4198
+ .sort-menu {
4199
+ min-width: 100%;
4200
+ max-width: 100%;
4201
+ left: 0;
4202
+ right: 0;
4203
+ }
4204
+
4205
+ .filter-dropdown {
4206
+ padding: 0;
4207
+ }
4208
+
4209
+ .filter-header {
4210
+ padding: var(--space-3, 0.75rem) var(--space-3, 0.75rem) var(--space-2, 0.5rem);
4211
+ }
4212
+
4213
+ .filter-content {
4214
+ padding: var(--space-3, 0.75rem);
4215
+ }
4216
+
4217
+ .price-inputs {
4218
+ gap: var(--space-2, 0.5rem);
4219
+ }
4220
+
4221
+ .price-input {
4222
+ padding: var(--space-2, 0.5rem) var(--space-3, 0.75rem);
4223
+ font-size: var(--text-sm, 0.875rem);
4224
+ }
4225
+
4226
+ .price-separator {
4227
+ padding: 0 var(--space-1, 0.25rem);
4228
+ font-size: var(--text-sm, 0.875rem);
4229
+ }
4230
+
4231
+ .filter-actions {
4232
+ padding: var(--space-3, 0.75rem);
4233
+ gap: var(--space-2, 0.5rem);
4234
+ }
4235
+
4236
+ .filter-actions .btn {
4237
+ padding: var(--space-3, 0.75rem) var(--space-4, 1rem);
4238
+ font-size: var(--text-sm, 0.875rem);
4239
+ }
4240
+
4092
4241
  .collection-description {
4093
4242
  font-size: var(--text-base);
4094
4243
  }
@@ -4535,7 +4684,7 @@
4535
4684
  bottom: 0;
4536
4685
  left: 0;
4537
4686
  right: 0;
4538
- background-color: var(--color-background, {{ settings.color_background }});
4687
+ background-color: var(--color-background, {{ settings.color_background | default: '#ffffff' }});
4539
4688
  border-top: 1px solid var(--color-border, rgba(15, 23, 42, 0.08));
4540
4689
  padding: var(--spacing-element, 0.5rem) 0 calc(var(--spacing-element, 0.5rem) + env(safe-area-inset-bottom));
4541
4690
  z-index: var(--z-fixed, 1030);
@@ -4591,8 +4740,8 @@
4591
4740
  min-width: 18px;
4592
4741
  height: 18px;
4593
4742
  padding: 0 var(--spacing-element, 5px);
4594
- background: var(--color-text, {{ settings.color_text }});
4595
- color: var(--color-background, {{ settings.color_background }});
4743
+ background: var(--color-text, {{ settings.color_text | default: '#000000' }});
4744
+ color: var(--color-background, {{ settings.color_background | default: '#ffffff' }});
4596
4745
  border-radius: var(--border-radius-medium, 9px);
4597
4746
  font-size: var(--text-xs, 0.7rem);
4598
4747
  font-weight: var(--font-weight-bold, 600);
@@ -3,7 +3,7 @@
3
3
  * Handles modal interactions, API calls, and zone selection
4
4
  */
5
5
 
6
- (function() {
6
+ (() => {
7
7
  'use strict';
8
8
 
9
9
  // DOM elements - will be set in init()