Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v4.0.0 #138

Merged
merged 417 commits into from
Oct 9, 2023
Merged
Changes from 1 commit
Commits
Show all changes
417 commits
Select commit Hold shift + click to select a range
25d8970
Update tags.liquid
panoply Feb 26, 2023
91f96d4
testing syntax types
panoply Feb 26, 2023
7c3a2b7
clean up tests
panoply Feb 26, 2023
3825c28
enable hovers
panoply Apr 19, 2023
e85c7bd
align to esthetic formatting
panoply Apr 19, 2023
5ca0481
various completion tests
panoply Apr 19, 2023
01c735d
section formatting tests
panoply Apr 19, 2023
c5a20c7
align with Æsthetic rulesets
panoply Apr 19, 2023
5b9b069
ensure extension does not attempt to run in multi-windows
panoply Apr 19, 2023
04a5bd7
supports enabled_on and disabled_on
panoply Apr 19, 2023
edade64
prevent analysis when a non liquid file passes through window even
panoply Apr 19, 2023
4094c92
fix typo preventing schema block type completions from occuring.
panoply Apr 19, 2023
9da0e9a
Update readme.md
panoply Apr 19, 2023
c691ba9
Update liquidrc.json
panoply Apr 19, 2023
038ffb7
support schema block type comparison of variables
panoply Apr 21, 2023
00c8c17
introduce a "props" key of split object properties
panoply Apr 21, 2023
290609c
locale walks
panoply Apr 21, 2023
ae07032
cleaner code style
panoply Apr 21, 2023
b496657
implement props key logic
panoply Apr 21, 2023
6d17a8c
refine the scoping implementation for regional schema block tokens
panoply Apr 21, 2023
321f438
support schema block.type == comparison completions
panoply Apr 21, 2023
bc5893c
add types
panoply Apr 21, 2023
e865ac1
enabled_on and disabled_on in schema typings
panoply Apr 21, 2023
c84a8d4
updated @liquify/specs
panoply Apr 21, 2023
8f1a872
fixes locale completions
panoply Apr 21, 2023
d30e95d
fuck async
panoply Apr 21, 2023
3aa7612
minor refinements to workspace setup
panoply Apr 21, 2023
98f784b
fixes test case
panoply Apr 21, 2023
8a626db
update release notes of 4.0.0
panoply Apr 21, 2023
161d597
Update readme.md
panoply Apr 21, 2023
0b1a7d4
remove automatic translation filter
panoply Apr 22, 2023
1348e72
Update CompletionProvider.ts
panoply Apr 22, 2023
f3c3ae7
clean up markdown descriptions for settings_schema completions
panoply Apr 22, 2023
8c7b78f
revert props keys
panoply Apr 22, 2023
618651a
align logic for non locale schema settings refs
panoply Apr 22, 2023
d7f3ba6
catch block type variable re-assignments
panoply Apr 22, 2023
80f18cc
ensure ending delimiter in token captures
panoply May 3, 2023
05c9e78
Various parser improvements
panoply May 3, 2023
ddcb95d
remove console.log
panoply May 3, 2023
d694c37
add disposables
panoply May 3, 2023
86e1142
fuck async
panoply May 3, 2023
f7dc15b
support object and property hovers descriptions
panoply May 3, 2023
a4ad129
detect newline character codes
panoply May 3, 2023
ab13556
ensure consumption of ending delimiters
panoply May 3, 2023
c174f53
fixes stats logging to use Æsthetic stats object
panoply May 3, 2023
23a0aaa
patches the external files reads
panoply May 3, 2023
e5ace09
align activation events and limit minification obfuscation
panoply May 3, 2023
856cb6a
lock fuckery
panoply May 3, 2023
b12ef26
various alignments (mostly renaming Æsthetic)
panoply May 3, 2023
6497ddb
fuck the boundary, will likely revert
panoply May 3, 2023
039d426
VSIX for the adventurous
panoply May 3, 2023
6806410
tests
panoply May 3, 2023
73e4b9b
add schema support for locale files
panoply May 3, 2023
dbb82a4
update shopify settings schema
panoply May 3, 2023
220d1a3
update schema stores and impose license
panoply May 3, 2023
197e907
schema generator
panoply May 3, 2023
f1407ea
update grammars to latest specs
panoply May 3, 2023
2ec6b0a
Delete markdown.cjs
panoply May 3, 2023
ca10fb9
import from schema grammars
panoply May 3, 2023
1cae9d9
align with Æsthetic
panoply May 3, 2023
88b3a3f
ignore schema dir
panoply May 3, 2023
36c65c1
update lock
panoply May 3, 2023
30b888f
update configuration model and deps
panoply May 3, 2023
e7d2b9a
align with @liquify/schema
panoply May 4, 2023
54cd210
fix type
panoply May 4, 2023
d3c2d18
clean up
panoply May 4, 2023
4c2c20c
revert to v5.3.0 of vscode-json-language-service
panoply May 4, 2023
22cd2cd
Update pnpm-lock.yaml
panoply May 4, 2023
d1d0e20
use details toggle
panoply May 4, 2023
eb9ea11
Update liquidrc.json
panoply May 4, 2023
1669340
support section groups completions
panoply May 4, 2023
d48d385
provide JSON template snippet
panoply May 4, 2023
b0f2f16
support section groups
panoply May 4, 2023
92a9976
remove quotations from snippets
panoply May 4, 2023
46dd2f9
update grammars to latest shopify theme docs
panoply May 4, 2023
f5be6d7
tests
panoply May 4, 2023
3487d60
Update shopify-liquid-4.0.0.vsix
panoply May 4, 2023
d99b387
fixes esthetic attributes sorting when sortList index
panoply May 17, 2023
7258a34
support settings_schema.json intellisense
panoply May 18, 2023
88f63e8
support color_scheme in sections
panoply May 18, 2023
7240fa7
Create shopify-schema.json
panoply May 18, 2023
a34f247
settings_schema.json JSON store
panoply May 18, 2023
7637ab3
Update pnpm-lock.yaml
panoply May 18, 2023
82c30e0
Update shopify-liquid-4.0.0.vsix
panoply May 18, 2023
006f0a8
Update FileSystemWatcher.ts
panoply May 18, 2023
dd27847
update stores for locales and settings_schema.json when changed
panoply May 18, 2023
9c2026f
begin support for CSS embedded region intelliSense 1/3
panoply May 18, 2023
c0a5f13
fixes updates in locale and settings_schema.json files
panoply May 18, 2023
8bd299a
Update events.ts
panoply Jul 15, 2023
8da5139
Update extension.ts
panoply Jul 15, 2023
94c8bff
Update providers.ts
panoply Jul 15, 2023
cb05cb9
Update files.ts
panoply Jul 15, 2023
6d4bdd2
Update store.ts
panoply Jul 15, 2023
3dcc0e8
Update WorkspaceSettings.ts
panoply Jul 15, 2023
ebc247f
tests
panoply Jul 15, 2023
8dfd5b5
Update package.json
panoply Jul 15, 2023
1c3013f
Update pnpm-lock.yaml
panoply Jul 15, 2023
b43acfe
Update liquidrc.json
panoply Jul 15, 2023
a63c42c
Update shopify-liquid-4.0.0.vsix
panoply Jul 15, 2023
60ae221
fixes type section schema completion
panoply Jul 16, 2023
c685f06
negate errors when invalid file refs from within liquidrc
panoply Jul 16, 2023
349d29d
bump @liquify/schema version
panoply Jul 16, 2023
b376c20
supports Liquid Doc structures
panoply Jul 17, 2023
be7e34e
formats
panoply Jul 17, 2023
b2aebda
return type
panoply Jul 17, 2023
3a1a8de
update release notes
panoply Jul 17, 2023
c94e6db
update liquidrc deprecation notice
panoply Jul 17, 2023
91fe0e0
minor edits
panoply Jul 17, 2023
5613415
v bump schema with new deprecation message
panoply Jul 17, 2023
2a5780e
update vsix
panoply Jul 17, 2023
a8d402c
update readme
panoply Jul 24, 2023
eec4cb6
v0.5.4 of @liquify/schema
panoply Jul 24, 2023
9ae85f7
v0.2.2 of @liquify/specs
panoply Jul 24, 2023
25ec33b
minor improvements to log output grammars
panoply Jul 24, 2023
22584c9
Fixes #162
panoply Jul 24, 2023
ca109ac
align file typings
panoply Jul 24, 2023
bbc432f
remove unused
panoply Jul 24, 2023
f07b542
improve types
panoply Jul 24, 2023
320c908
v0.5.5 of @liquify/schema - support liquid.completion.variables
panoply Jul 24, 2023
a56302a
update information_for_contributors
panoply Jul 24, 2023
dfc8510
finalised readme for v4.0
panoply Jul 25, 2023
951d2c7
include contributors and thanks
panoply Jul 25, 2023
d576fb3
clean up Liquid Tag specific completions
panoply Jul 25, 2023
5d3ac60
add liquid tag specific tokens
panoply Jul 25, 2023
e8a4200
refine workspace types
panoply Jul 25, 2023
02b2371
no async in Æsthetic
panoply Jul 25, 2023
803b2ba
ensure ignore normalisation is imposed for workspace configs
panoply Jul 25, 2023
59bcc65
add esthetic ignores to snippets
panoply Jul 25, 2023
d2f4b68
shared getTokenSpecificCursor fn
panoply Jul 25, 2023
72edccc
additional catch for format ignores uponSave
panoply Jul 25, 2023
c573815
Update extension.ts
panoply Jul 25, 2023
fa43a56
add liquid tag specific completion items
panoply Jul 25, 2023
79156c1
no boundry
panoply Jul 25, 2023
497393c
update dep versions
panoply Jul 25, 2023
29de7e1
tests
panoply Jul 25, 2023
f54f52f
nightly update of VSIX
panoply Jul 25, 2023
41f332f
Update store.ts
panoply Jul 26, 2023
9862495
fixes #161
panoply Jul 26, 2023
b5ad9b2
bump @liquify/schema to 0.5.6
panoply Jul 26, 2023
e734003
update nightly
panoply Aug 3, 2023
434246c
patch 1/3 nightly
panoply Aug 3, 2023
6f7296f
fixes window paths
panoply Aug 3, 2023
71a2634
patch 2/3 nightly
panoply Aug 3, 2023
774d860
1 / 2 support for local arguments ft @davidwarrington
panoply Aug 4, 2023
76cba35
fixes posix paths for markdown descriptions
panoply Aug 4, 2023
9e09f6f
translation filter injection
panoply Aug 4, 2023
170dab3
minor patches
panoply Aug 4, 2023
aaa2fa3
3 / 3 Patch Nightly
panoply Aug 4, 2023
2becf2f
Support Liquid within {% style %} embedded code blocks
panoply Aug 4, 2023
09bbef0
patches Æsthetic ignores
panoply Aug 5, 2023
9a885cf
Update readme.md
panoply Aug 14, 2023
ce070cb
tests
panoply Aug 14, 2023
223942d
update latests object string and numeric types
panoply Aug 14, 2023
2ae0681
update deps
panoply Aug 14, 2023
70f3b0f
Update events.ts
panoply Aug 14, 2023
2109039
Revert "update deps"
panoply Aug 14, 2023
e88bb06
update latest nightly
panoply Aug 14, 2023
0b86c00
provide COM enum
panoply Aug 16, 2023
5a99825
support translation arguments
panoply Aug 16, 2023
46356f5
translation / locale completion support
panoply Aug 16, 2023
516b939
respect Æsthetic log colors ignore
panoply Aug 16, 2023
05315a6
update store refs
panoply Aug 16, 2023
08c3d8a
translation insertion
panoply Aug 16, 2023
11624e0
Update schema.ts
panoply Aug 16, 2023
1f6fcdc
cursor token detection for translation args
panoply Aug 16, 2023
9a95307
update package
panoply Aug 16, 2023
e13d886
Update pnpm-lock.yaml
panoply Aug 16, 2023
3164da2
Update liquidrc.json
panoply Aug 16, 2023
143640f
schema stores
panoply Aug 16, 2023
e62f7b0
numbers for Æsthetic thrown errors
panoply Aug 16, 2023
a6d3dd8
tests
panoply Aug 16, 2023
280b4f8
Update .liquidrc
panoply Aug 16, 2023
ed576e2
tsconfig fuckery
panoply Aug 16, 2023
0d0efb0
update nightly
panoply Aug 16, 2023
3987407
fixes numeric syntax captures and improves injectables
panoply Aug 17, 2023
af467b6
syntax highlighting test cases
panoply Aug 17, 2023
102c4bd
include meta.embedded.block.liquid injection
panoply Aug 17, 2023
7ab1aba
Update liquid-css.language-configuration.json
panoply Aug 17, 2023
b7f6a43
update grammar injection to support range based spreads
panoply Aug 17, 2023
2b3798f
change contentName
panoply Aug 17, 2023
82db5d2
support TOML for 11ty frontmatter
panoply Aug 17, 2023
3ef052d
Update css.tmLanguage.json
panoply Aug 17, 2023
a13c343
fixes Liquid in CSS style infusion.
panoply Aug 17, 2023
125097a
syntax tests
panoply Aug 17, 2023
c55db5b
provide LiquidTouch enum
panoply Aug 17, 2023
4c239ce
fix block comments
panoply Aug 17, 2023
13f281f
refactor config.baseUrl - config.baseDir
panoply Aug 17, 2023
112dc21
add a basic line for cleaner output logs
panoply Aug 17, 2023
a21ae54
rename scope
panoply Aug 17, 2023
aa2a248
update texts
panoply Aug 17, 2023
426bb85
baseUrl to baseDir
panoply Aug 17, 2023
b4a6f3f
Update store.ts
panoply Aug 17, 2023
2c759f7
added new "touch" method and removed preserveInternal
panoply Aug 17, 2023
00dec63
update liquidrc schema store
panoply Aug 17, 2023
32eef19
improve log grammars
panoply Aug 17, 2023
2adff06
notes
panoply Aug 17, 2023
47a5fa4
update readme to align with configDir
panoply Aug 17, 2023
d75c3d9
ensure activation
panoply Aug 17, 2023
ebea347
better catches
panoply Aug 17, 2023
359505e
update @liquify/schema
panoply Aug 17, 2023
02a1879
additional models
panoply Aug 17, 2023
41b721d
align contributions
panoply Aug 17, 2023
3ed3b9a
update nightly
panoply Aug 17, 2023
ed0c137
Update readme.md
panoply Aug 18, 2023
43d51a2
remove generate commands for recommend
panoply Aug 22, 2023
759c219
pass in listener on instance
panoply Aug 22, 2023
f294f60
listen event is now globally accessible
panoply Aug 22, 2023
90e9386
instance digests listener
panoply Aug 22, 2023
19531af
fixes formatting command
panoply Aug 22, 2023
c854979
revert line comments
panoply Aug 22, 2023
63256e4
defaults folding strategy
panoply Aug 22, 2023
7786c74
tests
panoply Aug 22, 2023
3496bb3
Update shopify-liquid-4.0.0.vsix
panoply Aug 23, 2023
f10cdc2
defaults baseDir
panoply Aug 23, 2023
f3d2fbf
fix file example reference
panoply Aug 23, 2023
00fec2b
support document links
panoply Oct 8, 2023
5999787
Update liquid.ts
panoply Oct 8, 2023
320c894
support shared schema intellisense
panoply Oct 8, 2023
512d90a
align store
panoply Oct 8, 2023
5f29b8c
support shared schema events
panoply Oct 8, 2023
cea3752
expose shared schema
panoply Oct 8, 2023
e5eee54
fixes documentation renders within schema tags
panoply Oct 8, 2023
bf84a42
extend parse helpers
panoply Oct 8, 2023
5911f55
extends support to embedded schema regions
panoply Oct 8, 2023
596d67c
Update providers.ts
panoply Oct 8, 2023
1673cab
Update CodeLensProvider.ts
panoply Oct 8, 2023
d57ec39
change map refs
panoply Oct 8, 2023
70e77f8
Update DocumentLinkProvider.ts
panoply Oct 8, 2023
ff0b4e5
fail gracefully
panoply Oct 8, 2023
7197652
various improvements
panoply Oct 8, 2023
af413dc
Update completions.ts
panoply Oct 8, 2023
4abb389
Update files.ts
panoply Oct 8, 2023
b2d7065
Update schema.ts
panoply Oct 8, 2023
8394aed
Update store.ts
panoply Oct 8, 2023
76540d1
Update workspace.ts
panoply Oct 8, 2023
6f44218
Update utils.ts
panoply Oct 8, 2023
f2cfda7
various refactors and improvements
panoply Oct 8, 2023
11a7342
icons
panoply Oct 8, 2023
e4a5644
syncify json stores
panoply Oct 8, 2023
0a247e5
Update pnpm-lock.yaml
panoply Oct 8, 2023
c7ca468
add notes on shared schema
panoply Oct 8, 2023
316f680
Update liquidrc.json
panoply Oct 8, 2023
77489ed
provide latest schema stores
panoply Oct 8, 2023
4951540
Update schemas.cjs
panoply Oct 8, 2023
0557686
usage permissions
panoply Oct 8, 2023
4adec76
tests
panoply Oct 8, 2023
f74eb46
prepare for v4.0
panoply Oct 9, 2023
75aacf6
Update readme.md
panoply Oct 9, 2023
66d32e1
ensure liquidrc generate works
panoply Oct 9, 2023
34d9c6d
v4.0.0
panoply Oct 9, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
update nightly
panoply committed Aug 3, 2023

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
commit e734003ef39c4ca8c4607c3bf821b92d8f225a9f
Binary file modified shopify-liquid-4.0.0.vsix
Binary file not shown.
17 changes: 11 additions & 6 deletions test/.liquidrc
Original file line number Diff line number Diff line change
@@ -16,28 +16,33 @@
"./ignores/ignore.liquid",
"./syntax/*"
],
"wrap": 100,
"wrap": 0,
"crlf": false,
"indentSize": 2,
"preserveLine": 2,
"endNewline": true,
"liquid": {
"commentIndent": true,
"commentNewline": true,
"delimiterPlacement": "force",
"forceArgument": 0,
"forceFilter": 3,
"delimiterPlacement": "consistent",
"delimiterTrims": "preserve",
"ignoreTagList": [
"capture"
],
"lineBreakSeparator": "before",
"lineBreakSeparator": "after",
"normalizeSpacing": true,
"preserveComment": false,
"quoteConvert": "single"
},
"markup": {
"ignoreJS": true,
"ignoreJSON": true,
"ignoreCSS": true
"forceAttribute": 3,
"ignoreJS": false,
"ignoreJSON": false,
"ignoreCSS": false,
"delimiterTerminus": "adapt",
"lineBreakValue": "align"
},
"json": {
"braceAllman": true
821 changes: 813 additions & 8 deletions test/test.liquid
Original file line number Diff line number Diff line change
@@ -1,10 +1,815 @@
{% liquid
<link
rel="stylesheet"
href="{{ 'component-list-menu.css' | asset_url }}"
media="print"
onload="this.media='all'">
<link
rel="stylesheet"
href="{{ 'component-search.css' | asset_url }}"
media="print"
onload="this.media='all'">
<link
rel="stylesheet"
href="{{ 'component-menu-drawer.css' | asset_url }}"
media="print"
onload="this.media='all'">
<link
rel="stylesheet"
href="{{ 'component-cart-notification.css' | asset_url }}"
media="print"
onload="this.media='all'">
<link
rel="stylesheet"
href="{{ 'component-cart-items.css' | asset_url }}"
media="print"
onload="this.media='all'">
{%- if settings.predictive_search_enabled -%}
<link
rel="stylesheet"
href="{{ 'component-price.css' | asset_url }}"
media="print"
onload="this.media='all'">
<link
rel="stylesheet"
href="{{ 'component-loading-overlay.css' | asset_url }}"
media="print"
onload="this.media='all'">
{%- endif -%}
{%- if section.settings.menu_type_desktop == 'mega' -%}
<link
rel="stylesheet"
href="{{ 'component-mega-menu.css' | asset_url }}"
media="print"
onload="this.media='all'">
<noscript>{{ 'component-mega-menu.css' | asset_url | stylesheet_tag }}</noscript>
{%- endif -%}

capture foo
echo 'hello world !'
endcapture
{%- if settings.cart_type == "drawer" -%}
{{ 'component-cart-drawer.css' | asset_url | stylesheet_tag }}
{{ 'component-cart.css' | asset_url | stylesheet_tag }}
{{ 'component-totals.css' | asset_url | stylesheet_tag }}
{{ 'component-price.css' | asset_url | stylesheet_tag }}
{{ 'component-discounts.css' | asset_url | stylesheet_tag }}
{{ 'component-loading-overlay.css' | asset_url | stylesheet_tag }}
{%- endif -%}

comment
something
endcomment
%}
<noscript>{{ 'component-list-menu.css' | asset_url | stylesheet_tag }}</noscript>
<noscript>{{ 'component-search.css' | asset_url | stylesheet_tag }}</noscript>
<noscript>{{ 'component-menu-drawer.css' | asset_url | stylesheet_tag }}</noscript>
<noscript>{{ 'component-cart-notification.css' | asset_url | stylesheet_tag }}</noscript>
<noscript>{{ 'component-cart-items.css' | asset_url | stylesheet_tag }}</noscript>

<style>
header-drawer {
justify-self: start;
margin-left: -1.2rem;
}
{%- if section.settings.sticky_header_type == 'reduce-logo-size' -%}
.scrolled-past-header .header__heading-logo-wrapper {
width: 75%;
}
{%- endif -%}
{%- if section.settings.menu_type_desktop != "drawer" -%}
@media screen and (min-width: 990px) {
header-drawer {
display: none;
}
}
{%- endif -%}
.menu-drawer-container {
display: flex;
}
.list-menu {
list-style: none;
padding: 0;
margin: 0;
}
.list-menu--inline {
display: inline-flex;
flex-wrap: wrap;
}
summary.list-menu__item {
padding-right: 2.7rem;
}
.list-menu__item {
display: flex;
align-items: center;
line-height: calc(1 + 0.3 / var(--font-body-scale));
}
.list-menu__item--link {
text-decoration: none;
padding-bottom: 1rem;
padding-top: 1rem;
line-height: calc(1 + 0.8 / var(--font-body-scale));
}
@media screen and (min-width: 750px) {
.list-menu__item--link {
padding-bottom: 0.5rem;
padding-top: 0.5rem;
}
}
</style>

{%- style -%}
.header {
padding: {{ section.settings.padding_top | times: 0.5 | round: 0 }}
px 3rem{{ section.settings.padding_bottom | times: 0.5 | round: 0 }}
px 3rem;
}

.section-header {
position: sticky;
/* This is for fixing a Safari z-index issue. PR #2147 */
margin-bottom: {{ section.settings.margin_bottom | times: 0.75 | round: 0 }}px;
}

@media screen and (min-width: 750px) {
.section-header {
margin-bottom: {{ section.settings.margin_bottom }}px;
}
}

@media screen and (min-width: 990px) {
.header {
padding-top: {{ section.settings.padding_top }}px;
padding-bottom: {{ section.settings.padding_bottom }}px;
}
}



{%- endstyle -%}

<script src="{{ 'details-disclosure.js' | asset_url }}" defer="defer"></script>
<script src="{{ 'details-modal.js' | asset_url }}" defer="defer"></script>
<script src="{{ 'cart-notification.js' | asset_url }}" defer="defer"></script>
<script src="{{ 'search-form.js' | asset_url }}" defer="defer"></script>
{%- if settings.cart_type == "drawer" -%}
<script src="{{ 'cart-drawer.js' | asset_url }}" defer="defer"></script>
{%- endif -%}

<svg xmlns="http://www.w3.org/2000/svg" class="hidden">
<symbol
id="icon-search"
viewbox="0 0 18 19"
fill="none">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M11.03 11.68A5.784 5.784 0 112.85 3.5a5.784 5.784 0 018.18 8.18zm.26 1.12a6.78 6.78 0 11.72-.7l5.4 5.4a.5.5 0 11-.71.7l-5.41-5.4z"
fill="currentColor" />
</symbol>

<symbol
id="icon-reset"
class="icon icon-close"
fill="none"
viewBox="0 0 18 18"
stroke="currentColor">
<circle
r="8.5"
cy="9"
cx="9"
stroke-opacity="0.2" />
<path
d="M6.82972 6.82915L1.17193 1.17097"
stroke-linecap="round"
stroke-linejoin="round"
transform="translate(5 5)" />
<path
d="M1.22896 6.88502L6.77288 1.11523"
stroke-linecap="round"
stroke-linejoin="round"
transform="translate(5 5)" />
</symbol>

<symbol
id="icon-close"
class="icon icon-close"
fill="none"
viewBox="0 0 18 17">
<path d="M.865 15.978a.5.5 0 00.707.707l7.433-7.431 7.579 7.282a.501.501 0 00.846-.37.5.5 0 00-.153-.351L9.712 8.546l7.417-7.416a.5.5 0 10-.707-.708L8.991 7.853 1.413.573a.5.5 0 10-.693.72l7.563 7.268-7.418 7.417z" fill="currentColor">
</symbol>
</svg>

{%-
liquid
for block in section.blocks
if block.type == '@app'
assign has_app_block = true
endif
endfor
-%}

<{% if section.settings.sticky_header_type != 'none' %}sticky-header data-sticky-type="{{ section.settings.sticky_header_type }}"{% else %}div{% endif %} class="header-wrapper color-{{ section.settings.color_scheme }} gradient{% if section.settings.show_line_separator %} header-wrapper--border-bottom{% endif %}">

{%-
liquid
assign social_links = false
assign localization_forms = false

if settings.social_twitter_link != blank or settings.social_facebook_link != blank or settings.social_pinterest_link != blank or settings.social_instagram_link != blank or settings.social_youtube_link != blank or settings.social_vimeo_link != blank or settings.social_tiktok_link != blank or settings.social_tumblr_link != blank or settings.social_snapchat_link != blank
assign social_links = true
endif

if localization.available_countries.size > 1 and section.settings.enable_country_selector or section.settings.enable_language_selector and localization.available_languages.size > 1
assign localization_forms = true
endif
-%}

<header class=" header header--{{ section.settings.logo_position }} header--mobile-{{
section.settings.mobile_logo_position }} page-width{% if section.settings.menu_type_desktop ==
'drawer' %} drawer-menu{% endif %}{% if section.settings.menu != blank %} header--has-menu{% endif
%}{% if has_app_block %} header--has-app{% endif %}{% if social_links %} header--has-social{% endif
%}{% if shop.customer_accounts_enabled %} header--has-account{% endif %}{% if localization_forms %}
header--has-localizations{% endif %}">

