@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.
- package/README.md +425 -0
- package/assets/Logo_o2vend.png +0 -0
- package/assets/favicon.png +0 -0
- package/assets/logo-white.png +0 -0
- package/bin/o2vend +42 -0
- package/config/widget-map.json +50 -0
- package/lib/commands/check.js +201 -0
- package/lib/commands/generate.js +33 -0
- package/lib/commands/init.js +214 -0
- package/lib/commands/optimize.js +216 -0
- package/lib/commands/package.js +208 -0
- package/lib/commands/serve.js +105 -0
- package/lib/commands/validate.js +191 -0
- package/lib/lib/api-client.js +357 -0
- package/lib/lib/dev-server.js +2618 -0
- package/lib/lib/file-watcher.js +80 -0
- package/lib/lib/hot-reload.js +106 -0
- package/lib/lib/liquid-engine.js +822 -0
- package/lib/lib/liquid-filters.js +671 -0
- package/lib/lib/mock-api-server.js +989 -0
- package/lib/lib/mock-data.js +1468 -0
- package/lib/lib/widget-service.js +321 -0
- package/package.json +70 -0
- package/test-theme/README.md +27 -0
- package/test-theme/assets/async-sections.js +446 -0
- package/test-theme/assets/cart-drawer.js +463 -0
- package/test-theme/assets/cart-manager.js +223 -0
- package/test-theme/assets/checkout-price-handler.js +368 -0
- package/test-theme/assets/components.css +4629 -0
- package/test-theme/assets/delivery-zone.css +299 -0
- package/test-theme/assets/delivery-zone.js +396 -0
- package/test-theme/assets/logo.png +0 -0
- package/test-theme/assets/sections.css +48 -0
- package/test-theme/assets/theme.css +3500 -0
- package/test-theme/assets/theme.js +3745 -0
- package/test-theme/config/settings_data.json +292 -0
- package/test-theme/config/settings_schema.json +1050 -0
- package/test-theme/layout/theme.liquid +195 -0
- package/test-theme/locales/en.default.json +260 -0
- package/test-theme/sections/content-fallback.liquid +53 -0
- package/test-theme/sections/content.liquid +57 -0
- package/test-theme/sections/footer-fallback.liquid +328 -0
- package/test-theme/sections/footer.liquid +278 -0
- package/test-theme/sections/header-fallback.liquid +1805 -0
- package/test-theme/sections/header.liquid +1145 -0
- package/test-theme/sections/hero-fallback.liquid +212 -0
- package/test-theme/sections/hero.liquid +136 -0
- package/test-theme/snippets/account-sidebar.liquid +200 -0
- package/test-theme/snippets/add-to-cart-modal.liquid +484 -0
- package/test-theme/snippets/breadcrumbs.liquid +134 -0
- package/test-theme/snippets/cart-drawer.liquid +467 -0
- package/test-theme/snippets/delivery-zone-city-selector.liquid +79 -0
- package/test-theme/snippets/delivery-zone-modal.liquid +337 -0
- package/test-theme/snippets/delivery-zone-search.liquid +78 -0
- package/test-theme/snippets/icon.liquid +105 -0
- package/test-theme/snippets/login-modal.liquid +346 -0
- package/test-theme/snippets/mega-menu.liquid +812 -0
- package/test-theme/snippets/news-thumbnail.liquid +187 -0
- package/test-theme/snippets/pagination.liquid +120 -0
- package/test-theme/snippets/price.liquid +92 -0
- package/test-theme/snippets/product-card-related.liquid +78 -0
- package/test-theme/snippets/product-card-simple.liquid +41 -0
- package/test-theme/snippets/product-card.liquid +697 -0
- package/test-theme/snippets/rating.liquid +85 -0
- package/test-theme/snippets/skeleton-collection-grid.liquid +114 -0
- package/test-theme/snippets/skeleton-product-card.liquid +124 -0
- package/test-theme/snippets/skeleton-product-grid.liquid +34 -0
- package/test-theme/snippets/social-sharing.liquid +185 -0
- package/test-theme/templates/account/dashboard.liquid +401 -0
- package/test-theme/templates/account/loyalty-redemption.liquid +405 -0
- package/test-theme/templates/account/loyalty.liquid +588 -0
- package/test-theme/templates/account/order-detail.liquid +230 -0
- package/test-theme/templates/account/orders.liquid +349 -0
- package/test-theme/templates/account/profile.liquid +758 -0
- package/test-theme/templates/account/register.liquid +232 -0
- package/test-theme/templates/account/return-orders.liquid +348 -0
- package/test-theme/templates/account/store-credit.liquid +464 -0
- package/test-theme/templates/account/subscriptions.liquid +601 -0
- package/test-theme/templates/account/wishlist.liquid +419 -0
- package/test-theme/templates/address-book.liquid +1092 -0
- package/test-theme/templates/categories.liquid +452 -0
- package/test-theme/templates/checkout.liquid +4511 -0
- package/test-theme/templates/error.liquid +384 -0
- package/test-theme/templates/index.liquid +11 -0
- package/test-theme/templates/login.liquid +185 -0
- package/test-theme/templates/order-confirmation.liquid +720 -0
- package/test-theme/templates/page.liquid +297 -0
- package/test-theme/templates/product-detail.liquid +4363 -0
- package/test-theme/templates/products.liquid +518 -0
- package/test-theme/templates/search.liquid +922 -0
- package/test-theme/theme.json.example +19 -0
- package/test-theme/widgets/brand-carousel.liquid +676 -0
- package/test-theme/widgets/brand.liquid +245 -0
- package/test-theme/widgets/carousel.liquid +843 -0
- package/test-theme/widgets/category-list-carousel.liquid +656 -0
- package/test-theme/widgets/category-list.liquid +340 -0
- package/test-theme/widgets/category.liquid +475 -0
- package/test-theme/widgets/discount-time.liquid +176 -0
- package/test-theme/widgets/footer-menu.liquid +695 -0
- package/test-theme/widgets/footer.liquid +179 -0
- package/test-theme/widgets/gallery.liquid +271 -0
- package/test-theme/widgets/header-menu.liquid +932 -0
- package/test-theme/widgets/header.liquid +159 -0
- package/test-theme/widgets/html.liquid +214 -0
- package/test-theme/widgets/news.liquid +217 -0
- package/test-theme/widgets/product-canvas.liquid +235 -0
- package/test-theme/widgets/product-carousel.liquid +502 -0
- package/test-theme/widgets/product.liquid +45 -0
- package/test-theme/widgets/recently-viewed.liquid +26 -0
- package/test-theme/widgets/shared/product-grid.liquid +339 -0
- package/test-theme/widgets/simple-product.liquid +42 -0
- package/test-theme/widgets/single-product.liquid +610 -0
- package/test-theme/widgets/spacebar-carousel.liquid +663 -0
- package/test-theme/widgets/spacebar.liquid +279 -0
- package/test-theme/widgets/splash.liquid +378 -0
- package/test-theme/widgets/testimonial-carousel.liquid +709 -0
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="{{ shop.language | default: 'en' }}">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>{% if page.title %}{{ page.title }} - {% endif %}{{ shop.name }}</title>
|
|
7
|
+
|
|
8
|
+
<!-- Meta tags -->
|
|
9
|
+
<meta name="description" content="{{ page_description | default: shop.name }}">
|
|
10
|
+
<meta name="keywords" content="ecommerce, online store, {{ shop.name }}">
|
|
11
|
+
|
|
12
|
+
<!-- Favicon -->
|
|
13
|
+
<link rel="icon" href="{{ shop.favicon }}">
|
|
14
|
+
|
|
15
|
+
<!-- Resource hints for fonts -->
|
|
16
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
17
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
18
|
+
|
|
19
|
+
<!-- CSS -->
|
|
20
|
+
<link rel="stylesheet" href="/assets/theme.min.css">
|
|
21
|
+
<link rel="stylesheet" href="/assets/components.min.css">
|
|
22
|
+
<link rel="stylesheet" href="/assets/delivery-zone.min.css">
|
|
23
|
+
<!-- intl-tel-input CSS -->
|
|
24
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/intl-tel-input@23.0.0/build/css/intlTelInput.min.css">
|
|
25
|
+
|
|
26
|
+
<!-- Font Loading - Non-render-blocking -->
|
|
27
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Playfair+Display:wght@400;600;700&display=swap" rel="stylesheet" media="print" onload="this.media='all'">
|
|
28
|
+
<noscript>
|
|
29
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&family=Playfair+Display:wght@400;600;700&display=swap" rel="stylesheet">
|
|
30
|
+
</noscript>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
<!-- Additional head content -->
|
|
34
|
+
{% if additional_head %}
|
|
35
|
+
{{ additional_head }}
|
|
36
|
+
{% endif %}
|
|
37
|
+
|
|
38
|
+
<!-- Plugin hooks for theme head -->
|
|
39
|
+
{% hook 'theme_head' %}
|
|
40
|
+
|
|
41
|
+
{%- comment -%}
|
|
42
|
+
Shopify-compatible placeholder for apps and scripts injected into the <head>.
|
|
43
|
+
In our engine this may be empty, which is fine.
|
|
44
|
+
{%- endcomment -%}
|
|
45
|
+
{{ content_for_header }}
|
|
46
|
+
</head>
|
|
47
|
+
<body
|
|
48
|
+
{% comment %}Animation settings - Check with proper boolean handling{% endcomment %}
|
|
49
|
+
{% liquid
|
|
50
|
+
assign anim_val = settings.enable_animations
|
|
51
|
+
if anim_val == blank or anim_val == null
|
|
52
|
+
assign anim_val = true
|
|
53
|
+
endif
|
|
54
|
+
assign hover_val = settings.enable_hover_effects
|
|
55
|
+
if hover_val == blank or hover_val == null
|
|
56
|
+
assign hover_val = true
|
|
57
|
+
endif
|
|
58
|
+
assign parallax_val = settings.enable_parallax
|
|
59
|
+
if parallax_val == blank or parallax_val == null
|
|
60
|
+
assign parallax_val = false
|
|
61
|
+
endif
|
|
62
|
+
%}
|
|
63
|
+
class="template-{{ template | default: 'index' }} layout-{{ settings.layout_style | default: 'boxed' }}{% unless anim_val or anim_val == true or anim_val == 'true' or anim_val == 1 %} no-animations{% endunless %}{% unless hover_val or hover_val == true or hover_val == 'true' or hover_val == 1 %} no-hover-effects{% endunless %}{% if parallax_val or parallax_val == true or parallax_val == 'true' or parallax_val == 1 %} parallax-enabled{% endif %}"
|
|
64
|
+
data-shop-currency="{{ shop.currency | default: 'USD' }}"
|
|
65
|
+
data-shop-currency-symbol="{{ shop.settings.currencySymbol | default: shop.currency | default: '$' }}"
|
|
66
|
+
data-shop-locale="{{ shop.locale | default: shop.language | default: 'en-US' }}"
|
|
67
|
+
style="font-family: var(--font-primary); font-size: {{ settings.font_size_base | default: 16 }}px;"
|
|
68
|
+
>
|
|
69
|
+
<script>
|
|
70
|
+
window.__SHOP_CURRENCY__ = '{{ shop.currency | default: 'USD' }}';
|
|
71
|
+
window.__SHOP_CURRENCY_SYMBOL__ = '{{ shop.settings.currencySymbol | default: shop.currency | default: '$' }}';
|
|
72
|
+
window.__SHOP_LOCALE__ = '{{ shop.locale | default: shop.language | default: 'en-US' }}';
|
|
73
|
+
</script>
|
|
74
|
+
<!-- Plugin hooks for body begin -->
|
|
75
|
+
{% hook 'theme_body_begin' %}
|
|
76
|
+
<!-- Skip Links for Accessibility -->
|
|
77
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
78
|
+
|
|
79
|
+
<!-- Header -->
|
|
80
|
+
{% hook 'header_before' %}
|
|
81
|
+
<header class="site-header" id="site-header" role="banner">
|
|
82
|
+
{% section 'sections/header' %}
|
|
83
|
+
</header>
|
|
84
|
+
{% hook 'header_after' %}
|
|
85
|
+
|
|
86
|
+
<!-- Main content -->
|
|
87
|
+
<main class="main-content" id="main-content" role="main">
|
|
88
|
+
<div class="container" style="max-width: {{ settings.container_width | default: 1400 }}px; padding: 0 {{ settings.container_padding | default: 24 }}px;">
|
|
89
|
+
{%- comment -%}
|
|
90
|
+
Use Shopify-compatible {{ content_for_layout }} for layout content,
|
|
91
|
+
but keep support for our existing {{ content }} variable as a fallback.
|
|
92
|
+
{%- endcomment -%}
|
|
93
|
+
{% if content_for_layout %}
|
|
94
|
+
{{ content_for_layout }}
|
|
95
|
+
{% else %}
|
|
96
|
+
{{ content }}
|
|
97
|
+
{% endif %}
|
|
98
|
+
</div>
|
|
99
|
+
</main>
|
|
100
|
+
|
|
101
|
+
<!-- Footer -->
|
|
102
|
+
{% hook 'footer_before' %}
|
|
103
|
+
<footer class="site-footer" role="contentinfo">
|
|
104
|
+
{% section 'sections/footer' %}
|
|
105
|
+
</footer>
|
|
106
|
+
{% hook 'footer_after' %}
|
|
107
|
+
|
|
108
|
+
<!-- JavaScript -->
|
|
109
|
+
<script src="/assets/cart-manager.min.js" defer></script>
|
|
110
|
+
<script src="/assets/theme.min.js" defer></script>
|
|
111
|
+
<script src="/assets/cart-drawer.min.js" defer></script>
|
|
112
|
+
<script src="/assets/delivery-zone.min.js" defer></script>
|
|
113
|
+
<!-- intl-tel-input JS -->
|
|
114
|
+
<script src="https://cdn.jsdelivr.net/npm/intl-tel-input@23.0.0/build/js/intlTelInput.min.js"></script>
|
|
115
|
+
<!-- utils.js is loaded dynamically by intl-tel-input when needed, no need to load it here -->
|
|
116
|
+
|
|
117
|
+
<!-- Async Section Loader -->
|
|
118
|
+
<script src="/assets/async-sections.min.js" defer></script>
|
|
119
|
+
<script>
|
|
120
|
+
// Initialize async section loader if sections are defined
|
|
121
|
+
if (window.asyncSections && window.AsyncSectionLoader) {
|
|
122
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
123
|
+
AsyncSectionLoader.init(window.asyncSections);
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
</script>
|
|
127
|
+
|
|
128
|
+
<!-- Additional scripts -->
|
|
129
|
+
{% if additional_scripts %}
|
|
130
|
+
{{ additional_scripts }}
|
|
131
|
+
{% endif %}
|
|
132
|
+
|
|
133
|
+
{% include 'snippets/cart-drawer' %}
|
|
134
|
+
|
|
135
|
+
{% if deliveryZone.enabled %}
|
|
136
|
+
{% include 'snippets/delivery-zone-modal' %}
|
|
137
|
+
{% endif %}
|
|
138
|
+
|
|
139
|
+
<!-- Global login modal (email/password, email OTP, mobile OTP) -->
|
|
140
|
+
{% include 'snippets/login-modal' %}
|
|
141
|
+
|
|
142
|
+
<!-- Add to Cart Modal -->
|
|
143
|
+
{% include 'snippets/add-to-cart-modal' %}
|
|
144
|
+
|
|
145
|
+
<!-- Mobile Bottom Navigation -->
|
|
146
|
+
<nav class="mobile-bottom-nav" role="navigation" aria-label="Bottom navigation">
|
|
147
|
+
<a href="/" class="mobile-bottom-nav__item" data-nav-item="home" aria-label="Home">
|
|
148
|
+
<svg class="mobile-bottom-nav__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
149
|
+
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path>
|
|
150
|
+
<polyline points="9 22 9 12 15 12 15 22"></polyline>
|
|
151
|
+
</svg>
|
|
152
|
+
<span class="mobile-bottom-nav__label">Home</span>
|
|
153
|
+
</a>
|
|
154
|
+
<a href="/collections" class="mobile-bottom-nav__item" data-nav-item="categories" aria-label="Categories">
|
|
155
|
+
<svg class="mobile-bottom-nav__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
156
|
+
<rect x="3" y="3" width="7" height="7"></rect>
|
|
157
|
+
<rect x="14" y="3" width="7" height="7"></rect>
|
|
158
|
+
<rect x="14" y="14" width="7" height="7"></rect>
|
|
159
|
+
<rect x="3" y="14" width="7" height="7"></rect>
|
|
160
|
+
</svg>
|
|
161
|
+
<span class="mobile-bottom-nav__label">Categories</span>
|
|
162
|
+
</a>
|
|
163
|
+
{% if customer and customer.isAuthenticated %}
|
|
164
|
+
<a href="/account" class="mobile-bottom-nav__item" data-nav-item="account" aria-label="Account">
|
|
165
|
+
<svg class="mobile-bottom-nav__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
166
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
|
|
167
|
+
<circle cx="12" cy="7" r="4"></circle>
|
|
168
|
+
</svg>
|
|
169
|
+
<span class="mobile-bottom-nav__label">Account</span>
|
|
170
|
+
</a>
|
|
171
|
+
{% else %}
|
|
172
|
+
<button type="button" class="mobile-bottom-nav__item" data-nav-item="account" data-login-modal-trigger aria-label="Login">
|
|
173
|
+
<svg class="mobile-bottom-nav__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
174
|
+
<path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
|
|
175
|
+
<circle cx="12" cy="7" r="4"></circle>
|
|
176
|
+
</svg>
|
|
177
|
+
<span class="mobile-bottom-nav__label">Account</span>
|
|
178
|
+
</button>
|
|
179
|
+
{% endif %}
|
|
180
|
+
<button type="button" class="mobile-bottom-nav__item mobile-bottom-nav__item--cart" data-nav-item="cart" data-cart-toggle aria-label="Shopping cart">
|
|
181
|
+
<svg class="mobile-bottom-nav__icon" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
182
|
+
<circle cx="9" cy="21" r="1"></circle>
|
|
183
|
+
<circle cx="20" cy="21" r="1"></circle>
|
|
184
|
+
<path d="M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6"></path>
|
|
185
|
+
</svg>
|
|
186
|
+
<span class="mobile-bottom-nav__label">Cart</span>
|
|
187
|
+
<span class="mobile-bottom-nav__badge" data-cart-count>{{ cart.itemCount | default: 0 }}</span>
|
|
188
|
+
</button>
|
|
189
|
+
</nav>
|
|
190
|
+
|
|
191
|
+
<!-- Plugin hooks for body end -->
|
|
192
|
+
{% hook 'theme_body_end' %}
|
|
193
|
+
</body>
|
|
194
|
+
</html>
|
|
195
|
+
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
{
|
|
2
|
+
"general": {
|
|
3
|
+
"meta": {
|
|
4
|
+
"title": "{{ shop.name }}",
|
|
5
|
+
"description": "{{ shop.description | default: 'Shop the latest products at ' | append: shop.name }}"
|
|
6
|
+
},
|
|
7
|
+
"navigation": {
|
|
8
|
+
"menu": "Menu",
|
|
9
|
+
"search": "Search",
|
|
10
|
+
"search_placeholder": "Search products...",
|
|
11
|
+
"search_results": "Search results",
|
|
12
|
+
"no_results": "No results found",
|
|
13
|
+
"view_all": "View all",
|
|
14
|
+
"back": "Back",
|
|
15
|
+
"next": "Next",
|
|
16
|
+
"previous": "Previous"
|
|
17
|
+
},
|
|
18
|
+
"buttons": {
|
|
19
|
+
"add_to_cart": "Add to cart",
|
|
20
|
+
"buy_now": "Buy now",
|
|
21
|
+
"continue_shopping": "Continue shopping",
|
|
22
|
+
"checkout": "Checkout",
|
|
23
|
+
"update_cart": "Update cart",
|
|
24
|
+
"remove": "Remove",
|
|
25
|
+
"save": "Save",
|
|
26
|
+
"cancel": "Cancel",
|
|
27
|
+
"close": "Close",
|
|
28
|
+
"submit": "Submit",
|
|
29
|
+
"learn_more": "Learn more",
|
|
30
|
+
"read_more": "Read more",
|
|
31
|
+
"show_more": "Show more",
|
|
32
|
+
"show_less": "Show less"
|
|
33
|
+
},
|
|
34
|
+
"accessibility": {
|
|
35
|
+
"skip_to_content": "Skip to content",
|
|
36
|
+
"close": "Close",
|
|
37
|
+
"open_menu": "Open menu",
|
|
38
|
+
"close_menu": "Close menu",
|
|
39
|
+
"open_cart": "Open cart",
|
|
40
|
+
"close_cart": "Close cart",
|
|
41
|
+
"loading": "Loading...",
|
|
42
|
+
"error": "Error"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"products": {
|
|
46
|
+
"product": {
|
|
47
|
+
"on_sale": "On sale",
|
|
48
|
+
"sold_out": "Sold out",
|
|
49
|
+
"unavailable": "Unavailable",
|
|
50
|
+
"vendor": "Vendor",
|
|
51
|
+
"sku": "SKU",
|
|
52
|
+
"price": "Price",
|
|
53
|
+
"compare_at_price": "Compare at price",
|
|
54
|
+
"from_price_html": "From {{ price }}",
|
|
55
|
+
"regular_price": "Regular price",
|
|
56
|
+
"sale_price": "Sale price",
|
|
57
|
+
"unit_price": "Unit price",
|
|
58
|
+
"quantity": "Quantity",
|
|
59
|
+
"add_to_cart": "Add to cart",
|
|
60
|
+
"sold_out": "Sold out",
|
|
61
|
+
"unavailable": "Unavailable",
|
|
62
|
+
"backorder": "Backorder",
|
|
63
|
+
"preorder": "Preorder",
|
|
64
|
+
"in_stock": "In stock",
|
|
65
|
+
"out_of_stock": "Out of stock",
|
|
66
|
+
"low_stock": "Only {{ quantity }} left",
|
|
67
|
+
"stock_count": "{{ quantity }} in stock",
|
|
68
|
+
"description": "Description",
|
|
69
|
+
"specifications": "Specifications",
|
|
70
|
+
"reviews": "Reviews",
|
|
71
|
+
"related_products": "Related products",
|
|
72
|
+
"you_may_also_like": "You may also like",
|
|
73
|
+
"recently_viewed": "Recently viewed",
|
|
74
|
+
"featured": "Featured",
|
|
75
|
+
"new": "New",
|
|
76
|
+
"best_seller": "Best seller",
|
|
77
|
+
"trending": "Trending"
|
|
78
|
+
},
|
|
79
|
+
"collection": {
|
|
80
|
+
"title": "Collections",
|
|
81
|
+
"all_products": "All products",
|
|
82
|
+
"no_products": "No products found",
|
|
83
|
+
"filter_by": "Filter by",
|
|
84
|
+
"sort_by": "Sort by",
|
|
85
|
+
"view": "View",
|
|
86
|
+
"grid": "Grid",
|
|
87
|
+
"list": "List",
|
|
88
|
+
"products_per_page": "Products per page",
|
|
89
|
+
"showing": "Showing {{ count }} of {{ total }} products",
|
|
90
|
+
"page": "Page {{ number }} of {{ total }}"
|
|
91
|
+
},
|
|
92
|
+
"search": {
|
|
93
|
+
"title": "Search",
|
|
94
|
+
"placeholder": "Search products...",
|
|
95
|
+
"no_results": "No results found for \"{{ terms }}\"",
|
|
96
|
+
"results_for": "Results for \"{{ terms }}\"",
|
|
97
|
+
"suggestions": "Try searching for:",
|
|
98
|
+
"popular_searches": "Popular searches",
|
|
99
|
+
"recent_searches": "Recent searches"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"cart": {
|
|
103
|
+
"title": "Shopping cart",
|
|
104
|
+
"empty": "Your cart is empty",
|
|
105
|
+
"item": "item",
|
|
106
|
+
"items": "items",
|
|
107
|
+
"subtotal": "Subtotal",
|
|
108
|
+
"shipping": "Shipping",
|
|
109
|
+
"tax": "Tax",
|
|
110
|
+
"total": "Total",
|
|
111
|
+
"checkout": "Checkout",
|
|
112
|
+
"continue_shopping": "Continue shopping",
|
|
113
|
+
"update_cart": "Update cart",
|
|
114
|
+
"remove": "Remove",
|
|
115
|
+
"quantity": "Quantity",
|
|
116
|
+
"price": "Price",
|
|
117
|
+
"total": "Total",
|
|
118
|
+
"note": "Order note",
|
|
119
|
+
"note_placeholder": "Add a note to your order",
|
|
120
|
+
"discount": "Discount",
|
|
121
|
+
"discount_code": "Discount code",
|
|
122
|
+
"apply": "Apply",
|
|
123
|
+
"remove_discount": "Remove discount",
|
|
124
|
+
"free_shipping": "Free shipping",
|
|
125
|
+
"shipping_calculator": "Shipping calculator",
|
|
126
|
+
"estimated_delivery": "Estimated delivery",
|
|
127
|
+
"secure_checkout": "Secure checkout",
|
|
128
|
+
"payment_methods": "We accept",
|
|
129
|
+
"cart_drawer": "Cart drawer",
|
|
130
|
+
"cart_page": "Cart page"
|
|
131
|
+
},
|
|
132
|
+
"customer": {
|
|
133
|
+
"account": {
|
|
134
|
+
"title": "Account",
|
|
135
|
+
"login": "Log in",
|
|
136
|
+
"logout": "Log out",
|
|
137
|
+
"register": "Register",
|
|
138
|
+
"forgot_password": "Forgot password?",
|
|
139
|
+
"reset_password": "Reset password",
|
|
140
|
+
"create_account": "Create account",
|
|
141
|
+
"my_account": "My account",
|
|
142
|
+
"account_details": "Account details",
|
|
143
|
+
"addresses": "Addresses",
|
|
144
|
+
"orders": "Orders",
|
|
145
|
+
"wishlist": "Wishlist",
|
|
146
|
+
"recently_viewed": "Recently viewed"
|
|
147
|
+
},
|
|
148
|
+
"forms": {
|
|
149
|
+
"email": "Email",
|
|
150
|
+
"password": "Password",
|
|
151
|
+
"confirm_password": "Confirm password",
|
|
152
|
+
"first_name": "First name",
|
|
153
|
+
"last_name": "Last name",
|
|
154
|
+
"phone": "Phone",
|
|
155
|
+
"address": "Address",
|
|
156
|
+
"city": "City",
|
|
157
|
+
"state": "State",
|
|
158
|
+
"zip": "ZIP code",
|
|
159
|
+
"country": "Country",
|
|
160
|
+
"company": "Company",
|
|
161
|
+
"newsletter": "Newsletter",
|
|
162
|
+
"subscribe": "Subscribe to our newsletter",
|
|
163
|
+
"unsubscribe": "Unsubscribe"
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
"footer": {
|
|
167
|
+
"newsletter": {
|
|
168
|
+
"title": "Newsletter",
|
|
169
|
+
"description": "Subscribe to get updates on new products and exclusive offers",
|
|
170
|
+
"email_placeholder": "Enter your email",
|
|
171
|
+
"subscribe": "Subscribe",
|
|
172
|
+
"success": "Thanks for subscribing!",
|
|
173
|
+
"error": "Something went wrong. Please try again."
|
|
174
|
+
},
|
|
175
|
+
"social": {
|
|
176
|
+
"title": "Follow us",
|
|
177
|
+
"facebook": "Facebook",
|
|
178
|
+
"instagram": "Instagram",
|
|
179
|
+
"twitter": "Twitter",
|
|
180
|
+
"youtube": "YouTube",
|
|
181
|
+
"pinterest": "Pinterest"
|
|
182
|
+
},
|
|
183
|
+
"links": {
|
|
184
|
+
"about": "About us",
|
|
185
|
+
"contact": "Contact us",
|
|
186
|
+
"shipping": "Shipping",
|
|
187
|
+
"returns": "Returns",
|
|
188
|
+
"size_guide": "Size guide",
|
|
189
|
+
"privacy": "Privacy policy",
|
|
190
|
+
"terms": "Terms of service",
|
|
191
|
+
"refund": "Refund policy"
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
"errors": {
|
|
195
|
+
"general": {
|
|
196
|
+
"title": "Something went wrong",
|
|
197
|
+
"message": "We're sorry, but something went wrong. Please try again.",
|
|
198
|
+
"retry": "Try again",
|
|
199
|
+
"contact_support": "Contact support"
|
|
200
|
+
},
|
|
201
|
+
"404": {
|
|
202
|
+
"title": "Page not found",
|
|
203
|
+
"message": "The page you're looking for doesn't exist.",
|
|
204
|
+
"go_home": "Go to homepage"
|
|
205
|
+
},
|
|
206
|
+
"cart": {
|
|
207
|
+
"empty": "Your cart is empty",
|
|
208
|
+
"unavailable": "Some items in your cart are no longer available",
|
|
209
|
+
"error": "There was an error updating your cart"
|
|
210
|
+
},
|
|
211
|
+
"checkout": {
|
|
212
|
+
"error": "There was an error processing your order",
|
|
213
|
+
"payment_failed": "Payment failed",
|
|
214
|
+
"shipping_error": "Shipping calculation failed"
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
"sections": {
|
|
218
|
+
"header": {
|
|
219
|
+
"title": "Header",
|
|
220
|
+
"search_placeholder": "Search products...",
|
|
221
|
+
"menu": "Menu",
|
|
222
|
+
"cart": "Cart"
|
|
223
|
+
},
|
|
224
|
+
"footer": {
|
|
225
|
+
"title": "Footer",
|
|
226
|
+
"newsletter_title": "Newsletter",
|
|
227
|
+
"newsletter_description": "Subscribe to get updates on new products and exclusive offers",
|
|
228
|
+
"social_title": "Follow us"
|
|
229
|
+
},
|
|
230
|
+
"hero": {
|
|
231
|
+
"title": "Hero Banner",
|
|
232
|
+
"subtitle": "Discover amazing products at great prices",
|
|
233
|
+
"button_text": "Shop Now"
|
|
234
|
+
},
|
|
235
|
+
"featured_products": {
|
|
236
|
+
"title": "Featured Products",
|
|
237
|
+
"view_all": "View all products"
|
|
238
|
+
},
|
|
239
|
+
"featured_collections": {
|
|
240
|
+
"title": "Featured Collections",
|
|
241
|
+
"view_all": "View all collections"
|
|
242
|
+
},
|
|
243
|
+
"newsletter": {
|
|
244
|
+
"title": "Newsletter",
|
|
245
|
+
"description": "Subscribe to get updates on new products and exclusive offers",
|
|
246
|
+
"email_placeholder": "Enter your email",
|
|
247
|
+
"subscribe": "Subscribe"
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
"date_formats": {
|
|
251
|
+
"month_day_year": "{{ month }} {{ day }}, {{ year }}",
|
|
252
|
+
"day_month_year": "{{ day }} {{ month }} {{ year }}",
|
|
253
|
+
"year_month_day": "{{ year }}-{{ month }}-{{ day }}"
|
|
254
|
+
},
|
|
255
|
+
"currency": {
|
|
256
|
+
"symbol": "$",
|
|
257
|
+
"code": "USD"
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Content Fallback Content
|
|
3
|
+
Used when widgets are not available or widget mode is disabled
|
|
4
|
+
{% endcomment %}
|
|
5
|
+
|
|
6
|
+
<section class="content-section">
|
|
7
|
+
<div class="content-container">
|
|
8
|
+
{% if section.settings.static_content != blank %}
|
|
9
|
+
<div class="content-text">
|
|
10
|
+
{{ section.settings.static_content }}
|
|
11
|
+
</div>
|
|
12
|
+
{% else %}
|
|
13
|
+
<div class="content-text">
|
|
14
|
+
<h2 class="content-title">{{ shop.name }}</h2>
|
|
15
|
+
<p class="content-subtitle">{{ shop.description | default: 'Your trusted online store for quality products.' }}</p>
|
|
16
|
+
</div>
|
|
17
|
+
{% endif %}
|
|
18
|
+
</div>
|
|
19
|
+
</section>
|
|
20
|
+
|
|
21
|
+
<style>
|
|
22
|
+
.content-section {
|
|
23
|
+
padding: 4rem 0;
|
|
24
|
+
background: {{ settings.color_background }};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.content-container {
|
|
28
|
+
max-width: {{ settings.container_width }}px;
|
|
29
|
+
margin: 0 auto;
|
|
30
|
+
padding: 0 1rem;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.content-text {
|
|
34
|
+
text-align: center;
|
|
35
|
+
max-width: 800px;
|
|
36
|
+
margin: 0 auto;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.content-title {
|
|
40
|
+
font-size: 2.5rem;
|
|
41
|
+
font-weight: 700;
|
|
42
|
+
margin: 0 0 1rem 0;
|
|
43
|
+
color: {{ settings.color_text }};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.content-subtitle {
|
|
47
|
+
font-size: 1.125rem;
|
|
48
|
+
line-height: 1.6;
|
|
49
|
+
color: {{ settings.color_text_light }};
|
|
50
|
+
margin: 0;
|
|
51
|
+
}
|
|
52
|
+
</style>
|
|
53
|
+
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Content Section
|
|
3
|
+
|
|
4
|
+
This section renders widgets from the "content" section in order.
|
|
5
|
+
Widgets are rendered one below another, sorted by Position field.
|
|
6
|
+
Supports drag-and-drop ordering in visual editor.
|
|
7
|
+
{% endcomment %}
|
|
8
|
+
|
|
9
|
+
{% assign content_widgets = widgets.content %}
|
|
10
|
+
{% if content_widgets and content_widgets.size > 0 %}
|
|
11
|
+
<section class="theme-section theme-section--content" data-section="content" data-section-id="{{ section.id }}">
|
|
12
|
+
{% for widget in content_widgets %}
|
|
13
|
+
<div class="theme-widget-wrapper"
|
|
14
|
+
data-widget-id="{{ widget.id }}"
|
|
15
|
+
data-widget-type="{{ widget.type }}"
|
|
16
|
+
data-widget-position="{{ widget.Position | default: widget.position | default: forloop.index }}">
|
|
17
|
+
{{ widget | render_widget }}
|
|
18
|
+
</div>
|
|
19
|
+
{% endfor %}
|
|
20
|
+
</section>
|
|
21
|
+
<style>
|
|
22
|
+
.theme-section--content .theme-widget-wrapper {
|
|
23
|
+
display: block;
|
|
24
|
+
margin-bottom: 2rem;
|
|
25
|
+
}
|
|
26
|
+
.theme-section--content .theme-widget-wrapper:last-child {
|
|
27
|
+
margin-bottom: 0;
|
|
28
|
+
}
|
|
29
|
+
.widget-error {
|
|
30
|
+
padding: 1rem;
|
|
31
|
+
background: #fee2e2;
|
|
32
|
+
border: 1px solid #fecaca;
|
|
33
|
+
border-radius: 0.5rem;
|
|
34
|
+
color: #991b1b;
|
|
35
|
+
font-size: 0.875rem;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
38
|
+
{% else %}
|
|
39
|
+
{% render 'sections/content-fallback' %}
|
|
40
|
+
{% endif %}
|
|
41
|
+
|
|
42
|
+
{% schema %}
|
|
43
|
+
{
|
|
44
|
+
"name": "Content",
|
|
45
|
+
"settings": [
|
|
46
|
+
{
|
|
47
|
+
"type": "paragraph",
|
|
48
|
+
"content": "This section displays widgets from the 'content' section. Widgets are automatically ordered by their Position field and can be reordered in the visual editor."
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
"presets": [
|
|
52
|
+
{
|
|
53
|
+
"name": "Content"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
57
|
+
{% endschema %}
|