@occluze/tether 0.7.0 → 0.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +51 -109
  2. package/dist/esm/astro.js +1 -1
  3. package/dist/esm/chunks/{account-UIPWJQ3Y.js → account-W4FBRKXA.js} +1 -1
  4. package/dist/esm/chunks/{account-pages-6ROA6Y4V.js → account-pages-IM3OQTOP.js} +1 -1
  5. package/dist/esm/chunks/analytics-QDVOLZY3.js +1 -0
  6. package/dist/esm/chunks/{chunk-T44MUL4Y.js → chunk-AUVAN3KZ.js} +1 -1
  7. package/dist/esm/chunks/chunk-BMDYNMRC.js +1 -0
  8. package/dist/esm/chunks/chunk-CUL66KRA.js +1 -0
  9. package/dist/esm/chunks/{chunk-6OZJCAGZ.js → chunk-CVNRODH3.js} +1 -1
  10. package/dist/esm/chunks/{chunk-5Z5O3767.js → chunk-CXHPBT7N.js} +1 -1
  11. package/dist/esm/chunks/chunk-GF6JTI65.js +1 -0
  12. package/dist/esm/chunks/chunk-MRSDJPBC.js +1 -0
  13. package/dist/esm/chunks/chunk-NYDZPTLP.js +1 -0
  14. package/dist/esm/chunks/chunk-QDHLXXAZ.js +1 -0
  15. package/dist/esm/chunks/{chunk-4GCXM764.js → chunk-QUECUXHD.js} +1 -1
  16. package/dist/esm/chunks/chunk-RJY76ESL.js +1 -0
  17. package/dist/esm/chunks/chunk-RPI5C3EJ.js +1 -0
  18. package/dist/esm/chunks/{chunk-BFTZR4OB.js → chunk-YC4JXWRG.js} +2 -2
  19. package/dist/esm/chunks/{diagnose-3FEKRIEK.js → diagnose-3XHPZZNP.js} +1 -1
  20. package/dist/esm/chunks/extras-C724KKG6.js +1 -0
  21. package/dist/esm/chunks/{markets-ui-FD6NI2OG.js → markets-ui-WBWWQAGU.js} +1 -1
  22. package/dist/esm/chunks/{search-UJ73YBQ5.js → search-5NFIZBPJ.js} +1 -1
  23. package/dist/esm/index.js +1 -1
  24. package/dist/esm/server.js +2 -2
  25. package/dist/tether.account-pages.js +13 -3
  26. package/dist/tether.account-pages.min.js +1 -1
  27. package/dist/tether.account.js +13 -3
  28. package/dist/tether.account.min.js +1 -1
  29. package/dist/tether.analytics.js +18 -3
  30. package/dist/tether.analytics.min.js +1 -1
  31. package/dist/tether.diagnose.js +20 -5
  32. package/dist/tether.diagnose.min.js +2 -2
  33. package/dist/tether.extras.js +52 -28
  34. package/dist/tether.extras.min.js +1 -1
  35. package/dist/tether.js +353 -288
  36. package/dist/tether.markets.js +31 -5
  37. package/dist/tether.markets.min.js +1 -1
  38. package/dist/tether.min.js +2 -2
  39. package/dist/tether.min.js.map +4 -4
  40. package/dist/tether.search.js +18 -3
  41. package/dist/tether.search.min.js +1 -1
  42. package/dist/types/server/src/shared/cart-id.d.ts +2 -0
  43. package/dist/types/src/cart/mutations.d.ts +6 -0
  44. package/dist/types/src/cart/store.d.ts +5 -2
  45. package/dist/types/src/cart.d.ts +3 -2
  46. package/dist/types/src/client.d.ts +61 -22
  47. package/dist/types/src/config.d.ts +6 -1
  48. package/dist/types/src/index.d.ts +2 -2
  49. package/dist/types/src/markets.d.ts +9 -2
  50. package/dist/types/src/product-shape.d.ts +3 -1
  51. package/dist/types/src/uri.d.ts +6 -0
  52. package/package.json +54 -6
  53. package/dist/esm/chunks/analytics-2V632IRV.js +0 -1
  54. package/dist/esm/chunks/chunk-56FCLJJD.js +0 -1
  55. package/dist/esm/chunks/chunk-A5SYCVQM.js +0 -1
  56. package/dist/esm/chunks/chunk-BA4LQJJQ.js +0 -1
  57. package/dist/esm/chunks/chunk-C5JYQCWH.js +0 -1
  58. package/dist/esm/chunks/chunk-E5YO6274.js +0 -1
  59. package/dist/esm/chunks/chunk-MPDWM2NN.js +0 -1
  60. package/dist/esm/chunks/chunk-YLUULATY.js +0 -1
  61. package/dist/esm/chunks/extras-6POFBNOP.js +0 -1
  62. package/src/account/addresses-view.ts +0 -58
  63. package/src/account/answers.ts +0 -79
  64. package/src/account/markup.ts +0 -36
  65. package/src/account/operations.ts +0 -145
  66. package/src/account/order-lines.ts +0 -75
  67. package/src/account/order-list.ts +0 -107
  68. package/src/account/order-page.ts +0 -137
  69. package/src/account/page-answers.ts +0 -317
  70. package/src/account/page-events.ts +0 -253
  71. package/src/account/server-client.ts +0 -183
  72. package/src/account/subscriptions-view.ts +0 -115
  73. package/src/account-api.ts +0 -98
  74. package/src/account-marks.ts +0 -35
  75. package/src/account-pages.ts +0 -81
  76. package/src/account.ts +0 -284
  77. package/src/amounts.ts +0 -64
  78. package/src/analytics-shopify.ts +0 -246
  79. package/src/analytics.ts +0 -315
  80. package/src/api-version.ts +0 -79
  81. package/src/astro.ts +0 -272
  82. package/src/cart/cart-shape.ts +0 -25
  83. package/src/cart/checkout.ts +0 -101
  84. package/src/cart/drawer.ts +0 -125
  85. package/src/cart/mutations.ts +0 -237
  86. package/src/cart/render.ts +0 -266
  87. package/src/cart/store.ts +0 -279
  88. package/src/cart.ts +0 -345
  89. package/src/client.ts +0 -391
  90. package/src/collection.ts +0 -175
  91. package/src/config-sections.ts +0 -284
  92. package/src/config.ts +0 -480
  93. package/src/controls/cart-controls.ts +0 -123
  94. package/src/controls/discount.ts +0 -75
  95. package/src/controls/extras.ts +0 -54
  96. package/src/controls/navigation.ts +0 -77
  97. package/src/diagnose-markup.ts +0 -298
  98. package/src/diagnose.ts +0 -294
  99. package/src/dom.ts +0 -268
  100. package/src/extras.ts +0 -136
  101. package/src/fragments.ts +0 -261
  102. package/src/globals.d.ts +0 -15
  103. package/src/images.ts +0 -91
  104. package/src/index.ts +0 -415
  105. package/src/initial.ts +0 -101
  106. package/src/lazy-iife.ts +0 -197
  107. package/src/lazy.ts +0 -42
  108. package/src/loader.ts +0 -363
  109. package/src/market-codes.ts +0 -6
  110. package/src/markets-ui.ts +0 -227
  111. package/src/markets.ts +0 -246
  112. package/src/markup.ts +0 -127
  113. package/src/mounting.ts +0 -264
  114. package/src/page-market.ts +0 -110
  115. package/src/part-integrity.ts +0 -7
  116. package/src/parts/account-pages.ts +0 -7
  117. package/src/parts/account.ts +0 -7
  118. package/src/parts/analytics.ts +0 -7
  119. package/src/parts/diagnose.ts +0 -7
  120. package/src/parts/extras.ts +0 -7
  121. package/src/parts/markets.ts +0 -7
  122. package/src/parts/search.ts +0 -7
  123. package/src/presets/barba.ts +0 -194
  124. package/src/product-events.ts +0 -115
  125. package/src/product-render.ts +0 -218
  126. package/src/product-shape.ts +0 -49
  127. package/src/product-state.ts +0 -318
  128. package/src/product.ts +0 -308
  129. package/src/repeaters.ts +0 -161
  130. package/src/search.ts +0 -305
  131. package/src/selling-plans.ts +0 -145
  132. package/src/server.ts +0 -211
  133. package/src/shopify-values.ts +0 -91
  134. package/src/status.ts +0 -106
  135. package/src/storage.ts +0 -34
  136. package/src/store-html.ts +0 -359
  137. package/src/storefront/catalog.ts +0 -196
  138. package/src/storefront/json-ld.ts +0 -144
  139. package/src/variant-render.ts +0 -139
package/README.md CHANGED
@@ -1,55 +1,39 @@
1
- # Tether
1
+ <picture>
2
+ <source media="(prefers-color-scheme: dark)" srcset="https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@main/.github/header-dark.svg">
3
+ <img src="https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@main/.github/header-light.svg" alt="Tether" width="400">
4
+ </picture>
2
5
 
3
6
  **Shopify products, cart and subscriptions in Webflow or Astro, with HTML attributes.**
4
- An open-source, free alternative to Smootify and Storesynk (formerly Shopyflow): one script tag, no monthly fee.
5
- [How it compares →](docs/comparison.md)
6
7
 