{%-
liquid
if section.settings.menu != blank
render 'header-drawer'
endif

if section.settings.logo_position == 'top-center' or section.settings.menu == blank
render 'header-search', input_id: 'Search-In-Modal-1'
endif
-%}

{%- if section.settings.logo_position != 'middle-center' -%}
{%- if request.page_type == 'index' -%}
<h1 class="header__heading">
{%- endif -%}
<a href="{{ routes.root_url }}" class="header__heading-link link link--text focus-inset">
{%- if settings.logo != blank -%}
<div class="header__heading-logo-wrapper">
{%- assign logo_alt = settings.logo.alt | default: shop.name | escape -%}
{%- assign logo_height = settings.logo_width | divided_by: settings.logo.aspect_ratio -%}


{{ settings.logo | image_url: width: 600 | image_tag: class: 'header__heading-logo motion-reduce', widths: widths, height: logo_height, width: settings.logo_width, alt: logo_alt, sizes: sizes, preload: true }}
</div>
{%- else -%}
<span class="h2">{{ shop.name }}</span>
{%- endif -%}
</a>
{%- if request.page_type == 'index' -%}
</h1>
{%- endif -%}
{%- endif -%}

{%-
liquid
if section.settings.menu != blank
if section.settings.menu_type_desktop == 'dropdown'
render 'header-dropdown-menu'
elsif section.settings.menu_type_desktop != 'drawer'
render 'header-mega-menu'
endif
endif
%}

