easyorders 0.1.14 → 0.1.16

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 (51) hide show
  1. package/README.md +93 -93
  2. package/dist/bin/cli.js +12 -5
  3. package/dist/template/theme/config.json +113 -95
  4. package/dist/template/theme/home-sections/Tilted-Scrolling-Marque/config.json +107 -0
  5. package/dist/template/theme/home-sections/Tilted-Scrolling-Marque/template.liquid +171 -0
  6. package/dist/template/theme/home-sections/category-mosaic/config.json +89 -4
  7. package/dist/template/theme/home-sections/category-mosaic/template.liquid +84 -69
  8. package/dist/template/theme/home-sections/different-hero/config.json +199 -0
  9. package/dist/template/theme/home-sections/different-hero/template.liquid +219 -0
  10. package/dist/template/theme/home-sections/editorial-feature/config.json +27 -1
  11. package/dist/template/theme/home-sections/editorial-feature/template.liquid +11 -10
  12. package/dist/template/theme/home-sections/newsletter-luxe/config.json +28 -2
  13. package/dist/template/theme/home-sections/newsletter-luxe/template.liquid +19 -13
  14. package/dist/template/theme/home-sections/runway-hero/config.json +87 -30
  15. package/dist/template/theme/home-sections/runway-hero/template.liquid +59 -29
  16. package/dist/template/theme/home-sections/shop-the-look/config.json +93 -1
  17. package/dist/template/theme/home-sections/shop-the-look/template.liquid +41 -19
  18. package/dist/template/theme/home-sections/slider-before-after/config.json +213 -0
  19. package/dist/template/theme/home-sections/slider-before-after/template.liquid +336 -0
  20. package/dist/template/theme/home-sections/test-hero-allbird/config.json +130 -0
  21. package/dist/template/theme/home-sections/test-hero-allbird/template.liquid +149 -0
  22. package/dist/template/theme/home-sections/trust-promise/config.json +76 -2
  23. package/dist/template/theme/home-sections/trust-promise/template.liquid +119 -96
  24. package/dist/template/theme/home-sections/zoom-parallax/config.json +48 -0
  25. package/dist/template/theme/home-sections/zoom-parallax/template.liquid +135 -0
  26. package/dist/template/theme/product-data-schema.json +27 -0
  27. package/dist/template/theme/schema.json +136 -151
  28. package/dist/template/theme/script.js +1095 -586
  29. package/dist/template/theme/sections/breadcrumbs.liquid +17 -17
  30. package/dist/template/theme/sections/categories.liquid +26 -10
  31. package/dist/template/theme/sections/fake-counter.liquid +27 -27
  32. package/dist/template/theme/sections/fake-stock.liquid +6 -6
  33. package/dist/template/theme/sections/fake-visitor.liquid +6 -6
  34. package/dist/template/theme/sections/featured-products.liquid +143 -110
  35. package/dist/template/theme/sections/fixed-buy-button.liquid +51 -46
  36. package/dist/template/theme/sections/footer.liquid +128 -129
  37. package/dist/template/theme/sections/gallery.liquid +65 -61
  38. package/dist/template/theme/sections/header.liquid +232 -152
  39. package/dist/template/theme/sections/home-products-grid.liquid +167 -109
  40. package/dist/template/theme/sections/list-products.liquid +136 -93
  41. package/dist/template/theme/sections/order-invoice.liquid +102 -154
  42. package/dist/template/theme/sections/product-description.liquid +40 -30
  43. package/dist/template/theme/sections/product-details.liquid +48 -63
  44. package/dist/template/theme/sections/products-grid.liquid +134 -86
  45. package/dist/template/theme/sections/related-products.liquid +152 -88
  46. package/dist/template/theme/sections/reviews.liquid +70 -55
  47. package/dist/template/theme/sections/slider.liquid +43 -43
  48. package/dist/template/theme/sections/thanks.liquid +33 -33
  49. package/dist/template/theme/style.css +5617 -3923
  50. package/dist/template/theme/theme-data.json +26 -9
  51. package/package.json +40 -40
