rebly-sections 1.0.0
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 +67 -0
- package/assets/SKILL.md +65 -0
- package/assets/commands/section.md +27 -0
- package/assets/commands/theme-init.md +20 -0
- package/assets/data/component-library/_index.csv +19 -0
- package/assets/data/component-library/announcement-bar.liquid +69 -0
- package/assets/data/component-library/blog-posts-grid.liquid +77 -0
- package/assets/data/component-library/collection-list.liquid +71 -0
- package/assets/data/component-library/cta-banner.liquid +58 -0
- package/assets/data/component-library/faq-accordion.liquid +76 -0
- package/assets/data/component-library/features-grid.liquid +94 -0
- package/assets/data/component-library/hero-banner.liquid +104 -0
- package/assets/data/component-library/image-gallery.liquid +77 -0
- package/assets/data/component-library/image-with-text.liquid +84 -0
- package/assets/data/component-library/logo-cloud.liquid +70 -0
- package/assets/data/component-library/newsletter-signup.liquid +72 -0
- package/assets/data/component-library/pricing-table.liquid +101 -0
- package/assets/data/component-library/product-grid.liquid +74 -0
- package/assets/data/component-library/rich-text-content.liquid +52 -0
- package/assets/data/component-library/stats-counter.liquid +73 -0
- package/assets/data/component-library/team-members.liquid +81 -0
- package/assets/data/component-library/testimonials-slider.liquid +93 -0
- package/assets/data/component-library/video-hero.liquid +82 -0
- package/assets/data/data-version.json +19 -0
- package/assets/data/design-tokens.csv +57 -0
- package/assets/data/liquid-stdlib.csv +134 -0
- package/assets/data/schema-library.csv +46 -0
- package/assets/data/shopify-best-practices.csv +36 -0
- package/assets/data/theme-dna.csv +20 -0
- package/assets/scripts/core.py +194 -0
- package/assets/scripts/quality-gate.py +179 -0
- package/assets/scripts/search.py +72 -0
- package/assets/scripts/section-generator.py +202 -0
- package/assets/scripts/theme-init.py +181 -0
- package/assets/templates/generation-prompt.md +31 -0
- package/assets/templates/section-base.liquid +49 -0
- package/assets/templates/theme-profile-template.md +21 -0
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.js +70 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +14 -0
- package/dist/utils/copy-assets.d.ts +1 -0
- package/dist/utils/copy-assets.js +44 -0
- package/dist/utils/detect-platform.d.ts +6 -0
- package/dist/utils/detect-platform.js +18 -0
- package/package.json +35 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Hero Banner | Category: hero | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="hero-banner">
|
|
4
|
+
<div class="hero-banner__inner"
|
|
5
|
+
style="
|
|
6
|
+
--overlay-opacity: {{ section.settings.overlay_opacity | divided_by: 100.0 }};
|
|
7
|
+
--text-color: {{ section.settings.text_color }};
|
|
8
|
+
--min-height: {{ section.settings.min_height }}px;
|
|
9
|
+
">
|
|
10
|
+
|
|
11
|
+
{%- if section.settings.image != blank -%}
|
|
12
|
+
<div class="hero-banner__bg">
|
|
13
|
+
{{- section.settings.image | image_url: width: 1920 | image_tag: loading: 'eager', fetchpriority: 'high', class: 'hero-banner__img' -}}
|
|
14
|
+
</div>
|
|
15
|
+
{%- endif -%}
|
|
16
|
+
|
|
17
|
+
<div class="hero-banner__overlay"></div>
|
|
18
|
+
|
|
19
|
+
{%- for block in section.blocks -%}
|
|
20
|
+
<div {{ block.shopify_attributes }}></div>
|
|
21
|
+
{%- endfor -%}
|
|
22
|
+
|
|
23
|
+
<div class="hero-banner__content hero-banner__content--{{ section.settings.content_position }}">
|
|
24
|
+
{%- if section.settings.heading != blank -%}
|
|
25
|
+
<h1 class="hero-banner__heading">{{ section.settings.heading | escape }}</h1>
|
|
26
|
+
{%- endif -%}
|
|
27
|
+
{%- if section.settings.subtext != blank -%}
|
|
28
|
+
<p class="hero-banner__subtext">{{ section.settings.subtext | escape }}</p>
|
|
29
|
+
{%- endif -%}
|
|
30
|
+
{%- if section.settings.button_label != blank -%}
|
|
31
|
+
<a href="{{ section.settings.button_link }}" class="hero-banner__btn btn">
|
|
32
|
+
{{ section.settings.button_label | escape }}
|
|
33
|
+
</a>
|
|
34
|
+
{%- endif -%}
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
</div>
|
|
38
|
+
</section>
|
|
39
|
+
|
|
40
|
+
<style>
|
|
41
|
+
#section-{{ section.id }} .hero-banner__inner {
|
|
42
|
+
position: relative;
|
|
43
|
+
display: grid;
|
|
44
|
+
place-items: center;
|
|
45
|
+
min-height: var(--min-height, 500px);
|
|
46
|
+
overflow: hidden;
|
|
47
|
+
color: var(--text-color, #ffffff);
|
|
48
|
+
}
|
|
49
|
+
#section-{{ section.id }} .hero-banner__bg,
|
|
50
|
+
#section-{{ section.id }} .hero-banner__img {
|
|
51
|
+
position: absolute;
|
|
52
|
+
inset: 0;
|
|
53
|
+
width: 100%;
|
|
54
|
+
height: 100%;
|
|
55
|
+
object-fit: cover;
|
|
56
|
+
}
|
|
57
|
+
#section-{{ section.id }} .hero-banner__overlay {
|
|
58
|
+
position: absolute;
|
|
59
|
+
inset: 0;
|
|
60
|
+
background: rgba(0,0,0, var(--overlay-opacity, 0.4));
|
|
61
|
+
}
|
|
62
|
+
#section-{{ section.id }} .hero-banner__content {
|
|
63
|
+
position: relative;
|
|
64
|
+
z-index: 1;
|
|
65
|
+
padding: 2rem;
|
|
66
|
+
max-width: 800px;
|
|
67
|
+
text-align: center;
|
|
68
|
+
}
|
|
69
|
+
#section-{{ section.id }} .hero-banner__content--left { text-align: left; justify-self: start; }
|
|
70
|
+
#section-{{ section.id }} .hero-banner__content--right { text-align: right; justify-self: end; }
|
|
71
|
+
#section-{{ section.id }} .hero-banner__heading { font-size: clamp(2rem, 5vw, 4rem); margin: 0 0 1rem; }
|
|
72
|
+
#section-{{ section.id }} .hero-banner__subtext { font-size: 1.125rem; margin: 0 0 1.5rem; opacity: 0.9; }
|
|
73
|
+
#section-{{ section.id }} .hero-banner__btn { display: inline-block; padding: 0.75rem 2rem; background: #fff; color: #000; text-decoration: none; border-radius: 4px; font-weight: 600; }
|
|
74
|
+
@media (max-width: 749px) {
|
|
75
|
+
#section-{{ section.id }} .hero-banner__content { padding: 1.5rem; }
|
|
76
|
+
#section-{{ section.id }} .hero-banner__content--left,
|
|
77
|
+
#section-{{ section.id }} .hero-banner__content--right { text-align: center; justify-self: center; }
|
|
78
|
+
}
|
|
79
|
+
</style>
|
|
80
|
+
|
|
81
|
+
{% schema %}
|
|
82
|
+
{
|
|
83
|
+
"name": "Hero Banner",
|
|
84
|
+
"tag": "section",
|
|
85
|
+
"class": "section-hero-banner",
|
|
86
|
+
"settings": [
|
|
87
|
+
{ "type": "image_picker", "id": "image", "label": "Background Image" },
|
|
88
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Welcome to our store" },
|
|
89
|
+
{ "type": "text", "id": "subtext", "label": "Subtext", "default": "Discover our collection" },
|
|
90
|
+
{ "type": "text", "id": "button_label", "label": "Button Label", "default": "Shop Now" },
|
|
91
|
+
{ "type": "url", "id": "button_link", "label": "Button Link" },
|
|
92
|
+
{ "type": "range", "id": "overlay_opacity", "label": "Overlay Opacity", "min": 0, "max": 80, "step": 5, "default": 40 },
|
|
93
|
+
{ "type": "range", "id": "min_height", "label": "Min Height (px)", "min": 300, "max": 900, "step": 50, "default": 500 },
|
|
94
|
+
{ "type": "color", "id": "text_color", "label": "Text Color", "default": "#ffffff" },
|
|
95
|
+
{ "type": "select", "id": "content_position", "label": "Content Position", "options": [
|
|
96
|
+
{ "value": "left", "label": "Left" },
|
|
97
|
+
{ "value": "center", "label": "Center" },
|
|
98
|
+
{ "value": "right", "label": "Right" }
|
|
99
|
+
], "default": "center" }
|
|
100
|
+
],
|
|
101
|
+
"blocks": [{ "type": "@app" }],
|
|
102
|
+
"presets": [{ "name": "Hero Banner" }]
|
|
103
|
+
}
|
|
104
|
+
{% endschema %}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Image Gallery | Category: media | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="image-gallery">
|
|
4
|
+
<div class="image-gallery__container">
|
|
5
|
+
|
|
6
|
+
{%- if section.settings.heading != blank -%}
|
|
7
|
+
<h2 class="image-gallery__heading">{{ section.settings.heading | escape }}</h2>
|
|
8
|
+
{%- endif -%}
|
|
9
|
+
|
|
10
|
+
<div class="image-gallery__grid" style="--cols: {{ section.settings.columns }};">
|
|
11
|
+
{%- for block in section.blocks -%}
|
|
12
|
+
{%- if block.type == 'gallery-item' -%}
|
|
13
|
+
<div class="image-gallery__item" {{ block.shopify_attributes }}>
|
|
14
|
+
{%- if block.settings.image != blank -%}
|
|
15
|
+
{%- if section.settings.enable_lightbox -%}
|
|
16
|
+
<a
|
|
17
|
+
href="{{ block.settings.image | image_url: width: 1600 }}"
|
|
18
|
+
class="image-gallery__link"
|
|
19
|
+
data-lightbox="gallery-{{ section.id }}"
|
|
20
|
+
data-title="{{ block.settings.caption | escape }}"
|
|
21
|
+
>
|
|
22
|
+
{%- endif -%}
|
|
23
|
+
{{- block.settings.image | image_url: width: 600 | image_tag: loading: 'lazy', alt: block.settings.caption, class: 'image-gallery__img' -}}
|
|
24
|
+
{%- if section.settings.enable_lightbox -%}</a>{%- endif -%}
|
|
25
|
+
{%- if block.settings.caption != blank -%}
|
|
26
|
+
<p class="image-gallery__caption">{{ block.settings.caption | escape }}</p>
|
|
27
|
+
{%- endif -%}
|
|
28
|
+
{%- else -%}
|
|
29
|
+
{{ 'image' | placeholder_svg_tag: 'image-gallery__img' }}
|
|
30
|
+
{%- endif -%}
|
|
31
|
+
</div>
|
|
32
|
+
{%- endif -%}
|
|
33
|
+
{%- endfor -%}
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
</div>
|
|
37
|
+
</section>
|
|
38
|
+
|
|
39
|
+
<style>
|
|
40
|
+
#section-{{ section.id }} .image-gallery__container { max-width: 1200px; margin: 0 auto; padding: 4rem 2rem; }
|
|
41
|
+
#section-{{ section.id }} .image-gallery__heading { font-size: 2rem; text-align: center; margin: 0 0 2rem; }
|
|
42
|
+
#section-{{ section.id }} .image-gallery__grid { display: grid; grid-template-columns: repeat(var(--cols, 3), 1fr); gap: 1rem; }
|
|
43
|
+
#section-{{ section.id }} .image-gallery__item { position: relative; overflow: hidden; border-radius: 4px; }
|
|
44
|
+
#section-{{ section.id }} .image-gallery__img { width: 100%; aspect-ratio: 1; object-fit: cover; display: block; transition: transform 0.3s; }
|
|
45
|
+
#section-{{ section.id }} .image-gallery__item:hover .image-gallery__img { transform: scale(1.04); }
|
|
46
|
+
#section-{{ section.id }} .image-gallery__link { display: block; overflow: hidden; }
|
|
47
|
+
#section-{{ section.id }} .image-gallery__caption { font-size: 0.85rem; opacity: 0.7; padding: 0.4rem 0; text-align: center; }
|
|
48
|
+
@media (max-width: 749px) { #section-{{ section.id }} .image-gallery__grid { grid-template-columns: repeat(2, 1fr); } }
|
|
49
|
+
</style>
|
|
50
|
+
|
|
51
|
+
{% schema %}
|
|
52
|
+
{
|
|
53
|
+
"name": "Image Gallery",
|
|
54
|
+
"tag": "section",
|
|
55
|
+
"class": "section-image-gallery",
|
|
56
|
+
"settings": [
|
|
57
|
+
{ "type": "text", "id": "heading", "label": "Heading" },
|
|
58
|
+
{ "type": "range", "id": "columns", "label": "Columns", "min": 2, "max": 5, "step": 1, "default": 3 },
|
|
59
|
+
{ "type": "checkbox", "id": "enable_lightbox", "label": "Enable Lightbox Links", "default": false }
|
|
60
|
+
],
|
|
61
|
+
"blocks": [
|
|
62
|
+
{
|
|
63
|
+
"type": "gallery-item",
|
|
64
|
+
"name": "Image",
|
|
65
|
+
"settings": [
|
|
66
|
+
{ "type": "image_picker", "id": "image", "label": "Image" },
|
|
67
|
+
{ "type": "text", "id": "caption", "label": "Caption" }
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
{ "type": "@app" }
|
|
71
|
+
],
|
|
72
|
+
"presets": [{
|
|
73
|
+
"name": "Image Gallery",
|
|
74
|
+
"blocks": [{ "type": "gallery-item" }, { "type": "gallery-item" }, { "type": "gallery-item" }, { "type": "gallery-item" }, { "type": "gallery-item" }, { "type": "gallery-item" }]
|
|
75
|
+
}]
|
|
76
|
+
}
|
|
77
|
+
{% endschema %}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Image with Text | Category: content | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="image-with-text">
|
|
4
|
+
<div class="image-with-text__grid image-with-text__grid--{{ section.settings.image_position }} image-with-text__grid--{{ section.settings.image_width }}">
|
|
5
|
+
|
|
6
|
+
<div class="image-with-text__media">
|
|
7
|
+
{%- if section.settings.image != blank -%}
|
|
8
|
+
{{- section.settings.image | image_url: width: 800 | image_tag: loading: 'lazy', class: 'image-with-text__img' -}}
|
|
9
|
+
{%- else -%}
|
|
10
|
+
{{ 'image' | placeholder_svg_tag: 'image-with-text__img placeholder' }}
|
|
11
|
+
{%- endif -%}
|
|
12
|
+
</div>
|
|
13
|
+
|
|
14
|
+
{%- for block in section.blocks -%}<div {{ block.shopify_attributes }}></div>{%- endfor -%}
|
|
15
|
+
|
|
16
|
+
<div class="image-with-text__body">
|
|
17
|
+
{%- if section.settings.heading != blank -%}
|
|
18
|
+
<h2 class="image-with-text__heading">{{ section.settings.heading | escape }}</h2>
|
|
19
|
+
{%- endif -%}
|
|
20
|
+
{%- if section.settings.text != blank -%}
|
|
21
|
+
<div class="image-with-text__text rte">{{ section.settings.text }}</div>
|
|
22
|
+
{%- endif -%}
|
|
23
|
+
{%- if section.settings.button_label != blank -%}
|
|
24
|
+
<a href="{{ section.settings.button_link }}" class="image-with-text__btn btn">
|
|
25
|
+
{{ section.settings.button_label | escape }}
|
|
26
|
+
</a>
|
|
27
|
+
{%- endif -%}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
</section>
|
|
32
|
+
|
|
33
|
+
<style>
|
|
34
|
+
#section-{{ section.id }} .image-with-text__grid {
|
|
35
|
+
display: grid;
|
|
36
|
+
grid-template-columns: 1fr 1fr;
|
|
37
|
+
gap: 2rem;
|
|
38
|
+
align-items: center;
|
|
39
|
+
padding: 4rem 2rem;
|
|
40
|
+
max-width: 1200px;
|
|
41
|
+
margin: 0 auto;
|
|
42
|
+
}
|
|
43
|
+
#section-{{ section.id }} .image-with-text__grid--small { grid-template-columns: 1fr 2fr; }
|
|
44
|
+
#section-{{ section.id }} .image-with-text__grid--large { grid-template-columns: 2fr 1fr; }
|
|
45
|
+
#section-{{ section.id }} .image-with-text__grid--right .image-with-text__media { order: 2; }
|
|
46
|
+
#section-{{ section.id }} .image-with-text__grid--right .image-with-text__body { order: 1; }
|
|
47
|
+
#section-{{ section.id }} .image-with-text__img { width: 100%; height: auto; display: block; border-radius: 4px; }
|
|
48
|
+
#section-{{ section.id }} .image-with-text__heading { font-size: 2rem; margin: 0 0 1rem; }
|
|
49
|
+
#section-{{ section.id }} .image-with-text__text { margin: 0 0 1.5rem; line-height: 1.6; }
|
|
50
|
+
#section-{{ section.id }} .image-with-text__btn { display: inline-block; padding: 0.75rem 1.5rem; background: currentColor; color: #fff; text-decoration: none; border-radius: 4px; }
|
|
51
|
+
@media (max-width: 749px) {
|
|
52
|
+
#section-{{ section.id }} .image-with-text__grid,
|
|
53
|
+
#section-{{ section.id }} .image-with-text__grid--small,
|
|
54
|
+
#section-{{ section.id }} .image-with-text__grid--large { grid-template-columns: 1fr; }
|
|
55
|
+
#section-{{ section.id }} .image-with-text__grid--right .image-with-text__media { order: 0; }
|
|
56
|
+
#section-{{ section.id }} .image-with-text__grid--right .image-with-text__body { order: 0; }
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
|
|
60
|
+
{% schema %}
|
|
61
|
+
{
|
|
62
|
+
"name": "Image with Text",
|
|
63
|
+
"tag": "section",
|
|
64
|
+
"class": "section-image-with-text",
|
|
65
|
+
"settings": [
|
|
66
|
+
{ "type": "image_picker", "id": "image", "label": "Image" },
|
|
67
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Image with text" },
|
|
68
|
+
{ "type": "richtext", "id": "text", "label": "Text", "default": "<p>Pair text with an image to focus on your chosen product.</p>" },
|
|
69
|
+
{ "type": "text", "id": "button_label", "label": "Button Label" },
|
|
70
|
+
{ "type": "url", "id": "button_link", "label": "Button Link" },
|
|
71
|
+
{ "type": "select", "id": "image_position", "label": "Image Position", "options": [
|
|
72
|
+
{ "value": "left", "label": "Left" },
|
|
73
|
+
{ "value": "right", "label": "Right" }
|
|
74
|
+
], "default": "left" },
|
|
75
|
+
{ "type": "select", "id": "image_width", "label": "Image Width", "options": [
|
|
76
|
+
{ "value": "medium", "label": "Medium (50/50)" },
|
|
77
|
+
{ "value": "small", "label": "Small (33/66)" },
|
|
78
|
+
{ "value": "large", "label": "Large (66/33)" }
|
|
79
|
+
], "default": "medium" }
|
|
80
|
+
],
|
|
81
|
+
"blocks": [{ "type": "@app" }],
|
|
82
|
+
"presets": [{ "name": "Image with Text" }]
|
|
83
|
+
}
|
|
84
|
+
{% endschema %}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Logo Cloud | Category: social-proof | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="logo-cloud">
|
|
4
|
+
<div class="logo-cloud__container">
|
|
5
|
+
|
|
6
|
+
{%- if section.settings.heading != blank -%}
|
|
7
|
+
<h2 class="logo-cloud__heading">{{ section.settings.heading | escape }}</h2>
|
|
8
|
+
{%- endif -%}
|
|
9
|
+
|
|
10
|
+
<div class="logo-cloud__grid" style="--per-row: {{ section.settings.logos_per_row }};">
|
|
11
|
+
{%- for block in section.blocks -%}
|
|
12
|
+
{%- if block.type == 'logo-item' -%}
|
|
13
|
+
<div class="logo-cloud__item" {{ block.shopify_attributes }}>
|
|
14
|
+
{%- if block.settings.link != blank -%}
|
|
15
|
+
<a href="{{ block.settings.link }}" class="logo-cloud__link" aria-label="{{ block.settings.alt_text | default: 'Partner logo' }}">
|
|
16
|
+
{%- endif -%}
|
|
17
|
+
{%- if block.settings.image != blank -%}
|
|
18
|
+
{{- block.settings.image | image_url: width: 200 | image_tag: loading: 'lazy', alt: block.settings.alt_text -}}
|
|
19
|
+
{%- else -%}
|
|
20
|
+
{{ 'image' | placeholder_svg_tag: 'logo-cloud__placeholder' }}
|
|
21
|
+
{%- endif -%}
|
|
22
|
+
{%- if block.settings.link != blank -%}
|
|
23
|
+
</a>
|
|
24
|
+
{%- endif -%}
|
|
25
|
+
</div>
|
|
26
|
+
{%- endif -%}
|
|
27
|
+
{%- endfor -%}
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
</section>
|
|
32
|
+
|
|
33
|
+
<style>
|
|
34
|
+
#section-{{ section.id }} .logo-cloud__container { max-width: 1100px; margin: 0 auto; padding: 3rem 2rem; }
|
|
35
|
+
#section-{{ section.id }} .logo-cloud__heading { text-align: center; font-size: 1.25rem; opacity: 0.6; margin: 0 0 2rem; text-transform: uppercase; letter-spacing: 0.1em; }
|
|
36
|
+
#section-{{ section.id }} .logo-cloud__grid { display: grid; grid-template-columns: repeat(var(--per-row, 5), 1fr); gap: 1.5rem 2rem; align-items: center; }
|
|
37
|
+
#section-{{ section.id }} .logo-cloud__item { display: flex; justify-content: center; }
|
|
38
|
+
#section-{{ section.id }} .logo-cloud__item img { max-height: 60px; width: auto; max-width: 140px; object-fit: contain; filter: grayscale(1); opacity: 0.65; transition: filter 0.2s, opacity 0.2s; }
|
|
39
|
+
#section-{{ section.id }} .logo-cloud__item img:hover { filter: grayscale(0); opacity: 1; }
|
|
40
|
+
#section-{{ section.id }} .logo-cloud__link { display: flex; }
|
|
41
|
+
@media (max-width: 749px) { #section-{{ section.id }} .logo-cloud__grid { grid-template-columns: repeat(3, 1fr); } }
|
|
42
|
+
</style>
|
|
43
|
+
|
|
44
|
+
{% schema %}
|
|
45
|
+
{
|
|
46
|
+
"name": "Logo Cloud",
|
|
47
|
+
"tag": "section",
|
|
48
|
+
"class": "section-logo-cloud",
|
|
49
|
+
"settings": [
|
|
50
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Trusted by" },
|
|
51
|
+
{ "type": "range", "id": "logos_per_row", "label": "Logos Per Row", "min": 3, "max": 7, "step": 1, "default": 5 }
|
|
52
|
+
],
|
|
53
|
+
"blocks": [
|
|
54
|
+
{
|
|
55
|
+
"type": "logo-item",
|
|
56
|
+
"name": "Logo",
|
|
57
|
+
"settings": [
|
|
58
|
+
{ "type": "image_picker", "id": "image", "label": "Logo Image" },
|
|
59
|
+
{ "type": "url", "id": "link", "label": "Link" },
|
|
60
|
+
{ "type": "text", "id": "alt_text", "label": "Alt Text" }
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{ "type": "@app" }
|
|
64
|
+
],
|
|
65
|
+
"presets": [{
|
|
66
|
+
"name": "Logo Cloud",
|
|
67
|
+
"blocks": [{ "type": "logo-item" }, { "type": "logo-item" }, { "type": "logo-item" }, { "type": "logo-item" }, { "type": "logo-item" }]
|
|
68
|
+
}]
|
|
69
|
+
}
|
|
70
|
+
{% endschema %}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Newsletter Signup | Category: conversion | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="newsletter-signup" style="--bg: {{ section.settings.background_color }};">
|
|
4
|
+
<div class="newsletter-signup__container">
|
|
5
|
+
|
|
6
|
+
{%- for block in section.blocks -%}<div {{ block.shopify_attributes }}></div>{%- endfor -%}
|
|
7
|
+
|
|
8
|
+
{%- if section.settings.heading != blank -%}
|
|
9
|
+
<h2 class="newsletter-signup__heading">{{ section.settings.heading | escape }}</h2>
|
|
10
|
+
{%- endif -%}
|
|
11
|
+
{%- if section.settings.subtext != blank -%}
|
|
12
|
+
<p class="newsletter-signup__subtext">{{ section.settings.subtext | escape }}</p>
|
|
13
|
+
{%- endif -%}
|
|
14
|
+
|
|
15
|
+
{%- form 'customer', id: 'newsletter-form-{{ section.id }}', class: 'newsletter-signup__form' -%}
|
|
16
|
+
<input type="hidden" name="contact[tags]" value="newsletter">
|
|
17
|
+
<div class="newsletter-signup__fields">
|
|
18
|
+
<label for="email-{{ section.id }}" class="visually-hidden">Email address</label>
|
|
19
|
+
<input
|
|
20
|
+
type="email"
|
|
21
|
+
id="email-{{ section.id }}"
|
|
22
|
+
name="contact[email]"
|
|
23
|
+
class="newsletter-signup__input"
|
|
24
|
+
placeholder="your@email.com"
|
|
25
|
+
required
|
|
26
|
+
autocomplete="email"
|
|
27
|
+
>
|
|
28
|
+
<button type="submit" class="newsletter-signup__btn">
|
|
29
|
+
{{ section.settings.button_label | default: 'Subscribe' | escape }}
|
|
30
|
+
</button>
|
|
31
|
+
</div>
|
|
32
|
+
{%- if form.posted_successfully? -%}
|
|
33
|
+
<p class="newsletter-signup__success">{{ section.settings.success_message | escape }}</p>
|
|
34
|
+
{%- endif -%}
|
|
35
|
+
{%- if form.errors -%}
|
|
36
|
+
<p class="newsletter-signup__error">{{ form.errors.translated_fields['email'] | capitalize }} {{ form.errors.messages['email'] }}</p>
|
|
37
|
+
{%- endif -%}
|
|
38
|
+
{%- endform -%}
|
|
39
|
+
|
|
40
|
+
</div>
|
|
41
|
+
</section>
|
|
42
|
+
|
|
43
|
+
<style>
|
|
44
|
+
#section-{{ section.id }} { background: var(--bg, #f5f5f5); }
|
|
45
|
+
#section-{{ section.id }} .newsletter-signup__container { max-width: 600px; margin: 0 auto; padding: 4rem 2rem; text-align: center; }
|
|
46
|
+
#section-{{ section.id }} .newsletter-signup__heading { font-size: 2rem; margin: 0 0 0.75rem; }
|
|
47
|
+
#section-{{ section.id }} .newsletter-signup__subtext { opacity: 0.75; margin: 0 0 2rem; }
|
|
48
|
+
#section-{{ section.id }} .newsletter-signup__fields { display: flex; gap: 0.5rem; }
|
|
49
|
+
#section-{{ section.id }} .newsletter-signup__input { flex: 1; padding: 0.75rem 1rem; border: 1px solid rgba(0,0,0,0.2); border-radius: 4px; font-size: 1rem; }
|
|
50
|
+
#section-{{ section.id }} .newsletter-signup__btn { padding: 0.75rem 1.5rem; background: #000; color: #fff; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem; white-space: nowrap; }
|
|
51
|
+
#section-{{ section.id }} .newsletter-signup__success { color: green; margin-top: 1rem; }
|
|
52
|
+
#section-{{ section.id }} .newsletter-signup__error { color: red; margin-top: 1rem; }
|
|
53
|
+
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
|
|
54
|
+
@media (max-width: 749px) { #section-{{ section.id }} .newsletter-signup__fields { flex-direction: column; } }
|
|
55
|
+
</style>
|
|
56
|
+
|
|
57
|
+
{% schema %}
|
|
58
|
+
{
|
|
59
|
+
"name": "Newsletter Signup",
|
|
60
|
+
"tag": "section",
|
|
61
|
+
"class": "section-newsletter-signup",
|
|
62
|
+
"settings": [
|
|
63
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Subscribe to our newsletter" },
|
|
64
|
+
{ "type": "text", "id": "subtext", "label": "Subtext", "default": "Get exclusive deals and updates." },
|
|
65
|
+
{ "type": "text", "id": "button_label", "label": "Button Label", "default": "Subscribe" },
|
|
66
|
+
{ "type": "text", "id": "success_message", "label": "Success Message", "default": "Thanks for subscribing!" },
|
|
67
|
+
{ "type": "color_background", "id": "background_color", "label": "Background Color", "default": "#f5f5f5" }
|
|
68
|
+
],
|
|
69
|
+
"blocks": [{ "type": "@app" }],
|
|
70
|
+
"presets": [{ "name": "Newsletter Signup" }]
|
|
71
|
+
}
|
|
72
|
+
{% endschema %}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Pricing Table | Category: conversion | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="pricing-table">
|
|
4
|
+
<div class="pricing-table__container">
|
|
5
|
+
|
|
6
|
+
{%- if section.settings.heading != blank or section.settings.subheading != blank -%}
|
|
7
|
+
<div class="pricing-table__header">
|
|
8
|
+
{%- if section.settings.heading != blank -%}
|
|
9
|
+
<h2 class="pricing-table__heading">{{ section.settings.heading | escape }}</h2>
|
|
10
|
+
{%- endif -%}
|
|
11
|
+
{%- if section.settings.subheading != blank -%}
|
|
12
|
+
<p class="pricing-table__subheading">{{ section.settings.subheading | escape }}</p>
|
|
13
|
+
{%- endif -%}
|
|
14
|
+
</div>
|
|
15
|
+
{%- endif -%}
|
|
16
|
+
|
|
17
|
+
<div class="pricing-table__tiers">
|
|
18
|
+
{%- for block in section.blocks -%}
|
|
19
|
+
{%- if block.type == 'pricing-tier' -%}
|
|
20
|
+
<div class="pricing-table__tier{% if block.settings.highlighted %} pricing-table__tier--featured{% endif %}" {{ block.shopify_attributes }}>
|
|
21
|
+
{%- if block.settings.plan_name != blank -%}
|
|
22
|
+
<h3 class="pricing-table__plan-name">{{ block.settings.plan_name | escape }}</h3>
|
|
23
|
+
{%- endif -%}
|
|
24
|
+
<div class="pricing-table__price-wrap">
|
|
25
|
+
<span class="pricing-table__price">{{ block.settings.price | escape }}</span>
|
|
26
|
+
{%- if block.settings.period != blank -%}
|
|
27
|
+
<span class="pricing-table__period">/ {{ block.settings.period | escape }}</span>
|
|
28
|
+
{%- endif -%}
|
|
29
|
+
</div>
|
|
30
|
+
{%- if block.settings.features != blank -%}
|
|
31
|
+
<ul class="pricing-table__features">
|
|
32
|
+
{%- assign feature_list = block.settings.features | split: "\n" -%}
|
|
33
|
+
{%- for feature in feature_list -%}
|
|
34
|
+
{%- if feature != blank -%}
|
|
35
|
+
<li>{{ feature | escape }}</li>
|
|
36
|
+
{%- endif -%}
|
|
37
|
+
{%- endfor -%}
|
|
38
|
+
</ul>
|
|
39
|
+
{%- endif -%}
|
|
40
|
+
{%- if block.settings.button_label != blank -%}
|
|
41
|
+
<a href="{{ block.settings.button_link }}" class="pricing-table__btn">
|
|
42
|
+
{{ block.settings.button_label | escape }}
|
|
43
|
+
</a>
|
|
44
|
+
{%- endif -%}
|
|
45
|
+
</div>
|
|
46
|
+
{%- endif -%}
|
|
47
|
+
{%- endfor -%}
|
|
48
|
+
</div>
|
|
49
|
+
|
|
50
|
+
</div>
|
|
51
|
+
</section>
|
|
52
|
+
|
|
53
|
+
<style>
|
|
54
|
+
#section-{{ section.id }} .pricing-table__container { max-width: 1100px; margin: 0 auto; padding: 4rem 2rem; }
|
|
55
|
+
#section-{{ section.id }} .pricing-table__header { text-align: center; margin-bottom: 3rem; }
|
|
56
|
+
#section-{{ section.id }} .pricing-table__heading { font-size: 2rem; margin: 0 0 0.75rem; }
|
|
57
|
+
#section-{{ section.id }} .pricing-table__subheading { opacity: 0.7; margin: 0; }
|
|
58
|
+
#section-{{ section.id }} .pricing-table__tiers { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1.5rem; align-items: start; }
|
|
59
|
+
#section-{{ section.id }} .pricing-table__tier { border: 1px solid rgba(0,0,0,0.12); border-radius: 8px; padding: 2rem; }
|
|
60
|
+
#section-{{ section.id }} .pricing-table__tier--featured { border-color: #000; border-width: 2px; box-shadow: 0 4px 20px rgba(0,0,0,0.12); }
|
|
61
|
+
#section-{{ section.id }} .pricing-table__plan-name { font-size: 1.25rem; margin: 0 0 1rem; text-transform: uppercase; letter-spacing: 0.05em; }
|
|
62
|
+
#section-{{ section.id }} .pricing-table__price-wrap { margin-bottom: 1.5rem; }
|
|
63
|
+
#section-{{ section.id }} .pricing-table__price { font-size: 2.5rem; font-weight: 700; }
|
|
64
|
+
#section-{{ section.id }} .pricing-table__period { opacity: 0.6; }
|
|
65
|
+
#section-{{ section.id }} .pricing-table__features { list-style: none; margin: 0 0 2rem; padding: 0; }
|
|
66
|
+
#section-{{ section.id }} .pricing-table__features li { padding: 0.4rem 0; border-bottom: 1px solid rgba(0,0,0,0.07); font-size: 0.95rem; }
|
|
67
|
+
#section-{{ section.id }} .pricing-table__btn { display: block; text-align: center; padding: 0.85rem 1.5rem; background: #000; color: #fff; text-decoration: none; border-radius: 4px; font-weight: 600; }
|
|
68
|
+
#section-{{ section.id }} .pricing-table__tier--featured .pricing-table__btn { background: #000; }
|
|
69
|
+
</style>
|
|
70
|
+
|
|
71
|
+
{% schema %}
|
|
72
|
+
{
|
|
73
|
+
"name": "Pricing Table",
|
|
74
|
+
"tag": "section",
|
|
75
|
+
"class": "section-pricing-table",
|
|
76
|
+
"settings": [
|
|
77
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Simple, Transparent Pricing" },
|
|
78
|
+
{ "type": "text", "id": "subheading", "label": "Subheading" }
|
|
79
|
+
],
|
|
80
|
+
"blocks": [
|
|
81
|
+
{
|
|
82
|
+
"type": "pricing-tier",
|
|
83
|
+
"name": "Pricing Tier",
|
|
84
|
+
"settings": [
|
|
85
|
+
{ "type": "text", "id": "plan_name", "label": "Plan Name", "default": "Basic" },
|
|
86
|
+
{ "type": "text", "id": "price", "label": "Price", "default": "$9" },
|
|
87
|
+
{ "type": "text", "id": "period", "label": "Period", "default": "month" },
|
|
88
|
+
{ "type": "textarea", "id": "features", "label": "Features (one per line)", "default": "Feature one\nFeature two\nFeature three" },
|
|
89
|
+
{ "type": "text", "id": "button_label", "label": "Button Label", "default": "Get Started" },
|
|
90
|
+
{ "type": "url", "id": "button_link", "label": "Button Link" },
|
|
91
|
+
{ "type": "checkbox", "id": "highlighted", "label": "Highlight this tier", "default": false }
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
{ "type": "@app" }
|
|
95
|
+
],
|
|
96
|
+
"presets": [{
|
|
97
|
+
"name": "Pricing Table",
|
|
98
|
+
"blocks": [{ "type": "pricing-tier" }, { "type": "pricing-tier" }, { "type": "pricing-tier" }]
|
|
99
|
+
}]
|
|
100
|
+
}
|
|
101
|
+
{% endschema %}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Product Grid | Category: product | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="product-grid">
|
|
4
|
+
<div class="product-grid__container">
|
|
5
|
+
|
|
6
|
+
{%- if section.settings.heading != blank -%}
|
|
7
|
+
<h2 class="product-grid__heading">{{ section.settings.heading | escape }}</h2>
|
|
8
|
+
{%- endif -%}
|
|
9
|
+
|
|
10
|
+
{%- for block in section.blocks -%}<div {{ block.shopify_attributes }}></div>{%- endfor -%}
|
|
11
|
+
{%- assign collection = collections[section.settings.collection] -%}
|
|
12
|
+
{%- assign products_limit = section.settings.products_to_show -%}
|
|
13
|
+
|
|
14
|
+
<div class="product-grid__items" style="--cols: {{ section.settings.columns }};">
|
|
15
|
+
{%- if collection != blank -%}
|
|
16
|
+
{%- for product in collection.products limit: products_limit -%}
|
|
17
|
+
<div class="product-grid__card">
|
|
18
|
+
<a href="{{ product.url }}" class="product-grid__card-link">
|
|
19
|
+
<div class="product-grid__card-image">
|
|
20
|
+
{{- product.featured_image | image_url: width: 400 | image_tag: loading: 'lazy', alt: product.title -}}
|
|
21
|
+
</div>
|
|
22
|
+
<div class="product-grid__card-info">
|
|
23
|
+
{%- if section.settings.show_vendor and product.vendor != blank -%}
|
|
24
|
+
<p class="product-grid__vendor">{{ product.vendor }}</p>
|
|
25
|
+
{%- endif -%}
|
|
26
|
+
<h3 class="product-grid__card-title">{{ product.title }}</h3>
|
|
27
|
+
{%- if section.settings.show_price -%}
|
|
28
|
+
<p class="product-grid__price">{{ product.price | money }}</p>
|
|
29
|
+
{%- endif -%}
|
|
30
|
+
</div>
|
|
31
|
+
</a>
|
|
32
|
+
</div>
|
|
33
|
+
{%- endfor -%}
|
|
34
|
+
{%- else -%}
|
|
35
|
+
{%- for i in (1..products_limit) -%}
|
|
36
|
+
<div class="product-grid__card">{{ 'product-' | append: i | placeholder_svg_tag: 'product-grid__placeholder' }}</div>
|
|
37
|
+
{%- endfor -%}
|
|
38
|
+
{%- endif -%}
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
</div>
|
|
42
|
+
</section>
|
|
43
|
+
|
|
44
|
+
<style>
|
|
45
|
+
#section-{{ section.id }} .product-grid__container { max-width: 1200px; margin: 0 auto; padding: 4rem 2rem; }
|
|
46
|
+
#section-{{ section.id }} .product-grid__heading { font-size: 2rem; text-align: center; margin: 0 0 2rem; }
|
|
47
|
+
#section-{{ section.id }} .product-grid__items { display: grid; grid-template-columns: repeat(var(--cols, 3), 1fr); gap: 1.5rem; }
|
|
48
|
+
#section-{{ section.id }} .product-grid__card-link { display: block; text-decoration: none; color: inherit; }
|
|
49
|
+
#section-{{ section.id }} .product-grid__card-image img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: 4px; }
|
|
50
|
+
#section-{{ section.id }} .product-grid__card-info { padding: 0.75rem 0; }
|
|
51
|
+
#section-{{ section.id }} .product-grid__card-title { font-size: 1rem; margin: 0 0 0.25rem; }
|
|
52
|
+
#section-{{ section.id }} .product-grid__vendor { font-size: 0.85rem; opacity: 0.6; margin: 0 0 0.25rem; }
|
|
53
|
+
#section-{{ section.id }} .product-grid__price { font-weight: 600; margin: 0; }
|
|
54
|
+
@media (max-width: 989px) { #section-{{ section.id }} .product-grid__items { grid-template-columns: repeat(2, 1fr); } }
|
|
55
|
+
@media (max-width: 749px) { #section-{{ section.id }} .product-grid__items { grid-template-columns: repeat(2, 1fr); } }
|
|
56
|
+
</style>
|
|
57
|
+
|
|
58
|
+
{% schema %}
|
|
59
|
+
{
|
|
60
|
+
"name": "Product Grid",
|
|
61
|
+
"tag": "section",
|
|
62
|
+
"class": "section-product-grid",
|
|
63
|
+
"settings": [
|
|
64
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Featured Products" },
|
|
65
|
+
{ "type": "collection", "id": "collection", "label": "Collection" },
|
|
66
|
+
{ "type": "range", "id": "products_to_show", "label": "Products to Show", "min": 2, "max": 12, "step": 1, "default": 6 },
|
|
67
|
+
{ "type": "range", "id": "columns", "label": "Columns", "min": 2, "max": 4, "step": 1, "default": 3 },
|
|
68
|
+
{ "type": "checkbox", "id": "show_price", "label": "Show Price", "default": true },
|
|
69
|
+
{ "type": "checkbox", "id": "show_vendor", "label": "Show Vendor", "default": false }
|
|
70
|
+
],
|
|
71
|
+
"blocks": [{ "type": "@app" }],
|
|
72
|
+
"presets": [{ "name": "Product Grid" }]
|
|
73
|
+
}
|
|
74
|
+
{% endschema %}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{%- comment -%} rebly-sections: Rich Text Content | Category: content | OS2.0 {%- endcomment -%}
|
|
2
|
+
|
|
3
|
+
<section id="section-{{ section.id }}" class="rich-text-content">
|
|
4
|
+
{%- for block in section.blocks -%}<div {{ block.shopify_attributes }}></div>{%- endfor -%}
|
|
5
|
+
<div class="rich-text-content__container rich-text-content__container--{{ section.settings.content_width }}">
|
|
6
|
+
<div class="rich-text-content__body" style="text-align: {{ section.settings.text_alignment }};">
|
|
7
|
+
{%- if section.settings.heading != blank -%}
|
|
8
|
+
<h2 class="rich-text-content__heading">{{ section.settings.heading | escape }}</h2>
|
|
9
|
+
{%- endif -%}
|
|
10
|
+
{%- if section.settings.text != blank -%}
|
|
11
|
+
<div class="rich-text-content__text rte">{{ section.settings.text }}</div>
|
|
12
|
+
{%- endif -%}
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
</section>
|
|
16
|
+
|
|
17
|
+
<style>
|
|
18
|
+
#section-{{ section.id }} .rich-text-content__container {
|
|
19
|
+
margin: 0 auto;
|
|
20
|
+
padding: 4rem 2rem;
|
|
21
|
+
}
|
|
22
|
+
#section-{{ section.id }} .rich-text-content__container--narrow { max-width: 640px; }
|
|
23
|
+
#section-{{ section.id }} .rich-text-content__container--medium { max-width: 900px; }
|
|
24
|
+
#section-{{ section.id }} .rich-text-content__container--full { max-width: 100%; }
|
|
25
|
+
#section-{{ section.id }} .rich-text-content__heading { font-size: 2rem; margin: 0 0 1.25rem; }
|
|
26
|
+
#section-{{ section.id }} .rich-text-content__text { line-height: 1.7; }
|
|
27
|
+
#section-{{ section.id }} .rich-text-content__text p { margin: 0 0 1rem; }
|
|
28
|
+
@media (max-width: 749px) {
|
|
29
|
+
#section-{{ section.id }} .rich-text-content__container { padding: 2.5rem 1.5rem; }
|
|
30
|
+
#section-{{ section.id }} .rich-text-content__heading { font-size: 1.5rem; }
|
|
31
|
+
}
|
|
32
|
+
</style>
|
|
33
|
+
|
|
34
|
+
{% schema %}
|
|
35
|
+
{
|
|
36
|
+
"name": "Rich Text Content",
|
|
37
|
+
"tag": "section",
|
|
38
|
+
"class": "section-rich-text-content",
|
|
39
|
+
"settings": [
|
|
40
|
+
{ "type": "text", "id": "heading", "label": "Heading", "default": "Talk about your brand" },
|
|
41
|
+
{ "type": "richtext", "id": "text", "label": "Text", "default": "<p>Share information about your brand with your customers. Describe a product, make announcements, or welcome customers to your store.</p>" },
|
|
42
|
+
{ "type": "text_alignment", "id": "text_alignment", "label": "Text Alignment", "default": "center" },
|
|
43
|
+
{ "type": "select", "id": "content_width", "label": "Content Width", "options": [
|
|
44
|
+
{ "value": "narrow", "label": "Narrow" },
|
|
45
|
+
{ "value": "medium", "label": "Medium" },
|
|
46
|
+
{ "value": "full", "label": "Full" }
|
|
47
|
+
], "default": "medium" }
|
|
48
|
+
],
|
|
49
|
+
"blocks": [{ "type": "@app" }],
|
|
50
|
+
"presets": [{ "name": "Rich Text Content" }]
|
|
51
|
+
}
|
|
52
|
+
{% endschema %}
|