{%- if section.settings.logo_position == 'middle-center' -%}
{%- if request.page_type == 'index' -%}
<h1 class="header__heading">
{%- endif -%}
<a href="{{ routes.root_url }}" class="header__heading-link link link--text focus-inset">
{%- if settings.logo != blank -%}
<div class="header__heading-logo-wrapper">
{%- assign logo_alt = settings.logo.alt | default: shop.name | escape -%}
{%- assign logo_height = settings.logo_width | divided_by: settings.logo.aspect_ratio -%}

{{
settings.logo | image_url: width: 600 | image_tag: class: 'header__heading-logo', widths: widths, height: logo_height, width: settings.logo_width, alt: logo_alt, sizes: sizes, preload: true
}}
</div>
{%- else -%}
<span class="h2">{{ shop.name }}</span>
{%- endif -%}
</a>
{%- if request.page_type == 'index' -%}
</h1>
{%- endif -%}
{%- endif -%}

<div class="header__icons{% if section.settings.enable_country_selector or
section.settings.enable_language_selector %} header__icons--localization header-localization{% endif
%}">
<div class="desktop-localization-wrapper">

{%- if section.settings.enable_country_selector
and localization.available_countries.size > 1 -%}

<noscript class="small-hide medium-hide">


{%- form 'localization',
id: 'HeaderCountryMobileFormNoScript',
class: 'localization-form' -%}