@@ -1,17 +1,17 @@
1
- <nav class="ab-breadcrumbs" aria-label="Breadcrumb">
2
- <ol class="ab-breadcrumbs-list">
3
- <li class="ab-breadcrumbs-item">
4
- <a href="/">{{ home_text }}</a>
5
- <span class="ab-breadcrumbs-sep">/</span>
6
- </li>
7
- {% for crumb in categories %}
8
- <li class="ab-breadcrumbs-item">
9
- <a href="/collections/{{ crumb.slug }}">{{ crumb.name }}</a>
10
- <span class="ab-breadcrumbs-sep">/</span>
11
- </li>
12
- {% endfor %}
13
- <li class="ab-breadcrumbs-item ab-breadcrumbs-current" aria-current="page">
14
- {{ product_name }}
15
- </li>
16
- </ol>
17
- </nav>
1
+ <nav class="ab-breadcrumbs" aria-label="Breadcrumb">
2
+ <ol class="ab-breadcrumbs-list">
3
+ <li class="ab-breadcrumbs-item">
4
+ <a href="/">{{ home_text }}</a>
5
+ <span class="ab-breadcrumbs-sep">/</span>
6
+ </li>
7
+ {% for crumb in categories %}
8
+ <li class="ab-breadcrumbs-item">
9
+ <a href="/collections/{{ crumb.slug }}">{{ crumb.name }}</a>
10
+ <span class="ab-breadcrumbs-sep">/</span>
11
+ </li>
12
+ {% endfor %}
13
+ <li class="ab-breadcrumbs-item ab-breadcrumbs-current" aria-current="page">
14
+ {{ product_name }}
15
+ </li>
16
+ </ol>
17
+ </nav>
@@ -1,10 +1,26 @@
1
- <div class="ab-categories">
2
- <div class="ab-categories-track">
3
- {% for category in categories %}
4
- <a href="/collections/{{ category.slug }}" class="ab-cat-card ab-reveal" style="animation-delay: {{ forloop.index | times: 0.04 }}s">
5
- <img src="{{ category.thumb }}" alt="{{ category.name }}" />
6
- <span class="ab-cat-label">{{ category.name }}</span>
7
- </a>
8
- {% endfor %}
9
- </div>
10
- </div>
1
+ <div class="ab-categories">
2
+ <div class="ab-categories-header">
3
+ {% if section_title %}
4
+ <h2 class="ab-categories-title ab-reveal">{{ section_title | default: 'Shop by collection' }}</h2>
5
+ {% endif %}
6
+ </div>
7
+
8
+ {% assign cats_size = categories.size %}
9
+ <div
10
+ class="ab-categories-track ab-cat-slider {% if cats_size <= 5 %}ab-cat-track--grid{% else %}ab-cat-track--carousel{% endif %}"
11
+ style="--cat-cols: {{ cats_size }};"
12
+ >
13
+ {% for category in categories %}
14
+ <a href="/collections/{{ category.slug }}" class="ab-cat-card ab-reveal" style="animation-delay: {{ forloop.index | times: 0.04 }}s">
15
+ <div class="ab-cat-media">
16
+ <img src="{{ category.thumb }}" alt="{{ category.name }}" loading="lazy" />
17
+ </div>
18
+ <div class="ab-cat-overlay"></div>
19
+ <div class="ab-cat-content">
20
+ <span class="ab-cat-label">{{ category.name }}</span>
21
+
22
+ </div>
23
+ </a>
24
+ {% endfor %}
25
+ </div>
26
+ </div>
@@ -1,27 +1,27 @@
1
- <div class="ab-fake-counter" data-product-id="{{ product_id }}" data-hours="{{ hours }}">
2
- <div class="ab-fc-header">
3
- <span class="ab-fc-icon" aria-hidden="true"></span>
4
- <span class="ab-fc-title">{{ title }}</span>
5
- </div>
6
- <div class="ab-fc-digits" dir="ltr">
7
- <div class="ab-fc-unit">
8
- <span class="ab-fc-num" data-unit="days">00</span>
9
- <span class="ab-fc-label">{{ label_days }}</span>
10
- </div>
11
- <span class="ab-fc-sep">:</span>
12
- <div class="ab-fc-unit">
13
- <span class="ab-fc-num" data-unit="hours">00</span>
14
- <span class="ab-fc-label">{{ label_hours }}</span>
15
- </div>
16
- <span class="ab-fc-sep">:</span>
17
- <div class="ab-fc-unit">
18
- <span class="ab-fc-num" data-unit="minutes">00</span>
19
- <span class="ab-fc-label">{{ label_minutes }}</span>
20
- </div>
21
- <span class="ab-fc-sep">:</span>
22
- <div class="ab-fc-unit">
23
- <span class="ab-fc-num" data-unit="seconds">00</span>
24
- <span class="ab-fc-label">{{ label_seconds }}</span>
25
- </div>
26
- </div>
27
- </div>
1
+ <div class="ab-fake-counter" data-product-id="{{ product_id }}" data-hours="{{ hours }}">
2
+ <div class="ab-fc-header">
3
+ <span class="ab-fc-icon" aria-hidden="true"></span>
4
+ <span class="ab-fc-title">{{ title }}</span>
5
+ </div>
6
+ <div class="ab-fc-digits" dir="ltr">
7
+ <div class="ab-fc-unit">
8
+ <span class="ab-fc-num" data-unit="days">00</span>
9
+ <span class="ab-fc-label">{{ label_days }}</span>
10
+ </div>
11
+ <span class="ab-fc-sep">:</span>
12
+ <div class="ab-fc-unit">
13
+ <span class="ab-fc-num" data-unit="hours">00</span>
14
+ <span class="ab-fc-label">{{ label_hours }}</span>
15
+ </div>
16
+ <span class="ab-fc-sep">:</span>
17
+ <div class="ab-fc-unit">
18
+ <span class="ab-fc-num" data-unit="minutes">00</span>
19
+ <span class="ab-fc-label">{{ label_minutes }}</span>
20
+ </div>
21
+ <span class="ab-fc-sep">:</span>
22
+ <div class="ab-fc-unit">
23
+ <span class="ab-fc-num" data-unit="seconds">00</span>
24
+ <span class="ab-fc-label">{{ label_seconds }}</span>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -1,6 +1,6 @@
1
- <div class="ab-fake-stock">
2
- <p class="ab-fs-text">{{ text }}</p>
3
- <div class="ab-fs-bar">
4
- <div class="ab-fs-fill"></div>
5
- </div>
6
- </div>
1
+ <div class="ab-fake-stock">
2
+ <p class="ab-fs-text">{{ text }}</p>
3
+ <div class="ab-fs-bar">
4
+ <div class="ab-fs-fill"></div>
5
+ </div>
6
+ </div>
@@ -1,6 +1,6 @@
1
- <div class="ab-fake-visitor" data-min="{{ min }}" data-max="{{ max }}">
2
- <span class="ab-fv-eye" aria-hidden="true"></span>
3
- <p class="ab-fv-text">
4
- <span class="ab-fv-count">{{ min }}</span> {{ watching_text }}
5
- </p>
6
- </div>
1
+ <div class="ab-fake-visitor" data-min="{{ min }}" data-max="{{ max }}">
2
+ <span class="ab-fv-eye" aria-hidden="true"></span>
3
+ <p class="ab-fv-text">
4
+ <span class="ab-fv-count">{{ min }}</span> {{ watching_text }}
5
+ </p>
6
+ </div>
@@ -1,110 +1,143 @@
1
- <section class="ab-featured-products">
2
- {% if section_title %}
3
- <h2 class="ab-featured-section-title ab-reveal">{{ section_title }}</h2>
4
- {% endif %}
5
- <div class="ab-featured-layout">
6
- <a
7
- href="{% if category and category.slug %}/collections/{{ category.slug }}{% else %}#{% endif %}"
8
- class="ab-featured-hero ab-reveal"
9
- >
10
- <img
11
- src="{% if category and category.thumb %}{{ category.thumb }}{% elsif products and products[0] and products[0].thumb %}{{ products[0].thumb }}{% endif %}"
12
- alt="{% if category and category.name %}{{ category.name }}{% else %}{{ section_title }}{% endif %}"
13
- loading="lazy"
14
- />
15
- <span class="ab-featured-hero-overlay"></span>
16
- <div class="ab-featured-hero-content">
17
- {% if category and category.name %}
18
- <p class="ab-featured-hero-subtitle">{{ category.name }}</p>
19
- {% endif %}
20
- </div>
21
- {% unless hide_view_all %}<span class="ab-featured-hero-cta">{{shop_now}}</span>{% endunless %}
22
- </a>
23
-
24
- <div class="ab-featured-grid">
25
- {% for product in products limit: 4 %}
26
- {% assign color_variation = product.variations | where: "type", "color" | first %}
27
- {% assign image_variation = product.variations | where: "type", "image" | first %}
28
- {% assign swatch_total = 0 %}
29
- {% if color_variation and color_variation.props %}
30
- {% assign swatch_total = color_variation.props.size %}
31
- {% elsif image_variation and image_variation.props %}
32
- {% assign swatch_total = image_variation.props.size %}
33
- {% endif %}
34
-
35
- <a href="/products/{{ product.slug }}" class="ab-featured-card ab-reveal" style="animation-delay: {{ forloop.index | times: 0.04 }}s">
36
- {% if product.sale_price and product.sale_price < product.price %}
37
- {% assign discount = product.price | minus: product.sale_price | times: 100 | divided_by: product.price | floor %}
38
- <span class="ab-featured-badge ab-sale-badge">{{ sale }} -{{ discount }}%</span>
39
- {% endif %}
40
-
41
- <div class="ab-featured-media">
42
- <img class="ab-featured-img-primary" src="{{ product.thumb }}" alt="{{ product.name }}" loading="lazy" />
43
- {% if product.images[0] %}
44
- <img class="ab-featured-img-hover" src="{{ product.images[0] }}" alt="{{ product.name }}" loading="lazy" />
45
- {% endif %}
46
- {% comment %} Wishlist & Compare action buttons — dispatch custom events caught by the storefront JS layer
47
- <div class="ab-card-actions">
48
- <button
49
- class="ab-wishlist-btn"
50
- type="button"
51
- aria-label="Add to wishlist"
52
- onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-wishlist',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
53
- >
54
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z"/></svg>
55
- </button>
56
- <button
57
- class="ab-compare-btn"
58
- type="button"
59
- aria-label="Compare"
60
- onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('toggle-compare',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
61
- >
62
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="16 3 21 8 16 13"/><line x1="21" y1="8" x2="9" y2="8"/><polyline points="8 21 3 16 8 11"/><line x1="3" y1="16" x2="15" y2="16"/></svg>
63
- </button>
64
- </div>
65
- {% endcomment %}
66
- </div>
67
-
68
- <div class="ab-featured-info">
69
- <p class="ab-featured-name">{{ product.name }}</p>
70
- <div class="ab-featured-price-row">
71
- {% if product.sale_price and product.sale_price < product.price %}
72
- <span class="ab-price-old">{{ product.price }} {{ currency }}</span>
73
- <span class="ab-featured-price ab-price-sale">{{ product.sale_price }} {{ currency }}</span>
74
- {% else %}
75
- <span class="ab-featured-price">{{ product.price }} {{ currency }}</span>
76
- {% endif %}
77
- </div>
78
-
79
-
80
- <div class="ab-featured-bottom-row">
81
- <div class="ab-featured-swatches">
82
- {% if color_variation and color_variation.props %}
83
- {% for prop in color_variation.props limit: 4 %}
84
- <span class="ab-featured-swatch" style="background: {{ prop.value }}" title="{{ prop.name }}"></span>
85
- {% endfor %}
86
- {% elsif image_variation and image_variation.props %}
87
- {% for prop in image_variation.props limit: 4 %}
88
- <span class="ab-featured-swatch ab-featured-swatch-image" title="{{ prop.name }}">
89
- <img src="{{ prop.value }}" alt="{{ prop.name }}" loading="lazy" />
90
- </span>
91
- {% endfor %}
92
- {% endif %}
93
-
94
- {% if swatch_total > 4 %}
95
- <span class="ab-featured-swatch-more">+{{ swatch_total | minus: 4 }}</span>
96
- {% endif %}
97
- </div>
98
-
99
- <button
100
- class="ab-featured-add-btn"
101
- type="button"
102
- onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('quick-add',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
103
- >{{add}}</button>
104
- </div>
105
- </div>
106
- </a>
107
- {% endfor %}
108
- </div>
109
- </div>
110
- </section>
1
+ <section
2
+ class="ab-featured-products"
3
+ style="
4
+ --ab-sale-badge-bg: {{ theme_data.sale_badge_bg_color | default: '#c94a4a' }};
5
+ --ab-sale-badge-text: {{ theme_data.sale_badge_text_color | default: '#ffffff' }};
6
+ --ab-product-card-bg: {% if theme_data.card_background_product == 'transparent' %}transparent{% else %}{{ theme_data.card_background_product_color | default: '#f5f4f2' }}{% endif %};
7
+ --ab-featured-hero-subtitle-color: {{ theme_data.featured_hero_subtitle_text_color | default: '#ffffff' }};
8
+ --ab-featured-hero-cta-bg: {{ theme_data.featured_hero_cta_background_color | default: '#ffffff' }};
9
+ --ab-featured-hero-cta-text: {{ theme_data.featured_hero_cta_text_color | default: '#1f272b' }};
10
+ "
11
+ >
12
+ {% if section_title %}
13
+ <h2 class="ab-featured-section-title ab-reveal">{{ section_title }}</h2>
14
+ {% endif %}
15
+ <div class="ab-featured-layout">
16
+ <a
17
+ href="{% if category and category.slug %}/collections/{{ category.slug }}{% else %}#{% endif %}"
18
+ class="ab-featured-hero ab-reveal"
19
+ >
20
+ <img
21
+ src="{% if category and category.thumb %}{{ category.thumb }}{% elsif products and products[0] and products[0].thumb %}{{ products[0].thumb }}{% endif %}"
22
+ alt="{% if category and category.name %}{{ category.name }}{% else %}{{ section_title }}{% endif %}"
23
+ loading="lazy"
24
+ />
25
+ <span class="ab-featured-hero-overlay"></span>
26
+ <div class="ab-featured-hero-content">
27
+ {% if category and category.name %}
28
+ <p class="ab-featured-hero-subtitle">{{ category.name }}</p>
29
+ {% endif %}
30
+ </div>
31
+ {% unless hide_view_all %}<span class="ab-featured-hero-cta">{{shop_now}}</span>{% endunless %}
32
+ </a>
33
+
34
+ <div class="ab-featured-grid">
35
+ {% for product in products limit: 4 %}
36
+ {% assign color_variation = product.variations | where: "type", "color" | first %}
37
+ {% assign image_variation = product.variations | where: "type", "image" | first %}
38
+ {% assign swatch_total = 0 %}
39
+ {% if color_variation and color_variation.props %}
40
+ {% assign swatch_total = color_variation.props.size %}
41
+ {% elsif image_variation and image_variation.props %}
42
+ {% assign swatch_total = image_variation.props.size %}
43
+ {% endif %}
44
+
45
+ {% assign pgrid_custom_badge = '' %}
46
+ {% if product.product_theme_data %}
47
+ {% assign pgrid_custom_badge = product.product_theme_data.custom_badge_title | strip %}
48
+ {% endif %}
49
+ {% assign pgrid_has_sale = false %}
50
+ {% if product.sale_price and product.sale_price < product.price and theme_data.show_sale_badge != false %}
51
+ {% assign pgrid_has_sale = true %}
52
+ {% endif %}
53
+ {% assign pgrid_has_variants = false %}
54
+ {% if product.variations and product.variations.size > 0 %}
55
+ {% assign pgrid_has_variants = true %}
56
+ {% endif %}
57
+ {% assign pgrid_disable_no_stock_str = product.disable_orders_for_no_stock | append: '' | downcase | strip %}
58
+ {% assign pgrid_disable_no_stock = false %}
59
+ {% if pgrid_disable_no_stock_str == 'true' or pgrid_disable_no_stock_str == '1' %}
60
+ {% assign pgrid_disable_no_stock = true %}
61
+ {% endif %}
62
+ {% assign pgrid_stock_flag_raw = product.in_stock | default: product.available %}
63
+ {% assign pgrid_stock_flag_str = pgrid_stock_flag_raw | append: '' | downcase | strip %}
64
+ {% assign pgrid_is_out_of_stock = false %}
65
+ {% if pgrid_stock_flag_str == 'false' or pgrid_stock_flag_str == '0' %}
66
+ {% assign pgrid_is_out_of_stock = true %}
67
+ {% elsif pgrid_stock_flag_str == 'true' or pgrid_stock_flag_str == '1' %}
68
+ {% assign pgrid_is_out_of_stock = false %}
69
+ {% else %}
70
+ {% assign pgrid_stock_qty = product.quantity | default: product.stock | default: product.total_quantity | default: 0 | plus: 0 %}
71
+ {% if pgrid_stock_qty <= 0 %}
72
+ {% assign pgrid_is_out_of_stock = true %}
73
+ {% endif %}
74
+ {% endif %}
75
+ {% assign pgrid_hide_add_btn = false %}
76
+ {% if pgrid_disable_no_stock and pgrid_has_variants == false and pgrid_is_out_of_stock %}
77
+ {% assign pgrid_hide_add_btn = true %}
78
+ {% endif %}
79
+
80
+ <a href="/products/{{ product.slug }}" class="ab-pgrid-card ab-featured-card ab-reveal ab-observed ab-visible" style="animation-delay: {{ forloop.index | times: 0.05 }}s">
81
+ {% if pgrid_has_sale or pgrid_custom_badge != '' %}
82
+ <div class="ab-pgrid-badge-stack">
83
+ {% if pgrid_has_sale %}
84
+ {% assign discount = product.price | minus: product.sale_price | times: 100 | divided_by: product.price | floor %}
85
+ <span class="ab-pgrid-badge ab-sale-badge">-{{ discount }}%</span>
86
+ {% endif %}
87
+ {% if pgrid_custom_badge != '' %}
88
+ <span class="ab-pgrid-badge ab-product-custom-badge">{{ pgrid_custom_badge }}</span>
89
+ {% endif %}
90
+ </div>
91
+ {% endif %}
92
+
93
+ <div class="ab-featured-media">
94
+ <img class="ab-featured-img-primary" src="{{ product.thumb }}" alt="{{ product.name }}" loading="lazy" />
95
+ {% if product.images[0] %}
96
+ <img class="ab-featured-img-hover" src="{{ product.images[0] }}" alt="{{ product.name }}" loading="lazy" />
97
+ {% endif %}
98
+ </div>
99
+
100
+ <div class="ab-featured-info">
101
+ <p class="ab-featured-name">{{ product.name }}</p>
102
+ <div class="ab-featured-price-row">
103
+ {% if product.sale_price and product.sale_price < product.price %}
104
+ <span class="ab-price-old">{{ product.price }} {{ currency }}</span>
105
+ <span class="ab-featured-price ab-price-sale">{{ product.sale_price }} {{ currency }}</span>
106
+ {% else %}
107
+ <span class="ab-featured-price">{{ product.price }} {{ currency }}</span>
108
+ {% endif %}
109
+ </div>
110
+
111
+ <div class="ab-featured-bottom-row">
112
+ <div class="ab-featured-swatches">
113
+ {% if color_variation and color_variation.props %}
114
+ {% for prop in color_variation.props limit: 4 %}
115
+ <span class="ab-featured-swatch" style="background: {{ prop.value }}" title="{{ prop.name }}"></span>
116
+ {% endfor %}
117
+ {% elsif image_variation and image_variation.props %}
118
+ {% for prop in image_variation.props limit: 4 %}
119
+ <span class="ab-featured-swatch ab-featured-swatch-image" title="{{ prop.name }}">
120
+ <img src="{{ prop.value }}" alt="{{ prop.name }}" loading="lazy" />
121
+ </span>
122
+ {% endfor %}
123
+ {% endif %}
124
+
125
+ {% if swatch_total > 4 %}
126
+ <span class="ab-featured-swatch-more">+{{ swatch_total | minus: 4 }}</span>
127
+ {% endif %}
128
+ </div>
129
+
130
+ {% unless pgrid_hide_add_btn %}
131
+ <button
132
+ class="ab-featured-add-btn"
133
+ type="button"
134
+ onclick="event.preventDefault();event.stopPropagation();this.dispatchEvent(new CustomEvent('quick-add',{bubbles:true,detail:{productId:'{{ product.id }}'}}));"
135
+ >{{add}}</button>
136
+ {% endunless %}
137
+ </div>
138
+ </div>
139
+ </a>
140
+ {% endfor %}
141
+ </div>
142
+ </div>
143
+ </section>
@@ -1,46 +1,51 @@
1
- <div class="ab-fixed-buy">
2
- {% if thumb and thumb != "" %}
3
- <div class="ab-fixed-buy-preview">
4
- <img class="ab-fixed-buy-thumb" src="{{ thumb }}" alt="{{ product_name }}" />
5
- <div class="ab-fixed-buy-info">
6
- <span class="ab-fixed-buy-name">{{ product_name }}</span>
7
- <div class="ab-fixed-buy-price-row">
8
- {% if sale_price and sale_price < price %}
9
- <span class="ab-fixed-buy-price-old">{{ price }} {{ currency }}</span>
10
- <span class="ab-fixed-buy-price ab-fixed-buy-price-sale">{{ sale_price }} {{ currency }}</span>
11
- {% else %}
12
- <span class="ab-fixed-buy-price">{{ price }} {{ currency }}</span>
13
- {% endif %}
14
- </div>
15
- </div>
16
- </div>
17
- {% endif %}
18
-
19
- {% unless hide_quantity %}
20
- <div class="ab-fixed-buy-qty">
21
- <button
22
- class="ab-fixed-buy-qty-btn"
23
- type="button"
24
- onclick="this.dispatchEvent(new CustomEvent('increment-quantity',{bubbles:true}));"
25
- {% if increase_disabled %}disabled{% endif %}
26
- >
27
- <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v12M1 7h12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
28
- </button>
29
- <span class="ab-fixed-buy-qty-value">{{ quantity }}</span>
30
- <button
31
- class="ab-fixed-buy-qty-btn"
32
- type="button"
33
- onclick="this.dispatchEvent(new CustomEvent('decrement-quantity',{bubbles:true}));"
34
- >
35
- <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 7h12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
36
- </button>
37
- </div>
38
- {% endunless %}
39
-
40
- <button
41
- class="ab-fixed-buy-btn"
42
- type="button"
43
- {% if disabled %}disabled{% endif %}
44
- onclick="event.preventDefault();this.dispatchEvent(new CustomEvent('buy-now',{bubbles:true}));"
45
- >{{ buy_now_text }}</button>
46
- </div>
1
+ <div class="ab-fixed-buy">
2
+ {% if thumb and thumb != "" %}
3
+ <div class="ab-fixed-buy-preview">
4
+ <img class="ab-fixed-buy-thumb" src="{{ thumb }}" alt="{{ product_name }}" />
5
+ <div class="ab-fixed-buy-info">
6
+ <span class="ab-fixed-buy-name">{{ product_name }}</span>
7
+ <div class="ab-fixed-buy-price-row">
8
+ {% if sale_price and sale_price < price %}
9
+ <span class="ab-fixed-buy-price-old">{{ price }} {{ currency }}</span>
10
+ <span class="ab-fixed-buy-price ab-fixed-buy-price-sale">{{ sale_price }} {{ currency }}</span>
11
+ {% else %}
12
+ <span class="ab-fixed-buy-price">{{ price }} {{ currency }}</span>
13
+ {% endif %}
14
+ </div>
15
+ </div>
16
+ </div>
17
+ {% endif %}
18
+
19
+ {% unless hide_quantity %}
20
+ <div class="ab-fixed-buy-qty">
21
+ <button
22
+ class="ab-fixed-buy-qty-btn"
23
+ type="button"
24
+ onclick="this.dispatchEvent(new CustomEvent('increment-quantity',{bubbles:true}));"
25
+ {% if increase_disabled %}disabled{% endif %}
26
+ >
27
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M7 1v12M1 7h12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
28
+ </button>
29
+ <span class="ab-fixed-buy-qty-value">{{ quantity }}</span>
30
+ <button
31
+ class="ab-fixed-buy-qty-btn"
32
+ type="button"
33
+ onclick="this.dispatchEvent(new CustomEvent('decrement-quantity',{bubbles:true}));"
34
+ >
35
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 7h12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg>
36
+ </button>
37
+ </div>
38
+ {% endunless %}
39
+
40
+ <button
41
+ class="ab-fixed-buy-btn"
42
+ type="button"
43
+ {% if disabled %}disabled{% endif %}
44
+ onclick="event.preventDefault();this.dispatchEvent(new CustomEvent('buy-now',{bubbles:true}));"
45
+ >
46
+ <span class="svg-wrapper add-to-cart-icon">
47
+
48
+ </span>
49
+ <span class="btn-text">{{ buy_now_text }}</span>
50
+ </button>
51
+ </div>