7
- ```html
8
- <div tether-product="coffee-box">
9
- <h1 tether-bind="title"></h1>
10
- <span tether-bind="price"></span>
11
- <button tether-add-to-cart>Add to cart</button>
12
- </div>
13
- ```
14
-
15
- - **Live from Shopify:** prices, stock, variants and the cart via the Storefront API. Webflow holds the design.
16
- - **Subscriptions:** Shopify selling plans (Shopify Subscriptions, Recharge, Skio, Loop, Appstle, …).
17
- - **With or without the CMS:** bind products to CMS items, or let one page show any product from the URL.
18
- - **Markets:** local prices and currency, a country selector, Webflow Localization.
19
- - **Optional CMS sync:** a Webflow CMS item per Shopify product, kept up to date automatically ([one-click deploy](#sync-shopify-products-to-the-webflow-cms-optional)).
20
- - **Search as you type, customer accounts, analytics:** optional parts that load only where you use them ([accounts](docs/accounts.md), [analytics](docs/analytics.md): GA4/Tag Manager and Shopify's own).
21
- - **Astro too:** build-time product pages with live prices and cart, View Transitions included ([Astro guide](docs/astro.md)).
22
- - **Hand-over ready:** loading, error and not-found states, `Tether.diagnose()`, error reporting.
8
+ [![npm](https://img.shields.io/npm/v/@occluze/tether?colorA=000000&colorB=3DE72E)](https://www.npmjs.com/package/@occluze/tether)
9
+ [![size](https://img.shields.io/badge/gzipped-29%20KB-3DE72E?labelColor=000000)](https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@0.7/dist/tether.min.js)
10
+ [![license](https://img.shields.io/npm/l/@occluze/tether?colorA=000000&colorB=3DE72E)](LICENSE)
23
11
 
24
- MIT licensed · 29 KB gzipped · no dependencies · TypeScript types · [full reference](docs/reference.md) · [comparison](docs/comparison.md) · [changelog](CHANGELOG.md)
12
+ ## Install
25
13
 
26
- ---
14
+ Script tag, for Webflow or any page without a build step:
27
15
 
28
- ## Three ways to install
16
+ ```html
17
+ <script src="https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@0.7/dist/tether.min.js" defer></script>
18
+ ```
29
19
 
30
- | | Pick it when | How |
31
- |---|---|---|
32
- | **Script tag** (jsDelivr) | a static site or Webflow, no build step, no login needed | `<script src="https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@0.7/dist/tether.min.js" defer></script>` ([steps below](#2-add-the-script-to-webflow)) |
33
- | **npm** | Astro, Vite or another bundler or framework | `npm install @occluze/tether` ([Astro guide](docs/astro.md), [other frameworks](docs/frameworks.md)) |
34
- | **With the Worker** | you also want the CMS sync, rebuilds when products change, or customer accounts | either of the above, plus your own free Cloudflare Worker ([Worker](server/README.md), [accounts](docs/accounts.md)) |
20
+ `@0.7` gets every 0.7.x fix automatically (recommended), `@v0.7.2` pins one release, `@latest`
21
+ always takes the newest ([versions and self-hosting](docs/webflow.md#versions-and-self-hosting)).
35
22
 
36
- The script tag pinned to one release: `…/tether@v0.7.0/dist/tether.min.js`. Its optional parts
37
- (search, accounts, markets, analytics) load from the same folder when a page uses them, each checked
38
- against a hash built into the core. To host them yourself, put the same release's files in one folder
39
- and set `partsUrl`. Customer accounts need the Worker
40
- ([setup](docs/accounts.md#setup)): it keeps the customer's tokens, so the browser never holds one.
23
+ npm, for Astro, Vite or another bundler or framework (TypeScript types included):
41
24
 
42
- ## 1. Connect Shopify (5 minutes)
25
+ ```bash
26
+ npm install @occluze/tether
27
+ ```
43
28
 
44
- 1. Shopify admin → install the free **Headless** channel → Create storefront → copy the
45
- **public Storefront API token**. (Never an Admin API token: this one is visible in the browser.)
46
- 2. Same page → Storefront API permissions: product listings, product inventory, product tags,
47
- checkouts (read + write) and selling plans.
48
- 3. Products → select all → Include in sales channels → **Headless**.
29
+ ```js
30
+ import Tether from '@occluze/tether';
31
+ ```
49
32
 
50
- ## 2. Add the script to Webflow
33
+ ## Quick start
51
34
 
52
- Site settings → Custom code → **Head**:
35
+ In Webflow: Site settings → Custom code → **Head**. The token is the public Storefront API token
36
+ from Shopify's Headless channel ([how to get it](docs/webflow.md#1-connect-shopify-5-minutes)).
53
37
 
54
38
  ```html
55
39
  <script>
@@ -64,82 +48,40 @@ Site settings → Custom code → **Head**:
64
48
  <script src="https://cdn.jsdelivr.net/gh/ravi-klaassens/tether@0.7/dist/tether.min.js" defer></script>
65
49
  ```
66
50
 
67
- **Versions:** `@0.7` gets every 0.7.x fix automatically (recommended), `@v0.7.0` pins one release
68
- (add its [`integrity`](docs/reference.md#config) hash to pin exactly what runs), `@latest` always takes the newest. Hosting the file yourself? Put the optional parts next to it (`tether.markets.min.js`,
69
- `tether.search.min.js`, `tether.account.min.js`, `tether.account-pages.min.js`, `tether.analytics.min.js`, `tether.extras.min.js`,
70
- `tether.diagnose.min.js`): each loads only when a page uses it.
71
-
72
- ## 3. Add attributes in the Designer
73
-
74
- Element → Settings → Custom attributes. The ones you'll use most:
75
-
76
- | Attribute | Value | Does |
77
- |---|---|---|
78
- | `tether-product` | the Shopify handle (bind it to a CMS field) | Wraps everything for one product |
79
- | `tether-bind` | `title`, `price`, `compare-at-price`, `description`, `featured-image`, `images`, `link` | Fills text, images and links |
80
- | `tether-option-list` | an option name, e.g. `Size` | Size/colour buttons (first child is the template) |
81
- | `tether-add-to-cart` | | Add-to-cart button |
82
- | `tether-purchase` | `one-time` / `subscription` | Subscribe-or-buy-once toggle |
83
- | `tether-plan-list` | `all` | The delivery frequencies (first child is the template) |
84
- | `tether-show` | `in-stock`, `out-of-stock`, `on-sale`, `subscription-selected`, `error`, `not-found` | Shows an element only then |
85
- | `tether-cart-drawer` | | The cart panel (gets the class `is-open`) |
86
- | `tether-cart-open` / `tether-cart-close` | | Buttons that open/close it |
87
- | `tether-cart-count`, `tether-cart-subtotal` | | Cart numbers |
88
- | `tether-cart-lines` | | The cart lines (first child is the template, with `tether-line="title"` etc.) |
89
- | `tether-checkout` | | Goes to Shopify checkout |
90
-
91
- Everything else (bundles, collections, discount codes, metafields, swatches, recommendations…)
92
- is in the [attribute reference](docs/reference.md#attribute-reference).
51
+ Then add attributes in the Designer (Element → Settings → Custom attributes):
93
52
 
94
- **Product pages without CMS items:** use `tether-product="url:handle"` on one page and open it as
95
- `/product?handle=coffee-box` ([more](docs/reference.md#products-without-a-cms-item-dynamic-product-page)).
96
-
97
- ## 4. Check it
98
-
99
- Open the site, then the browser console:
100
-
101
- ```js
102
- await Tether.diagnose()
53
+ ```html
54
+ <div tether-product="coffee-box">
55
+ <h1 tether-bind="title"></h1>
56
+ <span tether-bind="price"></span>
57
+ <button tether-add-to-cart>Add to cart</button>
58
+ </div>
103
59
  ```
104
60
 
105
- It tells you whether the token works, which products and subscription plans it found, and what's
106
- wrong in the markup, for example a product without a handle or a field that's spelled wrong.
107
-
108
- ---
109
-
110
- ## Sync Shopify products to the Webflow CMS (optional)
61
+ `await Tether.diagnose()` in the browser console tells you whether the token works and what's wrong
62
+ in the markup.
111
63
 
112
- Want a CMS item per product, for SEO, CMS lists and filtering? The sync keeps a Webflow collection
113
- up to date with Shopify: new products appear, changes follow within seconds, deleted ones are archived.
64
+ ## What it does
114
65
 
115
- [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/ravi-klaassens/tether/tree/main/server)
116
-
117
- Free on Cloudflare's free plan. It updates itself, and setup takes about 10 minutes:
118
- [step by step](server/README.md).
119
-
120
- ## Good to know
121
-
122
- - **Errors:** send them to Sentry or any other tool with `onError` ([how](docs/reference.md#troubleshooting-and-handover)).
123
- - **Subscriptions after checkout** (skip, pause, cancel) are handled by your subscription app and
124
- Shopify customer accounts, not by Tether.
125
- - **Page transitions** (Barba, Swup) and Lenis/GSAP are supported ([how](docs/reference.md#with-page-transitions-barba-swup-)).
126
- - **Different markets and languages:** [Markets](docs/reference.md#markets-and-localization).
127
- - **Testing in a dev store:** checkout sits behind the store password, and payments need test mode.
128
-
129
- ## Developers
66
+ - **Live from Shopify:** prices, stock, variants and the cart via the Storefront API. Webflow holds the design.
67
+ - **Subscriptions:** Shopify selling plans (Shopify Subscriptions, Recharge, Skio, Loop, Appstle, …).
68
+ - **With or without the CMS:** bind products to CMS items, or let one page show any product from the URL.
69
+ - **Markets:** local prices and currency, a country selector, Webflow Localization.
70
+ - **Optional CMS sync:** a Webflow CMS item per Shopify product, kept up to date automatically by your own free Cloudflare Worker.
71
+ - **Search as you type, customer accounts, analytics:** optional parts that load only where you use them.
72
+ - **Astro too:** build-time product pages with live prices and cart, View Transitions included.
73
+ - **Hand-over ready:** loading, error and not-found states, `Tether.diagnose()`, error reporting.
74
+ - **Free and open source:** an alternative to Smootify and Storesynk (formerly Shopyflow). One script tag, no monthly fee, no dependencies.
130
75
 
131
- ```bash
132
- npm install
133
- npm test # unit tests
134
- npm run smoke # live test against Shopify's public demo store
135
- npm run build
136
- ```
76
+ ## Docs
137
77
 
138
- Bundlers: `npm install @occluze/tether`, then `import Tether from "@occluze/tether"` (TypeScript
139
- types included; markets and diagnose are split into their own chunks). Server-side data:
140
- `@occluze/tether/server`. Astro: `@occluze/tether/astro` ([guide](docs/astro.md), [starter](examples/astro)). Next.js,
141
- SvelteKit, Vite, Eleventy: [other frameworks](docs/frameworks.md).
142
- JavaScript API, config, releases and the Shopify API version policy are in the [reference](docs/reference.md).
78
+ - [Webflow, step by step](docs/webflow.md): connect Shopify, the script, the attributes you'll use most
79
+ - [Reference](docs/reference.md): every attribute, the JavaScript API, config, troubleshooting, development and releases
80
+ - [Astro](docs/astro.md) ([starter](examples/astro)) and [other frameworks](docs/frameworks.md): Next.js, SvelteKit, Vite, Eleventy
81
+ - [CMS sync Worker](server/README.md): a Webflow CMS item per Shopify product, and rebuilds when products change
82
+ - [Customer accounts](docs/accounts.md) and [analytics](docs/analytics.md): GA4/Tag Manager and Shopify's own
83
+ - [How it compares](docs/comparison.md) with Smootify and Storesynk
84
+ - [Changelog](CHANGELOG.md) and [contributing](.github/CONTRIBUTING.md)
143
85
 
144
86
  ## License
145
87
 
package/dist/esm/astro.js CHANGED
@@ -1,2 +1,2 @@
1
- import{A as u,B as d,D as h,q as g}from"./chunks/chunk-E5YO6274.js";var w=["src/shop.config.js","src/shop.config.mjs","src/shop.config.ts"],O=new Set(["siteUrl","pageSize"]),y="astro/config",E=/^\s*(?:export\s+)?([\w.-]+)\s*=\s*(.*?)\s*$/,S=/^(["'])(.*?)\1/;function T(n,t=process.argv){let e=n==="dev"?"development":"production",o=t.findIndex(r=>r==="--mode"||r.startsWith("--mode="));if(o<0)return e;let i=t[o]??"";return(i.includes("=")?i.split("=")[1]:t[o+1])??e}var v=n=>n instanceof Error&&"code"in n&&n.code==="ENOENT";async function k(n){let{readFile:t}=await import("node:fs/promises");try{return await t(n,"utf8")}catch(e){if(v(e))return null;throw e}}function _(n,t){for(let e of n.split(/\r?\n/)){let o=E.exec(e);if(!o||e.trim().startsWith("#"))continue;let[,i="",s=""]=o,r=S.exec(s);t[i]=r?r[2]??"":s.replace(/\s+#.*$/,"")}}async function C(n,t){let e=await import("node:path"),o=T(n),i={};for(let s of[".env",".env.local",`.env.${o}`,`.env.${o}.local`]){let r=await k(e.join(t,s));r!==null&&_(r,i)}return{...i,...process.env}}function P(n,t,e){for(let o of["domain","token"]){if(n[o])continue;let i=d[o].find(s=>t[s]);i&&(n[o]=t[i],i.startsWith("PUBLIC_")||e.warn(`${i} is written into every page as Tether's ${o}. Name it PUBLIC_${i} to say so.`))}if(typeof n.token=="string"&&h(n.token))throw new Error("The Shopify token for Tether is a secret token (shpat_/shpss_/\u2026), which would be published in every page. Use the public Storefront API token from the Headless channel.")}async function F(n,t,e){let{existsSync:o}=await import("node:fs"),i=await import("node:path");for(let s of t){let r=i.resolve(n,s);o(r)&&e(r)}}async function I(n){try{return await import(n)}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ERR_MODULE_NOT_FOUND")return null;throw t}}var A=n=>typeof n=="object"&&n!==null&&"string"in n&&typeof n.string=="function";async function N(n){if(!n.updateConfig)return;let t=await I(y),e=typeof t=="object"&&t!==null&&"envField"in t?t.envField:null;if(!A(e))return;let o=()=>e.string({context:"client",access:"public",optional:!0});try{n.updateConfig({env:{schema:{PUBLIC_SHOPIFY_DOMAIN:o(),PUBLIC_SHOPIFY_STOREFRONT_TOKEN:o()}}})}catch(i){n.logger.warn(`.env variables not declared in astro:env: ${u(i)}`)}}function R(n,t){let e=Object.keys(n).filter(o=>typeof n[o]=="function");for(let o of e)Reflect.deleteProperty(n,o);e.length&&t.warn(`${e.join(", ")}: functions can't be passed here. Set them in window.TETHER_CONFIG in your layout.`)}function L(n,t){for(let e of Object.keys(n))e in g||(Reflect.deleteProperty(n,e),O.has(e)||t.warn(`${e} is not a Tether option: left out of the page.`))}function b(n,t){n("head-inline",'window.TETHER_INTEGRATION="astro";'),n("page",["import Tether from '@occluze/tether';",`window.TETHER_CONFIG = { ...${JSON.stringify({autoMount:!1,...t})}, ...(window.TETHER_CONFIG || {}) };`,"Tether.init().then(() => Tether.mount(document));"].join(`
1
+ import{A as u,B as d,D as h,q as g}from"./chunks/chunk-QDHLXXAZ.js";var w=["src/shop.config.js","src/shop.config.mjs","src/shop.config.ts"],O=new Set(["siteUrl","pageSize"]),y="astro/config",E=/^\s*(?:export\s+)?([\w.-]+)\s*=\s*(.*?)\s*$/,S=/^(["'])(.*?)\1/;function T(n,t=process.argv){let e=n==="dev"?"development":"production",o=t.findIndex(r=>r==="--mode"||r.startsWith("--mode="));if(o<0)return e;let i=t[o]??"";return(i.includes("=")?i.split("=")[1]:t[o+1])??e}var v=n=>n instanceof Error&&"code"in n&&n.code==="ENOENT";async function k(n){let{readFile:t}=await import("node:fs/promises");try{return await t(n,"utf8")}catch(e){if(v(e))return null;throw e}}function _(n,t){for(let e of n.split(/\r?\n/)){let o=E.exec(e);if(!o||e.trim().startsWith("#"))continue;let[,i="",s=""]=o,r=S.exec(s);t[i]=r?r[2]??"":s.replace(/\s+#.*$/,"")}}async function C(n,t){let e=await import("node:path"),o=T(n),i={};for(let s of[".env",".env.local",`.env.${o}`,`.env.${o}.local`]){let r=await k(e.join(t,s));r!==null&&_(r,i)}return{...i,...process.env}}function P(n,t,e){for(let o of["domain","token"]){if(n[o])continue;let i=d[o].find(s=>t[s]);i&&(n[o]=t[i],i.startsWith("PUBLIC_")||e.warn(`${i} is written into every page as Tether's ${o}. Name it PUBLIC_${i} to say so.`))}if(typeof n.token=="string"&&h(n.token))throw new Error("The Shopify token for Tether is a secret token (shpat_/shpss_/\u2026), which would be published in every page. Use the public Storefront API token from the Headless channel.")}async function F(n,t,e){let{existsSync:o}=await import("node:fs"),i=await import("node:path");for(let s of t){let r=i.resolve(n,s);o(r)&&e(r)}}async function I(n){try{return await import(n)}catch(t){if(t instanceof Error&&"code"in t&&t.code==="ERR_MODULE_NOT_FOUND")return null;throw t}}var A=n=>typeof n=="object"&&n!==null&&"string"in n&&typeof n.string=="function";async function N(n){if(!n.updateConfig)return;let t=await I(y),e=typeof t=="object"&&t!==null&&"envField"in t?t.envField:null;if(!A(e))return;let o=()=>e.string({context:"client",access:"public",optional:!0});try{n.updateConfig({env:{schema:{PUBLIC_SHOPIFY_DOMAIN:o(),PUBLIC_SHOPIFY_STOREFRONT_TOKEN:o()}}})}catch(i){n.logger.warn(`.env variables not declared in astro:env: ${u(i)}`)}}function R(n,t){let e=Object.keys(n).filter(o=>typeof n[o]=="function");for(let o of e)Reflect.deleteProperty(n,o);e.length&&t.warn(`${e.join(", ")}: functions can't be passed here. Set them in window.TETHER_CONFIG in your layout.`)}function L(n,t){for(let e of Object.keys(n))e in g||(Reflect.deleteProperty(n,e),O.has(e)||t.warn(`${e} is not a Tether option: left out of the page.`))}function b(n,t){n("head-inline",'window.TETHER_INTEGRATION="astro";'),n("page",["import Tether from '@occluze/tether';",`window.TETHER_CONFIG = { ...${JSON.stringify({autoMount:!1,...t})}, ...(window.TETHER_CONFIG || {}) };`,"Tether.init().then(() => Tether.mount(document));"].join(`
2
2
  `))}function U(n={}){let{inject:t=!0,watch:e=w,...o}=n;return{name:"@occluze/tether",hooks:{"astro:config:setup":async i=>{let{injectScript:s,command:r,config:f,logger:a,addWatchFile:p}=i,{fileURLToPath:m}=await import("node:url"),l=f.root?m(f.root):process.cwd();r==="dev"&&p&&await F(l,e??[],p),await N(i);let c={...o};P(c,await C(r,l),a),R(c,a),L(c,a),(!c.domain||!c.token)&&a.warn("No Shopify store configured: set PUBLIC_SHOPIFY_DOMAIN and PUBLIC_SHOPIFY_STOREFRONT_TOKEN in .env (the public Storefront API token)."),t&&b(s,c)}}}}export{U as default};
@@ -1 +1 @@
1
- import{f as j,g as V,h as G,i as R,m as v,n as H}from"./chunk-5Z5O3767.js";import{a as O,c as M}from"./chunk-6OZJCAGZ.js";import{a as W}from"./chunk-C5JYQCWH.js";import{c as q,d as F,e as P}from"./chunk-A5SYCVQM.js";import"./chunk-BFTZR4OB.js";import{C as $,D as _,F as A,H as L,a as f,m as c,n as l,p as d,t as h,w as N,y as D}from"./chunk-BA4LQJJQ.js";import{A as T,C as U,d as I,g as y,r as i,x as E,z as m}from"./chunk-E5YO6274.js";var g=null;function X(){let e=i.account?.server;if(!e)throw new f("Customer accounts need the Worker: set account.server",{code:"NOT_CONFIGURED"});return new URL(e,window.location.href).href.replace(/\/$/,"")}function B(e){e?q(O(),"1"):F(O())}async function ae(e,t){try{return await fetch(e,t)}catch(r){throw new f(`Network error: ${T(r)}`,{code:"NETWORK"})}}async function ue(e){let t;try{t=await e.json()}catch{return{}}return I(t)?t:{}}async function p(e,{method:t="GET",body:r}={}){let n={method:t,credentials:"include"};t==="POST"&&(n.headers={"Content-Type":"application/json","X-Tether-Account":"1"}),r&&(n.body=JSON.stringify(r));let s=await ae(`${X()}${e}`,n);if(s.status===401)return{kind:"logged-out"};let o=await ue(s);if(!s.ok){let u=y(o.error)??String(s.status),w=G(o.userErrors);throw new f(`Customer accounts: ${u}`,{status:s.status,...w.length>0&&{userErrors:w},...o.code==="INVALID"&&{code:"INVALID"}})}return{kind:"answer",data:o}}async function k(){if(!g){let e=await p("/me");g=e.kind==="answer"&&e.data.loggedIn===!0?{loggedIn:!0,customer:j(e.data.customer)}:{loggedIn:!1}}return B(g.loggedIn),g}var J=()=>g?.loggedIn===!0;function K(){g=null}function z(e){let t=i.account?.navigate;t?t(e):window.location.assign(e)}var de=e=>e||i.account?.locale||(i.locale||"").split("-")[0]||"";function Q({returnTo:e,locale:t}){let r=new URL(`${X()}/login`);r.searchParams.set("returnTo",e);let n=de(t);n&&r.searchParams.set("locale",n),i.country&&r.searchParams.set("country",i.country.toUpperCase()),z(r.toString())}async function Y(){let e=P.id();if(!(await k()).loggedIn||!e)return null;let t=await p("/cart",{method:"POST",body:{cartId:e}});return t.kind==="logged-out"?null:y(t.data.checkoutUrl)}async function Z(e){let t=await p("/logout",{method:"POST",body:{returnTo:e,cartId:P.id()}});g=null,B(!1),h("account-logout",{});let r=t.kind==="answer"?y(t.data.logoutUrl):null;return r?(z(r),"redirected"):"stayed"}var b=10,S=50,ee=e=>typeof e=="number"&&Number.isInteger(e)&&e>=1&&e<=S;function le(e){let t=Number.parseInt(e||String(b),10)||b;return Math.min(Math.max(t,1),S)}var me=e=>e.replace(/\?.*$/,"").replace(/^.*\//,"");function ge(e){let t=i.account?.orderUrl;if(t)return t.replaceAll("{id}",encodeURIComponent(me(e.id)));let r=e.statusPageUrl;return r!==null&&U(r)?r:null}var fe=e=>({name:e.name??"",date:_(e.processedAt),total:$(e.totalPrice),status:e.financialStatus?.toLowerCase(),fulfillment:e.fulfillmentStatus?.toLowerCase(),items:e.lineItems.nodes.map(t=>`${String(t.quantity)}\xD7 ${t.title??""}`).join(", ")});function pe(e,t){let r=t.lineItems.nodes,n=ge(t),s=fe(t);d(e,c("order-bind")).forEach(o=>{let u=l(o,"order-bind")??"";if(u==="url"){n&&o.setAttribute("href",n);return}if(u==="image"){let x=r.find(ce=>ce.image)?.image;x&&N(o,x.url,x.altText||r[0]?.title||"");return}let w=v(s,u);w!==void 0&&A(o,w)}),d(e,c("order-lines")).forEach(o=>{H(o,r,null)}),l(e,"order-bind")==="url"&&n&&e.setAttribute("href",n)}async function te(e,t){let r=d(e,c("orders")),n=r[0];if(!n)return;R(e,"show",{"orders-loading":!0,"orders-empty":!1});let s=le(l(n,"limit")),o;try{o=await t(s)}catch(u){m(u,"orders"),o=null}R(e,"show",{"orders-loading":!1,"orders-empty":o?.length===0}),r.forEach(u=>{D(u,o??[],pe)})}var we=["order","addresses","subscriptions","profile-form","address-form"],he=J;function Pe({returnTo:e=window.location.href,locale:t}={}){return new Promise(r=>{Q({returnTo:e,locale:t}),r()})}async function se(){let e=await k();return e.loggedIn?e.customer:null}async function ye({first:e=b}={}){if(!ee(e))throw new f(`Customer accounts: orders() takes first from 1 to ${String(S)}`,{code:"INVALID"});let t=await p(`/orders?${new URLSearchParams({first:String(e)}).toString()}`);return t.kind==="logged-out"?[]:V(t.data.orders)}async function Ae({returnTo:e=i.account?.logoutUrl||`${window.location.origin}/`}={}){await Z(e)==="stayed"&&await C(document)}async function ve(){try{return(await k()).loggedIn?{kind:"logged-in"}:{kind:"logged-out"}}catch(e){return{kind:"unknown",error:e}}}var re=e=>we.some(t=>d(e,c(t)).length>0);function ke(e){d(e,c("account-link")).forEach(t=>{t.setAttribute("href",be(l(t,"account-link")))})}function be(e){let t=i.account,r=`https://${i.domain}/account`;return e==="payment"?t?.paymentUrl||t?.subscriptionsUrl||r:e==="subscriptions"&&t?.subscriptionsUrl||r}async function C(e=document){let t=await ve();t.kind==="unknown"&&m(t.error,"account");let r=t.kind==="logged-in";if(d(e,c("show")).forEach(n=>{let s=l(n,"show");s==="logged-in"&&L(n,r),s==="logged-out"&&L(n,!r)}),ke(e),t.kind==="unknown"&&re(e)){(await a()).showUnavailable(e);return}r&&(await ie(e),await Promise.all([te(e,n=>ye({first:n})),re(e)?a().then(n=>n.renderPages(e)):null]))}async function ie(e){let t=d(e,c("account-bind"));if(!t.length)return;let r;try{r=await se()}catch(s){m(s,"account");return}if(!r)return;let n={"first-name":r.firstName,"last-name":r.lastName,name:r.displayName,email:r.emailAddress?.emailAddress,address:r.defaultAddress?.formatted.join(", ")};t.forEach(s=>{let o=v(n,l(s,"account-bind")??"");o!=null&&A(s,o)})}var ne=null;function a(){return ne??(ne=W("account-pages").then(e=>(e.setup({serverFetch:p,customer:se,bindCustomer:ie,reset:K}),e))),ne}var Ye=e=>a().then(t=>t.order(e)),Ze=e=>a().then(t=>t.updateProfile(e)),et=()=>a().then(e=>e.addresses()),tt=(e,t)=>a().then(r=>r.saveAddress(e,t)),rt=e=>a().then(t=>t.deleteAddress(e)),nt=()=>a().then(e=>e.subscriptions()),ot=(e,t)=>a().then(r=>r.subscriptionAction(e,t)),st=(e,t)=>a().then(r=>r.requestReturn(e,t));function Se(e){let t=e.target;t instanceof window.Element&&(t.closest(c("account-login"))?(e.preventDefault(),Pe().catch(r=>{m(r,"login")})):t.closest(c("account-logout"))&&(e.preventDefault(),Ae().catch(r=>{m(r,"logout")})))}function xe(){let e=new URL(window.location.href),t=e.searchParams.get("account");if(M(t))switch(e.searchParams.delete("account"),window.history.replaceState(window.history.state,"",e),t){case"in":h("account-login",{});break;case"expired":case"error":h("account-error",{error:t});break}}var oe=!1;async function it(e=document){if(oe){await C(e);return}oe=!0,document.addEventListener("click",Se),xe(),P.setCheckoutResolver(Y),await C(e),E("account",he()?"logged in":"logged out")}export{et as addresses,se as customer,rt as deleteAddress,he as isLoggedIn,Pe as login,Ae as logout,it as mountAccount,Ye as order,ye as orders,C as render,st as requestReturn,tt as saveAddress,ot as subscriptionAction,nt as subscriptions,Ze as updateProfile};
1
+ import{f as j,g as V,h as G,i as R,m as v,n as H}from"./chunk-CXHPBT7N.js";import{a as O,c as M}from"./chunk-CVNRODH3.js";import{a as W}from"./chunk-MRSDJPBC.js";import{f as q,g as F,h as P}from"./chunk-RJY76ESL.js";import"./chunk-YC4JXWRG.js";import{C as $,D as _,F as A,H as L,a as f,m as c,n as l,p as d,t as h,w as N,y as D}from"./chunk-CUL66KRA.js";import{A as T,C as U,d as I,g as y,r as i,x as E,z as m}from"./chunk-QDHLXXAZ.js";var g=null;function X(){let e=i.account?.server;if(!e)throw new f("Customer accounts need the Worker: set account.server",{code:"NOT_CONFIGURED"});return new URL(e,window.location.href).href.replace(/\/$/,"")}function B(e){e?q(O(),"1"):F(O())}async function ae(e,t){try{return await fetch(e,t)}catch(r){throw new f(`Network error: ${T(r)}`,{code:"NETWORK"})}}async function ue(e){let t;try{t=await e.json()}catch{return{}}return I(t)?t:{}}async function p(e,{method:t="GET",body:r}={}){let n={method:t,credentials:"include"};t==="POST"&&(n.headers={"Content-Type":"application/json","X-Tether-Account":"1"}),r&&(n.body=JSON.stringify(r));let s=await ae(`${X()}${e}`,n);if(s.status===401)return{kind:"logged-out"};let o=await ue(s);if(!s.ok){let u=y(o.error)??String(s.status),w=G(o.userErrors);throw new f(`Customer accounts: ${u}`,{status:s.status,...w.length>0&&{userErrors:w},...o.code==="INVALID"&&{code:"INVALID"}})}return{kind:"answer",data:o}}async function k(){if(!g){let e=await p("/me");g=e.kind==="answer"&&e.data.loggedIn===!0?{loggedIn:!0,customer:j(e.data.customer)}:{loggedIn:!1}}return B(g.loggedIn),g}var J=()=>g?.loggedIn===!0;function K(){g=null}function z(e){let t=i.account?.navigate;t?t(e):window.location.assign(e)}var de=e=>e||i.account?.locale||(i.locale||"").split("-")[0]||"";function Q({returnTo:e,locale:t}){let r=new URL(`${X()}/login`);r.searchParams.set("returnTo",e);let n=de(t);n&&r.searchParams.set("locale",n),i.country&&r.searchParams.set("country",i.country.toUpperCase()),z(r.toString())}async function Y(){let e=P.id();if(!(await k()).loggedIn||!e)return null;let t=await p("/cart",{method:"POST",body:{cartId:e}});return t.kind==="logged-out"?null:y(t.data.checkoutUrl)}async function Z(e){let t=await p("/logout",{method:"POST",body:{returnTo:e,cartId:P.id()}});g=null,B(!1),h("account-logout",{});let r=t.kind==="answer"?y(t.data.logoutUrl):null;return r?(z(r),"redirected"):"stayed"}var b=10,S=50,ee=e=>typeof e=="number"&&Number.isInteger(e)&&e>=1&&e<=S;function le(e){let t=Number.parseInt(e||String(b),10)||b;return Math.min(Math.max(t,1),S)}var me=e=>e.replace(/\?.*$/,"").replace(/^.*\//,"");function ge(e){let t=i.account?.orderUrl;if(t)return t.replaceAll("{id}",encodeURIComponent(me(e.id)));let r=e.statusPageUrl;return r!==null&&U(r)?r:null}var fe=e=>({name:e.name??"",date:_(e.processedAt),total:$(e.totalPrice),status:e.financialStatus?.toLowerCase(),fulfillment:e.fulfillmentStatus?.toLowerCase(),items:e.lineItems.nodes.map(t=>`${String(t.quantity)}\xD7 ${t.title??""}`).join(", ")});function pe(e,t){let r=t.lineItems.nodes,n=ge(t),s=fe(t);d(e,c("order-bind")).forEach(o=>{let u=l(o,"order-bind")??"";if(u==="url"){n&&o.setAttribute("href",n);return}if(u==="image"){let x=r.find(ce=>ce.image)?.image;x&&N(o,x.url,x.altText||r[0]?.title||"");return}let w=v(s,u);w!==void 0&&A(o,w)}),d(e,c("order-lines")).forEach(o=>{H(o,r,null)}),l(e,"order-bind")==="url"&&n&&e.setAttribute("href",n)}async function te(e,t){let r=d(e,c("orders")),n=r[0];if(!n)return;R(e,"show",{"orders-loading":!0,"orders-empty":!1});let s=le(l(n,"limit")),o;try{o=await t(s)}catch(u){m(u,"orders"),o=null}R(e,"show",{"orders-loading":!1,"orders-empty":o?.length===0}),r.forEach(u=>{D(u,o??[],pe)})}var we=["order","addresses","subscriptions","profile-form","address-form"],he=J;function Pe({returnTo:e=window.location.href,locale:t}={}){return new Promise(r=>{Q({returnTo:e,locale:t}),r()})}async function se(){let e=await k();return e.loggedIn?e.customer:null}async function ye({first:e=b}={}){if(!ee(e))throw new f(`Customer accounts: orders() takes first from 1 to ${String(S)}`,{code:"INVALID"});let t=await p(`/orders?${new URLSearchParams({first:String(e)}).toString()}`);return t.kind==="logged-out"?[]:V(t.data.orders)}async function Ae({returnTo:e=i.account?.logoutUrl||`${window.location.origin}/`}={}){await Z(e)==="stayed"&&await C(document)}async function ve(){try{return(await k()).loggedIn?{kind:"logged-in"}:{kind:"logged-out"}}catch(e){return{kind:"unknown",error:e}}}var re=e=>we.some(t=>d(e,c(t)).length>0);function ke(e){d(e,c("account-link")).forEach(t=>{t.setAttribute("href",be(l(t,"account-link")))})}function be(e){let t=i.account,r=`https://${i.domain}/account`;return e==="payment"?t?.paymentUrl||t?.subscriptionsUrl||r:e==="subscriptions"&&t?.subscriptionsUrl||r}async function C(e=document){let t=await ve();t.kind==="unknown"&&m(t.error,"account");let r=t.kind==="logged-in";if(d(e,c("show")).forEach(n=>{let s=l(n,"show");s==="logged-in"&&L(n,r),s==="logged-out"&&L(n,!r)}),ke(e),t.kind==="unknown"&&re(e)){(await a()).showUnavailable(e);return}r&&(await ie(e),await Promise.all([te(e,n=>ye({first:n})),re(e)?a().then(n=>n.renderPages(e)):null]))}async function ie(e){let t=d(e,c("account-bind"));if(!t.length)return;let r;try{r=await se()}catch(s){m(s,"account");return}if(!r)return;let n={"first-name":r.firstName,"last-name":r.lastName,name:r.displayName,email:r.emailAddress?.emailAddress,address:r.defaultAddress?.formatted.join(", ")};t.forEach(s=>{let o=v(n,l(s,"account-bind")??"");o!=null&&A(s,o)})}var ne=null;function a(){return ne??(ne=W("account-pages").then(e=>(e.setup({serverFetch:p,customer:se,bindCustomer:ie,reset:K}),e))),ne}var Ye=e=>a().then(t=>t.order(e)),Ze=e=>a().then(t=>t.updateProfile(e)),et=()=>a().then(e=>e.addresses()),tt=(e,t)=>a().then(r=>r.saveAddress(e,t)),rt=e=>a().then(t=>t.deleteAddress(e)),nt=()=>a().then(e=>e.subscriptions()),ot=(e,t)=>a().then(r=>r.subscriptionAction(e,t)),st=(e,t)=>a().then(r=>r.requestReturn(e,t));function Se(e){let t=e.target;t instanceof window.Element&&(t.closest(c("account-login"))?(e.preventDefault(),Pe().catch(r=>{m(r,"login")})):t.closest(c("account-logout"))&&(e.preventDefault(),Ae().catch(r=>{m(r,"logout")})))}function xe(){let e=new URL(window.location.href),t=e.searchParams.get("account");if(M(t))switch(e.searchParams.delete("account"),window.history.replaceState(window.history.state,"",e),t){case"in":h("account-login",{});break;case"expired":case"error":h("account-error",{error:t});break}}var oe=!1;async function it(e=document){if(oe){await C(e);return}oe=!0,document.addEventListener("click",Se),xe(),P.setCheckoutResolver(Y),await C(e),E("account",he()?"logged in":"logged out")}export{et as addresses,se as customer,rt as deleteAddress,he as isLoggedIn,Pe as login,Ae as logout,it as mountAccount,Ye as order,ye as orders,C as render,st as requestReturn,tt as saveAddress,ot as subscriptionAction,nt as subscriptions,Ze as updateProfile};
@@ -1 +1 @@
1
- import{a as O,b as ie,c as oe,d as ae,e as S,i as m,j as L,k as E,l as k,m as h,n as de}from"./chunk-5Z5O3767.js";import{C as y,D as C,F as g,H as se,a as H,l as f,m as a,n as p,p as l,t as ne,w as re,y as P}from"./chunk-BA4LQJJQ.js";import{C as G,d as A,e as i,g as d,h as z,i as M,j as q,k as w,l as te,z as x}from"./chunk-E5YO6274.js";var ue={order:{name:"order",method:"GET",path:"/order",fields:{id:!0}},addresses:{name:"addresses",method:"GET",path:"/addresses",fields:{}},subscriptions:{name:"subscriptions",method:"GET",path:"/subscriptions",fields:{}},profile:{name:"profile",method:"POST",path:"/profile",fields:{firstName:!0,lastName:!0}},saveAddress:{name:"saveAddress",method:"POST",path:"/address",fields:{id:!0,address:!0,isDefault:!0}},deleteAddress:{name:"deleteAddress",method:"POST",path:"/address/delete",fields:{id:!0}},subscription:{name:"subscription",method:"POST",path:"/subscription",fields:{id:!0,action:!0}},requestReturn:{name:"requestReturn",method:"POST",path:"/return",fields:{orderId:!0,lines:!0}}},it=new Map(Object.values(ue).map(e=>[`${e.method} ${e.path}`,{...e,fields:Object.keys(e.fields)}]));function le(e,t){let n=ue[e];if(n.method==="POST")return{method:"POST",path:n.path};let r=t,s=new URLSearchParams;for(let u of Object.keys(n.fields)){let c=r[u];(typeof c=="string"||typeof c=="number")&&s.set(u,String(c))}let o=s.toString();return{method:"GET",path:o?`${n.path}?${o}`:n.path}}function me(e){let t=n=>d(i(e,n));return{id:t("id"),firstName:t("firstName"),lastName:t("lastName"),company:t("company"),address1:t("address1"),address2:t("address2"),city:t("city"),province:t("province"),zoneCode:t("zoneCode"),zip:t("zip"),country:t("country"),countryCode:t("countryCode"),phoneNumber:t("phoneNumber"),formatted:te(i(e,"formatted"))}}var ce=e=>A(e)?me(e):null,j=e=>({...me(e),id:S(i(e,"id"),"address id")}),pe=e=>q(e,t=>({...j(t),isDefault:i(t,"isDefault")===!0})),Le=e=>({...oe(e),id:S(i(e,"id"),"line item id"),name:d(i(e,"name")),sku:d(i(e,"sku")),price:O(i(e,"price")),totalPrice:O(i(e,"totalPrice")),suggestedReturnReasonDefinitions:w(i(e,"suggestedReturnReasonDefinitions"),t=>({id:S(i(t,"id"),"return reason id"),name:d(i(t,"name")),handle:d(i(t,"handle"))}))}),Ie=e=>({id:d(i(e,"id")),status:d(i(e,"status")),createdAt:d(i(e,"createdAt")),estimatedDeliveryAt:d(i(e,"estimatedDeliveryAt")),latestShipmentStatus:d(i(e,"latestShipmentStatus")),trackingInformation:q(i(e,"trackingInformation"),t=>({company:d(i(t,"company")),number:d(i(t,"number")),url:d(i(t,"url"))}))});function Re(e){let t=d(i(i(e,"lineItem"),"id"));return{quantity:M(i(e,"quantity")),lineItem:t===null?null:{id:t}}}function Ne(e){return A(e)?{returnableLineItems:w(e.returnableLineItems,Re)}:null}function fe(e){if(!A(e))return null;let t=s=>d(e[s]),n=s=>O(e[s]),r=e.requiresShipping;return{id:S(e.id,"order id"),name:t("name"),number:z(e.number),processedAt:t("processedAt"),cancelledAt:t("cancelledAt"),financialStatus:t("financialStatus"),fulfillmentStatus:t("fulfillmentStatus"),statusPageUrl:t("statusPageUrl"),requiresShipping:typeof r=="boolean"?r:null,totalPrice:n("totalPrice"),subtotal:n("subtotal"),totalShipping:n("totalShipping"),totalTax:n("totalTax"),shippingAddress:ce(e.shippingAddress),billingAddress:ce(e.billingAddress),lineItems:w(e.lineItems,Le),fulfillments:w(e.fulfillments,Ie),returnInformation:Ne(e.returnInformation),returns:w(e.returns,_)}}var ke=e=>({id:d(i(e,"id")),name:d(i(e,"name")),title:d(i(e,"title")),variantTitle:d(i(e,"variantTitle")),quantity:M(i(e,"quantity")),sku:d(i(e,"sku")),currentPrice:O(i(e,"currentPrice")),lineDiscountedPrice:O(i(e,"lineDiscountedPrice")),image:ie(i(e,"image"))}),ge=e=>({cycleIndex:z(i(e,"cycleIndex")),skipped:i(e,"skipped")===!0,billingAttemptExpectedDate:d(i(e,"billingAttemptExpectedDate"))});function De(e){if(!A(e))return null;let t=e.intervalCount;return{interval:d(e.interval),intervalCount:A(t)?{count:M(t.count)}:null}}var ve=e=>({id:S(i(e,"id"),"subscription id"),status:d(i(e,"status")),nextBillingDate:d(i(e,"nextBillingDate")),currencyCode:d(i(e,"currencyCode")),deliveryPrice:O(i(e,"deliveryPrice")),deliveryPolicy:De(i(e,"deliveryPolicy")),lines:w(i(e,"lines"),ke),upcomingBillingCycles:w(i(e,"upcomingBillingCycles"),ge)}),be=e=>q(e,ve);function ye(e){let{contract:t,billingCycle:n}=e;if(A(t))return{contract:{id:d(t.id),status:d(t.status)}};if(A(n)){let{cycleIndex:r,skipped:s}=ge(n);return{billingCycle:{cycleIndex:r,skipped:s}}}throw ae("changed subscription")}function _(e){return{id:S(i(e,"id"),"return id"),status:d(i(e,"status"))}}var he=e=>S(e,"deleted address id"),Ae=e=>({firstName:d(i(e,"firstName")),lastName:d(i(e,"lastName"))});var V=null;function Me(e){V=e}function I(){if(!V)throw new Error("account-pages: loaded without the account part");return V}async function T(e,t){let{serverFetch:n}=I(),{method:r,path:s}=le(e,t),o=await n(s,r==="POST"?{method:r,body:t}:{});if(o.kind==="logged-out")throw new H("Not logged in",{code:"NOT_LOGGED_IN",status:401});return o.data}function D(e){I().reset(),ne("account-updated",{what:e})}async function K(e){let t=await T("order",{id:e});return fe(t.order)}async function Q({firstName:e,lastName:t}={}){let n=await T("profile",{firstName:e,lastName:t});return D("profile"),Ae(n.customer)}async function W(){let e=await T("addresses",{});return pe(e.addresses)}async function F(e,{id:t,isDefault:n}={}){let r=await T("saveAddress",{id:t,address:e,isDefault:n});return D("addresses"),j(r.address)}async function X(e){let t=await T("deleteAddress",{id:e});return D("addresses"),he(t.deleted)}async function Y(){let e=await T("subscriptions",{});return be(e.subscriptions)}async function Z(e,t){let n=await T("subscription",{id:e,action:t});return D("subscriptions"),ye(n)}async function J(e,t){let n=await T("requestReturn",{orderId:e,lines:t});return D("orders"),_(n.return)}function qe(e){let t=p(e,"order")||"";return t.startsWith("url:")?new URL(window.location.href).searchParams.get(t.slice(4)||"id"):t}function v(e,t){e.setAttribute(f("order-state"),t),m(e,"order-show",{loading:t==="loading",ready:!1,"not-found":t==="not-found",error:t==="error"})}var He=e=>({name:e.name??"",date:C(e.processedAt),total:y(e.totalPrice),subtotal:y(e.subtotal),shipping:y(e.totalShipping),tax:y(e.totalTax),status:E(e.financialStatus),fulfillment:E(e.fulfillmentStatus),"shipping-address":k(e.shippingAddress),"billing-address":k(e.billingAddress),items:e.lineItems.nodes.map(t=>`${String(t.quantity)}\xD7 ${t.title||t.name||""}`).join(", "),cancelled:C(e.cancelledAt)});function Fe(e,t){let n=t.trackingInformation[0],r={status:E(t.latestShipmentStatus||t.status),date:C(t.createdAt),eta:C(t.estimatedDeliveryAt),company:n?.company||"",number:n?.number||""};L(e,"fulfillment-bind").forEach(s=>{let o=p(s,"fulfillment-bind")??"";if(o==="url"){let c=n?.url??null,b=c!==null&&G(c);b&&s.setAttribute("href",c),se(s,b);return}let u=h(r,o);u!==void 0&&g(s,u)})}function Be(e,t){let n=new Map((t.returnInformation?.returnableLineItems.nodes??[]).map(u=>[u.lineItem?.id??"",u.quantity])),r=t.fulfillments.nodes,s=He(t);l(e,a("order-bind")).forEach(u=>{let c=p(u,"order-bind")??"";if(c==="url"){let $=t.statusPageUrl;$!==null&&G($)&&u.setAttribute("href",$);return}let b=h(s,c);b!==void 0&&g(u,b)}),l(e,a("order-lines")).forEach(u=>{de(u,t.lineItems.nodes,n)}),l(e,a("order-fulfillments")).forEach(u=>{P(u,r,Fe)});let o=e.dataset.tetherReturned==="1";m(e,"order-show",{loading:!1,ready:!0,error:!1,"not-found":!1,cancelled:!!t.cancelledAt,shipped:r.length>0,returnable:[...n.values()].some(u=>u>0),"has-returns":!o&&t.returns.nodes.length>0,"return-requested":o}),e.setAttribute(f("order-state"),"ready")}async function B(e){let t=qe(e);if(!t){e.setAttribute(f("order-state"),"not-found"),m(e,"order-show",{"not-found":!0});return}v(e,"loading");let n;try{n=await K(t)}catch(r){x(r,"order"),v(e,"error");return}if(!n){v(e,"not-found");return}e.dataset.tetherOrderId=n.id,Be(e,n)}var we=[],xe=e=>we.find(t=>t.id===e),Ue=e=>({formatted:k(e),name:[e.firstName,e.lastName].filter(Boolean).join(" "),company:e.company||"",address1:e.address1||"",address2:e.address2||"",city:e.city||"",zip:e.zip||"",province:e.province||"",country:e.country||"",phone:e.phoneNumber||""});function $e(e,t){e.dataset.tetherAddress=t.id;let n=Ue(t);L(e,"address-bind").forEach(r=>{let s=h(n,p(r,"address-bind")??"");s!==void 0&&g(r,s)}),m(e,"address-show",{default:t.isDefault,"not-default":!t.isDefault})}async function R(e){let t=l(e,a("addresses"));if(!t.length)return;m(e,"show",{"addresses-loading":!0,"addresses-empty":!1});let n;try{n=await W()}catch(r){x(r,"addresses"),m(e,"show",{"addresses-loading":!1,"addresses-error":!0});return}we=n,m(e,"show",{"addresses-loading":!1,"addresses-empty":n.length===0,"addresses-error":!1}),t.forEach(r=>{P(r,n,$e)})}function ze(e){let t=e.upcomingBillingCycles.nodes[0],n=e.status,r=n==="ACTIVE";return{active:r,paused:n==="PAUSED",cancelled:n==="CANCELLED",expired:n==="EXPIRED",failed:n==="FAILED",skipped:!!t?.skipped,"can-pause":r,"can-resume":n==="PAUSED"||n==="FAILED","can-skip":r&&t!==void 0&&!t.skipped,"can-unskip":r&&!!t?.skipped,"can-cancel":r||n==="PAUSED"||n==="FAILED"}}function Ge(e){let t=E(e.deliveryPolicy?.interval);if(!t)return"";let n=e.deliveryPolicy?.intervalCount?.count??1;return n<=1?t:`${String(n)} ${t}s`}function je(e){let t=e.lines.nodes,n=t.reduce((r,s)=>r+Number.parseFloat(s.lineDiscountedPrice?.amount??"0"),0);return{status:E(e.status),next:C(e.nextBillingDate),interval:Ge(e),products:t.map(r=>`${String(r.quantity)}\xD7 ${r.title??""}`).join(", "),total:y(t.length&&e.currencyCode?{amount:String(n),currencyCode:e.currencyCode}:null),delivery:y(e.deliveryPrice)}}function _e(e,t){let n={title:t.title??"","variant-title":t.variantTitle||"",quantity:String(t.quantity),price:y(t.currentPrice)};L(e,"subscription-line").forEach(r=>{let s=p(r,"subscription-line")??"";if(s==="image"){t.image&&re(r,t.image.url,t.image.altText||t.title||"");return}let o=h(n,s);o!==void 0&&g(r,o)})}function Ve(e,t){e.dataset.tetherSubscription=t.id,e.setAttribute(f("subscription-status"),E(t.status));let n=je(t);l(e,a("subscription-bind")).forEach(s=>{let o=h(n,p(s,"subscription-bind")??"");o!==void 0&&g(s,o)}),l(e,a("subscription-lines")).forEach(s=>{P(s,t.lines.nodes,_e)});let r=ze(t);m(e,"subscription-show",r),l(e,a("subscription-action")).forEach(s=>{let o=h(r,`can-${p(s,"subscription-action")??""}`)===!0;"disabled"in s&&(s.disabled=!o),s.classList.toggle("is-disabled",!o)})}async function U(e){let t=l(e,a("subscriptions"));if(!t.length)return;m(e,"show",{"subscriptions-loading":!0,"subscriptions-empty":!1});let n;try{n=await Y()}catch(r){x(r,"subscriptions"),m(e,"show",{"subscriptions-loading":!1,"subscriptions-error":!0});return}m(e,"show",{"subscriptions-loading":!1,"subscriptions-empty":n.length===0,"subscriptions-error":!1}),t.forEach(r=>{P(r,n,Ve)})}var Ke=["pause","resume","skip","unskip","cancel"],Qe=e=>Ke.some(t=>t===e),Ee=e=>e instanceof window.HTMLInputElement||e instanceof window.HTMLSelectElement||e instanceof window.HTMLTextAreaElement,Te=e=>e instanceof window.HTMLFormElement;function Se(e){let t={};for(let n of e.elements)Ee(n)&&(!n.name||n.type==="submit"||n.type==="button"||n.type==="checkbox"||(t[n.name]=n.value));return t}function We(e){let n=(e instanceof H?e.userErrors??[]:[]).map(s=>s.message).join(" ");return n||(e instanceof Error&&e.message?e.message:"Something went wrong").replace(/^Customer accounts: /,"")}async function N(e,t){if(e.getAttribute("aria-busy")==="true")return"busy";e.classList.add("is-busy"),e.setAttribute("aria-busy","true"),e.setAttribute(f("form-state"),"pending");let n=l(e,a("form-error"));n.forEach(r=>{g(r,"")});try{return await t(),e.setAttribute(f("form-state"),"saved"),"saved"}catch(r){return e.setAttribute(f("form-state"),"error"),n.forEach(s=>{g(s,We(r))}),"error"}finally{e.classList.remove("is-busy"),e.removeAttribute("aria-busy")}}var ee=e=>{let t=p(e,"confirm");return!t||window.confirm(t)},Pe=e=>{e.reset(),delete e.dataset.tetherAddressId};function Xe(e){let t=e.target;if(t instanceof window.HTMLFormElement){if(t.matches(a("profile-form")))e.preventDefault(),N(t,async()=>{await Q(Se(t)),await I().bindCustomer(document)});else if(t.matches(a("address-form"))){e.preventDefault();let n=t.dataset.tetherAddressId,r=t.elements.namedItem("isDefault"),s=r instanceof window.HTMLInputElement&&r.checked;N(t,async()=>{await F(Se(t),{id:n,isDefault:s}),Pe(t),await R(document)})}}}function Ye(e){let t=xe(e),n=document.querySelector(a("address-form"));if(!t||!n||!Te(n))return;n.dataset.tetherAddressId=t.id;let r={...t};for(let s of n.elements)if(Ee(s)){if(s.name==="isDefault")s instanceof window.HTMLInputElement&&(s.checked=t.isDefault);else if(s.name&&Object.hasOwn(r,s.name)){let o=r[s.name];s.value=typeof o=="string"?o:""}}n.scrollIntoView({block:"nearest"})}function Ze(e,t){let n=t.closest("[data-tether-address]"),r=n instanceof window.HTMLElement?n.dataset.tetherAddress:void 0;if(t.closest(a("address-new"))){let o=document.querySelector(a("address-form"));return o&&Te(o)&&Pe(o),!0}if(!(n instanceof window.HTMLElement)||!r)return!1;let s=t.closest(a("address-delete"));if(s){if(e.preventDefault(),!ee(s))return!0;N(n,async()=>{await X(r),await R(document)})}else if(t.closest(a("address-default")))e.preventDefault(),N(n,async()=>{await F(null,{id:r,isDefault:!0}),await R(document)});else if(t.closest(a("address-edit")))e.preventDefault(),Ye(r);else return!1;return!0}function Je(e){let t=e.closest("[data-tether-subscription]"),n=p(e,"subscription-action"),r="disabled"in e&&e.disabled===!0||e.classList.contains("is-disabled");if(!(t instanceof window.HTMLElement)||!Qe(n)||r||!ee(e))return;let s=t.dataset.tetherSubscription??"";t.setAttribute(f("subscription-state"),"pending"),N(t,async()=>{await Z(s,n),await U(document)}).then(o=>{let u=o==="error"?"error":"done";l(document,"[data-tether-subscription]").filter(c=>c===t||c.dataset.tetherSubscription===s).forEach(c=>{c.setAttribute(f("subscription-state"),u)})})}function et(e){let t=e.querySelector(a("return-quantity")),n=e.querySelector(a("return-reason")),r=e.querySelector(a("return-note")),s=b=>b&&"value"in b&&typeof b.value=="string"?b.value:"",o={lineItemId:e.dataset.tetherLine??"",quantity:Number.parseInt(s(t)||"0",10)},u=s(n);u&&(o.reasonId=u);let c=s(r);return c&&(o.note=c),o}function tt(e){let t=e.closest(a("order"));if(!(t instanceof window.HTMLElement))return;let n=t.dataset.tetherOrderId;if(!n)return;let r=l(t,"[data-tether-line]").map(et).filter(s=>s.quantity>0);!r.length||!ee(e)||N(t,async()=>{await J(n,r),t.dataset.tetherReturned="1",await B(t)})}function nt(e){let t=e.target;if(!(t instanceof window.Element)||Ze(e,t))return;let n=t.closest(a("subscription-action"));if(n instanceof window.HTMLElement){e.preventDefault(),Je(n);return}let r=t.closest(a("order-return"));r instanceof window.HTMLElement&&(e.preventDefault(),tt(r))}function Ce(){document.addEventListener("submit",Xe,!0),document.addEventListener("input",e=>{let t=e.target;t instanceof window.HTMLElement&&t.closest(a("profile-form"))&&(t.dataset.tetherTouched="1")}),document.addEventListener("click",nt)}var rt=["firstName","lastName"];async function st(e){if(!(e instanceof window.HTMLFormElement))return;let t;try{t=await I().customer()}catch(r){x(r,"account");return}if(!t)return;let n=e.elements;rt.forEach(r=>{let s=n.namedItem(r);(s instanceof window.HTMLInputElement||s instanceof window.HTMLTextAreaElement)&&!s.dataset.tetherTouched&&(s.value=t[r]??"")})}var Oe=!1;async function Qt(e=document){Oe||(Oe=!0,Ce()),await Promise.all([...l(e,a("order")).map(t=>B(t)),...l(e,a("profile-form")).map(t=>st(t)),R(e),U(e)])}function Wt(e){l(e,a("order")).forEach(t=>{v(t,"error")}),m(e,"show",{"addresses-loading":!1,"addresses-error":!0,"subscriptions-loading":!1,"subscriptions-error":!0})}export{W as addresses,X as deleteAddress,K as order,Qt as renderPages,J as requestReturn,F as saveAddress,Me as setup,Wt as showUnavailable,Z as subscriptionAction,Y as subscriptions,Q as updateProfile};
1
+ import{a as O,b as ie,c as oe,d as ae,e as S,i as m,j as L,k as E,l as k,m as h,n as de}from"./chunk-CXHPBT7N.js";import{C as y,D as C,F as g,H as se,a as H,l as f,m as a,n as p,p as l,t as ne,w as re,y as P}from"./chunk-CUL66KRA.js";import{C as G,d as A,e as i,g as d,h as z,i as M,j as q,k as w,l as te,z as x}from"./chunk-QDHLXXAZ.js";var ue={order:{name:"order",method:"GET",path:"/order",fields:{id:!0}},addresses:{name:"addresses",method:"GET",path:"/addresses",fields:{}},subscriptions:{name:"subscriptions",method:"GET",path:"/subscriptions",fields:{}},profile:{name:"profile",method:"POST",path:"/profile",fields:{firstName:!0,lastName:!0}},saveAddress:{name:"saveAddress",method:"POST",path:"/address",fields:{id:!0,address:!0,isDefault:!0}},deleteAddress:{name:"deleteAddress",method:"POST",path:"/address/delete",fields:{id:!0}},subscription:{name:"subscription",method:"POST",path:"/subscription",fields:{id:!0,action:!0}},requestReturn:{name:"requestReturn",method:"POST",path:"/return",fields:{orderId:!0,lines:!0}}},it=new Map(Object.values(ue).map(e=>[`${e.method} ${e.path}`,{...e,fields:Object.keys(e.fields)}]));function le(e,t){let n=ue[e];if(n.method==="POST")return{method:"POST",path:n.path};let r=t,s=new URLSearchParams;for(let u of Object.keys(n.fields)){let c=r[u];(typeof c=="string"||typeof c=="number")&&s.set(u,String(c))}let o=s.toString();return{method:"GET",path:o?`${n.path}?${o}`:n.path}}function me(e){let t=n=>d(i(e,n));return{id:t("id"),firstName:t("firstName"),lastName:t("lastName"),company:t("company"),address1:t("address1"),address2:t("address2"),city:t("city"),province:t("province"),zoneCode:t("zoneCode"),zip:t("zip"),country:t("country"),countryCode:t("countryCode"),phoneNumber:t("phoneNumber"),formatted:te(i(e,"formatted"))}}var ce=e=>A(e)?me(e):null,j=e=>({...me(e),id:S(i(e,"id"),"address id")}),pe=e=>q(e,t=>({...j(t),isDefault:i(t,"isDefault")===!0})),Le=e=>({...oe(e),id:S(i(e,"id"),"line item id"),name:d(i(e,"name")),sku:d(i(e,"sku")),price:O(i(e,"price")),totalPrice:O(i(e,"totalPrice")),suggestedReturnReasonDefinitions:w(i(e,"suggestedReturnReasonDefinitions"),t=>({id:S(i(t,"id"),"return reason id"),name:d(i(t,"name")),handle:d(i(t,"handle"))}))}),Ie=e=>({id:d(i(e,"id")),status:d(i(e,"status")),createdAt:d(i(e,"createdAt")),estimatedDeliveryAt:d(i(e,"estimatedDeliveryAt")),latestShipmentStatus:d(i(e,"latestShipmentStatus")),trackingInformation:q(i(e,"trackingInformation"),t=>({company:d(i(t,"company")),number:d(i(t,"number")),url:d(i(t,"url"))}))});function Re(e){let t=d(i(i(e,"lineItem"),"id"));return{quantity:M(i(e,"quantity")),lineItem:t===null?null:{id:t}}}function Ne(e){return A(e)?{returnableLineItems:w(e.returnableLineItems,Re)}:null}function fe(e){if(!A(e))return null;let t=s=>d(e[s]),n=s=>O(e[s]),r=e.requiresShipping;return{id:S(e.id,"order id"),name:t("name"),number:z(e.number),processedAt:t("processedAt"),cancelledAt:t("cancelledAt"),financialStatus:t("financialStatus"),fulfillmentStatus:t("fulfillmentStatus"),statusPageUrl:t("statusPageUrl"),requiresShipping:typeof r=="boolean"?r:null,totalPrice:n("totalPrice"),subtotal:n("subtotal"),totalShipping:n("totalShipping"),totalTax:n("totalTax"),shippingAddress:ce(e.shippingAddress),billingAddress:ce(e.billingAddress),lineItems:w(e.lineItems,Le),fulfillments:w(e.fulfillments,Ie),returnInformation:Ne(e.returnInformation),returns:w(e.returns,_)}}var ke=e=>({id:d(i(e,"id")),name:d(i(e,"name")),title:d(i(e,"title")),variantTitle:d(i(e,"variantTitle")),quantity:M(i(e,"quantity")),sku:d(i(e,"sku")),currentPrice:O(i(e,"currentPrice")),lineDiscountedPrice:O(i(e,"lineDiscountedPrice")),image:ie(i(e,"image"))}),ge=e=>({cycleIndex:z(i(e,"cycleIndex")),skipped:i(e,"skipped")===!0,billingAttemptExpectedDate:d(i(e,"billingAttemptExpectedDate"))});function De(e){if(!A(e))return null;let t=e.intervalCount;return{interval:d(e.interval),intervalCount:A(t)?{count:M(t.count)}:null}}var ve=e=>({id:S(i(e,"id"),"subscription id"),status:d(i(e,"status")),nextBillingDate:d(i(e,"nextBillingDate")),currencyCode:d(i(e,"currencyCode")),deliveryPrice:O(i(e,"deliveryPrice")),deliveryPolicy:De(i(e,"deliveryPolicy")),lines:w(i(e,"lines"),ke),upcomingBillingCycles:w(i(e,"upcomingBillingCycles"),ge)}),be=e=>q(e,ve);function ye(e){let{contract:t,billingCycle:n}=e;if(A(t))return{contract:{id:d(t.id),status:d(t.status)}};if(A(n)){let{cycleIndex:r,skipped:s}=ge(n);return{billingCycle:{cycleIndex:r,skipped:s}}}throw ae("changed subscription")}function _(e){return{id:S(i(e,"id"),"return id"),status:d(i(e,"status"))}}var he=e=>S(e,"deleted address id"),Ae=e=>({firstName:d(i(e,"firstName")),lastName:d(i(e,"lastName"))});var V=null;function Me(e){V=e}function I(){if(!V)throw new Error("account-pages: loaded without the account part");return V}async function T(e,t){let{serverFetch:n}=I(),{method:r,path:s}=le(e,t),o=await n(s,r==="POST"?{method:r,body:t}:{});if(o.kind==="logged-out")throw new H("Not logged in",{code:"NOT_LOGGED_IN",status:401});return o.data}function D(e){I().reset(),ne("account-updated",{what:e})}async function K(e){let t=await T("order",{id:e});return fe(t.order)}async function Q({firstName:e,lastName:t}={}){let n=await T("profile",{firstName:e,lastName:t});return D("profile"),Ae(n.customer)}async function W(){let e=await T("addresses",{});return pe(e.addresses)}async function F(e,{id:t,isDefault:n}={}){let r=await T("saveAddress",{id:t,address:e,isDefault:n});return D("addresses"),j(r.address)}async function X(e){let t=await T("deleteAddress",{id:e});return D("addresses"),he(t.deleted)}async function Y(){let e=await T("subscriptions",{});return be(e.subscriptions)}async function Z(e,t){let n=await T("subscription",{id:e,action:t});return D("subscriptions"),ye(n)}async function J(e,t){let n=await T("requestReturn",{orderId:e,lines:t});return D("orders"),_(n.return)}function qe(e){let t=p(e,"order")||"";return t.startsWith("url:")?new URL(window.location.href).searchParams.get(t.slice(4)||"id"):t}function v(e,t){e.setAttribute(f("order-state"),t),m(e,"order-show",{loading:t==="loading",ready:!1,"not-found":t==="not-found",error:t==="error"})}var He=e=>({name:e.name??"",date:C(e.processedAt),total:y(e.totalPrice),subtotal:y(e.subtotal),shipping:y(e.totalShipping),tax:y(e.totalTax),status:E(e.financialStatus),fulfillment:E(e.fulfillmentStatus),"shipping-address":k(e.shippingAddress),"billing-address":k(e.billingAddress),items:e.lineItems.nodes.map(t=>`${String(t.quantity)}\xD7 ${t.title||t.name||""}`).join(", "),cancelled:C(e.cancelledAt)});function Fe(e,t){let n=t.trackingInformation[0],r={status:E(t.latestShipmentStatus||t.status),date:C(t.createdAt),eta:C(t.estimatedDeliveryAt),company:n?.company||"",number:n?.number||""};L(e,"fulfillment-bind").forEach(s=>{let o=p(s,"fulfillment-bind")??"";if(o==="url"){let c=n?.url??null,b=c!==null&&G(c);b&&s.setAttribute("href",c),se(s,b);return}let u=h(r,o);u!==void 0&&g(s,u)})}function Be(e,t){let n=new Map((t.returnInformation?.returnableLineItems.nodes??[]).map(u=>[u.lineItem?.id??"",u.quantity])),r=t.fulfillments.nodes,s=He(t);l(e,a("order-bind")).forEach(u=>{let c=p(u,"order-bind")??"";if(c==="url"){let $=t.statusPageUrl;$!==null&&G($)&&u.setAttribute("href",$);return}let b=h(s,c);b!==void 0&&g(u,b)}),l(e,a("order-lines")).forEach(u=>{de(u,t.lineItems.nodes,n)}),l(e,a("order-fulfillments")).forEach(u=>{P(u,r,Fe)});let o=e.dataset.tetherReturned==="1";m(e,"order-show",{loading:!1,ready:!0,error:!1,"not-found":!1,cancelled:!!t.cancelledAt,shipped:r.length>0,returnable:[...n.values()].some(u=>u>0),"has-returns":!o&&t.returns.nodes.length>0,"return-requested":o}),e.setAttribute(f("order-state"),"ready")}async function B(e){let t=qe(e);if(!t){e.setAttribute(f("order-state"),"not-found"),m(e,"order-show",{"not-found":!0});return}v(e,"loading");let n;try{n=await K(t)}catch(r){x(r,"order"),v(e,"error");return}if(!n){v(e,"not-found");return}e.dataset.tetherOrderId=n.id,Be(e,n)}var we=[],xe=e=>we.find(t=>t.id===e),Ue=e=>({formatted:k(e),name:[e.firstName,e.lastName].filter(Boolean).join(" "),company:e.company||"",address1:e.address1||"",address2:e.address2||"",city:e.city||"",zip:e.zip||"",province:e.province||"",country:e.country||"",phone:e.phoneNumber||""});function $e(e,t){e.dataset.tetherAddress=t.id;let n=Ue(t);L(e,"address-bind").forEach(r=>{let s=h(n,p(r,"address-bind")??"");s!==void 0&&g(r,s)}),m(e,"address-show",{default:t.isDefault,"not-default":!t.isDefault})}async function R(e){let t=l(e,a("addresses"));if(!t.length)return;m(e,"show",{"addresses-loading":!0,"addresses-empty":!1});let n;try{n=await W()}catch(r){x(r,"addresses"),m(e,"show",{"addresses-loading":!1,"addresses-error":!0});return}we=n,m(e,"show",{"addresses-loading":!1,"addresses-empty":n.length===0,"addresses-error":!1}),t.forEach(r=>{P(r,n,$e)})}function ze(e){let t=e.upcomingBillingCycles.nodes[0],n=e.status,r=n==="ACTIVE";return{active:r,paused:n==="PAUSED",cancelled:n==="CANCELLED",expired:n==="EXPIRED",failed:n==="FAILED",skipped:!!t?.skipped,"can-pause":r,"can-resume":n==="PAUSED"||n==="FAILED","can-skip":r&&t!==void 0&&!t.skipped,"can-unskip":r&&!!t?.skipped,"can-cancel":r||n==="PAUSED"||n==="FAILED"}}function Ge(e){let t=E(e.deliveryPolicy?.interval);if(!t)return"";let n=e.deliveryPolicy?.intervalCount?.count??1;return n<=1?t:`${String(n)} ${t}s`}function je(e){let t=e.lines.nodes,n=t.reduce((r,s)=>r+Number.parseFloat(s.lineDiscountedPrice?.amount??"0"),0);return{status:E(e.status),next:C(e.nextBillingDate),interval:Ge(e),products:t.map(r=>`${String(r.quantity)}\xD7 ${r.title??""}`).join(", "),total:y(t.length&&e.currencyCode?{amount:String(n),currencyCode:e.currencyCode}:null),delivery:y(e.deliveryPrice)}}function _e(e,t){let n={title:t.title??"","variant-title":t.variantTitle||"",quantity:String(t.quantity),price:y(t.currentPrice)};L(e,"subscription-line").forEach(r=>{let s=p(r,"subscription-line")??"";if(s==="image"){t.image&&re(r,t.image.url,t.image.altText||t.title||"");return}let o=h(n,s);o!==void 0&&g(r,o)})}function Ve(e,t){e.dataset.tetherSubscription=t.id,e.setAttribute(f("subscription-status"),E(t.status));let n=je(t);l(e,a("subscription-bind")).forEach(s=>{let o=h(n,p(s,"subscription-bind")??"");o!==void 0&&g(s,o)}),l(e,a("subscription-lines")).forEach(s=>{P(s,t.lines.nodes,_e)});let r=ze(t);m(e,"subscription-show",r),l(e,a("subscription-action")).forEach(s=>{let o=h(r,`can-${p(s,"subscription-action")??""}`)===!0;"disabled"in s&&(s.disabled=!o),s.classList.toggle("is-disabled",!o)})}async function U(e){let t=l(e,a("subscriptions"));if(!t.length)return;m(e,"show",{"subscriptions-loading":!0,"subscriptions-empty":!1});let n;try{n=await Y()}catch(r){x(r,"subscriptions"),m(e,"show",{"subscriptions-loading":!1,"subscriptions-error":!0});return}m(e,"show",{"subscriptions-loading":!1,"subscriptions-empty":n.length===0,"subscriptions-error":!1}),t.forEach(r=>{P(r,n,Ve)})}var Ke=["pause","resume","skip","unskip","cancel"],Qe=e=>Ke.some(t=>t===e),Ee=e=>e instanceof window.HTMLInputElement||e instanceof window.HTMLSelectElement||e instanceof window.HTMLTextAreaElement,Te=e=>e instanceof window.HTMLFormElement;function Se(e){let t={};for(let n of e.elements)Ee(n)&&(!n.name||n.type==="submit"||n.type==="button"||n.type==="checkbox"||(t[n.name]=n.value));return t}function We(e){let n=(e instanceof H?e.userErrors??[]:[]).map(s=>s.message).join(" ");return n||(e instanceof Error&&e.message?e.message:"Something went wrong").replace(/^Customer accounts: /,"")}async function N(e,t){if(e.getAttribute("aria-busy")==="true")return"busy";e.classList.add("is-busy"),e.setAttribute("aria-busy","true"),e.setAttribute(f("form-state"),"pending");let n=l(e,a("form-error"));n.forEach(r=>{g(r,"")});try{return await t(),e.setAttribute(f("form-state"),"saved"),"saved"}catch(r){return e.setAttribute(f("form-state"),"error"),n.forEach(s=>{g(s,We(r))}),"error"}finally{e.classList.remove("is-busy"),e.removeAttribute("aria-busy")}}var ee=e=>{let t=p(e,"confirm");return!t||window.confirm(t)},Pe=e=>{e.reset(),delete e.dataset.tetherAddressId};function Xe(e){let t=e.target;if(t instanceof window.HTMLFormElement){if(t.matches(a("profile-form")))e.preventDefault(),N(t,async()=>{await Q(Se(t)),await I().bindCustomer(document)});else if(t.matches(a("address-form"))){e.preventDefault();let n=t.dataset.tetherAddressId,r=t.elements.namedItem("isDefault"),s=r instanceof window.HTMLInputElement&&r.checked;N(t,async()=>{await F(Se(t),{id:n,isDefault:s}),Pe(t),await R(document)})}}}function Ye(e){let t=xe(e),n=document.querySelector(a("address-form"));if(!t||!n||!Te(n))return;n.dataset.tetherAddressId=t.id;let r={...t};for(let s of n.elements)if(Ee(s)){if(s.name==="isDefault")s instanceof window.HTMLInputElement&&(s.checked=t.isDefault);else if(s.name&&Object.hasOwn(r,s.name)){let o=r[s.name];s.value=typeof o=="string"?o:""}}n.scrollIntoView({block:"nearest"})}function Ze(e,t){let n=t.closest("[data-tether-address]"),r=n instanceof window.HTMLElement?n.dataset.tetherAddress:void 0;if(t.closest(a("address-new"))){let o=document.querySelector(a("address-form"));return o&&Te(o)&&Pe(o),!0}if(!(n instanceof window.HTMLElement)||!r)return!1;let s=t.closest(a("address-delete"));if(s){if(e.preventDefault(),!ee(s))return!0;N(n,async()=>{await X(r),await R(document)})}else if(t.closest(a("address-default")))e.preventDefault(),N(n,async()=>{await F(null,{id:r,isDefault:!0}),await R(document)});else if(t.closest(a("address-edit")))e.preventDefault(),Ye(r);else return!1;return!0}function Je(e){let t=e.closest("[data-tether-subscription]"),n=p(e,"subscription-action"),r="disabled"in e&&e.disabled===!0||e.classList.contains("is-disabled");if(!(t instanceof window.HTMLElement)||!Qe(n)||r||!ee(e))return;let s=t.dataset.tetherSubscription??"";t.setAttribute(f("subscription-state"),"pending"),N(t,async()=>{await Z(s,n),await U(document)}).then(o=>{let u=o==="error"?"error":"done";l(document,"[data-tether-subscription]").filter(c=>c===t||c.dataset.tetherSubscription===s).forEach(c=>{c.setAttribute(f("subscription-state"),u)})})}function et(e){let t=e.querySelector(a("return-quantity")),n=e.querySelector(a("return-reason")),r=e.querySelector(a("return-note")),s=b=>b&&"value"in b&&typeof b.value=="string"?b.value:"",o={lineItemId:e.dataset.tetherLine??"",quantity:Number.parseInt(s(t)||"0",10)},u=s(n);u&&(o.reasonId=u);let c=s(r);return c&&(o.note=c),o}function tt(e){let t=e.closest(a("order"));if(!(t instanceof window.HTMLElement))return;let n=t.dataset.tetherOrderId;if(!n)return;let r=l(t,"[data-tether-line]").map(et).filter(s=>s.quantity>0);!r.length||!ee(e)||N(t,async()=>{await J(n,r),t.dataset.tetherReturned="1",await B(t)})}function nt(e){let t=e.target;if(!(t instanceof window.Element)||Ze(e,t))return;let n=t.closest(a("subscription-action"));if(n instanceof window.HTMLElement){e.preventDefault(),Je(n);return}let r=t.closest(a("order-return"));r instanceof window.HTMLElement&&(e.preventDefault(),tt(r))}function Ce(){document.addEventListener("submit",Xe,!0),document.addEventListener("input",e=>{let t=e.target;t instanceof window.HTMLElement&&t.closest(a("profile-form"))&&(t.dataset.tetherTouched="1")}),document.addEventListener("click",nt)}var rt=["firstName","lastName"];async function st(e){if(!(e instanceof window.HTMLFormElement))return;let t;try{t=await I().customer()}catch(r){x(r,"account");return}if(!t)return;let n=e.elements;rt.forEach(r=>{let s=n.namedItem(r);(s instanceof window.HTMLInputElement||s instanceof window.HTMLTextAreaElement)&&!s.dataset.tetherTouched&&(s.value=t[r]??"")})}var Oe=!1;async function Qt(e=document){Oe||(Oe=!0,Ce()),await Promise.all([...l(e,a("order")).map(t=>B(t)),...l(e,a("profile-form")).map(t=>st(t)),R(e),U(e)])}function Wt(e){l(e,a("order")).forEach(t=>{v(t,"error")}),m(e,"show",{"addresses-loading":!1,"addresses-error":!0,"subscriptions-loading":!1,"subscriptions-error":!0})}export{W as addresses,X as deleteAddress,K as order,Qt as renderPages,J as requestReturn,F as saveAddress,Me as setup,Wt as showUnavailable,Z as subscriptionAction,Y as subscriptions,Q as updateProfile};
@@ -0,0 +1 @@
1
+ import{a as A}from"./chunk-NYDZPTLP.js";import"./chunk-AUVAN3KZ.js";import"./chunk-BMDYNMRC.js";import{h}from"./chunk-RJY76ESL.js";import"./chunk-YC4JXWRG.js";import{d as k,h as E,m as p,r as _,s as w}from"./chunk-CUL66KRA.js";import{r as a,x as T,z as l}from"./chunk-QDHLXXAZ.js";var F=500,S={"default-banner":"https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js",other:"https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js"},O="https://cdn.shopify.com/storefront/analytics/shopify.js",x=()=>window,m=()=>x().Shopify;function L(){let t=a.analytics?.shopify;return typeof t=="object"?t:{}}function I(){try{let t=m()?.customerPrivacy;return t?.consentStatus==="loaded"&&t.currentVisitorConsent?.()?.analytics!=="no"&&!!t.analyticsProcessingAllowed?.()}catch{return!1}}function j(t){let e=`hydrogen:${t}`;return{getTrackingValues:()=>{let n=I()?m()?.customerPrivacy?.__internal:void 0;return{uniqueToken:n?.uniqueToken?.({generateFallback:!0,tag:e})??"",visitToken:n?.visitToken?.({generateFallback:!0,tag:e})??""}}}}var $=t=>(e,n)=>{let i=t.subscribers.get(e)??new Set;return t.subscribers.set(e,i),i.add(n),()=>t.subscribers.get(e)?.delete(n)};function U(t){let e=[],n=[],i={shop:{shopId:t,channel:"headless"},consent:{mode:L().consent||"no-banner"}},o=()=>{if(I())for(let r of e)for(;r.next<n.length;r.next+=1){let s=n[r.next];s&&G(r,s)}},c={getConfig:()=>i,publish(r,s={}){if(n.push({event:r,payload:{shop:i.shop,url:window.location.href,...s}}),n.length>F){n.shift();for(let d of e)d.next=Math.max(0,d.next-1)}o()},addDestination(r){let s={name:r.name,next:0,subscribers:new Map,context:j(r.name)};return Promise.resolve(r.setup?.({subscribe:$(s),getConfig:c.getConfig})).then(()=>{e.push(s),o()}).catch(d=>{l(d,`analytics ${r.name}`)}),()=>{let d=e.indexOf(s);d>=0&&e.splice(d,1)}}};return document.addEventListener("consentTrackingApiLoaded",o),document.addEventListener("visitorConsentCollected",o),c}function G(t,{event:e,payload:n}){t.subscribers.get(e)?.forEach(i=>{try{i(n,t.context)}catch(o){l(o,`analytics ${t.name}`)}})}function P(t){let e=document.createElement("script");e.src=t,e.async=!0,document.head.appendChild(e)}async function R(t){let e=m();if(e?.analytics)return e.analytics;let n=await E("query TetherShopId { shop { id } }",{},k({shop:{id:"string"}}),{context:!1}),i=m()??{};x().Shopify=i,i.country=a.country??"US";let[o="en"]=(a.locale||"en").split("-");i.locale=o.toLowerCase(),i.shop=a.domain,i.routes={root:"/",match:()=>({pageTemplateName:t()?"product":"page"}),...i.routes};let{proxy:c,consent:r}=L();i.customerPrivacy={...i.customerPrivacy,config:c?{isHeadless:!0,asyncConsent:!0,asyncVisitorState:!0,consentDomain:window.location.host}:{isHeadless:!0,storefrontAccessToken:a.token,checkoutRootDomain:a.domain}};let s=U(n.shop.id);return i.analytics=s,P(r==="default-banner"?S["default-banner"]:S.other),P(O),T("shopify analytics ready",n.shop.id),s}var W="Default Title",V=100,H=200,Y=t=>t?parseFloat(t.amount):0,N=t=>(t??"").split("/").pop()??"";function C(t,e,n=1,i){let o={item_id:e?.sku||N(e?.id)||N(t.id),item_name:t.title,item_variant:e?.title===W?void 0:e?.title,item_brand:t.vendor||void 0,item_category:t.productType||void 0,price:Y(e?.price??t.priceRange?.minVariantPrice),quantity:n};return i!=null&&(o.index=i),o}var g=(t,e=t.quantity)=>C(t.merchandise.product,t.merchandise,e);function f(t){let e=t.reduce((n,i)=>n+i.price*(i.quantity||1),0);return Math.round(e*V)/V}var X=(t,e,n=1)=>({id:t.id,title:t.title,price:e.price,vendor:t.vendor||"",variantId:e.id,variantTitle:e.title,quantity:n,sku:e.sku||void 0,productType:t.productType||void 0}),D=t=>({id:t.id,quantity:t.quantity,merchandise:{id:t.merchandise.id,title:t.merchandise.title,price:t.merchandise.price,sku:t.merchandise.sku,product:{id:t.merchandise.product.id,title:t.merchandise.product.title,vendor:t.merchandise.product.vendor||"",handle:t.merchandise.product.handle}}});function Z(){let{dataLayer:t}=a.analytics??{},e=typeof t=="string"?t:"dataLayer",n=Reflect.get(window,e);if(Array.isArray(n))return n;let i=[];return Reflect.set(window,e,i),i}function z(t,e){let n=Z();if(!e){n.push({event:t});return}n.push({ecommerce:null}),n.push({event:t,ecommerce:e})}var y=null,v=null,q=null,b=new WeakSet;function u(t,e,n,i){a.analytics?.dataLayer&&z(t,e),y&&n&&y.publish(n,i);try{a.analytics?.onEvent?.(t,e)}catch(o){l(o,"analytics onEvent")}}function M(){let t=document.querySelector(p("product"));return!t||t.closest(`${p("collection")},${p("products")},${p("recommendations")}`)?null:A.get(t)??null}function J({product:t,scope:e}){if(b.has(e.root)||M()!==e)return;b.add(e.root);let n=e.variant??t.variants.nodes[0],i=[C(t,n)],o=n?[X(t,n)]:[];u("view_item",{currency:n?.price.currencyCode,value:f(i),items:i},"product_viewed",{products:o})}function K({products:t,collection:e}){let n=t.slice(0,H).map((o,c)=>C(o,o.variants.nodes[0],1,c)),i={item_list_id:e?.handle||"products",item_list_name:e?.title||"Products"};if(!e){u("view_item_list",{...i,items:n});return}u("view_item_list",{...i,items:n},"collection_viewed",{collection:{id:e.id,handle:e.handle}})}function Q(t,e,n){let i=t?.cost.totalAmount.currencyCode;e.forEach((o,c)=>{let r=n.get(c),s=o.quantity-(r?.quantity??0);if(s<=0)return;let d=[g(o,s)];u("add_to_cart",{currency:i,value:f(d),items:d},"product_added_to_cart",{cart:t,prevCart:q,currentLine:D(o),prevLine:r?D(r):void 0})}),n.forEach((o,c)=>{let r=o.quantity-(e.get(c)?.quantity??0);if(r<=0)return;let s=[g(o,r)];u("remove_from_cart",{currency:i,value:f(s),items:s})})}function tt({cart:t,reason:e}){let n=new Map((t?.lines.nodes??[]).map(i=>[i.merchandise.id,i]));v&&e!=="load"&&e!=="pending"&&Q(t,n,v),v=n,q=t}function et(){let t=h.lines.map(e=>g(e));u("view_cart",{currency:h.state?.cost.totalAmount.currencyCode,value:f(t),items:t})}function nt({cart:t}){if(!t)return;let e=t.lines.nodes.map(i=>g(i)),n=t.discountCodes.filter(i=>i.applicable).map(i=>i.code);u("begin_checkout",{currency:t.cost.totalAmount.currencyCode,value:f(e),coupon:n.join(",")||void 0,items:e})}var it={"product-ready":J,"list-ready":K,"cart-updated":tt,"cart-toggled":({open:t})=>{t&&et()},checkout:nt,search:({term:t})=>{t&&u("search",{search_term:t},"search_viewed",{searchTerm:t})}};function ot(t,e){it[e](t.detail)}function B(t){if(t.type==="astro:page-load"){b=new WeakSet,y?.publish("page_viewed",{});return}_.forEach(e=>{w(t,e)&&ot(t,e)})}async function ft(t){a.analytics?.shopify&&(y=await R(()=>M()!=null).catch(e=>(l(e,"shopify analytics"),null))),y?.publish("page_viewed",{}),t.splice(0).forEach(B),t.push=(...e)=>(e.forEach(B),t.length)}export{ft as startAnalytics};
@@ -1 +1 @@
1
- import{e as P,f,g as x,h as v,i as d,j as g,k as A,l as y,m as I,n as h}from"./chunk-BFTZR4OB.js";var M=100,V=(n,e)=>f(P(n)*e,n.currencyCode),S=n=>Object.fromEntries(n.selectedOptions.map(e=>[e.name,e.value]));function w(n,e){return n.variants.nodes.find(o=>o.selectedOptions.every(r=>e[r.name]===r.value))??null}function T(n,e,o,r){return n.variants.nodes.some(t=>t.availableForSale&&t.selectedOptions.every(i=>i.name===o?i.value===r:e[i.name]===i.value))}var k=n=>n.kind==="subscription"?n.planId:n.offeredPlanId;function F(n,e){return n.kind==="subscription"&&d(e,n.planId)?n:{kind:"one-time"}}function C(n,e,o,r){let t=v(n),i=t.find(s=>s.id===r)??t[0];if(!i)return{kind:"one-time",offeredPlanId:null};let a=d(e,i.id)?i:t.find(s=>d(e,s.id))??i;return n.requiresSellingPlan||o==="subscription"?{kind:"subscription",planId:a.id}:{kind:"one-time",offeredPlanId:a.id}}function B(n,{variant:e,sellingPlan:o,defaultPlan:r,defaultPurchase:t}){let i=n.variants.nodes,a=x.variant(e),s=i.find(l=>l.id===a)??i.find(l=>l.availableForSale)??i[0]??null,c=h(n,o),p=c??h(n,r),m=c||t==="subscription"?"subscription":"one-time";return{selected:s?S(s):{},purchase:C(n,s,m,p?.id??null)}}function j(n,e,o,r,t){let i=n.quantityAvailable,a=i!=null&&i>0&&i<=e,s=r.compareAtPrice!==null,c=r.line.kind==="subscription";return{"in-stock":n.availableForSale,"out-of-stock":!n.availableForSale,backorder:n.availableForSale&&n.currentlyNotInStock,"on-sale":s,"not-on-sale":!s,"has-variants":o>1,"single-variant":o===1,"low-stock":a,"plenty-in-stock":n.availableForSale&&!a,"subscription-available":r.subscriptionAvailable,"subscription-unavailable":!r.subscriptionAvailable,"subscription-only":t,"one-time-available":!t,"subscription-selected":c,"one-time-selected":!c,"has-savings":c?r.savings.percentage>0:s}}function R(n,e,o){let r=w(n,e.selected),t=r??n.variants.nodes[0];if(!t)return null;let i=C(n,t,e.purchase.kind,k(e.purchase)),a=k(i),s=v(n),c=F(i,t),p=c.kind==="subscription"?d(t,c.planId):null,m=p?g(t,a)??t.price:t.price,l=p?.priceAdjustments[0]?.compareAtPrice??t.compareAtPrice,b={line:c,subscriptionAvailable:s.some(u=>d(t,u.id)),compareAtPrice:l&&parseFloat(l.amount)>parseFloat(m.amount)?l:null,savings:y(t,a)};return{...b,variant:t,selected:r?e.selected:S(t),purchase:i,plan:s.find(u=>u.id===a)??null,quantity:e.quantity,price:m,show:j(t,o,n.variants.nodes.length,b,n.requiresSellingPlan)}}function G(n,e){let{variant:o,plan:r,price:t,compareAtPrice:i,quantity:a}=n,s=k(n.purchase),c=u=>V(u,Math.max(1,a)),b={price:()=>e.money(t),"total-price":()=>e.money(c(t)),"one-time-price":()=>e.money(o.price),"subscription-price":()=>e.money(s?g(o,s):null),"subscription-savings":()=>e.percent(n.savings.percentage),"subscription-savings-amount":()=>e.money(n.savings.amount),"checkout-charge":()=>{let u=n.line.kind==="subscription"?A(o,s)??t:t;return e.money(c(u))},"plan-name":()=>r?.name,"plan-description":()=>r?.description,"plan-group":()=>r?.group.name,"compare-at-price":()=>e.money(i),"unit-price":()=>e.money(o.unitPrice),"discount-percentage":()=>i?`${Math.round((1-parseFloat(t.amount)/parseFloat(i.amount))*M)}%`:"0%","discount-amount":()=>i?e.money(f(P(i)-P(t),t.currencyCode)):"","variant-title":()=>o.title,"variant-id":()=>o.id,sku:()=>o.sku,barcode:()=>o.barcode,stock:()=>o.quantityAvailable,quantity:()=>a};return new Map(Object.entries(b))}function E(n,e,o,r){let i={name:()=>o?.name,option:()=>(o?.options??[]).map(a=>a.value).join(", "),description:()=>o?.description,price:()=>r.money(g(n,e)),savings:()=>r.percent(y(n,e).percentage),"savings-amount":()=>r.money(y(n,e).amount),adjustment:()=>{let a=I(o);return a?a.type==="percentage"?`${a.value}%`:r.money(a.value):""}};return new Map(Object.entries(i))}export{S as a,T as b,k as c,F as d,C as e,B as f,R as g,G as h,E as i};
1
+ import{e as P,f,g as x,h as v,i as d,j as g,k as A,l as y,m as I,n as h}from"./chunk-YC4JXWRG.js";var M=100,V=(n,e)=>f(P(n)*e,n.currencyCode),S=n=>Object.fromEntries(n.selectedOptions.map(e=>[e.name,e.value]));function w(n,e){return n.variants.nodes.find(o=>o.selectedOptions.every(r=>e[r.name]===r.value))??null}function T(n,e,o,r){return n.variants.nodes.some(t=>t.availableForSale&&t.selectedOptions.every(i=>i.name===o?i.value===r:e[i.name]===i.value))}var k=n=>n.kind==="subscription"?n.planId:n.offeredPlanId;function F(n,e){return n.kind==="subscription"&&d(e,n.planId)?n:{kind:"one-time"}}function C(n,e,o,r){let t=v(n),i=t.find(s=>s.id===r)??t[0];if(!i)return{kind:"one-time",offeredPlanId:null};let a=d(e,i.id)?i:t.find(s=>d(e,s.id))??i;return n.requiresSellingPlan||o==="subscription"?{kind:"subscription",planId:a.id}:{kind:"one-time",offeredPlanId:a.id}}function B(n,{variant:e,sellingPlan:o,defaultPlan:r,defaultPurchase:t}){let i=n.variants.nodes,a=x.variant(e),s=i.find(l=>l.id===a)??i.find(l=>l.availableForSale)??i[0]??null,c=h(n,o),p=c??h(n,r),m=c||t==="subscription"?"subscription":"one-time";return{selected:s?S(s):{},purchase:C(n,s,m,p?.id??null)}}function j(n,e,o,r,t){let i=n.quantityAvailable,a=i!=null&&i>0&&i<=e,s=r.compareAtPrice!==null,c=r.line.kind==="subscription";return{"in-stock":n.availableForSale,"out-of-stock":!n.availableForSale,backorder:n.availableForSale&&n.currentlyNotInStock,"on-sale":s,"not-on-sale":!s,"has-variants":o>1,"single-variant":o===1,"low-stock":a,"plenty-in-stock":n.availableForSale&&!a,"subscription-available":r.subscriptionAvailable,"subscription-unavailable":!r.subscriptionAvailable,"subscription-only":t,"one-time-available":!t,"subscription-selected":c,"one-time-selected":!c,"has-savings":c?r.savings.percentage>0:s}}function R(n,e,o){let r=w(n,e.selected),t=r??n.variants.nodes[0];if(!t)return null;let i=C(n,t,e.purchase.kind,k(e.purchase)),a=k(i),s=v(n),c=F(i,t),p=c.kind==="subscription"?d(t,c.planId):null,m=p?g(t,a)??t.price:t.price,l=p?.priceAdjustments[0]?.compareAtPrice??t.compareAtPrice,b={line:c,subscriptionAvailable:s.some(u=>d(t,u.id)),compareAtPrice:l&&parseFloat(l.amount)>parseFloat(m.amount)?l:null,savings:y(t,a)};return{...b,variant:t,selected:r?e.selected:S(t),purchase:i,plan:s.find(u=>u.id===a)??null,quantity:e.quantity,price:m,show:j(t,o,n.variants.nodes.length,b,n.requiresSellingPlan)}}function G(n,e){let{variant:o,plan:r,price:t,compareAtPrice:i,quantity:a}=n,s=k(n.purchase),c=u=>V(u,Math.max(1,a)),b={price:()=>e.money(t),"total-price":()=>e.money(c(t)),"one-time-price":()=>e.money(o.price),"subscription-price":()=>e.money(s?g(o,s):null),"subscription-savings":()=>e.percent(n.savings.percentage),"subscription-savings-amount":()=>e.money(n.savings.amount),"checkout-charge":()=>{let u=n.line.kind==="subscription"?A(o,s)??t:t;return e.money(c(u))},"plan-name":()=>r?.name,"plan-description":()=>r?.description,"plan-group":()=>r?.group.name,"compare-at-price":()=>e.money(i),"unit-price":()=>e.money(o.unitPrice),"discount-percentage":()=>i?`${Math.round((1-parseFloat(t.amount)/parseFloat(i.amount))*M)}%`:"0%","discount-amount":()=>i?e.money(f(P(i)-P(t),t.currencyCode)):"","variant-title":()=>o.title,"variant-id":()=>o.id,sku:()=>o.sku,barcode:()=>o.barcode,stock:()=>o.quantityAvailable,quantity:()=>a};return new Map(Object.entries(b))}function E(n,e,o,r){let i={name:()=>o?.name,option:()=>(o?.options??[]).map(a=>a.value).join(", "),description:()=>o?.description,price:()=>r.money(g(n,e)),savings:()=>r.percent(y(n,e).percentage),"savings-amount":()=>r.money(y(n,e).amount),adjustment:()=>{let a=I(o);return a?a.type==="percentage"?`${a.value}%`:r.money(a.value):""}};return new Map(Object.entries(i))}export{S as a,T as b,k as c,F as d,C as e,B as f,R as g,G as h,E as i};
@@ -0,0 +1 @@
1
+ import{H as p,l as c,m as i,n as d,q as u}from"./chunk-CUL66KRA.js";function m(e){try{return decodeURIComponent(e)}catch(o){if(o instanceof URIError)return e;throw o}}var w="url:";function U(e,o=window.location,a="product"){let n=(d(e,a)??"").trim();if(!n.toLowerCase().startsWith(w))return{key:n||null,fromUrl:!1,raw:n};let r=n.slice(w.length).trim(),t;if(r.toLowerCase()==="path"){let s=o.pathname.split("/").filter(Boolean),f=s[s.length-1];t=f===void 0?null:m(f)}else t=new URLSearchParams(o.search).get(r||"handle");return{key:t?.trim()||null,fromUrl:!0,raw:n}}var h=["loading","ready","error","not-found"],y=e=>h.some(o=>o===e),S=e=>typeof e=="object"&&e!==null&&"code"in e?e.code:void 0,x=e=>S(e)==="NOT_FOUND",l=()=>["product","collection","products","recommendations"].map(e=>i(e)).join(","),K=(e,o)=>e===o||e.parentElement?.closest(l())===o;function g(e){let o=S(e);return typeof o=="string"&&o?o:"error"}function L(e,o,a){let n=o==="not-found",r=o==="error"||n;e.setAttribute(c("state"),n?"error":o),r?e.setAttribute(c("error"),n?"not-found":g(a)):e.removeAttribute(c("error")),u(e,i("show"),l()).forEach(t=>{let s=d(t,"show");y(s)&&p(t,s===o)}),r&&u(e,i("add-to-cart"),l()).forEach(t=>{t.classList.add("is-disabled"),t.setAttribute("aria-disabled","true"),"disabled"in t&&(t.disabled=!0)})}export{m as a,U as b,h as c,x as d,l as e,K as f,L as g};
@@ -0,0 +1 @@
1
+ import{A as j,E as Q,F as q,b as T,d as E,e as x,o as V,p as G,r as u,x as O,y as w,z as b}from"./chunk-QDHLXXAZ.js";var g=class extends Error{constructor(r,{status:n,errors:o,userErrors:i,code:s}={}){super(r);T(this,"name","TetherError");T(this,"code");T(this,"status");T(this,"errors");T(this,"userErrors");this.code=s??(n?`HTTP_${n}`:"ERROR"),this.status=n,this.errors=o,this.userErrors=i}};function A(t,e){return typeof e=="function"?e(t):typeof e=="string"?e==="object"?E(t):typeof t===e:Et(e)?Array.isArray(t)&&t.every(r=>A(r,e[0])):E(t)&&Object.entries(e).every(([r,n])=>n===void 0||A(t[r],n))}var Et=t=>Array.isArray(t),Me=t=>e=>e===null||A(e,t),_e=t=>e=>A(e,t);function Tt(t=u){return`https://${t.domain}/api/${t.apiVersion}/graphql.json`}var Y=/"(?:\\.|[^"\\\n])*"|#[^\n]*/g,bt=/^\s*(?:query|mutation)(?:\s+\w+)?\s*(?:\([^)]*\))?/;function wt(t){return/\bmutation\b/.test(t.replace(Y,""))?"mutation":"query"}function J(t,{country:e,language:r}){let n=[];if(e&&n.push(`country: ${e}`),r&&n.push(`language: ${r}`),!n.length)return t;let o=`@inContext(${n.join(", ")})`,i=t.replace(Y,d=>" ".repeat(d.length)),s=i.indexOf("{");if(i.slice(0,s).includes("@inContext"))return t;if(i.trimStart().startsWith("{"))return`query ${o} ${t.slice(s)}`;let c=bt.exec(i);if(!c)return t;let l=c[0].length;return`${t.slice(0,l).trimEnd()} ${o} ${t.slice(l).trimStart()}`}function He(t,e=u){let r=V(e.country)??void 0,n=G(e.language)??void 0;return J(t,{country:r,language:n})}var N=300,St=500,W=430,xt=1e3,C="quantityAvailable",B=new Set,At=t=>`${t.domain} ${t.apiVersion} ${t.token}`;function vt(t,e,r,{context:n,operation:o}){let i=typeof e=="string"?e:e(r),s=n?J(i,t):i;return t.maxAge<=0||o==="mutation"?s:`${s} #${Math.floor(Date.now()/(t.maxAge*xt))}`}var kt=t=>new Promise(e=>setTimeout(e,t));function I(t,e){if(t===401||t===403){let r=e.token.startsWith("shpat_")?", not an Admin API token (shpat_\u2026)":"";return`Shopify rejected the Storefront token for ${e.domain} (${t}): use the public Storefront API token (Headless channel)${r}`}return t===404?`Store or API version not found (404): check domain ${e.domain} and apiVersion ${e.apiVersion}`:`HTTP ${t} from ${e.domain}`}function Rt(t){let e=x(t,"message"),r=x(x(t,"extensions"),"code"),n=typeof e=="string"?e:"";return typeof r=="string"?{message:n,extensions:{code:r}}:{message:n}}function Ot(t){if(!E(t))return null;let{data:e,errors:r}=t;return r==null?{data:e}:Array.isArray(r)?{data:e,errors:r.map(Rt)}:null}function L(t,e){return t.ok?new g(`Invalid response (${t.status})`,{code:"INVALID_RESPONSE",status:t.status}):new g(I(t.status,e),{status:t.status})}function K(t,e,r,n){let o=e.map(s=>s.message).filter(Boolean).join(" | "),i=o||"Storefront API error";return t.ok||(i=t.status===401||t.status===403||!o?I(t.status,r):o),new g(i,{status:t.status,errors:e,code:n})}function z(t,e){if(e==="any")return{kind:"retry",backoffMs:N};throw new g(`Network error: ${j(t)}`,{code:"NETWORK"})}function Lt(t,e,r,n,o,i,s){if(r.includes(C)&&n.some(f=>f.message.includes(C)))return{kind:"inventory-refused",error:K(t,n,e)};let c=n.map(f=>f.extensions?.code);if(i!=="none"&&c.includes("THROTTLED"))return{kind:"retry",backoffMs:St};let l=c.includes("INTERNAL_SERVER_ERROR");if(i==="any"&&l)return{kind:"retry",backoffMs:N};let d=t.ok&&(l||s==="mutation"&&o==null);throw K(t,n,e,d?"SERVER_ERROR":void 0)}async function Ct(t,e,r,n,o,i){let s;try{s=await(t.fetch??fetch)(Tt(t),{method:"POST",headers:{"Content-Type":"application/json","X-Shopify-Storefront-Access-Token":t.token},body:JSON.stringify({query:e,variables:r})})}catch(p){return z(p,o)}if(s.status===W)throw new g("Shopify security rejection (430)",{status:W});if(o!=="none"&&s.status===429||o==="any"&&s.status>=500)return{kind:"retry",backoffMs:N};let c;try{c=await s.json()}catch(p){if(p instanceof SyntaxError)throw L(s,t);return z(p,o)}let l=Ot(c);if(!l)throw L(s,t);let{data:d,errors:f=[]}=l;if(f.length)return Lt(s,t,e,f,d,o,i);if(!s.ok)throw new g(I(s.status,t),{status:s.status});if(!n(d))throw L(s,t);return{kind:"data",data:d}}async function X(t,e,r,n,{context:o=!0,operation:i="query"}={}){if(!t.domain||!t.token)throw new g("Tether is not configured: domain and token are required",{code:"NOT_CONFIGURED"});let s=At(t),c=i==="mutation"?"not-run":"any",l=0;for(;;){let d={inventory:!B.has(s)},f=vt(t,e,d,{context:o,operation:i}),p=l<t.retries?c:"none",h=await Ct(t,f,r,n,p,i);switch(h.kind){case"data":return h.data;case"inventory-refused":if(typeof e=="string"||!d.inventory)throw h.error;O(`the token can't read inventory: ${C} is left out from now on`),B.add(s);break;case"retry":l+=1,O("retry",l),await kt(h.backoffMs*2**l);break}}}function Ue(t,e,r,n){return X(u,t,e,r,n)}var Nt=t=>typeof t=="object"&&t!==null;function It(t,e,r={},n){return X(t,e,r,Nt,{...n,operation:wt(e)})}function $e(t,e,r){return It(u,t,e,r)}function De(t,e){if(!t)throw new g(`${e}: empty response`);let r=t.userErrors??[];if(r.length)throw new g(r.map(n=>n.message).join(" | "),{userErrors:r});return t}var m=t=>`${u.prefix}-${t}`,Pt=(t,e)=>e===void 0?`[${m(t)}]`:`[${m(t)}="${e}"]`,P=(t,e)=>t.getAttribute(m(e)),Mt=(t,e)=>t.hasAttribute(m(e));function Z(t,e){return t?[...t.querySelectorAll(e)]:[]}var _t=(t,e,r)=>Z(t,e).filter(n=>n.closest(r)===t),Ht=["product-ready","list-ready","cart-updated","cart-toggled","checkout","search"],tt=new WeakMap;function et(t,e){let r=new CustomEvent(`${u.prefix}:${t}`,{detail:e,bubbles:!0});return tt.set(r,t),r}function Ut(t,e){return tt.get(t)===e}function M(t,e,r=document){r.dispatchEvent(et(t,e))}function nt(t,{width:e,height:r,crop:n}={}){if(!t)return t;let o;try{o=new URL(t)}catch(i){if(i instanceof TypeError)return t;throw i}return e&&o.searchParams.set("width",String(e)),r&&o.searchParams.set("height",String(r)),n&&o.searchParams.set("crop",n),o.toString()}function _(t,e){return t.getAttribute(e)??t.getAttribute(m(e))??t.getAttribute(`data-${e}`)}function ot(t,e){if(!t||!e)return t;let r=_(e,"max-width"),n=_(e,"max-height");return nt(t,{width:r,height:n,crop:r||n?_(e,"crop"):null})}var rt=t=>t.replace(/\?.*$/,"");function it(t,e){return!t||!e?!1:rt(t)===rt(e)}function $t(t){return/^\s*[a-z][a-z0-9+.-]*:/i.test(t)&&!/^\s*(https?:|data:image\/)/i.test(t)?"none":`url("${t.replace(/["\\\n\r\f]/g,n=>`\\${n.charCodeAt(0).toString(16)} `)}")`}function Dt(t,e,r){if(!e)return;let n=ot(e,t);if(t.tagName!=="IMG"){t.style.backgroundImage=$t(n);return}if(it(t.getAttribute("src"),n)){r!=null&&!t.getAttribute("alt")&&t.setAttribute("alt",r);return}t.removeAttribute("srcset"),t.removeAttribute("sizes"),t.setAttribute("src",n),r!=null&&t.setAttribute("alt",r),t.getAttribute("loading")||t.setAttribute("loading","lazy")}var H=new WeakMap,Ft=t=>!!H.get(t),U=t=>t.cloneNode(!0);function st(t){let e=H.get(t);if(e!==void 0)return e;let r=t.firstElementChild,n=r?U(r):null;return H.set(t,n),t.replaceChildren(),n}function Vt(t,e,r){let n=st(t);if(!n){e.length&&w("repeater without a template child",t);return}t.replaceChildren(),e.forEach((o,i)=>{let s=U(n);r(s,o,i),t.appendChild(s)})}function Gt(t,e){let r=()=>{t.remove()};if(!e){r();return}try{e(t,r)}catch(n){b(n,"repeater onLeave"),r()}}function jt(t,e,r,n){e.forEach((o,i)=>{if(!r.has(o))return;let s=e[i-1];if(s?.parentNode===t?s.after(o):t.prepend(o),!!n)try{n(o)}catch(c){b(c,"repeater onEnter")}})}function Qt(t,e,r,n,{onEnter:o,onLeave:i}={}){let s=st(t);if(!s){w("repeater without a template child",t);return}let c=`data-${u.prefix}-key`,l=`data-${u.prefix}-leaving`,d=()=>[...t.children].filter(a=>a.hasAttribute(c)&&!a.hasAttribute(l)),f=new Map(d().map(a=>[a.getAttribute(c),a])),p=[],h=new Set;e.forEach((a,S)=>{let R=String(r(a,S)),y=f.get(R);y?f.delete(R):(y=U(s),y.setAttribute(c,R),h.add(y)),n(y,a,S,h.has(y)),p.push(y)});let k=p.filter(a=>!h.has(a)),F=d().filter(a=>k.includes(a));if(!(F.length===k.length&&F.every((a,S)=>a===k[S]))){f.forEach(a=>{a.remove()}),p.forEach(a=>t.appendChild(a));return}jt(t,p,h,o),f.forEach(a=>{a.setAttribute(l,""),a.removeAttribute(c),a.style.pointerEvents="none",a.inert=!0,Gt(a,i)})}var qt="http://www.w3.org/1999/xhtml",Wt=new Set(["h1","h2","h3","h4","h5","h6","p","span","div","br","hr","blockquote","code","pre","strong","em","b","i","u","s","small","sub","sup","ul","ol","li","dl","dt","dd","table","caption","colgroup","col","thead","tbody","tfoot","tr","th","td","a","img","picture","source","video","figure","figcaption","iframe"]),Bt=new Set(["script","style","template","noscript","textarea","select","title"]),Kt=new Set(["style","title","lang","dir","role","align","width","height"]),zt=new Map([["a",new Set(["href","target","rel","hreflang"])],["img",new Set(["src","srcset","sizes","alt","loading","decoding"])],["source",new Set(["src","srcset","sizes","type","media"])],["video",new Set(["src","poster","controls","autoplay","muted","loop","playsinline","preload"])],["iframe",new Set(["src","allow","allowfullscreen","frameborder","loading"])],["blockquote",new Set(["cite"])],["ol",new Set(["start","type","reversed"])],["li",new Set(["value"])],["table",new Set(["border","cellpadding","cellspacing","summary"])],["col",new Set(["span"])],["colgroup",new Set(["span"])],["th",new Set(["colspan","rowspan","headers","scope","valign"])],["td",new Set(["colspan","rowspan","headers","valign"])]]),Yt=new Set(["href","src","poster","cite"]),Jt=/^(javascript|vbscript|data):/i,Xt=/^data:image\/(png|gif|jpeg|webp|avif);/i,Zt=new Set(["position","top","right","bottom","left","z-index","-webkit-box-reflect"]),te=["inset","transform","translate","rotate","scale","offset"],ee=/\d(?:[sld]?v|cq)(?:w|h|i|b|min|max)\b/i,re=/^(?:outline|box-shadow|text-shadow|filter|text-decoration|text-underline-offset|text-stroke)|^(?:border-image|mask-border|mask-box-image)(?:-outset)?$/,at=40,ne=new Map([["letter-spacing",{px:4,em:.25}],["word-spacing",{px:4,em:.25}],["text-indent",{px:at}]]),ut=/(?<![\w#.-])[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?(%|[a-z]+)?/gi,oe=/(?<![\w-])(?!drop-shadow\(|blur\()[\w-]+\([^()]*\)/g,ct=/(?:var|calc|min|max|clamp|env|attr)\(/i,ie=/url\(|expression\(|@import/i,se=/[\u0000- ]/g,ae="allow-scripts allow-same-origin allow-popups allow-presentation",ue=new Set(["autoplay","encrypted-media","picture-in-picture","fullscreen","clipboard-write","accelerometer","gyroscope","web-share"]),ce="strict-origin-when-cross-origin",le=["https://www.youtube.com","https://www.youtube-nocookie.com","https://player.vimeo.com","https://www.loom.com","https://fast.wistia.net"];function de(t,e){return Kt.has(e)||e.startsWith("aria-")||(zt.get(t)?.has(e)??!1)}function fe(t,e,r){let n=r.replace(se,"");return Jt.test(n)?t==="img"&&e==="src"&&Xt.test(n):!0}function lt(t,e){try{return new URL(t,e)}catch{return null}}function pe(t,e,r){let n=t.baseURI,o=lt(n)?.origin??"null";return{origin:o==="null"?null:o,baseUrl:n,styleParser:e,embedOrigins:new Set([...le,...r])}}function ge(t,e){let r=lt(t.trim(),e.baseUrl);return r!==null&&r.origin!==e.origin&&e.embedOrigins.has(r.origin)}function me(t){let e=t.split(";").map(r=>r.trim().split(/\s+/)[0]?.toLowerCase()??"");return[...new Set(e.filter(r=>ue.has(r)))].join("; ")}function he(t,e){if(Zt.has(t)||te.some(n=>t.startsWith(n))||ee.test(e))return!0;let r=ne.get(t);return r?ct.test(e)||ye(e,r):t.startsWith("margin")&&e.includes("-")}function ye(t,e){return[...t.matchAll(ut)].some(([r="",n=""])=>{let o=parseFloat(r);if(o>=0)return!1;let i=e[n.toLowerCase()];return i===void 0||-o>i})}function Ee(t,e){return re.test(t.replace(/^-webkit-/,""))?ct.test(e)?!0:[...e.replace(oe,"").matchAll(ut)].some(([r="",n=""])=>{let o=Math.abs(parseFloat(r));return o!==0&&(n.toLowerCase()!=="px"||o>at)}):!1}function Te(t,e){let r=e.style;r.cssText=t;let n=Array.from({length:r.length},(i,s)=>r.item(s));for(let i of n){let s=r.getPropertyValue(i);(he(i,s)||Ee(i,s)||ie.test(s))&&r.removeProperty(i)}let o=r.cssText;return e.removeAttribute("style"),o}function be(t,e){let r=t.localName;for(let i of[...t.attributes]){let s=i.name.toLowerCase(),c=Yt.has(s);de(r,s)&&(!c||fe(r,s,i.value))||t.removeAttribute(i.name)}let n=t.getAttribute("style");if(n===null)return;let o=Te(n,e.styleParser);o===""?t.removeAttribute("style"):t.setAttribute("style",o)}function we(t){if(t.localName==="iframe"){let r=me(t.getAttribute("allow")??"");r===""?t.removeAttribute("allow"):t.setAttribute("allow",r),t.setAttribute("sandbox",ae),t.setAttribute("referrerpolicy",ce);return}if(t.localName!=="a"||t.getAttribute("target")?.toLowerCase()!=="_blank")return;let e=new Set((t.getAttribute("rel")??"").split(/\s+/).filter(Boolean));e.add("noopener"),e.add("noreferrer"),t.setAttribute("rel",[...e].join(" "))}function Se(t,e){let r=t.localName,n=t.namespaceURI===qt;if(n&&Bt.has(r)){t.remove();return}if(!n||!Wt.has(r)){t.replaceWith(...t.childNodes);return}if(r==="iframe"&&!ge(t.getAttribute("src")??"",e)){t.remove();return}be(t,e),we(t)}function dt(t,e=globalThis.document,r=[]){let n=e.createElement("template");n.innerHTML=t??"";let o=pe(e,n,r);for(let i of[...n.content.querySelectorAll("*")])Se(i,o);return n.content}var ft="data-tether-seen",D="data-tether-shown",v="data-tether-prev-display",xe=120;function tr(t,e){return q(u.productPath||"/product",t,e)}function ht(t,e){try{return t()}catch(r){if(r instanceof RangeError)return e;throw r}}function er(t,e=u.locale){return t?ht(()=>new Intl.NumberFormat(e||void 0,{style:"percent",maximumFractionDigits:0}).format(t/100),`${t}%`):""}function rr(t){return t?u.formatMoney?u.formatMoney(t,u.locale):Q(t,u.locale):""}function nr(t){return t?ht(()=>new Date(t).toLocaleDateString(u.locale||void 0),""):""}function or(t,e){t.replaceChildren(dt(e,t.ownerDocument,u.embedOrigins))}var yt=t=>t.tagName==="INPUT"||t.tagName==="TEXTAREA",pt=t=>t.tagName==="INPUT";function Ae(t,e){let r=e==null?"":String(e);yt(t)?t.value=r:t.textContent=r}var gt=t=>yt(t)?t.value:t.textContent;function ir(t,e){let r=gt(t);if(Ae(t,e),r!==gt(t)&&t.hasAttribute(ft)&&u.onValueChange)try{u.onValueChange(t,r)}catch(n){b(n,"onValueChange")}t.setAttribute(ft,"1")}function ve(t){if(t.hasAttribute(D))return;t.setAttribute(D,""),t.removeAttribute("hidden");let e=t.getAttribute(v);e!==null?(t.style.display=e,t.removeAttribute(v)):t.style.display==="none"&&(t.style.display=""),typeof getComputedStyle=="function"&&getComputedStyle(t).display==="none"&&(t.style.display=t.getAttribute(m("display"))||"block")}function sr(t,e){if(e){ve(t);return}t.removeAttribute(D),!t.hasAttribute(v)&&t.style.display!=="none"&&t.setAttribute(v,t.style.display),t.style.display="none"}function ar(t,e){t.classList.toggle("is-selected",e),t.setAttribute("aria-pressed",e?"true":"false"),pt(t)&&(t.type==="radio"||t.type==="checkbox")&&(t.checked=e);let r=t.querySelector('input[type="radio"],input[type="checkbox"]');r&&pt(r)&&(r.checked=e)}var mt,ke=t=>Reflect.get(window,t);function Re(){let t=ke("ScrollTrigger");if(typeof t!="function")return;let e=Reflect.get(t,"refresh");typeof e=="function"&&Reflect.apply(e,t,[])}function Oe(t){clearTimeout(mt),mt=setTimeout(()=>{try{u.onLayoutChange?u.onLayoutChange(t):Re()}catch(e){b(e,"layout-changed")}M("layout-changed",{reason:t})},xe)}function ur(t,e){let r=[...t.querySelectorAll("img")].filter(i=>!i.complete),n=r.length,o=()=>{n-=1,n===0&&Oe(`${e}:images`)};r.forEach(i=>{i.addEventListener("load",o,{once:!0}),i.addEventListener("error",o,{once:!0})})}function cr(t,e){return t.getAttribute("aria-busy")==="true"?Promise.resolve(void 0):(t.setAttribute("aria-busy","true"),Promise.resolve().then(e).finally(()=>{t.removeAttribute("aria-busy")}))}function lr(t,e){let r=t?P(t,e):null;if(!r)return null;try{return JSON.parse(r)}catch{return w(`invalid JSON in ${m(e)}`,t),null}}function $(t){return t==null?"":typeof t=="string"?t:typeof t=="number"||typeof t=="boolean"?String(t):JSON.stringify(t)}function dr(t){return Array.isArray(t)?t.filter(E).map(r=>({key:$(r.key),value:$(r.value)})):E(t)?Object.entries(t).map(([e,r])=>({key:e,value:$(r)})):[]}function fr(t){return t?Array.isArray(t)?t.map(e=>({key:String(e.key),value:String(e.value??"")})):Object.entries(t).map(([e,r])=>({key:e,value:String(r??"")})):[]}export{g as a,A as b,Me as c,_e as d,Tt as e,He as f,X as g,Ue as h,It as i,$e as j,De as k,m as l,Pt as m,P as n,Mt as o,Z as p,_t as q,Ht as r,Ut as s,M as t,nt as u,it as v,Dt as w,Ft as x,Vt as y,Qt as z,tr as A,er as B,rr as C,nr as D,or as E,Ae as F,ir as G,sr as H,ar as I,ke as J,Oe as K,ur as L,cr as M,lr as N,dr as O,fr as P};
@@ -1 +1 @@
1
- import{d as e}from"./chunk-A5SYCVQM.js";import{r as o}from"./chunk-E5YO6274.js";var c=()=>`${o.prefix}:account-hint:${o.domain}`;function i(r){e(r,"sessionStorage"),e(r,"localStorage")}function m(){i(`${o.prefix}:account:${o.domain}`),i(`${o.prefix}:account-login:${o.domain}`)}var s=r=>r==="in"||r==="expired"||r==="error";export{c as a,m as b,s as c};
1
+ import{g as e}from"./chunk-RJY76ESL.js";import{r as o}from"./chunk-QDHLXXAZ.js";var c=()=>`${o.prefix}:account-hint:${o.domain}`;function i(r){e(r,"sessionStorage"),e(r,"localStorage")}function m(){i(`${o.prefix}:account:${o.domain}`),i(`${o.prefix}:account-login:${o.domain}`)}var s=r=>r==="in"||r==="expired"||r==="error";export{c as a,m as b,s as c};
@@ -1 +1 @@
1
- import{C as g,F as E,H as N,a as L,m as l,n as u,p as d,w as k,y as w}from"./chunk-BA4LQJJQ.js";import{d as x,e as o,f as y,g as i,i as A,j as h,k as T,l as f}from"./chunk-E5YO6274.js";function q(t){let e=i(o(t,"amount")),n=i(o(t,"currencyCode"));return e===null||n===null?null:{amount:e,currencyCode:n}}function S(t){let e=i(o(t,"url"));return e===null?null:{url:e,altText:i(o(t,"altText"))}}var U=t=>({title:i(o(t,"title")),variantTitle:i(o(t,"variantTitle")),quantity:A(o(t,"quantity")),image:S(o(t,"image"))}),H=(t,e)=>({id:e,name:i(o(t,"name")),processedAt:i(o(t,"processedAt")),financialStatus:i(o(t,"financialStatus")),fulfillmentStatus:i(o(t,"fulfillmentStatus")),statusPageUrl:i(o(t,"statusPageUrl")),totalPrice:q(o(t,"totalPrice")),lineItems:T(o(t,"lineItems"),U)});function R(t){let e=[];for(let n of y(t)){let r=i(o(n,"id"));if(r===null)return{kind:"missing-id"};e.push(H(n,r))}return{kind:"read",orders:e}}var I=t=>new L(`Customer accounts: the answer has no ${t}`);function G(t,e){let n=i(t);if(!n)throw I(e);return n}function J(t){let e=x(t)?t:{},n=i(e.id),r=i(e.email),s=e.address;return{...n===null?{}:{id:n},firstName:i(e.firstName),lastName:i(e.lastName),displayName:i(e.displayName),emailAddress:r===null?null:{emailAddress:r},defaultAddress:Array.isArray(s)?{formatted:f(s)}:null}}function K(t){let e=R(t);if(e.kind==="missing-id")throw I("order id");return e.orders}function D(t){let e=i(o(t,"message"));if(e===null)return null;let n=o(t,"field");return{message:e,field:Array.isArray(n)?f(n):null,code:i(o(t,"code"))}}var Q=t=>h(t,D).filter(e=>e!==null);function P(t,e,n){d(t,l(e)).forEach(r=>{let s=u(r,e)??"";Object.hasOwn(n,s)&&N(r,n[s]===!0)})}var b=(t,e)=>d(t,l(e)).concat(t.matches(l(e))?[t]:[]),Y=t=>t?t.toLowerCase().replace(/_/g," "):"",v=t=>(t?.formatted??[]).join(", "),M=(t,e)=>Object.hasOwn(t,e)?t[e]:void 0;var j=(t,e)=>({title:t.title||t.name||"","variant-title":t.variantTitle||"",quantity:String(t.quantity),price:g(t.price),total:g(t.totalPrice),sku:t.sku||"",returnable:e===null?void 0:String(e)}),F=t=>t.tagName==="INPUT";function V(t,e,n){P(t,"order-line-show",{returnable:n>0}),d(t,l("return-quantity")).forEach(r=>{F(r)&&(r.max=String(n),r.min="0",r.value||(r.value="0"),r.disabled=n<1)}),d(t,`select${l("return-reason")}`).forEach(r=>{r.dataset.tetherFilled!==e.id&&(r.dataset.tetherFilled=e.id,(e.suggestedReturnReasonDefinitions?.nodes??[]).forEach(s=>{r.appendChild(new Option(s.name??"",s.id))}))})}function rt(t,e,n){w(t,e,(r,s)=>{let a=s.id,c=n&&a?n.get(a)??0:null;a&&(r.dataset.tetherLine=a);let C=j(s,c);b(r,"order-line").forEach(m=>{let p=u(m,"order-line")??"";if(p==="image"){s.image&&k(m,s.image.url,s.image.altText||s.title||"");return}let O=M(C,p);O!==void 0&&E(m,O)}),a&&c!==null&&V(r,{...s,id:a},c)})}export{q as a,S as b,U as c,I as d,G as e,J as f,K as g,Q as h,P as i,b as j,Y as k,v as l,M as m,rt as n};
1
+ import{C as g,F as E,H as N,a as L,m as l,n as u,p as d,w as k,y as w}from"./chunk-CUL66KRA.js";import{d as x,e as o,f as y,g as i,i as A,j as h,k as T,l as f}from"./chunk-QDHLXXAZ.js";function q(t){let e=i(o(t,"amount")),n=i(o(t,"currencyCode"));return e===null||n===null?null:{amount:e,currencyCode:n}}function S(t){let e=i(o(t,"url"));return e===null?null:{url:e,altText:i(o(t,"altText"))}}var U=t=>({title:i(o(t,"title")),variantTitle:i(o(t,"variantTitle")),quantity:A(o(t,"quantity")),image:S(o(t,"image"))}),H=(t,e)=>({id:e,name:i(o(t,"name")),processedAt:i(o(t,"processedAt")),financialStatus:i(o(t,"financialStatus")),fulfillmentStatus:i(o(t,"fulfillmentStatus")),statusPageUrl:i(o(t,"statusPageUrl")),totalPrice:q(o(t,"totalPrice")),lineItems:T(o(t,"lineItems"),U)});function R(t){let e=[];for(let n of y(t)){let r=i(o(n,"id"));if(r===null)return{kind:"missing-id"};e.push(H(n,r))}return{kind:"read",orders:e}}var I=t=>new L(`Customer accounts: the answer has no ${t}`);function G(t,e){let n=i(t);if(!n)throw I(e);return n}function J(t){let e=x(t)?t:{},n=i(e.id),r=i(e.email),s=e.address;return{...n===null?{}:{id:n},firstName:i(e.firstName),lastName:i(e.lastName),displayName:i(e.displayName),emailAddress:r===null?null:{emailAddress:r},defaultAddress:Array.isArray(s)?{formatted:f(s)}:null}}function K(t){let e=R(t);if(e.kind==="missing-id")throw I("order id");return e.orders}function D(t){let e=i(o(t,"message"));if(e===null)return null;let n=o(t,"field");return{message:e,field:Array.isArray(n)?f(n):null,code:i(o(t,"code"))}}var Q=t=>h(t,D).filter(e=>e!==null);function P(t,e,n){d(t,l(e)).forEach(r=>{let s=u(r,e)??"";Object.hasOwn(n,s)&&N(r,n[s]===!0)})}var b=(t,e)=>d(t,l(e)).concat(t.matches(l(e))?[t]:[]),Y=t=>t?t.toLowerCase().replace(/_/g," "):"",v=t=>(t?.formatted??[]).join(", "),M=(t,e)=>Object.hasOwn(t,e)?t[e]:void 0;var j=(t,e)=>({title:t.title||t.name||"","variant-title":t.variantTitle||"",quantity:String(t.quantity),price:g(t.price),total:g(t.totalPrice),sku:t.sku||"",returnable:e===null?void 0:String(e)}),F=t=>t.tagName==="INPUT";function V(t,e,n){P(t,"order-line-show",{returnable:n>0}),d(t,l("return-quantity")).forEach(r=>{F(r)&&(r.max=String(n),r.min="0",r.value||(r.value="0"),r.disabled=n<1)}),d(t,`select${l("return-reason")}`).forEach(r=>{r.dataset.tetherFilled!==e.id&&(r.dataset.tetherFilled=e.id,(e.suggestedReturnReasonDefinitions?.nodes??[]).forEach(s=>{r.appendChild(new Option(s.name??"",s.id))}))})}function rt(t,e,n){w(t,e,(r,s)=>{let a=s.id,c=n&&a?n.get(a)??0:null;a&&(r.dataset.tetherLine=a);let C=j(s,c);b(r,"order-line").forEach(m=>{let p=u(m,"order-line")??"";if(p==="image"){s.image&&k(m,s.image.url,s.image.altText||s.title||"");return}let O=M(C,p);O!==void 0&&E(m,O)}),a&&c!==null&&V(r,{...s,id:a},c)})}export{q as a,S as b,U as c,I as d,G as e,J as f,K as g,Q as h,P as i,b as j,Y as k,v as l,M as m,rt as n};
@@ -0,0 +1 @@
1
+ import{c as a}from"./chunk-RPI5C3EJ.js";import{a as o}from"./chunk-MRSDJPBC.js";import{o as u,p as i,r as n,x as c,z as g}from"./chunk-QDHLXXAZ.js";var f={country:void 0,language:void 0,locale:void 0},l=!1;function d(){let t=e=>document.querySelector(`meta[name="${n.prefix}-page-${e}"]`)?.getAttribute("content")||void 0,r=u(t("country"));return r?{country:r,language:i(t("language"))??void 0,locale:t("locale")}:null}async function m(){let t=n.markets??{};if(t.detect===!1)return null;if(!t.detect)return t.remember===!1?null:a();try{return(await o("markets")).detectMarket(t)}catch(r){return g(r,"markets"),null}}async function C(t){f={country:n.country,language:n.language,locale:n.locale};let r=d();if(l=r!==null,r){n.country=r.country,n.language=r.language,r.locale&&(n.locale=r.locale);return}let e=await m();e&&(e.country&&(n.country=e.country),e.language&&(n.language=e.language),e.locale&&!t.locale&&(n.locale=e.locale),c("market",e))}var s=(t,r)=>(t??"").toUpperCase()===(r??"").toUpperCase();function P(){let t=d(),r=t===null&&l;l=t!==null;let e=t??(r?a()??f:null);return!e?.country||s(e.country,n.country)&&s(e.language,n.language)?null:{country:e.country,language:e.language,locale:e.locale}}function S(t,r){return o("markets").then(e=>e.setCountry(t,r))}export{C as a,P as b,S as c};
@@ -0,0 +1 @@
1
+ var e={diagnose:()=>import("./diagnose-3XHPZZNP.js"),markets:()=>import("./markets-ui-WBWWQAGU.js"),search:()=>import("./search-5NFIZBPJ.js"),extras:()=>import("./extras-C724KKG6.js"),account:()=>import("./account-W4FBRKXA.js"),"account-pages":()=>import("./account-pages-IM3OQTOP.js"),analytics:()=>import("./analytics-QDVOLZY3.js")},a=t=>e[t](),r=void 0;export{a,r as b};
@@ -0,0 +1 @@
1
+ import{a as T,b as K,c as A,d as M,e as W,f as X,g as Y,h as _,i as z}from"./chunk-AUVAN3KZ.js";import{c as N,f as Z}from"./chunk-BMDYNMRC.js";import{b as Q,c as y,d as j,h as J}from"./chunk-RJY76ESL.js";import{g as D,h as V,i as E,n as G}from"./chunk-YC4JXWRG.js";import{B as C,C as H,F as h,H as O,I as P,K as k,L as F,M as R,N as U,O as B,l as m,m as s,n as l,o as x,p as b,q as w,t as f,w as $}from"./chunk-CUL66KRA.js";import{b as p,r as I,z as L}from"./chunk-QDHLXXAZ.js";var tt={money:H,percent:C},lt=e=>e.tagName==="INPUT";function q(e){let t=b(e,s("add-label"))[0]??e,n=t.dataset.tetherLabel??(lt(t)?t.value:t.textContent);return t.dataset.tetherLabel=n,{label:t,original:n}}function ct(e,t){let{product:n}=e,i=r=>t.selected[e.optName(r)]??"";e.$(s("option-selected")).forEach(r=>{h(r,i(l(r,"option-selected")))}),e.$(s("option-list")).forEach(r=>{let a=e.optName(l(r,"option-list"));b(r,s("option-value")).forEach(o=>{let c=l(o,"option-value")??"";P(o,t.selected[a]===c);let u=!K(n,t.selected,a,c);o.classList.toggle("is-unavailable",u),o.setAttribute("data-unavailable",u?"true":"false")})}),y(e,s("option")).forEach(r=>{r.value=i(l(r,"option"))}),y(e,s("variant-select")).forEach(r=>{r.value=t.variant.id})}function ut(e,t){let{variant:n,purchase:i,line:r}=t;e.$(s("purchase")).forEach(a=>{if(Q(a)){a.value=i.kind;return}let o=l(a,"purchase");P(a,o===i.kind);let c=o==="subscription"?!t.subscriptionAvailable:e.product.requiresSellingPlan;a.classList.toggle("is-unavailable",c)}),e.$(s("plan-value")).forEach(a=>{let o=l(a,"plan-value")??"";P(a,r.kind==="subscription"&&o===r.planId),a.classList.toggle("is-unavailable",!E(n,o));let c=e.plans.find(d=>d.id===o),u=z(n,o,c,tt);b(a,s("plan-bind")).forEach(d=>{let v=u.get(l(d,"plan-bind")??"");v&&h(d,v())})}),y(e,s("plan")).forEach(a=>{a.value=r.kind==="subscription"?r.planId:""})}function dt(e,t){let n=new Map(Object.entries(t.show));N.forEach(i=>n.set(i,i==="ready")),e.$(s("show")).forEach(i=>{let r=l(i,"show")??"",a=n.get(r);a!==void 0&&(N.some(o=>o===r)&&!Z(i,e.root)||O(i,a))})}function ht(e,t){let n=!t.variant.availableForSale;e.$(s("add-to-cart")).forEach(i=>{i.classList.toggle("is-disabled",n),i.setAttribute("aria-disabled",String(n)),"disabled"in i&&(i.disabled=n);let r=l(i,"soldout-text"),a=l(i,"subscribe-text");if(!r&&!a)return;let{label:o,original:c}=q(i),u=c;t.line.kind==="subscription"&&a&&(u=a),n&&r&&(u=r),i.getAttribute("aria-busy")!=="true"&&h(o,u)})}function et(e,t){let{variant:n}=t,{product:i}=e,r=_(t,tt);e.$(s("bind")).forEach(a=>{let o=l(a,"bind")??"";if(o==="variant-image"){$(a,n.image?.url||i.featuredImage?.url,n.image?.altText||i.title);return}let c=r.get(o);c&&h(a,c())}),ct(e,t),ut(e,t),dt(e,t),e.root.classList.toggle("is-subscription",t.line.kind==="subscription"),e.root.setAttribute(m("purchase-mode"),t.line.kind),ht(e,t)}var it=()=>s("product"),pt=e=>e.tagName==="INPUT"||e.tagName==="SELECT"||e.tagName==="TEXTAREA",nt=e=>e instanceof window.Element;function g(e,t,n){let i=t.closest(n);return i?.closest(it())===e.root?i:null}function mt(e,t){let{label:n,original:i}=q(t),r=l(t,"adding-text");R(t,async()=>{r&&h(n,r);try{await e.addToCart()}catch(a){L(a,"add to cart failed"),f("error",{error:a,context:"add-to-cart"},e.root)}finally{r&&h(n,i)}}).then(()=>{e.renderVariant()}).catch(a=>{L(a,"add to cart render")})}function ft(e,t,n){let i=g(e,n,s("option-value")),r=i?.closest(s("option-list"));if(i&&r){t.preventDefault(),e.select(e.optName(l(r,"option-list")),l(i,"option-value")??"");return}let a=g(e,n,s("plan-value"));if(a){t.preventDefault(),e.selectPlan(l(a,"plan-value"));return}let o=g(e,n,`${s("purchase")}:not(select)`);if(o){o.tagName!=="INPUT"&&t.preventDefault(),e.setPurchase(rt(l(o,"purchase")));return}let c=g(e,n,s("qty-plus")),u=c?null:g(e,n,s("qty-minus"));if(c||u){t.preventDefault(),e.setQuantity(e.quantity+(c?1:-1));return}let d=g(e,n,s("add-to-cart"));d&&(t.preventDefault(),mt(e,d))}var rt=e=>e==="subscription"?"subscription":"one-time";function vt(e,t){let n=pt(t)?t.value:"";t.matches(`select${s("option")}`)?e.select(e.optName(l(t,"option")),n):t.matches(`select${s("variant-select")}`)?e.selectVariant(n):t.matches(`select${s("plan")}`)?n?e.selectPlan(n):e.setPurchase("one-time"):t.matches(`select${s("purchase")}`)?e.setPurchase(rt(n)):t.matches(s("qty"))&&e.setQuantity(n)}function at(e){e.root.addEventListener("click",t=>{nt(t.target)&&ft(e,t,t.target)}),e.root.addEventListener("change",t=>{let{target:n}=t;nt(n)&&n.closest(it())===e.root&&vt(e,n)})}var gt=new WeakMap,bt=()=>s("product"),S=new Map;function Pt(e){e.forEach(t=>{S.has(t.handle)||S.set(t.handle,t.options.map(n=>n.name))})}var st=e=>e.tagName==="INPUT",Et=e=>e.tagName==="INPUT"||e.tagName==="SELECT"||e.tagName==="TEXTAREA";function yt(e){return st(e)&&e.type==="checkbox"?e.checked?e.value&&e.value!=="on"?e.value:"Yes":null:st(e)&&e.type==="radio"?e.checked?e.value:null:Et(e)&&e.value||null}var ot=class{constructor(t,n){p(this,"root");p(this,"product");p(this,"plans");p(this,"selected");p(this,"purchase");p(this,"variant");p(this,"quantity");this.root=t,this.product=n,this.plans=V(n);let i=new URLSearchParams(window.location.search),r=X(n,{variant:i.get("variant")||l(t,"variant"),sellingPlan:i.get("selling_plan"),defaultPlan:l(t,"default-plan"),defaultPurchase:l(t,"default-purchase")||I.defaultPurchase});this.selected=r.selected,this.purchase=r.purchase,this.variant=null,this.quantity=x(t,"quantity")?Math.max(0,parseInt(l(t,"quantity")??"",10)||0):1,gt.set(t,this),t.setAttribute(m("state"),"ready"),t.removeAttribute(m("error")),this.renderProduct(),at(this),this.renderVariant(),F(t,"product"),k("product"),f("product-ready",{product:n,scope:this},t)}update(t){let n=this.variant?.id;this.product=t,this.plans=V(t);let i=t.variants.nodes.find(r=>r.id===n);i&&(this.selected=T(i)),this.root.setAttribute(m("state"),"ready"),this.root.removeAttribute(m("error")),this.renderProduct(),this.renderVariant(),k("product"),f("product-updated",{product:t,scope:this},this.root)}$(t){let n=w(this.root,t,bt());return this.root.matches(t)?[this.root,...n]:n}optName(t){if(!t)return"";let{options:n}=this.product;if(n.some(r=>r.name===t))return t;let i=(S.get(this.product.handle)??[]).indexOf(t);return n[i]?.name??t}get plan(){let t=A(this.purchase);return this.plans.find(n=>n.id===t)??null}get subscriptionAvailable(){return this.plans.some(t=>E(this.variant,t.id))}get isSubscription(){return M(this.purchase,this.variant).kind==="subscription"}getLine(){if(!this.variant)return null;let t={merchandiseId:this.variant.id,quantity:this.quantity},n=M(this.purchase,this.variant);n.kind==="subscription"&&(t.sellingPlanId=n.planId);let i=this.collectAttributes();return i.length&&(t.attributes=i),t}collectAttributes(){let t=B(U(this.root,"line-attributes")),n=this.$(s("line-attribute")).flatMap(i=>{let r=yt(i);return r===null?[]:[{key:l(i,"line-attribute")??"",value:r}]});return[...t,...n]}select(t,n){if(this.selected[t]===n)return;let i=this.product.variants.nodes.filter(o=>o.selectedOptions.some(c=>c.name===t&&c.value===n)),[r]=i;if(!r)return;let a={...this.selected,[t]:n};if(!i.some(o=>o.selectedOptions.every(c=>a[c.name]===c.value))){let o=u=>u.selectedOptions.filter(v=>v.name!==t&&this.selected[v.name]===v.value).length*2+(u.availableForSale?1:0),c=i.reduce((u,d)=>o(d)>o(u)?d:u,r);Object.assign(a,T(c))}this.selected=a,this.renderVariant()}selectVariant(t){let n=this.product.variants.nodes.find(i=>i.id===D.variant(t));n&&(this.selected=T(n),this.renderVariant())}setPurchase(t){let n=W(this.product,this.variant,t,A(this.purchase));n.kind!==this.purchase.kind&&(this.purchase=n,this.renderVariant())}selectPlan(t){let n=G(this.product,t);n&&(this.purchase={kind:"subscription",planId:n.id},this.renderVariant())}setQuantity(t){let n=x(this.root,"quantity")?0:1;this.quantity=Math.max(n,parseInt(String(t),10)||0),this.$(s("qty")).forEach(i=>{h(i,this.quantity)}),this.renderVariant()}async addToCart(){if(!this.variant?.availableForSale)return null;let t=this.getLine();if(!t||t.quantity<1)return null;let n=await J.add(t);return f("product-added",{product:this.product,variant:this.variant,line:t},this.root),n}renderProduct(){let{product:t}=this;S.has(t.handle)||this.$(`${s("option-list")},select${s("option")}`).map(i=>l(i,"option-list")||l(i,"option")).some(i=>t.options.some(r=>r.name===i))&&Pt([t]),j(this)}renderVariant(){let t=Y(this.product,{selected:this.selected,purchase:this.purchase,quantity:this.quantity},I.lowStock);if(!t){this.variant=null;return}this.variant=t.variant,this.selected=t.selected,this.purchase=t.purchase,et(this,t),f("variant-changed",{product:this.product,variant:t.variant,selected:{...t.selected},purchase:t.purchase.kind,sellingPlanId:t.line.kind==="subscription"?t.line.planId:null},this.root)}};export{gt as a,Pt as b,ot as c};
@@ -0,0 +1 @@
1
+ var S=Object.defineProperty;var G=(n,e,t)=>e in n?S(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var Fn=(n,e)=>{for(var t in e)S(n,t,{get:e[t],enumerable:!0})};var $n=(n,e,t)=>G(n,typeof e!="symbol"?e+"":e,t);var j=/^(\d{4})-(01|04|07|10)$/;function C(n){let e=j.exec(typeof n=="string"?n:"");return e?{year:Number(e[1]),month:Number(e[2])}:null}var R=n=>C(n)!==null,z=(n,e)=>`${n}-${String(e).padStart(2,"0")}`;function x(n,e=1){let t=C(n);if(!t)throw new Error(`not a quarterly Shopify API version: ${n}`);let o=t.year*4+(t.month-1)/3+e;return z(Math.floor(o/4),o%4*3+1)}function Hn(n,e=new Date){if(n==="unstable")return{version:n,ok:!1,note:'"unstable" changes without notice: pin a dated version such as 2026-07'};let t=C(n);if(!t)return{version:n,ok:!1,note:"not a quarterly version (YYYY-01, -04, -07 or -10)"};let o=new Date(Date.UTC(t.year,t.month-1,1)),r=new Date(Date.UTC(t.year,t.month-1+12,1)),i=(r.getTime()-e.getTime())/2630016e3,f=o<=e,c=`supported until about ${r.toISOString().slice(0,7)}`;return f?i<=0?c="no longer supported: Shopify falls back to the oldest supported version. Upgrade (see docs/reference.md)":i<3&&(c=`${c}: plan the upgrade to ${x(n)} or later (see docs/reference.md)`):c="not released yet (release candidate at best)",{version:n,ok:f&&i>0,monthsLeft:Math.round(i),next:x(n),note:c}}function O(n){return n!==null&&typeof n=="object"&&!Array.isArray(n)}function Q(n,e){return O(n)?n[e]:void 0}function Z(n){return Array.isArray(n)?n:[]}function B(n){return typeof n=="string"&&n!==""?n:null}var W=n=>typeof n=="number"&&Number.isFinite(n)?n:null,Kn=n=>W(n)??0,E=(n,e)=>Z(n).map(t=>e(t)),Yn=(n,e)=>({nodes:E(Q(n,"nodes"),e)}),vn=n=>E(n,B).filter(e=>e!==null);var J=/^[A-Z]{2}$/,X=new Set(["XX","T1"]),q=new Set(["PT_BR","PT_PT","ZH_CN","ZH_TW"]),nn=/^[A-Z]{2,3}$/;function T(n){let e=(typeof n=="string"?n:"").trim().toUpperCase();return!J.test(e)||X.has(e)?null:e}function w(n){let e=(typeof n=="string"?n:"").trim().replace("-","_").toUpperCase();if(q.has(e))return e;let t=e.split("_")[0]??"";return nn.test(t)?t:null}var _="2026-07";var en=/^[A-Za-z0-9_.-]+$/,tn=/^(\$app(:[A-Za-z0-9_-]+)?|[A-Za-z0-9_.-]+)$/,on=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,rn=/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/,sn=/^[A-Za-z_$][\w$]*$/,N="https://site.invalid",an=new Set(["localhost","127.0.0.1","[::1]"]),M=["saved","server","webflow"],un=["no-banner","default-banner","custom-banner"],y=n=>typeof n=="string"&&n!=="",ln=n=>typeof n=="function";function L(n,e){if(typeof n!="string"||!n)return"";let t=n.replace(/^https?:\/\//,"").replace(/\/.*$/,"");return gn(t)?t:(e("domain",n),"")}function U(n){if(!y(n))return!1;try{let e=new URL(n,`${N}/`);return e.origin===N?!0:e.protocol==="https:"||e.protocol==="http:"&&an.has(e.hostname)}catch{return!1}}function I(n,e){return n==null||n===""?null:typeof n=="string"&&(U(n)||cn(n))?n:(e("partsUrl",n),null)}function cn(n){if(typeof location>"u")return!1;try{return new URL(n).origin===location.origin}catch{return!1}}function fn(n){if(typeof n!="string")return null;try{let e=new URL(n);return e.protocol==="https:"&&e.href===new URL(e.origin).href?e.origin:null}catch{return null}}function F(n,e){if(!Array.isArray(n))return e("embedOrigins",n),[];let t=[],o=n;for(let r of o){let i=fn(r);i?t.push(i):e("embedOrigin",r)}return t}function dn(n){let e,t;if(typeof n=="string"){let o=n.indexOf(".");e=o>0?n.slice(0,o):"",t=n.slice(o+1)}else typeof n=="object"&&n!==null&&(e=Reflect.get(n,"namespace"),t=Reflect.get(n,"key"));return typeof e!="string"||typeof t!="string"?null:tn.test(e)&&en.test(t)?{namespace:e,key:t}:null}function $(n,e){if(!Array.isArray(n))return e("metafields",n),[];let t=[],o=n;for(let r of o){let i=dn(r);i?t.push(typeof r=="string"?r:i):e("metafield",r)}return t}var d=n=>e=>n(e)?e:void 0,gn=n=>y(n)&&on.test(n),pn=n=>y(n)&&rn.test(n),yn=n=>typeof n=="boolean"||y(n)&&sn.test(n),p=d(U),k=d(y),P=d(n=>typeof n=="boolean"),V=d(ln);function m(n,e,t,o){if(e==null)return null;if(!O(e))return o(n,e),null;let r={},i=t;for(let[f,c]of Object.entries(i)){let h=e[f];if(h===void 0)continue;let A=c(h);A===void 0?o(`${n}.${f}`,h):r[f]=A}return r}var mn={server:p,orderUrl:p,subscriptionsUrl:p,paymentUrl:p,logoutUrl:p,locale:k,navigate:V},On="customer accounts need the Worker since 0.7.0: set account.server",kn={country:k,language:k,locale:k},hn={detect:n=>{if(typeof n=="boolean")return n;let e=Array.isArray(n)?n:[n];return typeof n=="string"||Array.isArray(n)?M.filter(t=>e.includes(t)):void 0},locales:n=>{if(!O(n))return;let e={};for(let[t,o]of Object.entries(n)){let r=m(`markets.locales.${t}`,o,kn,()=>{});r&&(e[t]=r)}return e},cookie:d(pn),remember:P,strict:P},Cn={consent:n=>un.find(e=>e===n),proxy:n=>n!==void 0&&!!n},Tn={dataLayer:d(yn),shopify:n=>typeof n=="boolean"?n:m("analytics.shopify",n,Cn,()=>{})??void 0,onEvent:V};function H(n,e,t){let o=m("account",n,mn,e);if(o===null)return null;let{server:r}=o;return r===void 0?(t(On),null):{...o,server:r}}var b=(n,e)=>m("markets",n,hn,e),D=(n,e)=>m("analytics",n,Tn,e);var u={domain:"",token:"",apiVersion:_,country:void 0,language:void 0,locale:void 0,markets:null,prefix:"tether",productPath:"/product",collectionPath:"/collection",metafields:[],embedOrigins:[],imagesFirst:25,variantsFirst:100,sellingPlanGroupsFirst:10,sellingPlansFirst:25,collectionFirst:24,retries:2,revalidate:!0,storageKey:"",cartDrawerOpenClass:"is-open",openCartOnAdd:!0,cartFocus:!0,checkoutTarget:"_self",defaultPurchase:"one-time",variantUrl:!1,maxAge:60,lowStock:5,searchDelay:150,autoMount:!0,observe:!1,astro:!0,partsUrl:null,analytics:null,account:null,warningText:null,formatMoney:null,onLayoutChange:null,onCartOpen:null,onCartClose:null,onLineEnter:null,onLineLeave:null,onValueChange:null,onError:null,debug:!1},s={...u};function v(n){let e=t=>(l(`Tether.config is read-only (${String(t)}): pass options to Tether.init() instead`),!1);return new Proxy(n,{get(t,o){let r=Reflect.get(t,o);return typeof r=="object"&&r!==null?v(r):r},set:(t,o)=>e(o),deleteProperty:(t,o)=>e(o),defineProperty:(t,o)=>e(o)})}var ee=v(s),wn=/^[a-z][a-z0-9-]*$/,bn=["revalidate","openCartOnAdd","cartFocus","variantUrl","autoMount","observe","astro","debug"],An=["token","productPath","collectionPath","cartDrawerOpenClass"],Sn=["imagesFirst","variantsFirst","sellingPlanGroupsFirst","sellingPlansFirst","collectionFirst","retries","maxAge","lowStock","searchDelay"],xn=["warningText","formatMoney","onLayoutChange","onCartOpen","onCartClose","onLineEnter","onLineLeave","onValueChange","onError"];function g(n,e,t){return e!==void 0&&l(`invalid ${n} ${JSON.stringify(e)}: using ${JSON.stringify(t)}`),t}function a(n,e){l(`invalid ${n} ${JSON.stringify(e)}: ignored`)}function Rn(n){for(let e of Object.keys(n))e in u||l(`unknown option ${JSON.stringify(e)}: ignored`)}function En(n){return typeof n=="function"?n:null}function _n(n){return Object.fromEntries(xn.map(t=>[t,En(n[t])]))}function Nn(n,e){return typeof e=="number"&&Number.isInteger(e)&&e>=0?e:g(n,e,u[n])}function Pn(n,e){return typeof e=="boolean"?e:g(n,e,u[n])}function Mn(n,e){return typeof e=="string"?e:g(n,e,u[n])}function Ln(n){if(!(n==null||n==="")){try{if(typeof n=="string"&&Intl.getCanonicalLocales(n).length)return n}catch{}a("locale",n)}}function K(n,e,t){return t.find(o=>o===e)??g(n,e,t[0])}function Un(n){return n==="unstable"?(l('apiVersion "unstable" changes without notice. Pin a dated version (e.g. 2026-07).'),n):R(n)?n:g("apiVersion",n,u.apiVersion)}function Y(n,e,t){if(e==null||e==="")return;let o=t(e);if(o!==null)return o;a(n,e)}function In(n){Rn(n);let e=L(n.domain,a),t=typeof n.prefix=="string"&&wn.test(n.prefix)?n.prefix:g("prefix",n.prefix,u.prefix),o={...u,..._n(n),domain:e,apiVersion:Un(n.apiVersion),country:Y("country",n.country,T),locale:Ln(n.locale),partsUrl:I(n.partsUrl,a),language:Y("language",n.language,w),markets:b(n.markets,a),analytics:D(n.analytics,a),account:H(n.account,a,l),prefix:t,storageKey:typeof n.storageKey=="string"&&n.storageKey?n.storageKey:`${t}:cart:${e}`,metafields:$(n.metafields??[],a),embedOrigins:F(n.embedOrigins??[],a),checkoutTarget:K("checkoutTarget",n.checkoutTarget,["_self","_blank"]),defaultPurchase:K("defaultPurchase",n.defaultPurchase,["one-time","subscription"])};for(let r of Sn)o[r]=Nn(r,n[r]);for(let r of bn)o[r]=Pn(r,n[r]);for(let r of An)o[r]=Mn(r,n[r]);return o}var te=n=>b(n,a);function oe(n={}){let e=In(n);for(let t of Object.keys(s))t in e||Reflect.deleteProperty(s,t);return Object.assign(s,e)}var re=()=>!!(s.domain&&s.token);function ie(...n){s.debug&&console.log(`[${s.prefix}]`,...n)}function l(...n){console.warn(`[${s.prefix}]`,...n)}function se(n,e){if(l(e,n instanceof Error&&n.message?n.message:n),!!s.onError)try{s.onError(n,e)}catch(t){l("onError threw",t)}}function le(n){return n instanceof Error?n.message:String(n)}var fe={domain:["PUBLIC_SHOPIFY_DOMAIN","PUBLIC_SHOPIFY_STORE_DOMAIN","SHOPIFY_DOMAIN"],token:["PUBLIC_SHOPIFY_STOREFRONT_TOKEN","PUBLIC_SHOPIFY_STOREFRONT_ACCESS_TOKEN","SHOPIFY_STOREFRONT_TOKEN"]};function de(n){if(typeof n!="string")return!1;try{return new URL(n).protocol==="https:"}catch{return!1}}function ge(n){return/^shp[a-z]{2}_/.test(n.trim())}function pe(n,e){if(!n)return"";let t=parseFloat(n.amount);if(Number.isNaN(t))return"";try{return new Intl.NumberFormat(e||void 0,{style:"currency",currency:n.currencyCode}).format(t)}catch{return`${n.currencyCode} ${t.toFixed(2)}`}}function ye(n,e,t){if(!/\{(handle|id)\}/.test(n))return e?`${n.replace(/\/$/,"")}/${encodeURIComponent(e)}`:null;let o=t?t.split("/").at(-1)??"":"";return n.includes("{handle}")&&!e||n.includes("{id}")&&!o?null:n.replace(/\{handle\}/g,encodeURIComponent(e??"")).replace(/\{id\}/g,encodeURIComponent(o))}function me(n){let e=String(n??"").trim();return e?e.startsWith("gid://")?e:/^\d+$/.test(e)?`gid://shopify/Product/${e}`:/\/products\/([^/?#]+)/.exec(e)?.[1]??e:null}export{Fn as a,$n as b,Hn as c,O as d,Q as e,Z as f,B as g,W as h,Kn as i,E as j,Yn as k,vn as l,M as m,dn as n,T as o,w as p,u as q,s as r,ee as s,In as t,te as u,oe as v,re as w,ie as x,l as y,se as z,le as A,fe as B,de as C,ge as D,pe as E,ye as F,me as G};
@@ -1 +1 @@
1
- import{a as k,b as z,c as B}from"./chunk-56FCLJJD.js";import{a as g,c as y,f as l}from"./chunk-MPDWM2NN.js";import{D as _,E as J,r as D,v as U,x as W,y as Q,z as Y}from"./chunk-BFTZR4OB.js";import{E as K,F as C,H as w,K as F,M as q,a as H,l as u,m as c,n as s,o as P,p as N,q as A,t as d,w as O,y as I}from"./chunk-BA4LQJJQ.js";import{b as m,d as M,o as b,p as $,r as p,x as v,y as x,z as h}from"./chunk-E5YO6274.js";var j="url:",T=()=>`${c("collection")},${c("products")},${c("recommendations")}`,et=t=>t instanceof window.Element,G=t=>parseInt(t??"",10)||void 0,ot=t=>t==="COMPLEMENTARY"?"COMPLEMENTARY":"RELATED",V=class{constructor(e){m(this,"root");m(this,"products",[]);m(this,"pageInfo",null);m(this,"collection",null);m(this,"loadToken",0);this.root=e,l(e,"loading"),e.addEventListener("click",o=>{if(!et(o.target))return;let n=o.target.closest(c("load-more"));n?.closest(T())===e&&(o.preventDefault(),q(n,()=>this.load(!0)))})}$(e){return A(this.root,e,T())}options(){let{root:e}=this,o={reverse:s(e,"reverse")==="true"},n=G(s(e,"limit"));n&&(o.first=n);let r=s(e,"sort");if(r&&(o.sortKey=r),P(e,"collection"))return o.collection=s(e,"collection")??"",o;let i=s(e,"products")??"";return o.query=i.startsWith(j)?new URL(window.location.href).searchParams.get(i.slice(j.length))||"":i,o}async loadRecommendations(){let{key:e}=g(this.root,window.location,"recommendations"),o=this.root.closest(c("product"));if(!e&&o&&({key:e}=g(o)),!e)throw new H("No product for recommendations",{code:"NOT_FOUND"});return J(e,ot(s(this.root,"intent")))}async load(e=!1){this.loadToken+=1;let o=this.loadToken,n=()=>o!==this.loadToken;try{if(P(this.root,"recommendations")){let r=await this.loadRecommendations();if(n())return;let i=G(s(this.root,"limit"));this.products=i?r.slice(0,i):r}else{let r=await _({...this.options(),after:e?this.pageInfo?.endCursor??null:null});if(n())return;this.collection=r.collection,this.pageInfo=r.pageInfo,this.products=e?[...this.products,...r.products]:r.products}this.render(),l(this.root,"ready"),d("list-ready",{products:this.products,collection:this.collection},this.root)}catch(r){if(n())return;e||l(this.root,y(r)?"not-found":"error",r),y(r)&&P(this.root,"recommendations")||h(r,"list load failed"),d("error",{error:r,context:"list"},this.root)}}render(){let{collection:e}=this;this.$(c("collection-bind")).forEach(n=>{switch(s(n,"collection-bind")??""){case"title":C(n,e?.title??"");break;case"description":K(n,e?.descriptionHtml);break;case"image":O(n,e?.image?.url,e?.image?.altText||e?.title);break;case"count":C(n,this.products.length);break}}),this.$(c("list")).forEach(n=>{I(n,this.products,(r,i)=>{r.setAttribute(u("product"),i.handle),r.removeAttribute(u("state"))}),d("list-rendered",{container:n},this.root)});let o=this.products.length===0;this.$(c("show")).forEach(n=>{let r=s(n,"show");r==="list-empty"&&w(n,o),r==="list-filled"&&w(n,!o)}),this.$(c("load-more")).forEach(n=>{w(n,!!this.pageInfo?.hasNextPage)}),F("list")}};var rt='script[type="application/json"][data-tether-hydrate]',L=new WeakSet,Ht=new WeakSet,E=new Set,X=new Set,Z=new WeakMap;function nt(){E.forEach(t=>{t.isConnected||E.delete(t)}),X.forEach(t=>{t.root.isConnected||X.delete(t)})}function it(t,e){return[...t.matches?.(e)?[t]:[],...N(t,e)]}function st(t,e){let o=s(t,"page-title");!o||typeof document>"u"||(document.title=o.replace(/\{title\}/g,e.title).replace(/\{vendor\}/g,e.vendor||"").replace(/\{type\}/g,e.productType||""))}function ct(t,{fromUrl:e,raw:o}){e?(L.add(t),l(t,"not-found"),d("product-not-found",{key:null,source:o},t)):t.closest(T())||x(`[${u("product")}] without a value. Bind it to the Shopify handle field, or use "url:handle".`,t)}function at(t,e,{fromUrl:o,raw:n},r){let i=y(r);if(l(t,i?"not-found":"error",r),!i){h(r,`product ${e}`),d("error",{error:r,context:"product",key:e},t);return}d("product-not-found",{key:e,source:n},t),o?v(`product not found: ${e}`):h(r,`product ${e}`)}function ut(t){if(L.has(t))return!1;let{key:e,...o}=g(t);if(!e)return ct(t,o),!1;L.add(t),E.add(t);let n={};Z.set(t,n);let r=()=>Z.get(t)===n;return k.get(t)?t.setAttribute(u("state"),"updating"):l(t,"loading"),mt(U(e)).then(f=>{if(!r())return;let R=k.get(t);R?R.update(f):new B(t,f),st(t,f),p.revalidate&&Q(e)&&dt(e)}).catch(f=>{r()&&at(t,e,o,f)}),!0}function Nt(){nt(),E.forEach(t=>{t.getAttribute(u("state"))!=="error"||t.getAttribute(u("error"))==="not-found"||(L.delete(t),ut(t))})}var S=new Set;function dt(t){S.size||setTimeout(ft,0),S.add(t)}function lt(t,e){E.forEach(o=>{let n=k.get(o);if(!n||!o.isConnected)return;let r=g(o).key;r!==t&&r!==e.handle&&r!==e.id||JSON.stringify(n.product)!==JSON.stringify(e)&&n.update(e)})}function ft(){let t=[...S];S=new Set,t.forEach(e=>{Y(e).then(o=>{lt(e,o)}).catch(o=>{h(o,`refresh ${e}`)})})}var a=null,mt=t=>(a?.add(t),t);function pt(){if(!a)return;let t=[...a];Promise.allSettled(t).then(()=>{if(!(!a||t.some(e=>!a?.has(e)))){if(t.length!==a.size){pt();return}a=null,document.documentElement.classList.remove(`${p.prefix}-market-pending`)}})}function ht(t){if(!M(t))return{country:void 0,language:void 0,products:[]};let{products:e}=t,o=Array.isArray(e)?e:[];return{country:b(t.country)??void 0,language:$(t.language)??void 0,products:o.filter(D)}}var tt=new WeakSet;function At(t=document){it(t,rt).forEach(e=>{if(tt.has(e))return;tt.add(e);let o;try{o=JSON.parse(e.textContent)}catch(f){x("bad data-tether-hydrate",f);return}let{country:n,language:r,products:i}=ht(o);if(z(i),n===p.country&&r===p.language){W(i);return}v("hydration skipped: other market"),a||(a=new Set,document.documentElement.classList.add(`${p.prefix}-market-pending`))})}export{T as a,V as b,L as c,Ht as d,E as e,X as f,nt as g,it as h,ut as i,Nt as j,mt as k,pt as l,At as m};
1
+ import{a as k,b as z,c as B}from"./chunk-NYDZPTLP.js";import{b as g,d as y,g as l}from"./chunk-BMDYNMRC.js";import{D as _,E as J,r as D,v as U,x as W,y as Q,z as Y}from"./chunk-YC4JXWRG.js";import{E as K,F as C,H as w,K as F,M as q,a as H,l as u,m as c,n as s,o as P,p as N,q as A,t as d,w as O,y as I}from"./chunk-CUL66KRA.js";import{b as m,d as M,o as b,p as $,r as p,x as v,y as x,z as h}from"./chunk-QDHLXXAZ.js";var j="url:",T=()=>`${c("collection")},${c("products")},${c("recommendations")}`,et=t=>t instanceof window.Element,G=t=>parseInt(t??"",10)||void 0,ot=t=>t==="COMPLEMENTARY"?"COMPLEMENTARY":"RELATED",V=class{constructor(e){m(this,"root");m(this,"products",[]);m(this,"pageInfo",null);m(this,"collection",null);m(this,"loadToken",0);this.root=e,l(e,"loading"),e.addEventListener("click",o=>{if(!et(o.target))return;let n=o.target.closest(c("load-more"));n?.closest(T())===e&&(o.preventDefault(),q(n,()=>this.load(!0)))})}$(e){return A(this.root,e,T())}options(){let{root:e}=this,o={reverse:s(e,"reverse")==="true"},n=G(s(e,"limit"));n&&(o.first=n);let r=s(e,"sort");if(r&&(o.sortKey=r),P(e,"collection"))return o.collection=s(e,"collection")??"",o;let i=s(e,"products")??"";return o.query=i.startsWith(j)?new URL(window.location.href).searchParams.get(i.slice(j.length))||"":i,o}async loadRecommendations(){let{key:e}=g(this.root,window.location,"recommendations"),o=this.root.closest(c("product"));if(!e&&o&&({key:e}=g(o)),!e)throw new H("No product for recommendations",{code:"NOT_FOUND"});return J(e,ot(s(this.root,"intent")))}async load(e=!1){this.loadToken+=1;let o=this.loadToken,n=()=>o!==this.loadToken;try{if(P(this.root,"recommendations")){let r=await this.loadRecommendations();if(n())return;let i=G(s(this.root,"limit"));this.products=i?r.slice(0,i):r}else{let r=await _({...this.options(),after:e?this.pageInfo?.endCursor??null:null});if(n())return;this.collection=r.collection,this.pageInfo=r.pageInfo,this.products=e?[...this.products,...r.products]:r.products}this.render(),l(this.root,"ready"),d("list-ready",{products:this.products,collection:this.collection},this.root)}catch(r){if(n())return;e||l(this.root,y(r)?"not-found":"error",r),y(r)&&P(this.root,"recommendations")||h(r,"list load failed"),d("error",{error:r,context:"list"},this.root)}}render(){let{collection:e}=this;this.$(c("collection-bind")).forEach(n=>{switch(s(n,"collection-bind")??""){case"title":C(n,e?.title??"");break;case"description":K(n,e?.descriptionHtml);break;case"image":O(n,e?.image?.url,e?.image?.altText||e?.title);break;case"count":C(n,this.products.length);break}}),this.$(c("list")).forEach(n=>{I(n,this.products,(r,i)=>{r.setAttribute(u("product"),i.handle),r.removeAttribute(u("state"))}),d("list-rendered",{container:n},this.root)});let o=this.products.length===0;this.$(c("show")).forEach(n=>{let r=s(n,"show");r==="list-empty"&&w(n,o),r==="list-filled"&&w(n,!o)}),this.$(c("load-more")).forEach(n=>{w(n,!!this.pageInfo?.hasNextPage)}),F("list")}};var rt='script[type="application/json"][data-tether-hydrate]',L=new WeakSet,Ht=new WeakSet,E=new Set,X=new Set,Z=new WeakMap;function nt(){E.forEach(t=>{t.isConnected||E.delete(t)}),X.forEach(t=>{t.root.isConnected||X.delete(t)})}function it(t,e){return[...t.matches?.(e)?[t]:[],...N(t,e)]}function st(t,e){let o=s(t,"page-title");!o||typeof document>"u"||(document.title=o.replace(/\{title\}/g,e.title).replace(/\{vendor\}/g,e.vendor||"").replace(/\{type\}/g,e.productType||""))}function ct(t,{fromUrl:e,raw:o}){e?(L.add(t),l(t,"not-found"),d("product-not-found",{key:null,source:o},t)):t.closest(T())||x(`[${u("product")}] without a value. Bind it to the Shopify handle field, or use "url:handle".`,t)}function at(t,e,{fromUrl:o,raw:n},r){let i=y(r);if(l(t,i?"not-found":"error",r),!i){h(r,`product ${e}`),d("error",{error:r,context:"product",key:e},t);return}d("product-not-found",{key:e,source:n},t),o?v(`product not found: ${e}`):h(r,`product ${e}`)}function ut(t){if(L.has(t))return!1;let{key:e,...o}=g(t);if(!e)return ct(t,o),!1;L.add(t),E.add(t);let n={};Z.set(t,n);let r=()=>Z.get(t)===n;return k.get(t)?t.setAttribute(u("state"),"updating"):l(t,"loading"),mt(U(e)).then(f=>{if(!r())return;let R=k.get(t);R?R.update(f):new B(t,f),st(t,f),p.revalidate&&Q(e)&&dt(e)}).catch(f=>{r()&&at(t,e,o,f)}),!0}function Nt(){nt(),E.forEach(t=>{t.getAttribute(u("state"))!=="error"||t.getAttribute(u("error"))==="not-found"||(L.delete(t),ut(t))})}var S=new Set;function dt(t){S.size||setTimeout(ft,0),S.add(t)}function lt(t,e){E.forEach(o=>{let n=k.get(o);if(!n||!o.isConnected)return;let r=g(o).key;r!==t&&r!==e.handle&&r!==e.id||JSON.stringify(n.product)!==JSON.stringify(e)&&n.update(e)})}function ft(){let t=[...S];S=new Set,t.forEach(e=>{Y(e).then(o=>{lt(e,o)}).catch(o=>{h(o,`refresh ${e}`)})})}var a=null,mt=t=>(a?.add(t),t);function pt(){if(!a)return;let t=[...a];Promise.allSettled(t).then(()=>{if(!(!a||t.some(e=>!a?.has(e)))){if(t.length!==a.size){pt();return}a=null,document.documentElement.classList.remove(`${p.prefix}-market-pending`)}})}function ht(t){if(!M(t))return{country:void 0,language:void 0,products:[]};let{products:e}=t,o=Array.isArray(e)?e:[];return{country:b(t.country)??void 0,language:$(t.language)??void 0,products:o.filter(D)}}var tt=new WeakSet;function At(t=document){it(t,rt).forEach(e=>{if(tt.has(e))return;tt.add(e);let o;try{o=JSON.parse(e.textContent)}catch(f){x("bad data-tether-hydrate",f);return}let{country:n,language:r,products:i}=ht(o);if(z(i),n===p.country&&r===p.language){W(i);return}v("hydration skipped: other market"),a||(a=new Set,document.documentElement.classList.add(`${p.prefix}-market-pending`))})}export{T as a,V as b,L as c,Ht as d,E as e,X as f,nt as g,it as h,ut as i,Nt as j,mt as k,pt as l,At as m};