<div class="localization-form__select">
<h2 class="visually-hidden" id="HeaderCountryMobileLabelNoScript">{{ 'localization.country_label' | t }}</h2>
<select
class="localization-selector link"
name="country_code"
aria-labelledby="HeaderCountryMobileLabelNoScript">
{%- for country in localization.available_countries -%}
<option
value="{{ country.iso_code }}"
{%- if country.iso_code == localization.country.iso_code %}
selected{% endif %}>
{{ country.name }} ({{ country.currency.iso_code }} {{ country.currency.symbol }})
</option>
{%- endfor -%}
</select>
{% render 'icon-caret' %}
</div>
<button class="button button--tertiary">{{ 'localization.update_country' | t }}</button>
{%- endform -%}
</noscript>

<localization-form class="small-hide medium-hide no-js-hidden">

{%- form 'localization',
id: 'HeaderCountryForm',
class: 'localization-form' -%}
<div>
<h2 class="visually-hidden" id="HeaderCountryLabel">{{ 'localization.country_label' | t }}</h2>
{%- render 'country-localization',
localPosition: 'HeaderCountry' -%}
</div>
{%- endform -%}

</localization-form>
{% endif %}

{%- if section.settings.enable_language_selector
and localization.available_languages.size > 1 -%}
<noscript class="small-hide medium-hide">
{%- form 'localization',
id: 'HeaderLanguageMobileFormNoScript',
class: 'localization-form' -%}
<div class="localization-form__select">
<h2 class="visually-hidden" id="HeaderLanguageMobileLabelNoScript">{{ 'localization.language_label' | t }}</h2>
<select
class="localization-selector link"
name="locale_code"
aria-labelledby="HeaderLanguageMobileLabelNoScript">
{%- for language in localization.available_languages -%}
<option
value="{{ language.iso_code }}"
lang="{{ language.iso_code }}"
{%- if language.iso_code == localization.language.iso_code %}
selected{% endif %}>
{{ language.endonym_name | capitalize }}
</option>
{%- endfor -%}
</select>
{% render 'icon-caret' %}
</div>
<button class="button button--tertiary">{{ 'localization.update_language' | t }}</button>
{%- endform -%}
</noscript>

<localization-form class="small-hide medium-hide no-js-hidden">
{%- form 'localization',
id: 'HeaderLanguageForm',
class: 'localization-form' -%}
<div>
<h2 class="visually-hidden" id="HeaderLanguageLabel">{{ 'localization.language_label' | t }}</h2>
{%- render 'language-localization',
localPosition: 'HeaderLanguage' -%}
</div>
{%- endform -%}
</localization-form>
{%- endif -%}
</div>
{% render 'header-search',
input_id: 'Search-In-Modal' %}

{%- if shop.customer_accounts_enabled -%}
<a href="{%- if customer -%}{{ routes.account_url }}{%- else -%}{{ routes.account_login_url }}{%- endif -%}" class="header__icon header__icon--account link focus-inset{% if section.settings.menu != blank %} small-hide{% endif %}">
{% render 'icon-account' %}
<span class="visually-hidden">
{%-
liquid
if customer
echo 'customer.account_fallback' | t
else
echo 'customer.log_in' | t
endif
-%}
</span>
</a>
{%- endif -%}

{%- for block in section.blocks -%}
{%- case block.type -%}
{%- when '@app' -%}
{% render block %}
{%- endcase -%}
{%- endfor -%}

<a
href="{{ routes.cart_url }}"
class="header__icon header__icon--cart link focus-inset"
id="cart-icon-bubble">
{%-
liquid
if cart == empty
render 'icon-cart-empty'
else
render 'icon-cart'
endif
-%}
<span class="visually-hidden">{{ 'templates.cart.cart' | t }}</span>
{%- if cart != empty -%}
<div class="cart-count-bubble">
{%- if cart.item_count < 100 -%}
<span aria-hidden="true">{{ cart.item_count }}</span>
{%- endif -%}
<span class="visually-hidden">{{ 'sections.header.cart_count' | t: count: cart.item_count }}</span>
</div>
{%- endif -%}
</a>
</div>
</header>
</{% if section.settings.sticky_header_type != 'none' %}sticky-header{% else %}div{% endif %}>

{%- if settings.cart_type == "notification" -%}
{%- render 'cart-notification',
color_scheme: section.settings.color_scheme,
desktop_menu_type: section.settings.menu_type_desktop -%}
{%- endif -%}

{% javascript %}
class StickyHeader extends HTMLElement {
constructor() {
super();
}

connectedCallback() {
this.header = document.querySelector('.section-header');
this.headerIsAlwaysSticky = this.getAttribute('data-sticky-type') === 'always' || this.getAttribute('data-sticky-type') === 'reduce-logo-size';
this.headerBounds = {};

this.setHeaderHeight();

window.matchMedia('(max-width: 990px)').addEventListener('change', this.setHeaderHeight.bind(this));

if (this.headerIsAlwaysSticky) {
this.header.classList.add('shopify-section-header-sticky');
};

this.currentScrollTop = 0;
this.preventReveal = false;
this.predictiveSearch = this.querySelector('predictive-search');

this.onScrollHandler = this.onScroll.bind(this);
this.hideHeaderOnScrollUp = () => this.preventReveal = true;

this.addEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
window.addEventListener('scroll', this.onScrollHandler, false);

this.createObserver();
}

setHeaderHeight() {
document.documentElement.style.setProperty('--header-height', `${
this.header.offsetHeight
}px`);
}

disconnectedCallback() {
this.removeEventListener('preventHeaderReveal', this.hideHeaderOnScrollUp);
window.removeEventListener('scroll', this.onScrollHandler);
}

createObserver() {
let observer = new IntersectionObserver((entries, observer) => {
this.headerBounds = entries[0].intersectionRect;
observer.disconnect();
});

observer.observe(this.header);
}

onScroll() {
const scrollTop = window.pageYOffset || document.documentElement.scrollTop;

if (this.predictiveSearch && this.predictiveSearch.isOpen) return;



if (scrollTop > this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
this.header.classList.add('scrolled-past-header');
if (this.preventHide) return;



requestAnimationFrame(this.hide.bind(this));
} else if (scrollTop < this.currentScrollTop && scrollTop > this.headerBounds.bottom) {
this.header.classList.add('scrolled-past-header');
if (!this.preventReveal) {
requestAnimationFrame(this.reveal.bind(this));
} else {
window.clearTimeout(this.isScrolling);

this.isScrolling = setTimeout(() => {
this.preventReveal = false;
}, 66);

requestAnimationFrame(this.hide.bind(this));
}
} else if (scrollTop <= this.headerBounds.top) {
this.header.classList.remove('scrolled-past-header');
requestAnimationFrame(this.reset.bind(this));
}

this.currentScrollTop = scrollTop;
}

hide() {
if (this.headerIsAlwaysSticky) return;



this.header.classList.add('shopify-section-header-hidden', 'shopify-section-header-sticky');
this.closeMenuDisclosure();
this.closeSearchModal();
}

reveal() {
if (this.headerIsAlwaysSticky) return;



this.header.classList.add('shopify-section-header-sticky', 'animate');
this.header.classList.remove('shopify-section-header-hidden');
}

reset() {
if (this.headerIsAlwaysSticky) return;



this.header.classList.remove('shopify-section-header-hidden', 'shopify-section-header-sticky', 'animate');
}

closeMenuDisclosure() {
this.disclosures = this.disclosures || this.header.querySelectorAll('header-menu');
this.disclosures.forEach(disclosure => disclosure.close());
}

closeSearchModal() {
this.searchModal = this.searchModal || this.header.querySelector('details-modal');
this.searchModal.close(false);
}
}

customElements.define('sticky-header', StickyHeader);
{% endjavascript %}

<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "Organization",
"name": {{ shop.name | json }},
{% if settings.logo %}
"logo": {{ settings.logo | image_url: width: 500 | prepend: "https:" | json }},
{% endif %}
"sameAs": [
{{ settings.social_twitter_link | json }},
{{ settings.social_facebook_link | json }},
{{ settings.social_pinterest_link | json }},
{{ settings.social_instagram_link | json }},
{{ settings.social_tiktok_link | json }},
{{ settings.social_tumblr_link | json }},
{{ settings.social_snapchat_link | json }},
{{ settings.social_youtube_link | json }},
{{ settings.social_vimeo_link | json }}
],
"url": {{ request.origin | append: page.url | json }}
}
</script>

{%- if request.page_type == 'index' -%}
{% assign potential_action_target = request.origin | append: routes.search_url | append: '?q={search_term_string}' %}
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "WebSite",
"name": {{ shop.name | json }},
"potentialAction": {
"@type": "SearchAction",
"target": {{ potential_action_target | json }},
"query-input": "required name=search_term_string"
},
"url": {{ request.origin | append: page.url | json }}
}
</script>
{%- endif -%}

{% schema %}
{
"name": "t:sections.header.name",
"class": "section-header",
"max_blocks": 3,
"settings": [
{
"type": "select",
"id": "logo_position",
"options": [
{
"value": "top-left",
"label": "t:sections.header.settings.logo_position.options__2.label"
},
{
"value": "top-center",
"label": "t:sections.header.settings.logo_position.options__3.label"
},
{
"value": "middle-left",
"label": "t:sections.header.settings.logo_position.options__1.label"
},
{
"value": "middle-center",
"label": "t:sections.header.settings.logo_position.options__4.label"
}
],
"default": "middle-left",
"label": "t:sections.header.settings.logo_position.label",
"info": "t:sections.header.settings.logo_help.content"
},
{
"type": "link_list",
"id": "menu",
"default": "main-menu",
"label": "t:sections.header.settings.menu.label"
},
{
"type": "select",
"id": "menu_type_desktop",
"options": [
{
"value": "dropdown",
"label": "t:sections.header.settings.menu_type_desktop.options__1.label"
},
{
"value": "mega",
"label": "t:sections.header.settings.menu_type_desktop.options__2.label"
},
{
"value": "drawer",
"label": "t:sections.header.settings.menu_type_desktop.options__3.label"
}
],
"default": "dropdown",
"label": "t:sections.header.settings.menu_type_desktop.label",
"info": "t:sections.header.settings.menu_type_desktop.info"
},
{
"type": "select",
"id": "sticky_header_type",
"options": [
{
"value": "none",
"label": "t:sections.header.settings.sticky_header_type.options__1.label"
},
{
"value": "on-scroll-up",
"label": "t:sections.header.settings.sticky_header_type.options__2.label"
},
{
"value": "always",
"label": "t:sections.header.settings.sticky_header_type.options__3.label"
},
{
"value": "reduce-logo-size",
"label": "t:sections.header.settings.sticky_header_type.options__4.label"
}
],
"default": "on-scroll-up",
"label": "t:sections.header.settings.sticky_header_type.label"
},
{
"type": "checkbox",
"id": "show_line_separator",
"default": true,
"label": "t:sections.header.settings.show_line_separator.label"
},
{
"type": "header",
"content": "t:sections.header.settings.header__1.content"
},
{
"type": "color_scheme",
"id": "color_scheme",
"label": "t:sections.all.colors.label",
"default": "background-1"
},
{
"type": "color_scheme",
"id": "menu_color_scheme",
"label": "t:sections.header.settings.menu_color_scheme.label",
"default": "background-1"
},
{
"type": "header",
"content": "t:sections.header.settings.header__3.content",
"info": "t:sections.header.settings.header__4.info"
},
{
"type": "checkbox",
"id": "enable_country_selector",
"default": true,
"label": "t:sections.header.settings.enable_country_selector.label"
},
{
"type": "header",
"content": "t:sections.header.settings.header__5.content",
"info": "t:sections.header.settings.header__6.info"
},
{
"type": "checkbox",
"id": "enable_language_selector",
"default": true,
"label": "t:sections.header.settings.enable_language_selector.label"
},
{
"type": "header",
"content": "t:sections.header.settings.mobile_layout.content"
},
{
"type": "select",
"id": "mobile_logo_position",
"options": [
{
"value": "center",
"label": "t:sections.header.settings.mobile_logo_position.options__1.label"
},
{
"value": "left",
"label": "t:sections.header.settings.mobile_logo_position.options__2.label"
}
],
"default": "center",
"label": "t:sections.header.settings.mobile_logo_position.label"
},
{
"type": "header",
"content": "t:sections.all.spacing"
},
{
"type": "range",
"id": "margin_bottom",
"min": 0,
"max": 100,
"step": 4,
"unit": "px",
"label": "t:sections.header.settings.margin_bottom.label",
"default": 0
},
{
"type": "header",
"content": "t:sections.all.padding.section_padding_heading"
},
{
"type": "range",
"id": "padding_top",
"min": 0,
"max": 36,
"step": 4,
"unit": "px",
"label": "t:sections.all.padding.padding_top",
"default": 20
},
{
"type": "range",
"id": "padding_bottom",
"min": 0,
"max": 36,
"step": 4,
"unit": "px",
"label": "t:sections.all.padding.padding_bottom",
"default": 20
}
],
"blocks": [
{
"type": "@app"
}
]
}
{% endschema %}