@shopify/hydrogen-react 2024.4.2 → 2024.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/browser-dev/RichText.components.mjs +57 -0
- package/dist/browser-dev/RichText.components.mjs.map +1 -0
- package/dist/browser-dev/RichText.mjs +160 -0
- package/dist/browser-dev/RichText.mjs.map +1 -0
- package/dist/browser-dev/index.mjs +2 -0
- package/dist/browser-dev/index.mjs.map +1 -1
- package/dist/browser-dev/parse-metafield.mjs +1 -0
- package/dist/browser-dev/parse-metafield.mjs.map +1 -1
- package/dist/browser-dev/storefront-client.mjs +1 -1
- package/dist/browser-dev/storefront-client.mjs.map +1 -1
- package/dist/browser-dev/useShopifyCookies.mjs +8 -4
- package/dist/browser-dev/useShopifyCookies.mjs.map +1 -1
- package/dist/browser-prod/RichText.components.mjs +57 -0
- package/dist/browser-prod/RichText.components.mjs.map +1 -0
- package/dist/browser-prod/RichText.mjs +160 -0
- package/dist/browser-prod/RichText.mjs.map +1 -0
- package/dist/browser-prod/index.mjs +2 -0
- package/dist/browser-prod/index.mjs.map +1 -1
- package/dist/browser-prod/parse-metafield.mjs +1 -0
- package/dist/browser-prod/parse-metafield.mjs.map +1 -1
- package/dist/browser-prod/storefront-client.mjs +1 -1
- package/dist/browser-prod/storefront-client.mjs.map +1 -1
- package/dist/browser-prod/useShopifyCookies.mjs +8 -4
- package/dist/browser-prod/useShopifyCookies.mjs.map +1 -1
- package/dist/node-dev/RichText.components.js +57 -0
- package/dist/node-dev/RichText.components.js.map +1 -0
- package/dist/node-dev/RichText.components.mjs +57 -0
- package/dist/node-dev/RichText.components.mjs.map +1 -0
- package/dist/node-dev/RichText.js +160 -0
- package/dist/node-dev/RichText.js.map +1 -0
- package/dist/node-dev/RichText.mjs +160 -0
- package/dist/node-dev/RichText.mjs.map +1 -0
- package/dist/node-dev/index.js +2 -0
- package/dist/node-dev/index.js.map +1 -1
- package/dist/node-dev/index.mjs +2 -0
- package/dist/node-dev/index.mjs.map +1 -1
- package/dist/node-dev/parse-metafield.js +1 -0
- package/dist/node-dev/parse-metafield.js.map +1 -1
- package/dist/node-dev/parse-metafield.mjs +1 -0
- package/dist/node-dev/parse-metafield.mjs.map +1 -1
- package/dist/node-dev/storefront-client.js +1 -1
- package/dist/node-dev/storefront-client.js.map +1 -1
- package/dist/node-dev/storefront-client.mjs +1 -1
- package/dist/node-dev/storefront-client.mjs.map +1 -1
- package/dist/node-dev/useShopifyCookies.js +8 -4
- package/dist/node-dev/useShopifyCookies.js.map +1 -1
- package/dist/node-dev/useShopifyCookies.mjs +8 -4
- package/dist/node-dev/useShopifyCookies.mjs.map +1 -1
- package/dist/node-prod/RichText.components.js +57 -0
- package/dist/node-prod/RichText.components.js.map +1 -0
- package/dist/node-prod/RichText.components.mjs +57 -0
- package/dist/node-prod/RichText.components.mjs.map +1 -0
- package/dist/node-prod/RichText.js +160 -0
- package/dist/node-prod/RichText.js.map +1 -0
- package/dist/node-prod/RichText.mjs +160 -0
- package/dist/node-prod/RichText.mjs.map +1 -0
- package/dist/node-prod/index.js +2 -0
- package/dist/node-prod/index.js.map +1 -1
- package/dist/node-prod/index.mjs +2 -0
- package/dist/node-prod/index.mjs.map +1 -1
- package/dist/node-prod/parse-metafield.js +1 -0
- package/dist/node-prod/parse-metafield.js.map +1 -1
- package/dist/node-prod/parse-metafield.mjs +1 -0
- package/dist/node-prod/parse-metafield.mjs.map +1 -1
- package/dist/node-prod/storefront-client.js +1 -1
- package/dist/node-prod/storefront-client.js.map +1 -1
- package/dist/node-prod/storefront-client.mjs +1 -1
- package/dist/node-prod/storefront-client.mjs.map +1 -1
- package/dist/node-prod/useShopifyCookies.js +8 -4
- package/dist/node-prod/useShopifyCookies.js.map +1 -1
- package/dist/node-prod/useShopifyCookies.mjs +8 -4
- package/dist/node-prod/useShopifyCookies.mjs.map +1 -1
- package/dist/types/RichText.components.d.ts +76 -0
- package/dist/types/RichText.d.ts +14 -0
- package/dist/types/RichText.test.helpers.d.ts +9 -0
- package/dist/types/RichText.types.d.ts +36 -0
- package/dist/types/index.d.cts +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/parse-metafield.d.ts +8 -1
- package/dist/umd/hydrogen-react.dev.js +215 -5
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +18 -17
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +2 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(E,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],c):(E=typeof globalThis<"u"?globalThis:E||self,c(E.hydrogenreact={},E.React))})(this,function(E,c){"use strict";function
|
|
1
|
+
(function(E,c){typeof exports=="object"&&typeof module<"u"?c(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],c):(E=typeof globalThis<"u"?globalThis:E||self,c(E.hydrogenreact={},E.React))})(this,function(E,c){"use strict";function Ht(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const N=Ht(c);/*! *****************************************************************************
|
|
2
2
|
Copyright (c) Microsoft Corporation.
|
|
3
3
|
|
|
4
4
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
12
12
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
13
13
|
PERFORMANCE OF THIS SOFTWARE.
|
|
14
|
-
***************************************************************************** */function
|
|
14
|
+
***************************************************************************** */function $e(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n,a,i=r.call(e),s=[];try{for(;(t===void 0||t-- >0)&&!(n=i.next()).done;)s.push(n.value)}catch(o){a={error:o}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(a)throw a.error}}return s}var ee;(function(e){e[e.NotStarted=0]="NotStarted",e[e.Running=1]="Running",e[e.Stopped=2]="Stopped"})(ee||(ee={}));var qe={type:"xstate.init"};function ve(e){return e===void 0?[]:[].concat(e)}function re(e){return{type:"xstate.assign",assignment:e}}function He(e,t){return typeof(e=typeof e=="string"&&t&&t[e]?t[e]:e)=="string"?{type:e}:typeof e=="function"?{type:e.name,exec:e}:e}function _e(e){return function(t){return e===t}}function je(e){return typeof e=="string"?{type:e}:e}function Be(e,t){return{value:e,context:t,actions:[],changed:!1,matches:_e(e)}}function Ye(e,t,r){var n=t,a=!1;return[e.filter(function(i){if(i.type==="xstate.assign"){a=!0;var s=Object.assign({},n);return typeof i.assignment=="function"?s=i.assignment(n,r):Object.keys(i.assignment).forEach(function(o){s[o]=typeof i.assignment[o]=="function"?i.assignment[o](n,r):i.assignment[o]}),n=s,!1}return!0}),n,a]}function We(e,t){t===void 0&&(t={});var r=$e(Ye(ve(e.states[e.initial].entry).map(function(s){return He(s,t.actions)}),e.context,qe),2),n=r[0],a=r[1],i={config:e,_options:t,initialState:{value:e.initial,actions:n,context:a,matches:_e(e.initial)},transition:function(s,o){var u,f,h=typeof s=="string"?{value:s,context:e.context}:s,d=h.value,y=h.context,m=je(o),l=e.states[d];if(l.on){var S=ve(l.on[m.type]);try{for(var T=function(U){var se=typeof Symbol=="function"&&Symbol.iterator,me=se&&U[se],pe=0;if(me)return me.call(U);if(U&&typeof U.length=="number")return{next:function(){return U&&pe>=U.length&&(U=void 0),{value:U&&U[pe++],done:!U}}};throw new TypeError(se?"Object is not iterable.":"Symbol.iterator is not defined.")}(S),P=T.next();!P.done;P=T.next()){var w=P.value;if(w===void 0)return Be(d,y);var I=typeof w=="string"?{target:w}:w,D=I.target,g=I.actions,p=g===void 0?[]:g,_=I.cond,R=_===void 0?function(){return!0}:_,v=D===void 0,A=D??d,b=e.states[A];if(R(y,m)){var H=$e(Ye((v?ve(p):[].concat(l.exit,p,b.entry).filter(function(U){return U})).map(function(U){return He(U,i._options.actions)}),y,m),3),k=H[0],j=H[1],z=H[2],he=D??d;return{value:he,context:j,actions:k,changed:D!==d||k.length>0||z,matches:_e(he)}}}}catch(U){u={error:U}}finally{try{P&&!P.done&&(f=T.return)&&f.call(T)}finally{if(u)throw u.error}}}return Be(d,y)}};return i}var Ge=function(e,t){return e.actions.forEach(function(r){var n=r.exec;return n&&n(e.context,t)})};function jt(e){var t=e.initialState,r=ee.NotStarted,n=new Set,a={_machine:e,send:function(i){r===ee.Running&&(t=e.transition(t,i),Ge(t,je(i)),n.forEach(function(s){return s(t)}))},subscribe:function(i){return n.add(i),i(t),{unsubscribe:function(){return n.delete(i)}}},start:function(i){if(i){var s=typeof i=="object"?i:{context:e.config.context,value:i};t={value:s.value,actions:[],context:s.context,matches:_e(s.value)}}else t=e.initialState;return r=ee.Running,Ge(t,qe),a},stop:function(){return r=ee.Stopped,n.clear(),a},get state(){return t},get status(){return r}};return a}var Bt=c.useLayoutEffect,Ze={exports:{}},Qe={},Je={exports:{}},Ke={};/**
|
|
15
15
|
* @license React
|
|
16
16
|
* use-sync-external-store-shim.production.min.js
|
|
17
17
|
*
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* This source code is licensed under the MIT license found in the
|
|
21
21
|
* LICENSE file in the root directory of this source tree.
|
|
22
|
-
*/var ne=c;function
|
|
22
|
+
*/var ne=c;function Yt(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var Wt=typeof Object.is=="function"?Object.is:Yt,Gt=ne.useState,Zt=ne.useEffect,Qt=ne.useLayoutEffect,Jt=ne.useDebugValue;function Kt(e,t){var r=t(),n=Gt({inst:{value:r,getSnapshot:t}}),a=n[0].inst,i=n[1];return Qt(function(){a.value=r,a.getSnapshot=t,Pe(a)&&i({inst:a})},[e,r,t]),Zt(function(){return Pe(a)&&i({inst:a}),e(function(){Pe(a)&&i({inst:a})})},[e]),Jt(r),r}function Pe(e){var t=e.getSnapshot;e=e.value;try{var r=t();return!Wt(e,r)}catch{return!0}}function Xt(e,t){return t()}var zt=typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"?Xt:Kt;Ke.useSyncExternalStore=ne.useSyncExternalStore!==void 0?ne.useSyncExternalStore:zt,Je.exports=Ke;var er=Je.exports;/**
|
|
23
23
|
* @license React
|
|
24
24
|
* use-sync-external-store-shim/with-selector.production.min.js
|
|
25
25
|
*
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
*
|
|
28
28
|
* This source code is licensed under the MIT license found in the
|
|
29
29
|
* LICENSE file in the root directory of this source tree.
|
|
30
|
-
*/var
|
|
30
|
+
*/var Ce=c,tr=er;function rr(e,t){return e===t&&(e!==0||1/e===1/t)||e!==e&&t!==t}var nr=typeof Object.is=="function"?Object.is:rr,ar=tr.useSyncExternalStore,or=Ce.useRef,ir=Ce.useEffect,sr=Ce.useMemo,cr=Ce.useDebugValue;Qe.useSyncExternalStoreWithSelector=function(e,t,r,n,a){var i=or(null);if(i.current===null){var s={hasValue:!1,value:null};i.current=s}else s=i.current;i=sr(function(){function u(m){if(!f){if(f=!0,h=m,m=n(m),a!==void 0&&s.hasValue){var l=s.value;if(a(l,m))return d=l}return d=m}if(l=d,nr(h,m))return l;var S=n(m);return a!==void 0&&a(l,S)?l:(h=m,d=S)}var f=!1,h,d,y=r===void 0?null:r;return[function(){return u(t())},y===null?void 0:function(){return u(y())}]},[t,r,n,a]);var o=ar(e,i[0],i[1]);return ir(function(){s.hasValue=!0,s.value=o},[o]),cr(o),o},Ze.exports=Qe;var ur=Ze.exports;function lr(e){var t=N.useRef();return t.current||(t.current={v:e()}),t.current.v}var dr=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),a,i=[],s;try{for(;(t===void 0||t-- >0)&&!(a=n.next()).done;)i.push(a.value)}catch(o){s={error:o}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return i};function fr(e){return e}var yr=function(e){var t;return e.subscribe(function(r){t=r}).unsubscribe(),t};function gr(e,t){var r=c.useRef(),n=dr(lr(function(){var o=[],u=jt(We(e.config,t||e._options)),f=u.send;return u.send=function(h){if(u.status===ee.NotStarted){o.push(h);return}f(h),r.current=u.state},[u,o]}),2),a=n[0],i=n[1];Bt(function(){t&&(a._machine._options=t)});var s=mr(a);return c.useEffect(function(){return a.start(r.current),i.forEach(a.send),r.current=a.state,function(){a.stop()}},[]),s}var hr=function(e,t){return t.changed===!1};function mr(e){var t=c.useCallback(function(){return yr(e)},[e]),r=c.useCallback(function(a){var i=e.subscribe(a).unsubscribe;return i},[e]),n=ur.useSyncExternalStoreWithSelector(r,t,t,fr,hr);return[n,e.send,e]}function J(e){if(!e){const t=`flattenConnection(): needs a 'connection' to flatten, but received '${e??""}' instead.`;return console.error(t+" Returning an empty array"),[]}return"nodes"in e?e.nodes:"edges"in e&&Array.isArray(e.edges)?e.edges.map(t=>{if(!(t!=null&&t.node))throw new Error("flattenConnection(): Connection edges must contain nodes");return t.node}):[]}const pr=e=>`
|
|
31
31
|
mutation CartLineAdd(
|
|
32
32
|
$cartId: ID!
|
|
33
33
|
$lines: [CartLineInput!]!
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
${e}
|
|
46
|
-
`,
|
|
46
|
+
`,Er=e=>`
|
|
47
47
|
mutation CartCreate(
|
|
48
48
|
$input: CartInput!
|
|
49
49
|
$numCartLines: Int = 250
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
${e}
|
|
61
|
-
`,
|
|
61
|
+
`,_r=e=>`
|
|
62
62
|
mutation CartLineRemove(
|
|
63
63
|
$cartId: ID!
|
|
64
64
|
$lines: [ID!]!
|
|
@@ -74,7 +74,7 @@
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
${e}
|
|
77
|
-
`,
|
|
77
|
+
`,Cr=e=>`
|
|
78
78
|
mutation CartLineUpdate(
|
|
79
79
|
$cartId: ID!
|
|
80
80
|
$lines: [CartLineUpdateInput!]!
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
${e}
|
|
93
|
-
`,
|
|
93
|
+
`,Sr=e=>`
|
|
94
94
|
mutation CartNoteUpdate(
|
|
95
95
|
$cartId: ID!
|
|
96
96
|
$note: String!
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
${e}
|
|
109
|
-
`,
|
|
109
|
+
`,Tr=e=>`
|
|
110
110
|
mutation CartBuyerIdentityUpdate(
|
|
111
111
|
$cartId: ID!
|
|
112
112
|
$buyerIdentity: CartBuyerIdentityInput!
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
${e}
|
|
125
|
-
`,
|
|
125
|
+
`,Ar=e=>`
|
|
126
126
|
mutation CartAttributesUpdate(
|
|
127
127
|
$attributes: [AttributeInput!]!
|
|
128
128
|
$cartId: ID!
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
${e}
|
|
141
|
-
`,
|
|
141
|
+
`,Ir=e=>`
|
|
142
142
|
mutation CartDiscountCodesUpdate(
|
|
143
143
|
$cartId: ID!
|
|
144
144
|
$discountCodes: [String!]
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
${e}
|
|
157
|
-
`,
|
|
157
|
+
`,wr=e=>`
|
|
158
158
|
query CartQuery(
|
|
159
159
|
$id: ID!
|
|
160
160
|
$numCartLines: Int = 250
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
}
|
|
168
168
|
|
|
169
169
|
${e}
|
|
170
|
-
`,
|
|
170
|
+
`,br=`
|
|
171
171
|
fragment CartFragment on Cart {
|
|
172
172
|
id
|
|
173
173
|
checkoutUrl
|
|
@@ -268,15 +268,16 @@
|
|
|
268
268
|
width
|
|
269
269
|
height
|
|
270
270
|
}
|
|
271
|
-
`,ae="2024-04",
|
|
272
|
-
You may run into unexpected errors if these versions don't match. Received verion: "${n}"; expected version "${ae}"`);const i=s=>{const o=(s==null?void 0:s.storeDomain)??e;return o.includes("://")?o:`https://${o}`};return{getShopifyDomain:i,getStorefrontApiUrl(s){const o=i(s),l=o+(o.endsWith("/")?"api":"/api");return Pe(o)?l:`${l}/${(s==null?void 0:s.storefrontApiVersion)??n}/graphql.json`},getPrivateTokenHeaders(s){if(!t&&!(s!=null&&s.privateStorefrontToken)&&!Pe(e))throw new Error(Re+"You did not pass in a `privateStorefrontToken` while using `createStorefrontClient()` or `getPrivateTokenHeaders()`");return{"content-type":((s==null?void 0:s.contentType)??a)==="graphql"?"application/graphql":"application/json","X-SDK-Variant":"hydrogen-react","X-SDK-Variant-Source":"react","X-SDK-Version":n,"Shopify-Storefront-Private-Token":(s==null?void 0:s.privateStorefrontToken)??t??"",...s!=null&&s.buyerIp?{"Shopify-Storefront-Buyer-IP":s.buyerIp}:{}}},getPublicTokenHeaders(s){if(!r&&!(s!=null&&s.publicStorefrontToken)&&!Pe(e))throw new Error(Re+"You did not pass in a `publicStorefrontToken` while using `createStorefrontClient()` or `getPublicTokenHeaders()`");const o=(s==null?void 0:s.contentType)??a??"json";return Ke(o,n,(s==null?void 0:s.publicStorefrontToken)??r??"")}}}function Ke(e,t,r){return{"content-type":e==="graphql"?"application/graphql":"application/json","X-SDK-Variant":"hydrogen-react","X-SDK-Variant-Source":"react","X-SDK-Version":t,"X-Shopify-Storefront-Access-Token":r}}const Xe=new Set,Re="[h2:error:createStorefrontClient] ",vr=(e,t="warn")=>{Xe.has(e)||(console[t](`[h2:${t}:createStorefrontClient] `+e),Xe.add(e))},ze={storeDomain:"test",storefrontToken:"abc123",storefrontApiVersion:ae,countryIsoCode:"US",languageIsoCode:"EN",getStorefrontApiUrl(){return""},getPublicTokenHeaders(){return{}},getShopifyDomain(){return""}},et=c.createContext(ze);function Pr({children:e,...t}){if(!t.countryIsoCode||!t.languageIsoCode||!t.storeDomain||!t.storefrontToken||!t.storefrontApiVersion)throw new Error("Please provide the necessary props to '<ShopifyProvider/>'");t.storefrontApiVersion!==ae&&console.warn(`<ShopifyProvider/>: This version of Hydrogen React is built for Shopify's Storefront API version ${ae}, but it looks like you're using version ${t.storefrontApiVersion}. There may be issues or bugs if you use a mismatched version of Hydrogen React and the Storefront API.`);const r=c.useMemo(()=>{function n(a){const i=(a==null?void 0:a.storeDomain)??t.storeDomain;return i.includes("://")?i:`https://${i}`}return{...t,getPublicTokenHeaders(a){return Ke(a.contentType,t.storefrontApiVersion,a.storefrontToken??t.storefrontToken)},getShopifyDomain:n,getStorefrontApiUrl(a){const i=n({storeDomain:(a==null?void 0:a.storeDomain)??t.storeDomain});return`${i}${i.endsWith("/")?"":"/"}api/${(a==null?void 0:a.storefrontApiVersion)??t.storefrontApiVersion}/graphql.json`}}},[t]);return React.createElement(et.Provider,{value:r},e)}function ce(){const e=c.useContext(et);if(!e)throw new Error("'useShop()' must be a descendent of <ShopifyProvider/>");return e}const De="shopifyCartId",tt="Shopify-Storefront-Id",rt="Shopify-Storefront-Y",nt="Shopify-Storefront-S",K="_shopify_y",X="_shopify_s";var Rr=new Set(["domain","path","max-age","expires","samesite","secure","httponly"]);function Dr(e){let t={},r,n,a=0,i=e.split(/;\s*/g),s,o;for(;a<i.length;a++)if(n=i[a],r=n.indexOf("="),~r){if(s=n.substring(0,r++).trim(),o=n.substring(r).trim(),o[0]==='"'&&(o=o.substring(1,o.length-1)),~o.indexOf("%"))try{o=decodeURIComponent(o)}catch{}Rr.has(n=s.toLowerCase())?n==="expires"?t.expires=new Date(o):n==="max-age"?t.maxage=+o:t[n]=o:t[s]=o}else(s=n.trim().toLowerCase())&&(s==="httponly"||s==="secure")&&(t[s]=!0);return t}function Or(e,t,r={}){let n=e+"="+encodeURIComponent(t);return r.expires&&(n+="; Expires="+new Date(r.expires).toUTCString()),r.maxage!=null&&r.maxage>=0&&(n+="; Max-Age="+(r.maxage|0)),r.domain&&(n+="; Domain="+r.domain),r.path&&(n+="; Path="+r.path),r.samesite&&(n+="; SameSite="+r.samesite),(r.secure||r.samesite==="None")&&(n+="; Secure"),r.httponly&&(n+="; HttpOnly"),n}const at="xxxx-4xxx-xxxx-xxxxxxxxxxxx";function Ce(){let e="";try{const t=window.crypto,r=new Uint16Array(31);t.getRandomValues(r);let n=0;e=at.replace(/[x]/g,a=>{const i=r[n]%16,s=a==="x"?i:i&3|8;return n++,s.toString(16)}).toUpperCase()}catch{e=at.replace(/[x]/g,r=>{const n=Math.random()*16|0;return(r==="x"?n:n&3|8).toString(16)}).toUpperCase()}return`${Ur()}-${e}`}function Ur(){let e=0,t=0;e=new Date().getTime()>>>0;try{t=performance.now()>>>0}catch{t=0}return Math.abs(e+t).toString(16).toLowerCase().padStart(8,"0")}function Se(e){const t=Dr(e);return{[K]:t[K]||"",[X]:t[X]||""}}function kr(){const{storefrontId:e,getPublicTokenHeaders:t,getStorefrontApiUrl:r}=ce();return c.useCallback(({query:n,variables:a})=>{const i=t({contentType:"json"});e&&(i[tt]=e);const s=Se(document.cookie);return i[rt]=s[K],i[nt]=s[X],fetch(r(),{method:"POST",headers:i,body:JSON.stringify({query:n.toString(),variables:a})}).then(o=>o.json()).catch(o=>({data:void 0,errors:o==null?void 0:o.toString()}))},[t,e,r])}function Nr({numCartLines:e,cartFragment:t,countryCode:r="US",languageCode:n="EN"}){const a=kr(),i=c.useCallback(u=>a({query:Ar(t),variables:{id:u,numCartLines:e,country:r,language:n}}),[a,t,e,r,n]),s=c.useCallback(u=>a({query:mr(t),variables:{input:u,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),o=c.useCallback((u,S)=>a({query:hr(t),variables:{cartId:u,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),l=c.useCallback((u,S)=>a({query:Er(t),variables:{cartId:u,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),f=c.useCallback((u,S)=>a({query:pr(t),variables:{cartId:u,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),h=c.useCallback((u,S)=>a({query:_r(t),variables:{cartId:u,note:S,numCartLines:e,country:r,language:n}}),[a,t,e,r,n]),d=c.useCallback((u,S)=>a({query:Cr(t),variables:{cartId:u,buyerIdentity:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),y=c.useCallback((u,S)=>a({query:Sr(t),variables:{cartId:u,attributes:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),m=c.useCallback((u,S)=>a({query:Tr(t),variables:{cartId:u,discountCodes:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]);return c.useMemo(()=>({cartFetch:i,cartCreate:s,cartLineAdd:o,cartLineUpdate:l,cartLineRemove:f,noteUpdate:h,buyerIdentityUpdate:d,cartAttributesUpdate:y,discountCodesUpdate:m,cartFragment:t}),[i,s,o,l,f,h,d,y,m,t])}function Y(e,t){return{entry:[...(t==null?void 0:t.entryActions)||[],re({lastValidCart:r=>r==null?void 0:r.cart}),"onCartActionEntry","onCartActionOptimisticUI",e],on:{RESOLVE:{target:(t==null?void 0:t.resolveTarget)||"idle",actions:[re({prevCart:r=>r==null?void 0:r.lastValidCart,cart:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.cart},rawCartResult:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.rawCartResult},errors:r=>{}})]},ERROR:{target:(t==null?void 0:t.errorTarget)||"error",actions:[re({prevCart:r=>r==null?void 0:r.lastValidCart,cart:r=>r==null?void 0:r.lastValidCart,errors:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.errors}})]},CART_COMPLETED:{target:"cartCompleted",actions:re({prevCart:r=>{},cart:r=>{},lastValidCart:r=>{},rawCartResult:r=>{},errors:r=>{}})}},exit:["onCartActionComplete",...(t==null?void 0:t.exitActions)||[]]}}const ue={CART_FETCH:{target:"cartFetching"},CART_CREATE:{target:"cartCreating"},CART_SET:{target:"idle",actions:[re({rawCartResult:(e,t)=>t.payload.cart,cart:(e,t)=>Oe(t.payload.cart)})]}},ot={CARTLINE_ADD:{target:"cartLineAdding"},CARTLINE_UPDATE:{target:"cartLineUpdating"},CARTLINE_REMOVE:{target:"cartLineRemoving"},NOTE_UPDATE:{target:"noteUpdating"},BUYER_IDENTITY_UPDATE:{target:"buyerIdentityUpdating"},CART_ATTRIBUTES_UPDATE:{target:"cartAttributesUpdating"},DISCOUNT_CODES_UPDATE:{target:"discountCodesUpdating"}};function Vr(e){return Ye({id:"Cart",initial:e?"idle":"uninitialized",context:{cart:e&&Oe(e)},states:{uninitialized:{on:ue},cartCompleted:{on:ue},initializationError:{on:ue},idle:{on:{...ue,...ot}},error:{on:{...ue,...ot}},cartFetching:Y("cartFetchAction",{errorTarget:"initializationError"}),cartCreating:Y("cartCreateAction",{errorTarget:"initializationError"}),cartLineRemoving:Y("cartLineRemoveAction"),cartLineUpdating:Y("cartLineUpdateAction"),cartLineAdding:Y("cartLineAddAction"),noteUpdating:Y("noteUpdateAction"),buyerIdentityUpdating:Y("buyerIdentityUpdateAction"),cartAttributesUpdating:Y("cartAttributesUpdateAction"),discountCodesUpdating:Y("discountCodesUpdateAction")}})}function Mr({numCartLines:e,onCartActionEntry:t,onCartActionOptimisticUI:r,onCartActionComplete:n,data:a,cartFragment:i,countryCode:s,languageCode:o}){const{cartFetch:l,cartCreate:f,cartLineAdd:h,cartLineUpdate:d,cartLineRemove:y,noteUpdate:m,buyerIdentityUpdate:u,cartAttributesUpdate:S,discountCodesUpdate:T}=Nr({numCartLines:e,cartFragment:i,countryCode:s,languageCode:o}),P=c.useMemo(()=>Vr(a),[a]),[w,I,D]=fr(P,{actions:{cartFetchAction:async(g,p)=>{var A;if(p.type!=="CART_FETCH")return;const{data:_,errors:R}=await l((A=p==null?void 0:p.payload)==null?void 0:A.cartId),v=W(p,_==null?void 0:_.cart,R);I(v)},cartCreateAction:async(g,p)=>{var A;if(p.type!=="CART_CREATE")return;const{data:_,errors:R}=await f(p==null?void 0:p.payload),v=W(p,(A=_==null?void 0:_.cartCreate)==null?void 0:A.cart,R);I(v)},cartLineAddAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_ADD"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await h(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesAdd)==null?void 0:b.cart,R);I(v)},cartLineUpdateAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await d(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesUpdate)==null?void 0:b.cart,R);I(v)},cartLineRemoveAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_REMOVE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await y(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesRemove)==null?void 0:b.cart,R);I(v)},noteUpdateAction:async(g,p)=>{var A,b;if(p.type!=="NOTE_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await m(g.cart.id,p.payload.note),v=W(p,(b=_==null?void 0:_.cartNoteUpdate)==null?void 0:b.cart,R);I(v)},buyerIdentityUpdateAction:async(g,p)=>{var A,b;if(p.type!=="BUYER_IDENTITY_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await u(g.cart.id,p.payload.buyerIdentity),v=W(p,(b=_==null?void 0:_.cartBuyerIdentityUpdate)==null?void 0:b.cart,R);I(v)},cartAttributesUpdateAction:async(g,p)=>{var A,b;if(p.type!=="CART_ATTRIBUTES_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await S(g.cart.id,p.payload.attributes),v=W(p,(b=_==null?void 0:_.cartAttributesUpdate)==null?void 0:b.cart,R);I(v)},discountCodesUpdateAction:async(g,p)=>{var A,b;if(p.type!=="DISCOUNT_CODES_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await T(g.cart.id,p.payload.discountCodes),v=W(p,(b=_==null?void 0:_.cartDiscountCodesUpdate)==null?void 0:b.cart,R);I(v)},...t&&{onCartActionEntry:(g,p)=>{Lr(p)&&t(g,p)}},...r&&{onCartActionOptimisticUI:re((g,p)=>r(g,p))},...n&&{onCartActionComplete:(g,p)=>{xr(p)&&n(g,p)}}}});return c.useMemo(()=>[w,I,D],[w,I,D])}function Oe(e){return{...e,lines:J(e==null?void 0:e.lines),note:e.note??void 0}}function W(e,t,r){return r?{type:"ERROR",payload:{errors:r,cartActionEvent:e}}:t?{type:"RESOLVE",payload:{cart:Oe(t),rawCartResult:t,cartActionEvent:e}}:{type:"CART_COMPLETED",payload:{cartActionEvent:e}}}function Lr(e){return e.type==="CART_CREATE"||e.type==="CARTLINE_ADD"||e.type==="CARTLINE_UPDATE"||e.type==="CARTLINE_REMOVE"||e.type==="NOTE_UPDATE"||e.type==="BUYER_IDENTITY_UPDATE"||e.type==="CART_ATTRIBUTES_UPDATE"||e.type==="DISCOUNT_CODES_UPDATE"}function xr(e){return e.type==="RESOLVE"||e.type==="ERROR"||e.type==="CART_COMPLETED"}const it=c.createContext(null);function oe(){const e=c.useContext(it);if(!e)throw new Error("Expected a Cart Context, but no Cart Context was found");return e}function Fr({children:e,numCartLines:t,onCreate:r,onLineAdd:n,onLineRemove:a,onLineUpdate:i,onNoteUpdate:s,onBuyerIdentityUpdate:o,onAttributesUpdate:l,onDiscountCodesUpdate:f,onCreateComplete:h,onLineAddComplete:d,onLineRemoveComplete:y,onLineUpdateComplete:m,onNoteUpdateComplete:u,onBuyerIdentityUpdateComplete:S,onAttributesUpdateComplete:T,onDiscountCodesUpdateComplete:P,data:w,cartFragment:I=Ir,customerAccessToken:D,countryCode:g,languageCode:p}){var kt,Nt,Vt,Mt,Lt,xt,Ft;const _=ce();if(!_)throw new Error("<CartProvider> needs to be a descendant of <ShopifyProvider>");g=(g??_.countryIsoCode??"US").toUpperCase(),p=(p??_.languageIsoCode??"EN").toUpperCase(),g&&(g=g.toUpperCase());const[R,v]=c.useState(g),[A,b]=c.useState(D),H=c.useRef(!1);(R!==g||A!==D)&&(v(g),b(D),H.current=!1);const[O,j]=Mr({numCartLines:t,data:w,cartFragment:I,countryCode:g,languageCode:p,onCartActionEntry(C,V){try{switch(V.type){case"CART_CREATE":return r==null?void 0:r();case"CARTLINE_ADD":return n==null?void 0:n();case"CARTLINE_REMOVE":return a==null?void 0:a();case"CARTLINE_UPDATE":return i==null?void 0:i();case"NOTE_UPDATE":return s==null?void 0:s();case"BUYER_IDENTITY_UPDATE":return o==null?void 0:o();case"CART_ATTRIBUTES_UPDATE":return l==null?void 0:l();case"DISCOUNT_CODES_UPDATE":return f==null?void 0:f()}}catch(L){console.error("Cart entry action failed",L)}},onCartActionOptimisticUI(C,V){var L,Q,M,pe;if(!C.cart)return{...C};switch(V.type){case"CARTLINE_REMOVE":return{...C,cart:{...C.cart,lines:(Q=(L=C==null?void 0:C.cart)==null?void 0:L.lines)==null?void 0:Q.filter(x=>(x==null?void 0:x.id)&&!V.payload.lines.includes(x==null?void 0:x.id))}};case"CARTLINE_UPDATE":return{...C,cart:{...C.cart,lines:(pe=(M=C==null?void 0:C.cart)==null?void 0:M.lines)==null?void 0:pe.map(x=>{const xe=V.payload.lines.find(({id:$n})=>$n===(x==null?void 0:x.id));return xe&&xe.quantity?{...x,quantity:xe.quantity}:x})}}}return{...C}},onCartActionComplete(C,V){const L=V.payload.cartActionEvent;try{switch(V.type){case"RESOLVE":switch(L.type){case"CART_CREATE":return h==null?void 0:h();case"CARTLINE_ADD":return d==null?void 0:d();case"CARTLINE_REMOVE":return y==null?void 0:y();case"CARTLINE_UPDATE":return m==null?void 0:m();case"NOTE_UPDATE":return u==null?void 0:u();case"BUYER_IDENTITY_UPDATE":return Hr(C,L)&&(H.current=!0),S==null?void 0:S();case"CART_ATTRIBUTES_UPDATE":return T==null?void 0:T();case"DISCOUNT_CODES_UPDATE":return P==null?void 0:P()}}}catch(Q){console.error("onCartActionComplete failed",Q)}}}),z=c.useRef(!1),[ge,k]=c.useState(!1),se=O.matches("cartCompleted"),he=(O.value==="idle"||O.value==="error"||O.value==="cartCompleted")&&g!==((Vt=(Nt=(kt=O==null?void 0:O.context)==null?void 0:kt.cart)==null?void 0:Nt.buyerIdentity)==null?void 0:Vt.countryCode)&&!O.context.errors,me=c.useRef(!1);c.useEffect(()=>{if(!z.current&&!me.current){if(!w&&Ue("localStorage")){me.current=!0;try{const C=window.localStorage.getItem(De);C&&j({type:"CART_FETCH",payload:{cartId:C}})}catch(C){console.warn("error fetching cartId"),console.warn(C)}}z.current=!0,k(!0)}},[w,z,j]),c.useEffect(()=>{!he||H.current||j({type:"BUYER_IDENTITY_UPDATE",payload:{buyerIdentity:{countryCode:g,customerAccessToken:D}}})},[g,D,he,H,j]);const B=c.useCallback(C=>{if(!z.current)return console.warn("Cart isn't ready yet");j(C)},[j]);c.useEffect(()=>{var C,V,L;if((V=(C=O==null?void 0:O.context)==null?void 0:C.cart)!=null&&V.id&&Ue("localStorage"))try{window.localStorage.setItem(De,(L=O.context.cart)==null?void 0:L.id)}catch(Q){console.warn("Failed to save cartId to localStorage",Q)}},[(Lt=(Mt=O==null?void 0:O.context)==null?void 0:Mt.cart)==null?void 0:Lt.id]),c.useEffect(()=>{if(se&&Ue("localStorage"))try{window.localStorage.removeItem(De)}catch(C){console.warn("Failed to delete cartId from localStorage",C)}},[se]);const Le=c.useCallback(C=>{var V,L;g&&!((V=C.buyerIdentity)!=null&&V.countryCode)&&(C.buyerIdentity==null&&(C.buyerIdentity={}),C.buyerIdentity.countryCode=g),D&&!((L=C.buyerIdentity)!=null&&L.customerAccessToken)&&(C.buyerIdentity==null&&(C.buyerIdentity={}),C.buyerIdentity.customerAccessToken=D),B({type:"CART_CREATE",payload:C})},[g,D,B]),U=qr(O),Fn=c.useMemo(()=>{var C,V,L,Q;return{...((C=U==null?void 0:U.context)==null?void 0:C.cart)??{lines:[],attributes:[]},status:$r(U.value),error:(V=U==null?void 0:U.context)==null?void 0:V.errors,totalQuantity:((Q=(L=U==null?void 0:U.context)==null?void 0:L.cart)==null?void 0:Q.totalQuantity)??0,cartCreate:Le,cartReady:ge,linesAdd(M){var pe,x;(x=(pe=U==null?void 0:U.context)==null?void 0:pe.cart)!=null&&x.id?B({type:"CARTLINE_ADD",payload:{lines:M}}):Le({lines:M})},linesRemove(M){B({type:"CARTLINE_REMOVE",payload:{lines:M}})},linesUpdate(M){B({type:"CARTLINE_UPDATE",payload:{lines:M}})},noteUpdate(M){B({type:"NOTE_UPDATE",payload:{note:M}})},buyerIdentityUpdate(M){B({type:"BUYER_IDENTITY_UPDATE",payload:{buyerIdentity:M}})},cartAttributesUpdate(M){B({type:"CART_ATTRIBUTES_UPDATE",payload:{attributes:M}})},discountCodesUpdate(M){B({type:"DISCOUNT_CODES_UPDATE",payload:{discountCodes:M}})},cartFragment:I}},[Le,ge,(xt=U==null?void 0:U.context)==null?void 0:xt.cart,(Ft=U==null?void 0:U.context)==null?void 0:Ft.errors,U.value,I,B]);return React.createElement(it.Provider,{value:Fn},e)}function $r(e){switch(e){case"uninitialized":case"initializationError":return"uninitialized";case"idle":case"cartCompleted":case"error":return"idle";case"cartFetching":return"fetching";case"cartCreating":return"creating";case"cartLineAdding":case"cartLineRemoving":case"cartLineUpdating":case"noteUpdating":case"buyerIdentityUpdating":case"cartAttributesUpdating":case"discountCodesUpdating":return"updating"}}function qr(e){const[t,r]=c.useTransition(),[n,a]=c.useState(e),i=c.useRef(!1);t&&(i.current=!0);const s=c.useRef(!1);return!t&&i.current&&(s.current=!0),c.useEffect(()=>{r(()=>{s.current||a(e)})},[e]),s.current?e:n}function Ue(e){let t;try{t=window[e];const r="__storage_test__";return t.setItem(r,r),t.removeItem(r),!0}catch(r){return!!(r instanceof DOMException&&(r.code===22||r.code===1014||r.name==="QuotaExceededError"||r.name==="NS_ERROR_DOM_QUOTA_REACHED")&&t&&t.length!==0)}}function Hr(e,t){var r,n;return!!(t.payload.buyerIdentity.countryCode&&((n=(r=e.cart)==null?void 0:r.buyerIdentity)==null?void 0:n.countryCode)!==t.payload.buyerIdentity.countryCode)}const st=c.createContext(null);function jr({children:e,data:t,initialVariantId:r}){const n=c.useMemo(()=>J(t.variants??{}),[t.variants]);if(!Yr(n))throw new Error("<ProductProvider/> requires 'product.variants.nodes' or 'product.variants.edges'");const a=c.useMemo(()=>Br(n),[n]),[i,s]=c.useState(()=>lt(r,n)),[o,l]=c.useState(()=>dt(i));c.useEffect(()=>{const T=lt(r,n);s(T),l(dt(T))},[r,n]);const f=c.useCallback((T,P)=>{l(w=>{const I={...w,[T]:P};return s(ut(n,I)),I})},[l,n]),h=c.useCallback((T,P)=>{const w=ut(n,{...o,[T]:P});return(w==null?void 0:w.availableForSale)??!0},[o,n]),d=c.useMemo(()=>J(t.sellingPlanGroups??{}).map(T=>({...T,sellingPlans:J((T==null?void 0:T.sellingPlans)??{})})),[t.sellingPlanGroups]),[y,m]=c.useState(void 0),u=c.useMemo(()=>{var T,P;if(!(!i||!y)){if(!((T=i.sellingPlanAllocations)!=null&&T.nodes)&&!((P=i.sellingPlanAllocations)!=null&&P.edges))throw new Error("<ProductProvider/>: You must include 'sellingPlanAllocations.nodes' or 'sellingPlanAllocations.edges' in your variants in order to calculate selectedSellingPlanAllocation");return J(i.sellingPlanAllocations).find(w=>{var I;return((I=w==null?void 0:w.sellingPlan)==null?void 0:I.id)===y.id})}},[i,y]),S=c.useMemo(()=>({product:t,variants:n,variantsConnection:t.variants,options:a,selectedVariant:i,setSelectedVariant:s,selectedOptions:o,setSelectedOption:f,setSelectedOptions:l,isOptionInStock:h,selectedSellingPlan:y,setSelectedSellingPlan:m,selectedSellingPlanAllocation:u,sellingPlanGroups:d,sellingPlanGroupsConnection:t.sellingPlanGroups}),[t,h,a,o,y,u,i,d,f,n]);return React.createElement(st.Provider,{value:S},e)}function ct(){const e=c.useContext(st);if(!e)throw new Error("'useProduct' must be a child of <ProductProvider />");return e}function ut(e,t){var r,n;if(!(!e.length||((n=(r=e==null?void 0:e[0])==null?void 0:r.selectedOptions)==null?void 0:n.length)!==Object.keys(t).length))return e==null?void 0:e.find(a=>Object.entries(t).every(([i,s])=>{var o;return(o=a==null?void 0:a.selectedOptions)==null?void 0:o.some(l=>(l==null?void 0:l.name)===i&&(l==null?void 0:l.value)===s)}))}function Br(e){const t=e.reduce((r,n)=>{var a;if(!n.selectedOptions)throw new Error("'getOptions' requires 'variant.selectedOptions'");return(a=n==null?void 0:n.selectedOptions)==null||a.forEach(i=>{r[(i==null?void 0:i.name)??""]=r[(i==null?void 0:i.name)??""]||new Set,r[(i==null?void 0:i.name)??""].add((i==null?void 0:i.value)??"")}),r},{});return Object.keys(t).map(r=>({name:r,values:Array.from(t[r])}))}function lt(e,t){if(e){const r=t.find(n=>(n==null?void 0:n.id)===e);return r||console.warn("<ProductProvider/> received a 'initialVariantId' prop, but could not actually find a variant with that ID"),r}if(e===null)return null;if(e===void 0)return t.find(r=>r==null?void 0:r.availableForSale)||t[0]}function dt(e){return e!=null&&e.selectedOptions?e.selectedOptions.reduce((t,r)=>(t[(r==null?void 0:r.name)??""]=(r==null?void 0:r.value)??"",t),{}):{}}function Yr(e){return!(!e||!Array.isArray(e))}function Te(e){const{as:t,onClick:r,defaultOnClick:n,children:a,buttonRef:i,...s}=e,o=c.useCallback(f=>{if(r){const h=r(f);if(typeof h=="boolean"&&h===!1||f!=null&&f.defaultPrevented)return}n==null||n(f)},[n,r]),l=t||"button";return React.createElement(l,{ref:i,onClick:o,...s},a)}function Wr(e){const[t,r]=c.useState(!1),{variantId:n,quantity:a=1,attributes:i,sellingPlanId:s,onClick:o,children:l,accessibleAddingToCartLabel:f,...h}=e,{status:d,linesAdd:y}=oe(),{selectedVariant:m}=ct(),u=n??(m==null?void 0:m.id)??"",S=n===null||u===""||m===null||t||h.disabled;c.useEffect(()=>{t&&d==="idle"&&r(!1)},[d,t]);const T=c.useCallback(()=>{r(!0),y([{quantity:a,merchandiseId:u||"",attributes:i,sellingPlanId:s}])},[y,a,u,i,s]);return N.createElement(N.Fragment,null,N.createElement(Te,{...h,disabled:S,onClick:o,defaultOnClick:T},l),f?N.createElement("p",{style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"},role:"alert","aria-live":"assertive"},t?f:null):null)}const te={PAGE_VIEW:"PAGE_VIEW",ADD_TO_CART:"ADD_TO_CART",PAGE_VIEW_2:"PAGE_VIEW_2",COLLECTION_VIEW:"COLLECTION_VIEW",PRODUCT_VIEW:"PRODUCT_VIEW",SEARCH_VIEW:"SEARCH_VIEW"},Ae={article:"article",blog:"blog",captcha:"captcha",cart:"cart",collection:"collection",customersAccount:"customers/account",customersActivateAccount:"customers/activate_account",customersAddresses:"customers/addresses",customersLogin:"customers/login",customersOrder:"customers/order",customersRegister:"customers/register",customersResetPassword:"customers/reset_password",giftCard:"gift_card",home:"index",listCollections:"list-collections",forbidden:"403",notFound:"404",page:"page",password:"password",product:"product",policy:"policy",search:"search"},ft={hydrogen:"hydrogen",headless:"headless"},yt={hydrogen:"6167201",headless:"12875497473"};function q(e,t){return{schema_id:e,payload:t,metadata:{event_created_at_ms:Date.now()}}}function F(e){const t={id:"",resource:null,resourceId:null,search:"",searchParams:new URLSearchParams,hash:""};if(typeof e!="string")return t;try{const{search:r,searchParams:n,pathname:a,hash:i}=new URL(e),s=a.split("/"),o=s[s.length-1],l=s[s.length-2];return!o||!l?t:{id:`${o}${r}${i}`||"",resource:l??null,resourceId:o||null,search:r,searchParams:n,hash:i}}catch{return t}}function $(e,t){return typeof e!="object"?{}:(Object.entries(e).forEach(([r,n])=>{n&&(t[r]=n)}),t)}function Gr(e){return typeof document>"u"?(console.error(`${e} should only be used within the useEffect callback or event handlers`),!0):!1}const Zr="trekkie_storefront_page_view/1.4",Qr="myshopify.dev";function gt(e){const t=e,{id:r,resource:n}=F(t.resourceId),a=n?n.toLowerCase():void 0;return[q(Zr,$({pageType:t.pageType,customerId:parseInt(F(t.customerId).id||"0"),resourceType:a,resourceId:parseInt(r)},Jr(t)))]}function Jr(e){return{appClientId:e.shopifySalesChannel?yt[e.shopifySalesChannel]:yt.headless,isMerchantRequest:Kr(e.url),hydrogenSubchannelId:e.storefrontId||"0",isPersistentCookie:e.hasUserConsent,uniqToken:e.uniqueToken,visitToken:e.visitToken,microSessionId:Ce(),microSessionCount:1,url:e.url,path:e.path,search:e.search,referrer:e.referrer,title:e.title,shopId:parseInt(F(e.shopId).id),currency:e.currency,contentLanguage:e.acceptedLanguage||"en"}}function Kr(e){if(typeof e!="string")return!1;const t=new URL(e).hostname;return t.indexOf(Qr)!==-1||t==="localhost"}const G="custom_storefront_customer_tracking/1.0",ht="page_rendered",mt="collection_page_rendered",pt="product_page_rendered",Xr="product_added_to_cart",Et="search_submitted";function le(e){return{canonical_url:e.canonicalUrl||e.url,customer_id:parseInt(F(e.customerId).id||"0")}}function zr(e){const t=e,r=le(t),n=t.pageType,a=[];switch(a.push(q(G,$({event_name:ht,...r},Z(t)))),n){case Ae.collection:a.push(q(G,$({event_name:mt,...r,collection_name:t.collectionHandle},Z(t))));break;case Ae.product:a.push(q(G,$({event_name:pt,...r,products:ke(t.products),total_value:t.totalValue},Z(t))));break;case Ae.search:a.push(q(G,$({event_name:Et,...r,search_string:t.searchString},Z(t))));break}return a}function en(e){const t=e,r=le(t);return[q(G,$({event_name:ht,...r},Z(t)))]}function tn(e){const t=e,r=le(t);return[q(G,$({event_name:mt,...r,collection_name:t.collectionHandle},Z(t)))]}function rn(e){const t=e,r=le(t);return[q(G,$({event_name:pt,...r,products:ke(t.products),total_value:t.totalValue},Z(t)))]}function nn(e){const t=e,r=le(t);return[q(G,$({event_name:Et,...r,search_string:t.searchString},Z(t)))]}function an(e){const t=e,r=F(t.cartId),n=r!=null&&r.id?`${r.id}`:null;return[q(G,$({event_name:Xr,customerId:t.customerId,cart_token:n,total_value:t.totalValue,products:ke(t.products),customer_id:parseInt(F(t.customerId).id||"0")},Z(t)))]}function Z(e){return{source:e.shopifySalesChannel||ft.headless,hydrogenSubchannelId:e.storefrontId||"0",is_persistent_cookie:e.hasUserConsent,ccpa_enforced:!1,gdpr_enforced:!1,unique_token:e.uniqueToken,event_time:Date.now(),event_id:Ce(),event_source_url:e.url,referrer:e.referrer,user_agent:e.userAgent,navigation_type:e.navigationType,navigation_api:e.navigationApi,shop_id:parseInt(F(e.shopId).id),currency:e.currency}}function ke(e){return e?e.map(t=>{const r=$({variant_gid:t.variantGid,category:t.category,sku:t.sku,product_id:parseInt(F(t.productGid).id),variant_id:parseInt(F(t.variantGid).id)},{product_gid:t.productGid,name:t.name,variant:t.variantName||"",brand:t.brand,price:parseFloat(t.price),quantity:Number(t.quantity||0)});return JSON.stringify(r)}):[]}function on(e,t){const{eventName:r,payload:n}=e;if(!n.hasUserConsent)return Promise.resolve();let a=[];const i=n;return r===te.PAGE_VIEW?a=a.concat(gt(i),zr(i)):r===te.ADD_TO_CART?a=a.concat(an(n)):r===te.PAGE_VIEW_2?a=a.concat(gt(i),en(i)):r===te.COLLECTION_VIEW?a=a.concat(tn(i)):r===te.PRODUCT_VIEW?a=a.concat(rn(i)):r===te.SEARCH_VIEW&&(a=a.concat(nn(i))),a.length?sn(a,t):Promise.resolve()}const _t="sendShopifyAnalytics request is unsuccessful";function sn(e,t){const r={events:e,metadata:{event_sent_at_ms:Date.now()}};try{return fetch(t?`https://${t}/.well-known/shopify/monorail/unstable/produce_batch`:"https://monorail-edge.shopifysvc.com/unstable/produce_batch",{method:"post",headers:{"content-type":"text/plain"},body:JSON.stringify(r)}).then(n=>{if(!n.ok)throw new Error("Response failed");return n.text()}).then(n=>{n&&JSON.parse(n).result.forEach(i=>{i.status!==200&&console.error(_t,`
|
|
271
|
+
`,ae="2024-04",vr="mock.shop",Re=e=>e.includes(vr);function Pr({storeDomain:e,privateStorefrontToken:t,publicStorefrontToken:r,storefrontApiVersion:n=ae,contentType:a}){if(!e)throw new Error(De+"`storeDomain` is required when creating a new Storefront client in production.");n!==ae&&Rr(`The Storefront API version that you're using is different than the version this build of Hydrogen React is targeting.
|
|
272
|
+
You may run into unexpected errors if these versions don't match. Received version: "${n}"; expected version "${ae}"`);const i=s=>{const o=(s==null?void 0:s.storeDomain)??e;return o.includes("://")?o:`https://${o}`};return{getShopifyDomain:i,getStorefrontApiUrl(s){const o=i(s),u=o+(o.endsWith("/")?"api":"/api");return Re(o)?u:`${u}/${(s==null?void 0:s.storefrontApiVersion)??n}/graphql.json`},getPrivateTokenHeaders(s){if(!t&&!(s!=null&&s.privateStorefrontToken)&&!Re(e))throw new Error(De+"You did not pass in a `privateStorefrontToken` while using `createStorefrontClient()` or `getPrivateTokenHeaders()`");return{"content-type":((s==null?void 0:s.contentType)??a)==="graphql"?"application/graphql":"application/json","X-SDK-Variant":"hydrogen-react","X-SDK-Variant-Source":"react","X-SDK-Version":n,"Shopify-Storefront-Private-Token":(s==null?void 0:s.privateStorefrontToken)??t??"",...s!=null&&s.buyerIp?{"Shopify-Storefront-Buyer-IP":s.buyerIp}:{}}},getPublicTokenHeaders(s){if(!r&&!(s!=null&&s.publicStorefrontToken)&&!Re(e))throw new Error(De+"You did not pass in a `publicStorefrontToken` while using `createStorefrontClient()` or `getPublicTokenHeaders()`");const o=(s==null?void 0:s.contentType)??a??"json";return Xe(o,n,(s==null?void 0:s.publicStorefrontToken)??r??"")}}}function Xe(e,t,r){return{"content-type":e==="graphql"?"application/graphql":"application/json","X-SDK-Variant":"hydrogen-react","X-SDK-Variant-Source":"react","X-SDK-Version":t,"X-Shopify-Storefront-Access-Token":r}}const ze=new Set,De="[h2:error:createStorefrontClient] ",Rr=(e,t="warn")=>{ze.has(e)||(console[t](`[h2:${t}:createStorefrontClient] `+e),ze.add(e))},et={storeDomain:"test",storefrontToken:"abc123",storefrontApiVersion:ae,countryIsoCode:"US",languageIsoCode:"EN",getStorefrontApiUrl(){return""},getPublicTokenHeaders(){return{}},getShopifyDomain(){return""}},tt=c.createContext(et);function Dr({children:e,...t}){if(!t.countryIsoCode||!t.languageIsoCode||!t.storeDomain||!t.storefrontToken||!t.storefrontApiVersion)throw new Error("Please provide the necessary props to '<ShopifyProvider/>'");t.storefrontApiVersion!==ae&&console.warn(`<ShopifyProvider/>: This version of Hydrogen React is built for Shopify's Storefront API version ${ae}, but it looks like you're using version ${t.storefrontApiVersion}. There may be issues or bugs if you use a mismatched version of Hydrogen React and the Storefront API.`);const r=c.useMemo(()=>{function n(a){const i=(a==null?void 0:a.storeDomain)??t.storeDomain;return i.includes("://")?i:`https://${i}`}return{...t,getPublicTokenHeaders(a){return Xe(a.contentType,t.storefrontApiVersion,a.storefrontToken??t.storefrontToken)},getShopifyDomain:n,getStorefrontApiUrl(a){const i=n({storeDomain:(a==null?void 0:a.storeDomain)??t.storeDomain});return`${i}${i.endsWith("/")?"":"/"}api/${(a==null?void 0:a.storefrontApiVersion)??t.storefrontApiVersion}/graphql.json`}}},[t]);return React.createElement(tt.Provider,{value:r},e)}function ce(){const e=c.useContext(tt);if(!e)throw new Error("'useShop()' must be a descendent of <ShopifyProvider/>");return e}const ke="shopifyCartId",rt="Shopify-Storefront-Id",nt="Shopify-Storefront-Y",at="Shopify-Storefront-S",K="_shopify_y",X="_shopify_s";var kr=new Set(["domain","path","max-age","expires","samesite","secure","httponly"]);function Or(e){let t={},r,n,a=0,i=e.split(/;\s*/g),s,o;for(;a<i.length;a++)if(n=i[a],r=n.indexOf("="),~r){if(s=n.substring(0,r++).trim(),o=n.substring(r).trim(),o[0]==='"'&&(o=o.substring(1,o.length-1)),~o.indexOf("%"))try{o=decodeURIComponent(o)}catch{}kr.has(n=s.toLowerCase())?n==="expires"?t.expires=new Date(o):n==="max-age"?t.maxage=+o:t[n]=o:t[s]=o}else(s=n.trim().toLowerCase())&&(s==="httponly"||s==="secure")&&(t[s]=!0);return t}function Ur(e,t,r={}){let n=e+"="+encodeURIComponent(t);return r.expires&&(n+="; Expires="+new Date(r.expires).toUTCString()),r.maxage!=null&&r.maxage>=0&&(n+="; Max-Age="+(r.maxage|0)),r.domain&&(n+="; Domain="+r.domain),r.path&&(n+="; Path="+r.path),r.samesite&&(n+="; SameSite="+r.samesite),(r.secure||r.samesite==="None")&&(n+="; Secure"),r.httponly&&(n+="; HttpOnly"),n}const ot="xxxx-4xxx-xxxx-xxxxxxxxxxxx";function Se(){let e="";try{const t=window.crypto,r=new Uint16Array(31);t.getRandomValues(r);let n=0;e=ot.replace(/[x]/g,a=>{const i=r[n]%16,s=a==="x"?i:i&3|8;return n++,s.toString(16)}).toUpperCase()}catch{e=ot.replace(/[x]/g,r=>{const n=Math.random()*16|0;return(r==="x"?n:n&3|8).toString(16)}).toUpperCase()}return`${Nr()}-${e}`}function Nr(){let e=0,t=0;e=new Date().getTime()>>>0;try{t=performance.now()>>>0}catch{t=0}return Math.abs(e+t).toString(16).toLowerCase().padStart(8,"0")}function Te(e){const t=Or(e);return{[K]:t[K]||"",[X]:t[X]||""}}function Vr(){const{storefrontId:e,getPublicTokenHeaders:t,getStorefrontApiUrl:r}=ce();return c.useCallback(({query:n,variables:a})=>{const i=t({contentType:"json"});e&&(i[rt]=e);const s=Te(document.cookie);return i[nt]=s[K],i[at]=s[X],fetch(r(),{method:"POST",headers:i,body:JSON.stringify({query:n.toString(),variables:a})}).then(o=>o.json()).catch(o=>({data:void 0,errors:o==null?void 0:o.toString()}))},[t,e,r])}function Mr({numCartLines:e,cartFragment:t,countryCode:r="US",languageCode:n="EN"}){const a=Vr(),i=c.useCallback(l=>a({query:wr(t),variables:{id:l,numCartLines:e,country:r,language:n}}),[a,t,e,r,n]),s=c.useCallback(l=>a({query:Er(t),variables:{input:l,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),o=c.useCallback((l,S)=>a({query:pr(t),variables:{cartId:l,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),u=c.useCallback((l,S)=>a({query:Cr(t),variables:{cartId:l,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),f=c.useCallback((l,S)=>a({query:_r(t),variables:{cartId:l,lines:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),h=c.useCallback((l,S)=>a({query:Sr(t),variables:{cartId:l,note:S,numCartLines:e,country:r,language:n}}),[a,t,e,r,n]),d=c.useCallback((l,S)=>a({query:Tr(t),variables:{cartId:l,buyerIdentity:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),y=c.useCallback((l,S)=>a({query:Ar(t),variables:{cartId:l,attributes:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]),m=c.useCallback((l,S)=>a({query:Ir(t),variables:{cartId:l,discountCodes:S,numCartLines:e,country:r,language:n}}),[t,r,a,e,n]);return c.useMemo(()=>({cartFetch:i,cartCreate:s,cartLineAdd:o,cartLineUpdate:u,cartLineRemove:f,noteUpdate:h,buyerIdentityUpdate:d,cartAttributesUpdate:y,discountCodesUpdate:m,cartFragment:t}),[i,s,o,u,f,h,d,y,m,t])}function Y(e,t){return{entry:[...(t==null?void 0:t.entryActions)||[],re({lastValidCart:r=>r==null?void 0:r.cart}),"onCartActionEntry","onCartActionOptimisticUI",e],on:{RESOLVE:{target:(t==null?void 0:t.resolveTarget)||"idle",actions:[re({prevCart:r=>r==null?void 0:r.lastValidCart,cart:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.cart},rawCartResult:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.rawCartResult},errors:r=>{}})]},ERROR:{target:(t==null?void 0:t.errorTarget)||"error",actions:[re({prevCart:r=>r==null?void 0:r.lastValidCart,cart:r=>r==null?void 0:r.lastValidCart,errors:(r,n)=>{var a;return(a=n==null?void 0:n.payload)==null?void 0:a.errors}})]},CART_COMPLETED:{target:"cartCompleted",actions:re({prevCart:r=>{},cart:r=>{},lastValidCart:r=>{},rawCartResult:r=>{},errors:r=>{}})}},exit:["onCartActionComplete",...(t==null?void 0:t.exitActions)||[]]}}const ue={CART_FETCH:{target:"cartFetching"},CART_CREATE:{target:"cartCreating"},CART_SET:{target:"idle",actions:[re({rawCartResult:(e,t)=>t.payload.cart,cart:(e,t)=>Oe(t.payload.cart)})]}},it={CARTLINE_ADD:{target:"cartLineAdding"},CARTLINE_UPDATE:{target:"cartLineUpdating"},CARTLINE_REMOVE:{target:"cartLineRemoving"},NOTE_UPDATE:{target:"noteUpdating"},BUYER_IDENTITY_UPDATE:{target:"buyerIdentityUpdating"},CART_ATTRIBUTES_UPDATE:{target:"cartAttributesUpdating"},DISCOUNT_CODES_UPDATE:{target:"discountCodesUpdating"}};function Lr(e){return We({id:"Cart",initial:e?"idle":"uninitialized",context:{cart:e&&Oe(e)},states:{uninitialized:{on:ue},cartCompleted:{on:ue},initializationError:{on:ue},idle:{on:{...ue,...it}},error:{on:{...ue,...it}},cartFetching:Y("cartFetchAction",{errorTarget:"initializationError"}),cartCreating:Y("cartCreateAction",{errorTarget:"initializationError"}),cartLineRemoving:Y("cartLineRemoveAction"),cartLineUpdating:Y("cartLineUpdateAction"),cartLineAdding:Y("cartLineAddAction"),noteUpdating:Y("noteUpdateAction"),buyerIdentityUpdating:Y("buyerIdentityUpdateAction"),cartAttributesUpdating:Y("cartAttributesUpdateAction"),discountCodesUpdating:Y("discountCodesUpdateAction")}})}function xr({numCartLines:e,onCartActionEntry:t,onCartActionOptimisticUI:r,onCartActionComplete:n,data:a,cartFragment:i,countryCode:s,languageCode:o}){const{cartFetch:u,cartCreate:f,cartLineAdd:h,cartLineUpdate:d,cartLineRemove:y,noteUpdate:m,buyerIdentityUpdate:l,cartAttributesUpdate:S,discountCodesUpdate:T}=Mr({numCartLines:e,cartFragment:i,countryCode:s,languageCode:o}),P=c.useMemo(()=>Lr(a),[a]),[w,I,D]=gr(P,{actions:{cartFetchAction:async(g,p)=>{var A;if(p.type!=="CART_FETCH")return;const{data:_,errors:R}=await u((A=p==null?void 0:p.payload)==null?void 0:A.cartId),v=W(p,_==null?void 0:_.cart,R);I(v)},cartCreateAction:async(g,p)=>{var A;if(p.type!=="CART_CREATE")return;const{data:_,errors:R}=await f(p==null?void 0:p.payload),v=W(p,(A=_==null?void 0:_.cartCreate)==null?void 0:A.cart,R);I(v)},cartLineAddAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_ADD"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await h(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesAdd)==null?void 0:b.cart,R);I(v)},cartLineUpdateAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await d(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesUpdate)==null?void 0:b.cart,R);I(v)},cartLineRemoveAction:async(g,p)=>{var A,b;if(p.type!=="CARTLINE_REMOVE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await y(g.cart.id,p.payload.lines),v=W(p,(b=_==null?void 0:_.cartLinesRemove)==null?void 0:b.cart,R);I(v)},noteUpdateAction:async(g,p)=>{var A,b;if(p.type!=="NOTE_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await m(g.cart.id,p.payload.note),v=W(p,(b=_==null?void 0:_.cartNoteUpdate)==null?void 0:b.cart,R);I(v)},buyerIdentityUpdateAction:async(g,p)=>{var A,b;if(p.type!=="BUYER_IDENTITY_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await l(g.cart.id,p.payload.buyerIdentity),v=W(p,(b=_==null?void 0:_.cartBuyerIdentityUpdate)==null?void 0:b.cart,R);I(v)},cartAttributesUpdateAction:async(g,p)=>{var A,b;if(p.type!=="CART_ATTRIBUTES_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await S(g.cart.id,p.payload.attributes),v=W(p,(b=_==null?void 0:_.cartAttributesUpdate)==null?void 0:b.cart,R);I(v)},discountCodesUpdateAction:async(g,p)=>{var A,b;if(p.type!=="DISCOUNT_CODES_UPDATE"||!((A=g==null?void 0:g.cart)!=null&&A.id))return;const{data:_,errors:R}=await T(g.cart.id,p.payload.discountCodes),v=W(p,(b=_==null?void 0:_.cartDiscountCodesUpdate)==null?void 0:b.cart,R);I(v)},...t&&{onCartActionEntry:(g,p)=>{Fr(p)&&t(g,p)}},...r&&{onCartActionOptimisticUI:re((g,p)=>r(g,p))},...n&&{onCartActionComplete:(g,p)=>{$r(p)&&n(g,p)}}}});return c.useMemo(()=>[w,I,D],[w,I,D])}function Oe(e){return{...e,lines:J(e==null?void 0:e.lines),note:e.note??void 0}}function W(e,t,r){return r?{type:"ERROR",payload:{errors:r,cartActionEvent:e}}:t?{type:"RESOLVE",payload:{cart:Oe(t),rawCartResult:t,cartActionEvent:e}}:{type:"CART_COMPLETED",payload:{cartActionEvent:e}}}function Fr(e){return e.type==="CART_CREATE"||e.type==="CARTLINE_ADD"||e.type==="CARTLINE_UPDATE"||e.type==="CARTLINE_REMOVE"||e.type==="NOTE_UPDATE"||e.type==="BUYER_IDENTITY_UPDATE"||e.type==="CART_ATTRIBUTES_UPDATE"||e.type==="DISCOUNT_CODES_UPDATE"}function $r(e){return e.type==="RESOLVE"||e.type==="ERROR"||e.type==="CART_COMPLETED"}const st=c.createContext(null);function oe(){const e=c.useContext(st);if(!e)throw new Error("Expected a Cart Context, but no Cart Context was found");return e}function qr({children:e,numCartLines:t,onCreate:r,onLineAdd:n,onLineRemove:a,onLineUpdate:i,onNoteUpdate:s,onBuyerIdentityUpdate:o,onAttributesUpdate:u,onDiscountCodesUpdate:f,onCreateComplete:h,onLineAddComplete:d,onLineRemoveComplete:y,onLineUpdateComplete:m,onNoteUpdateComplete:l,onBuyerIdentityUpdateComplete:S,onAttributesUpdateComplete:T,onDiscountCodesUpdateComplete:P,data:w,cartFragment:I=br,customerAccessToken:D,countryCode:g,languageCode:p}){var Vt,Mt,Lt,xt,Ft,$t,qt;const _=ce();if(!_)throw new Error("<CartProvider> needs to be a descendant of <ShopifyProvider>");g=(g??_.countryIsoCode??"US").toUpperCase(),p=(p??_.languageIsoCode??"EN").toUpperCase(),g&&(g=g.toUpperCase());const[R,v]=c.useState(g),[A,b]=c.useState(D),H=c.useRef(!1);(R!==g||A!==D)&&(v(g),b(D),H.current=!1);const[k,j]=xr({numCartLines:t,data:w,cartFragment:I,countryCode:g,languageCode:p,onCartActionEntry(C,V){try{switch(V.type){case"CART_CREATE":return r==null?void 0:r();case"CARTLINE_ADD":return n==null?void 0:n();case"CARTLINE_REMOVE":return a==null?void 0:a();case"CARTLINE_UPDATE":return i==null?void 0:i();case"NOTE_UPDATE":return s==null?void 0:s();case"BUYER_IDENTITY_UPDATE":return o==null?void 0:o();case"CART_ATTRIBUTES_UPDATE":return u==null?void 0:u();case"DISCOUNT_CODES_UPDATE":return f==null?void 0:f()}}catch(L){console.error("Cart entry action failed",L)}},onCartActionOptimisticUI(C,V){var L,Q,M,Ee;if(!C.cart)return{...C};switch(V.type){case"CARTLINE_REMOVE":return{...C,cart:{...C.cart,lines:(Q=(L=C==null?void 0:C.cart)==null?void 0:L.lines)==null?void 0:Q.filter(x=>(x==null?void 0:x.id)&&!V.payload.lines.includes(x==null?void 0:x.id))}};case"CARTLINE_UPDATE":return{...C,cart:{...C.cart,lines:(Ee=(M=C==null?void 0:C.cart)==null?void 0:M.lines)==null?void 0:Ee.map(x=>{const Fe=V.payload.lines.find(({id:Kn})=>Kn===(x==null?void 0:x.id));return Fe&&Fe.quantity?{...x,quantity:Fe.quantity}:x})}}}return{...C}},onCartActionComplete(C,V){const L=V.payload.cartActionEvent;try{switch(V.type){case"RESOLVE":switch(L.type){case"CART_CREATE":return h==null?void 0:h();case"CARTLINE_ADD":return d==null?void 0:d();case"CARTLINE_REMOVE":return y==null?void 0:y();case"CARTLINE_UPDATE":return m==null?void 0:m();case"NOTE_UPDATE":return l==null?void 0:l();case"BUYER_IDENTITY_UPDATE":return Br(C,L)&&(H.current=!0),S==null?void 0:S();case"CART_ATTRIBUTES_UPDATE":return T==null?void 0:T();case"DISCOUNT_CODES_UPDATE":return P==null?void 0:P()}}}catch(Q){console.error("onCartActionComplete failed",Q)}}}),z=c.useRef(!1),[he,U]=c.useState(!1),se=k.matches("cartCompleted"),me=(k.value==="idle"||k.value==="error"||k.value==="cartCompleted")&&g!==((Lt=(Mt=(Vt=k==null?void 0:k.context)==null?void 0:Vt.cart)==null?void 0:Mt.buyerIdentity)==null?void 0:Lt.countryCode)&&!k.context.errors,pe=c.useRef(!1);c.useEffect(()=>{if(!z.current&&!pe.current){if(!w&&Ue("localStorage")){pe.current=!0;try{const C=window.localStorage.getItem(ke);C&&j({type:"CART_FETCH",payload:{cartId:C}})}catch(C){console.warn("error fetching cartId"),console.warn(C)}}z.current=!0,U(!0)}},[w,z,j]),c.useEffect(()=>{!me||H.current||j({type:"BUYER_IDENTITY_UPDATE",payload:{buyerIdentity:{countryCode:g,customerAccessToken:D}}})},[g,D,me,H,j]);const B=c.useCallback(C=>{if(!z.current)return console.warn("Cart isn't ready yet");j(C)},[j]);c.useEffect(()=>{var C,V,L;if((V=(C=k==null?void 0:k.context)==null?void 0:C.cart)!=null&&V.id&&Ue("localStorage"))try{window.localStorage.setItem(ke,(L=k.context.cart)==null?void 0:L.id)}catch(Q){console.warn("Failed to save cartId to localStorage",Q)}},[(Ft=(xt=k==null?void 0:k.context)==null?void 0:xt.cart)==null?void 0:Ft.id]),c.useEffect(()=>{if(se&&Ue("localStorage"))try{window.localStorage.removeItem(ke)}catch(C){console.warn("Failed to delete cartId from localStorage",C)}},[se]);const xe=c.useCallback(C=>{var V,L;g&&!((V=C.buyerIdentity)!=null&&V.countryCode)&&(C.buyerIdentity==null&&(C.buyerIdentity={}),C.buyerIdentity.countryCode=g),D&&!((L=C.buyerIdentity)!=null&&L.customerAccessToken)&&(C.buyerIdentity==null&&(C.buyerIdentity={}),C.buyerIdentity.customerAccessToken=D),B({type:"CART_CREATE",payload:C})},[g,D,B]),O=jr(k),Jn=c.useMemo(()=>{var C,V,L,Q;return{...((C=O==null?void 0:O.context)==null?void 0:C.cart)??{lines:[],attributes:[]},status:Hr(O.value),error:(V=O==null?void 0:O.context)==null?void 0:V.errors,totalQuantity:((Q=(L=O==null?void 0:O.context)==null?void 0:L.cart)==null?void 0:Q.totalQuantity)??0,cartCreate:xe,cartReady:he,linesAdd(M){var Ee,x;(x=(Ee=O==null?void 0:O.context)==null?void 0:Ee.cart)!=null&&x.id?B({type:"CARTLINE_ADD",payload:{lines:M}}):xe({lines:M})},linesRemove(M){B({type:"CARTLINE_REMOVE",payload:{lines:M}})},linesUpdate(M){B({type:"CARTLINE_UPDATE",payload:{lines:M}})},noteUpdate(M){B({type:"NOTE_UPDATE",payload:{note:M}})},buyerIdentityUpdate(M){B({type:"BUYER_IDENTITY_UPDATE",payload:{buyerIdentity:M}})},cartAttributesUpdate(M){B({type:"CART_ATTRIBUTES_UPDATE",payload:{attributes:M}})},discountCodesUpdate(M){B({type:"DISCOUNT_CODES_UPDATE",payload:{discountCodes:M}})},cartFragment:I}},[xe,he,($t=O==null?void 0:O.context)==null?void 0:$t.cart,(qt=O==null?void 0:O.context)==null?void 0:qt.errors,O.value,I,B]);return React.createElement(st.Provider,{value:Jn},e)}function Hr(e){switch(e){case"uninitialized":case"initializationError":return"uninitialized";case"idle":case"cartCompleted":case"error":return"idle";case"cartFetching":return"fetching";case"cartCreating":return"creating";case"cartLineAdding":case"cartLineRemoving":case"cartLineUpdating":case"noteUpdating":case"buyerIdentityUpdating":case"cartAttributesUpdating":case"discountCodesUpdating":return"updating"}}function jr(e){const[t,r]=c.useTransition(),[n,a]=c.useState(e),i=c.useRef(!1);t&&(i.current=!0);const s=c.useRef(!1);return!t&&i.current&&(s.current=!0),c.useEffect(()=>{r(()=>{s.current||a(e)})},[e]),s.current?e:n}function Ue(e){let t;try{t=window[e];const r="__storage_test__";return t.setItem(r,r),t.removeItem(r),!0}catch(r){return!!(r instanceof DOMException&&(r.code===22||r.code===1014||r.name==="QuotaExceededError"||r.name==="NS_ERROR_DOM_QUOTA_REACHED")&&t&&t.length!==0)}}function Br(e,t){var r,n;return!!(t.payload.buyerIdentity.countryCode&&((n=(r=e.cart)==null?void 0:r.buyerIdentity)==null?void 0:n.countryCode)!==t.payload.buyerIdentity.countryCode)}const ct=c.createContext(null);function Yr({children:e,data:t,initialVariantId:r}){const n=c.useMemo(()=>J(t.variants??{}),[t.variants]);if(!Gr(n))throw new Error("<ProductProvider/> requires 'product.variants.nodes' or 'product.variants.edges'");const a=c.useMemo(()=>Wr(n),[n]),[i,s]=c.useState(()=>dt(r,n)),[o,u]=c.useState(()=>ft(i));c.useEffect(()=>{const T=dt(r,n);s(T),u(ft(T))},[r,n]);const f=c.useCallback((T,P)=>{u(w=>{const I={...w,[T]:P};return s(lt(n,I)),I})},[u,n]),h=c.useCallback((T,P)=>{const w=lt(n,{...o,[T]:P});return(w==null?void 0:w.availableForSale)??!0},[o,n]),d=c.useMemo(()=>J(t.sellingPlanGroups??{}).map(T=>({...T,sellingPlans:J((T==null?void 0:T.sellingPlans)??{})})),[t.sellingPlanGroups]),[y,m]=c.useState(void 0),l=c.useMemo(()=>{var T,P;if(!(!i||!y)){if(!((T=i.sellingPlanAllocations)!=null&&T.nodes)&&!((P=i.sellingPlanAllocations)!=null&&P.edges))throw new Error("<ProductProvider/>: You must include 'sellingPlanAllocations.nodes' or 'sellingPlanAllocations.edges' in your variants in order to calculate selectedSellingPlanAllocation");return J(i.sellingPlanAllocations).find(w=>{var I;return((I=w==null?void 0:w.sellingPlan)==null?void 0:I.id)===y.id})}},[i,y]),S=c.useMemo(()=>({product:t,variants:n,variantsConnection:t.variants,options:a,selectedVariant:i,setSelectedVariant:s,selectedOptions:o,setSelectedOption:f,setSelectedOptions:u,isOptionInStock:h,selectedSellingPlan:y,setSelectedSellingPlan:m,selectedSellingPlanAllocation:l,sellingPlanGroups:d,sellingPlanGroupsConnection:t.sellingPlanGroups}),[t,h,a,o,y,l,i,d,f,n]);return React.createElement(ct.Provider,{value:S},e)}function ut(){const e=c.useContext(ct);if(!e)throw new Error("'useProduct' must be a child of <ProductProvider />");return e}function lt(e,t){var r,n;if(!(!e.length||((n=(r=e==null?void 0:e[0])==null?void 0:r.selectedOptions)==null?void 0:n.length)!==Object.keys(t).length))return e==null?void 0:e.find(a=>Object.entries(t).every(([i,s])=>{var o;return(o=a==null?void 0:a.selectedOptions)==null?void 0:o.some(u=>(u==null?void 0:u.name)===i&&(u==null?void 0:u.value)===s)}))}function Wr(e){const t=e.reduce((r,n)=>{var a;if(!n.selectedOptions)throw new Error("'getOptions' requires 'variant.selectedOptions'");return(a=n==null?void 0:n.selectedOptions)==null||a.forEach(i=>{r[(i==null?void 0:i.name)??""]=r[(i==null?void 0:i.name)??""]||new Set,r[(i==null?void 0:i.name)??""].add((i==null?void 0:i.value)??"")}),r},{});return Object.keys(t).map(r=>({name:r,values:Array.from(t[r])}))}function dt(e,t){if(e){const r=t.find(n=>(n==null?void 0:n.id)===e);return r||console.warn("<ProductProvider/> received a 'initialVariantId' prop, but could not actually find a variant with that ID"),r}if(e===null)return null;if(e===void 0)return t.find(r=>r==null?void 0:r.availableForSale)||t[0]}function ft(e){return e!=null&&e.selectedOptions?e.selectedOptions.reduce((t,r)=>(t[(r==null?void 0:r.name)??""]=(r==null?void 0:r.value)??"",t),{}):{}}function Gr(e){return!(!e||!Array.isArray(e))}function Ae(e){const{as:t,onClick:r,defaultOnClick:n,children:a,buttonRef:i,...s}=e,o=c.useCallback(f=>{if(r){const h=r(f);if(typeof h=="boolean"&&h===!1||f!=null&&f.defaultPrevented)return}n==null||n(f)},[n,r]),u=t||"button";return React.createElement(u,{ref:i,onClick:o,...s},a)}function Zr(e){const[t,r]=c.useState(!1),{variantId:n,quantity:a=1,attributes:i,sellingPlanId:s,onClick:o,children:u,accessibleAddingToCartLabel:f,...h}=e,{status:d,linesAdd:y}=oe(),{selectedVariant:m}=ut(),l=n??(m==null?void 0:m.id)??"",S=n===null||l===""||m===null||t||h.disabled;c.useEffect(()=>{t&&d==="idle"&&r(!1)},[d,t]);const T=c.useCallback(()=>{r(!0),y([{quantity:a,merchandiseId:l||"",attributes:i,sellingPlanId:s}])},[y,a,l,i,s]);return N.createElement(N.Fragment,null,N.createElement(Ae,{...h,disabled:S,onClick:o,defaultOnClick:T},u),f?N.createElement("p",{style:{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"},role:"alert","aria-live":"assertive"},t?f:null):null)}const te={PAGE_VIEW:"PAGE_VIEW",ADD_TO_CART:"ADD_TO_CART",PAGE_VIEW_2:"PAGE_VIEW_2",COLLECTION_VIEW:"COLLECTION_VIEW",PRODUCT_VIEW:"PRODUCT_VIEW",SEARCH_VIEW:"SEARCH_VIEW"},Ie={article:"article",blog:"blog",captcha:"captcha",cart:"cart",collection:"collection",customersAccount:"customers/account",customersActivateAccount:"customers/activate_account",customersAddresses:"customers/addresses",customersLogin:"customers/login",customersOrder:"customers/order",customersRegister:"customers/register",customersResetPassword:"customers/reset_password",giftCard:"gift_card",home:"index",listCollections:"list-collections",forbidden:"403",notFound:"404",page:"page",password:"password",product:"product",policy:"policy",search:"search"},yt={hydrogen:"hydrogen",headless:"headless"},gt={hydrogen:"6167201",headless:"12875497473"};function q(e,t){return{schema_id:e,payload:t,metadata:{event_created_at_ms:Date.now()}}}function F(e){const t={id:"",resource:null,resourceId:null,search:"",searchParams:new URLSearchParams,hash:""};if(typeof e!="string")return t;try{const{search:r,searchParams:n,pathname:a,hash:i}=new URL(e),s=a.split("/"),o=s[s.length-1],u=s[s.length-2];return!o||!u?t:{id:`${o}${r}${i}`||"",resource:u??null,resourceId:o||null,search:r,searchParams:n,hash:i}}catch{return t}}function $(e,t){return typeof e!="object"?{}:(Object.entries(e).forEach(([r,n])=>{n&&(t[r]=n)}),t)}function Qr(e){return typeof document>"u"?(console.error(`${e} should only be used within the useEffect callback or event handlers`),!0):!1}const Jr="trekkie_storefront_page_view/1.4",Kr="myshopify.dev";function ht(e){const t=e,{id:r,resource:n}=F(t.resourceId),a=n?n.toLowerCase():void 0;return[q(Jr,$({pageType:t.pageType,customerId:parseInt(F(t.customerId).id||"0"),resourceType:a,resourceId:parseInt(r)},Xr(t)))]}function Xr(e){return{appClientId:e.shopifySalesChannel?gt[e.shopifySalesChannel]:gt.headless,isMerchantRequest:zr(e.url),hydrogenSubchannelId:e.storefrontId||"0",isPersistentCookie:e.hasUserConsent,uniqToken:e.uniqueToken,visitToken:e.visitToken,microSessionId:Se(),microSessionCount:1,url:e.url,path:e.path,search:e.search,referrer:e.referrer,title:e.title,shopId:parseInt(F(e.shopId).id),currency:e.currency,contentLanguage:e.acceptedLanguage||"en"}}function zr(e){if(typeof e!="string")return!1;const t=new URL(e).hostname;return t.indexOf(Kr)!==-1||t==="localhost"}const G="custom_storefront_customer_tracking/1.0",mt="page_rendered",pt="collection_page_rendered",Et="product_page_rendered",en="product_added_to_cart",_t="search_submitted";function le(e){return{canonical_url:e.canonicalUrl||e.url,customer_id:parseInt(F(e.customerId).id||"0")}}function tn(e){const t=e,r=le(t),n=t.pageType,a=[];switch(a.push(q(G,$({event_name:mt,...r},Z(t)))),n){case Ie.collection:a.push(q(G,$({event_name:pt,...r,collection_name:t.collectionHandle},Z(t))));break;case Ie.product:a.push(q(G,$({event_name:Et,...r,products:Ne(t.products),total_value:t.totalValue},Z(t))));break;case Ie.search:a.push(q(G,$({event_name:_t,...r,search_string:t.searchString},Z(t))));break}return a}function rn(e){const t=e,r=le(t);return[q(G,$({event_name:mt,...r},Z(t)))]}function nn(e){const t=e,r=le(t);return[q(G,$({event_name:pt,...r,collection_name:t.collectionHandle},Z(t)))]}function an(e){const t=e,r=le(t);return[q(G,$({event_name:Et,...r,products:Ne(t.products),total_value:t.totalValue},Z(t)))]}function on(e){const t=e,r=le(t);return[q(G,$({event_name:_t,...r,search_string:t.searchString},Z(t)))]}function sn(e){const t=e,r=F(t.cartId),n=r!=null&&r.id?`${r.id}`:null;return[q(G,$({event_name:en,customerId:t.customerId,cart_token:n,total_value:t.totalValue,products:Ne(t.products),customer_id:parseInt(F(t.customerId).id||"0")},Z(t)))]}function Z(e){return{source:e.shopifySalesChannel||yt.headless,hydrogenSubchannelId:e.storefrontId||"0",is_persistent_cookie:e.hasUserConsent,ccpa_enforced:!1,gdpr_enforced:!1,unique_token:e.uniqueToken,event_time:Date.now(),event_id:Se(),event_source_url:e.url,referrer:e.referrer,user_agent:e.userAgent,navigation_type:e.navigationType,navigation_api:e.navigationApi,shop_id:parseInt(F(e.shopId).id),currency:e.currency}}function Ne(e){return e?e.map(t=>{const r=$({variant_gid:t.variantGid,category:t.category,sku:t.sku,product_id:parseInt(F(t.productGid).id),variant_id:parseInt(F(t.variantGid).id)},{product_gid:t.productGid,name:t.name,variant:t.variantName||"",brand:t.brand,price:parseFloat(t.price),quantity:Number(t.quantity||0)});return JSON.stringify(r)}):[]}function cn(e,t){const{eventName:r,payload:n}=e;if(!n.hasUserConsent)return Promise.resolve();let a=[];const i=n;return r===te.PAGE_VIEW?a=a.concat(ht(i),tn(i)):r===te.ADD_TO_CART?a=a.concat(sn(n)):r===te.PAGE_VIEW_2?a=a.concat(ht(i),rn(i)):r===te.COLLECTION_VIEW?a=a.concat(nn(i)):r===te.PRODUCT_VIEW?a=a.concat(an(i)):r===te.SEARCH_VIEW&&(a=a.concat(on(i))),a.length?un(a,t):Promise.resolve()}const Ct="sendShopifyAnalytics request is unsuccessful";function un(e,t){const r={events:e,metadata:{event_sent_at_ms:Date.now()}};try{return fetch(t?`https://${t}/.well-known/shopify/monorail/unstable/produce_batch`:"https://monorail-edge.shopifysvc.com/unstable/produce_batch",{method:"post",headers:{"content-type":"text/plain"},body:JSON.stringify(r)}).then(n=>{if(!n.ok)throw new Error("Response failed");return n.text()}).then(n=>{n&&JSON.parse(n).result.forEach(i=>{i.status!==200&&console.error(Ct,`
|
|
273
273
|
|
|
274
|
-
`,i.message)})}).catch(n=>{console.error(
|
|
274
|
+
`,i.message)})}).catch(n=>{console.error(Ct,n)})}catch{return Promise.resolve()}}function ln(){if(Qr("getClientBrowserParameters"))return{uniqueToken:"",visitToken:"",url:"",path:"",search:"",referrer:"",title:"",userAgent:"",navigationType:"",navigationApi:""};const[e,t]=yn(),r=Te(document.cookie);return{uniqueToken:r[K],visitToken:r[X],url:location.href,path:location.pathname,search:location.search,referrer:document.referrer,title:document.title,userAgent:navigator.userAgent,navigationType:e,navigationApi:t}}function dn(){try{const e=(performance==null?void 0:performance.getEntriesByType)&&(performance==null?void 0:performance.getEntriesByType("navigation"));if(e&&e[0]){const t=window.performance.getEntriesByType("navigation")[0].type;return t&&t.toString()}}catch{}}function fn(){var e,t;try{if(PerformanceNavigation&&((e=performance==null?void 0:performance.navigation)==null?void 0:e.type)!==null&&((t=performance==null?void 0:performance.navigation)==null?void 0:t.type)!==void 0){const r=performance.navigation.type;switch(r){case PerformanceNavigation.TYPE_NAVIGATE:return"navigate";case PerformanceNavigation.TYPE_RELOAD:return"reload";case PerformanceNavigation.TYPE_BACK_FORWARD:return"back_forward";default:return`unknown: ${r}`}}}catch{}}function yn(){try{let e="PerformanceNavigationTiming",t=dn();return t||(t=fn(),e="performance.navigation"),t?[t,e]:["unknown","unknown"]}catch{}return["error","error"]}function gn(e){const{cartCreate:t,checkoutUrl:r}=oe(),[n,a]=c.useState(!1),{quantity:i,variantId:s,onClick:o,attributes:u,children:f,...h}=e;c.useEffect(()=>{n&&r&&(window.location.href=r)},[n,r]);const d=c.useCallback(()=>{a(!0),t({lines:[{quantity:i??1,merchandiseId:s,attributes:u}]})},[t,i,s,u]);return React.createElement(Ae,{disabled:n??h.disabled,...h,onClick:o,defaultOnClick:d},f)}function hn(e){const[t,r]=c.useState(!1),{status:n,checkoutUrl:a}=oe(),{children:i,...s}=e;return c.useEffect(()=>{t&&a&&n==="idle"&&(window.location.href=a)},[t,n,a]),React.createElement(Ae,{...s,disabled:t||s.disabled,onClick:()=>r(!0)},i)}function St(e){const{countryIsoCode:t,languageIsoCode:r}=ce(),n=r.includes("_")?r.replace("_","-"):`${r}-${t}`;if(!n)throw new Error("useMoney(): Unable to get 'locale' from 'useShop()', which means that 'locale' was not passed to '<ShopifyProvider/>'. 'locale' is required for 'useMoney()' to work");const a=parseFloat(e.amount),i=c.useMemo(()=>({style:"currency",currency:e.currencyCode}),[e.currencyCode]),s=ie(n,i),o=ie(n,{...i,currencyDisplay:"name"}),u=ie(n,{...i,currencyDisplay:"narrowSymbol"}),f=ie(n,{...i,minimumFractionDigits:0,maximumFractionDigits:0}),h=ie(n),d=ie(n,{minimumFractionDigits:0,maximumFractionDigits:0}),y=l=>l.type==="currency",m=c.useMemo(()=>({original:()=>e,currencyCode:()=>e.currencyCode,localizedString:()=>s().format(a),parts:()=>s().formatToParts(a),withoutTrailingZeros:()=>a%1===0?f().format(a):s().format(a),withoutTrailingZerosAndCurrency:()=>a%1===0?d().format(a):h().format(a),currencyName:()=>{var l;return((l=o().formatToParts(a).find(y))==null?void 0:l.value)??e.currencyCode},currencySymbol:()=>{var l;return((l=s().formatToParts(a).find(y))==null?void 0:l.value)??e.currencyCode},currencyNarrowSymbol:()=>{var l;return((l=u().formatToParts(a).find(y))==null?void 0:l.value)??""},amount:()=>s().formatToParts(a).filter(l=>["decimal","fraction","group","integer","literal"].includes(l.type)).map(l=>l.value).join("")}),[e,a,o,s,u,h,f,d]);return c.useMemo(()=>new Proxy(m,{get:(l,S)=>{var T;return(T=Reflect.get(l,S))==null?void 0:T.call(null)}}),[m])}function ie(e,t){return c.useMemo(()=>{let r;return()=>r??(r=new Intl.NumberFormat(e,t))},[e,t])}function we({data:e,as:t,withoutCurrency:r,withoutTrailingZeros:n,measurement:a,measurementSeparator:i="/",...s}){if(!mn(e))throw new Error("<Money/> needs a valid 'data' prop that has 'amount' and 'currencyCode'");const o=St(e),u=t??"div";let f=o.localizedString;return(r||n)&&(r&&!n?f=o.amount:!r&&n?f=o.withoutTrailingZeros:f=o.withoutTrailingZerosAndCurrency),React.createElement(u,{...s},f,a&&a.referenceUnit&&React.createElement(React.Fragment,null,i,a.referenceUnit))}function mn(e){return typeof e.amount=="string"&&!!e.amount&&typeof e.currencyCode=="string"&&!!e.currencyCode}function pn(e){const{cost:t}=oe(),{amountType:r="total",children:n,...a}=e;let i;return r=="total"?i=t==null?void 0:t.totalAmount:r=="subtotal"?i=t==null?void 0:t.subtotalAmount:r=="tax"?i=t==null?void 0:t.totalTaxAmount:r=="duty"&&(i=t==null?void 0:t.totalDutyAmount),i==null?null:React.createElement(we,{...a,data:i},n)}const Tt=c.createContext(null);function Ve(){const e=c.useContext(Tt);if(e==null)throw new Error("Expected a cart line context but none was found");return e}function En({children:e,line:t}){return React.createElement(Tt.Provider,{value:t},e)}function _n(e){const t=Ve(),{as:r,...n}=e,a=r||"span";return React.createElement(a,{...n},t.quantity)}function Cn(e){const{status:t,linesRemove:r,linesUpdate:n}=oe(),a=Ve(),{children:i,adjust:s,onClick:o,...u}=e,f=c.useCallback(()=>{if(s==="remove"){r([(a==null?void 0:a.id)??""]);return}const d=s==="decrease"?((a==null?void 0:a.quantity)??0)-1:((a==null?void 0:a.quantity)??0)+1;if(d<=0){r([(a==null?void 0:a.id)??""]);return}const y={id:(a==null?void 0:a.id)??"",quantity:d,attributes:(a==null?void 0:a.attributes)??[]};n([y])},[s,a==null?void 0:a.attributes,a==null?void 0:a.id,a==null?void 0:a.quantity,r,n]),h=u.disabled;return React.createElement(Ae,{...u,onClick:o,defaultOnClick:f,disabled:typeof h<"u"?h:t!=="idle"},i)}const Sn={DateTime:"string",Decimal:"string",HTML:"string",URL:"string",Color:"string",UnsignedInt64:"string"},Tn={DateTime:"string",Decimal:"string",HTML:"string",ISO8601DateTime:"string",URL:"string",UnsignedInt64:"string"},At=c.forwardRef((e,t)=>{const{data:r,options:n,id:a=r.id,frameBorder:i="0",allow:s="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture",allowFullScreen:o=!0,loading:u="lazy",...f}=e;if(!r.embedUrl)throw new Error("<ExternalVideo/> requires the 'embedUrl' property");let h=r.embedUrl;if(n){const d=new URL(r.embedUrl);for(const[y,m]of Object.entries(n))typeof m>"u"||d.searchParams.set(y,m.toString());h=d.toString()}return React.createElement("iframe",{...f,id:a??r.embedUrl,title:r.alt??r.id??"external video",frameBorder:i,allow:s,allowFullScreen:o,src:h,loading:u,ref:t})}),An=`#graphql
|
|
275
275
|
fragment Image on Image {
|
|
276
276
|
altText
|
|
277
277
|
url
|
|
278
278
|
width
|
|
279
279
|
height
|
|
280
280
|
}
|
|
281
|
-
`,At=N.forwardRef(({alt:e,aspectRatio:t,crop:r="center",data:n,decoding:a="async",height:i="auto",loader:s=de,loading:o="lazy",sizes:l,src:f,srcSetOptions:h={intervals:15,startingWidth:200,incrementSize:200,placeholderWidth:100},width:d="100%",...y},m)=>{const u=N.useMemo(()=>{const p=n!=null&&n.width&&(n!=null&&n.height)?n==null?void 0:n.width:void 0,_=n!=null&&n.width&&(n!=null&&n.height)?n==null?void 0:n.height:void 0;return{width:p,height:_,unitsMatch:!!It(p,_)}},[n]),S=N.useMemo(()=>{const _=fe((d||"100%").toString()),R=`${_.number}${_.unit}`,v=i==null,A=v?null:fe(i.toString()),b=A?`${A.number}${A.unit}`:"",H=v?"auto":b,O=f||(n==null?void 0:n.url),j=n!=null&&n.altText&&!e?n==null?void 0:n.altText:e||"",z=t||(u.unitsMatch?[ye(u.width),ye(u.height)].join("/"):void 0);return{width:R,height:H,src:O,alt:j,aspectRatio:z}},[d,i,f,n,e,t,u,y==null?void 0:y.key]),{intervals:T,startingWidth:P,incrementSize:w,placeholderWidth:I}=h,D=N.useMemo(()=>In(d,T,P,w),[d,T,P,w]);return wt(S.width)?N.createElement(Tn,{aspectRatio:t,crop:r,decoding:a,height:i,imageWidths:D,loader:s,loading:o,normalizedProps:S,passthroughProps:y,ref:m,width:d}):N.createElement(An,{aspectRatio:t,crop:r,decoding:a,imageWidths:D,loader:s,loading:o,normalizedProps:S,passthroughProps:y,placeholderWidth:I,ref:m,sizes:l})}),Tn=N.forwardRef(({aspectRatio:e,crop:t,decoding:r,height:n,imageWidths:a,loader:i=de,loading:s,normalizedProps:o,passthroughProps:l,width:f},h)=>{const d=N.useMemo(()=>{const y=ye(f),m=ye(n),u=e||(It(o.width,o.height)?[y,m].join("/"):o.aspectRatio?o.aspectRatio:void 0),S=a===void 0?void 0:vt(a,u,t),T=m||(u&&y?y*(Ve(u)??1):void 0),P=bt(o.src,S,i),w=i({src:o.src,width:y,height:T,crop:o.height==="auto"?void 0:t});return{width:y,aspectRatio:u,height:T,srcSet:P,src:w}},[e,t,n,a,i,o,f]);return N.createElement("img",{ref:h,alt:o.alt,decoding:r,height:d.height,loading:s,src:d.src,srcSet:d.srcSet,width:d.width,style:{aspectRatio:d.aspectRatio,...l.style},...l})}),An=N.forwardRef(({crop:e,decoding:t,imageWidths:r,loader:n=de,loading:a,normalizedProps:i,passthroughProps:s,placeholderWidth:o,sizes:l},f)=>{const h=N.useMemo(()=>{const d=r===void 0?void 0:vt(r,i.aspectRatio,e),y=i.aspectRatio&&o?o*(Ve(i.aspectRatio)??1):void 0,m=bt(i.src,d,n),u=n({src:i.src,width:o,height:y,crop:e});return{placeholderHeight:y,srcSet:m,src:u}},[e,r,n,i,o]);return N.createElement("img",{ref:f,alt:i.alt,decoding:t,height:h.placeholderHeight,loading:a,sizes:l,src:h.src,srcSet:h.srcSet,width:o,...s,style:{width:i.width,aspectRatio:i.aspectRatio,...s.style}})});function de({src:e,width:t,height:r,crop:n}){if(!e)return"";const a=new URL(e);return t&&a.searchParams.append("width",Math.round(t).toString()),r&&a.searchParams.append("height",Math.round(r).toString()),n&&a.searchParams.append("crop",n),a.href}function It(e="100%",t="auto"){return fe(e.toString()).unit===fe(t.toString()).unit}function fe(e){const t=e.replace(/[0-9.]/g,""),r=parseFloat(e.replace(t,""));return{unit:t===""?r===void 0?"auto":"px":t,number:r}}function ye(e){if(e===void 0)return;const{unit:t,number:r}=fe(e.toString());switch(t){case"em":return r*16;case"rem":return r*16;case"px":return r;case"":return r;default:return}}function wt(e){return typeof e=="number"||typeof e=="string"&&/\d(px|em|rem)$/.test(e)}function bt(e,t,r=de){return e?(t==null?void 0:t.length)===0||!t?e:t.map((n,a)=>`${r({src:e,width:n.width,height:n.height,crop:n.crop})} ${t.length===3?`${a+1}x`:`${n.width??0}w`}`).join(", "):""}function In(e="100%",t,r,n){const a=Array.from({length:t},(s,o)=>o*n+r),i=Array.from({length:3},(s,o)=>(o+1)*(ye(e)??0));return wt(e)?i:a}function Ve(e){if(!e)return;const[t,r]=e.split("/");return 1/(Number(t)/Number(r))}function vt(e,t,r="center"){return e?e.map(a=>({width:a,height:t?a*(Ve(t)??1):void 0,crop:r})):void 0}const Pt={};function wn(e,t){const r=Pt[e];if(r)return r;const n=new Promise((a,i)=>{const s=document.createElement("script");t!=null&&t.module?s.type="module":s.type="text/javascript",s.src=e,s.onload=()=>{a(!0)},s.onerror=()=>{i(!1)},(t==null?void 0:t.in)==="head"?document.head.appendChild(s):document.body.appendChild(s);const o=t==null?void 0:t.attributes;o&&Object.keys(o).forEach(l=>{s.setAttribute(l,o[l])})});return Pt[e]=n,n}function Me(e,t){const[r,n]=c.useState("loading");return c.useEffect(()=>{wn(e,t).then(()=>n("done")).catch(()=>n("error"))},[e]),r}const Rt=c.forwardRef((e,t)=>{var h;const{data:r,previewImageOptions:n,id:a=r.id,playsInline:i=!0,controls:s=!0,sourceProps:o={},...l}=e,f=de({src:((h=r.previewImage)==null?void 0:h.url)??"",...n});if(!r.sources)throw new Error("<Video/> requires a 'data.sources' array");return React.createElement("video",{...l,id:a,playsInline:i,controls:s,poster:f,ref:t},r.sources.map(d=>{if(!(d!=null&&d.url&&(d!=null&&d.mimeType)))throw new Error("<Video/> needs 'source.url' and 'source.mimeType'");return React.createElement("source",{...o,key:d.url,src:d.url,type:d.mimeType})}))});function Dt(e){var f,h,d;const[t,r]=c.useState(void 0),n=c.useCallback(y=>{r(y)},[]),{data:a,children:i,className:s,...o}=e,l=Me("https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js",{module:!0});return c.useEffect(()=>{const y={error:o.onError,load:o.onLoad,preload:o.onPreload,"model-visibility":o.onModelVisibility,progress:o.onProgress,"ar-status":o.onArStatus,"ar-tracking":o.onArTracking,"quick-look-button-tapped":o.onQuickLookButtonTapped,"camera-change":o.onCameraChange,"environment-change":o.onEnvironmentChange,play:o.onPlay,pause:o.onPause,"scene-graph-ready":o.onSceneGraphReady};if(t)return Object.entries(y).forEach(([m,u])=>{u&&t.addEventListener(m,u)}),()=>{t!=null&&Object.entries(y).forEach(([m,u])=>{u&&t.removeEventListener(m,u)})}},[t,o.onArStatus,o.onArTracking,o.onCameraChange,o.onEnvironmentChange,o.onError,o.onLoad,o.onModelVisibility,o.onPause,o.onPlay,o.onPreload,o.onProgress,o.onQuickLookButtonTapped,o.onSceneGraphReady]),l!=="done"?null:(h=(f=a.sources)==null?void 0:f[0])!=null&&h.url?React.createElement("model-viewer",{ref:n,...o,class:s,id:o.id??a.id,src:a.sources[0].url,alt:a.alt??null,"camera-controls":o.cameraControls??!0,poster:(o.poster||((d=a.previewImage)==null?void 0:d.url))??null,autoplay:o.autoplay??!0,loading:o.loading,reveal:o.reveal,ar:o.ar,"ar-modes":o.arModes,"ar-scale":o.arScale,"ar-placement":o.arPlacement,"ios-src":o.iosSrc,"touch-action":o.touchAction,"disable-zoom":o.disableZoom,"orbit-sensitivity":o.orbitSensitivity,"auto-rotate":o.autoRotate,"auto-rotate-delay":o.autoRotateDelay,"rotation-per-second":o.rotationPerSecond,"interaction-policy":o.interactionPolicy,"interaction-prompt":o.interactionPrompt,"interaction-prompt-style":o.interactionPromptStyle,"interaction-prompt-threshold":o.interactionPromptThreshold,"camera-orbit":o.cameraOrbit,"camera-target":o.cameraTarget,"field-of-view":o.fieldOfView,"max-camera-orbit":o.maxCameraOrbit,"min-camera-orbit":o.minCameraOrbit,"max-field-of-view":o.maxFieldOfView,"min-field-of-view":o.minFieldOfView,bounds:o.bounds,"interpolation-decay":o.interpolationDecay??100,"skybox-image":o.skyboxImage,"environment-image":o.environmentImage,exposure:o.exposure,"shadow-intensity":o.shadowIntensity??0,"shadow-softness":o.shadowSoftness??0,"animation-name":o.animationName,"animation-crossfade-duration":o.animationCrossfadeDuration,"variant-name":o.variantName,orientation:o.orientation,scale:o.scale},i):(console.error("<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'"),null)}function bn({data:e,mediaOptions:t,...r}){switch(e.__typename){case"MediaImage":return e.image?React.createElement(At,{...r,...t==null?void 0:t.image,data:e.image}):(console.warn("<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default."),null);case"Video":return React.createElement(Rt,{...r,...t==null?void 0:t.video,data:e});case"ExternalVideo":return React.createElement(Tt,{...r,...t==null?void 0:t.externalVideo,data:e});case"Model3d":return React.createElement(Dt,{...r,...t==null?void 0:t.modelViewer,data:e});default:return console.error("<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media. Rendering 'null' by default"),null}}function vn(e){if(!e.type)return console.error("parseMetafield(): The 'type' field is required in order to parse the Metafield. Returning 'parsedValue' of 'null'"),{...e,parsedValue:null};switch(e.type){case"boolean":return{...e,parsedValue:e.value==="true"};case"collection_reference":case"file_reference":case"page_reference":case"product_reference":case"variant_reference":return{...e,parsedValue:e.reference};case"color":case"multi_line_text_field":case"single_line_text_field":case"url":return{...e,parsedValue:e.value};case"dimension":case"money":case"json":case"rating":case"volume":case"weight":case"list.color":case"list.dimension":case"list.number_integer":case"list.number_decimal":case"list.rating":case"list.single_line_text_field":case"list.url":case"list.volume":case"list.weight":{let t=null;try{t=Ot(e.value??"")}catch{console.error("parseMetafield(): attempted to JSON.parse the 'metafield.value' property, but failed. Returning 'null' for 'parsedValue'"),t=null}return{...e,parsedValue:t}}case"date":case"date_time":return{...e,parsedValue:new Date(e.value??"")};case"list.date":case"list.date_time":{const t=Ot((e==null?void 0:e.value)??"");return{...e,parsedValue:t.map(r=>new Date(r))}}case"number_decimal":case"number_integer":return{...e,parsedValue:Number(e.value)};case"list.collection_reference":case"list.file_reference":case"list.page_reference":case"list.product_reference":case"list.variant_reference":return{...e,parsedValue:J(e.references??void 0)};default:{const t=`parseMetafield(): the 'metafield.type' you passed in is not supported. Your type: "${e.type}". If you believe this is an error, please open an issue on GitHub.`;return console.error(`${t} Returning 'parsedValue' of 'null'`),{...e,parsedValue:null}}}}function Ot(e){return String(e).includes("__proto__")?JSON.parse(e,(t,r)=>{if(t!=="__proto__")return r}):JSON.parse(e)}function Pn(e){var f,h,d,y,m,u;const{priceType:t="regular",variantId:r,valueType:n="min",data:a,...i}=e;if(a==null)throw new Error("<ProductPrice/> requires a product as the 'data' prop");let s,o;const l=r?J((a==null?void 0:a.variants)??{}).find(S=>(S==null?void 0:S.id)===r)??null:null;if(t==="compareAt")if(r&&l){if(((f=l.compareAtPriceV2)==null?void 0:f.amount)===((h=l.priceV2)==null?void 0:h.amount))return null;s=l.compareAtPriceV2}else n==="max"?s=(d=a==null?void 0:a.compareAtPriceRange)==null?void 0:d.maxVariantPrice:s=(y=a==null?void 0:a.compareAtPriceRange)==null?void 0:y.minVariantPrice;else r&&l?(s=l.priceV2,n==="unit"&&(s=l.unitPrice,o=l.unitPriceMeasurement)):n==="max"?s=(m=a.priceRange)==null?void 0:m.maxVariantPrice:s=(u=a.priceRange)==null?void 0:u.minVariantPrice;return s?o?React.createElement(Ie,{...i,data:s,measurement:o}):React.createElement(Ie,{...i,data:s}):null}const Rn="https://cdn.shopify.com/shopifycloud/shop-js/v1.0/client.js";function Dn(e){return e==="headless"||e==="hydrogen"}function On({channel:e,variantIds:t,className:r,variantIdsAndQuantities:n,width:a,storeDomain:i}){const s=ce(),o=i||(s==null?void 0:s.storeDomain),l=Me(Rn);let f=[],h;if(!o||o===ze.storeDomain)throw new Error(Un);if(t&&n)throw new Error(Nn);if(!t&&!n)throw new Error(Ut);if(e)if(Dn(e))h=e;else throw new Error(Vn);if(t)f=t.reduce((y,m)=>{const u=F(m).id;return u&&y.push(u),y},[]);else if(n)f=n.reduce((y,m)=>{const u=F(m==null?void 0:m.id).id;return u&&y.push(`${u}:${(m==null?void 0:m.quantity)??1}`),y},[]);else throw new Error(Ut);if(f.length===0)throw new Error(kn);const d=a?{"--shop-pay-button-width":a}:void 0;return React.createElement("div",{className:r,style:d},l==="done"&&React.createElement("shop-pay-button",{...h?{channel:h}:{},"store-url":o,variants:f.join(",")}))}const Un='You must pass a "storeDomain" prop to the "ShopPayButton" component, or wrap it in a "ShopifyProvider" component.',kn='You must pass in "variantIds" in the form of ["gid://shopify/ProductVariant/1"]',Ut='You must pass in either "variantIds" or "variantIdsAndQuantities" to ShopPayButton',Nn="You must provide either a variantIds or variantIdsAndQuantities prop, but not both in the ShopPayButton component",Vn='Invalid channel attribution value. Must be either "headless" or "hydrogen"',Mn=60*60*24*360*1,Ln=60*30;function xn(e){const{hasUserConsent:t=!1,domain:r=""}=e||{};c.useEffect(()=>{const n=Se(document.cookie);t?(we(K,n[K]||Ce(),Mn,r),we(X,n[X]||Ce(),Ln,r)):(we(K,"",0,r),we(X,"",0,r))},[e,t,r])}function we(e,t,r,n){document.cookie=Or(e,t,{maxage:r,domain:n,samesite:"Lax",path:"/"})}E.AddToCartButton=Wr,E.AnalyticsEventName=te,E.AnalyticsPageType=Ae,E.BuyNowButton=fn,E.CartCheckoutButton=yn,E.CartCost=hn,E.CartLineProvider=mn,E.CartLineQuantity=pn,E.CartLineQuantityAdjustButton=En,E.CartProvider=Fr,E.ExternalVideo=Tt,E.IMAGE_FRAGMENT=Sn,E.Image=At,E.MediaFile=bn,E.ModelViewer=Dt,E.Money=Ie,E.ProductPrice=Pn,E.ProductProvider=jr,E.SHOPIFY_S=X,E.SHOPIFY_STOREFRONT_ID_HEADER=tt,E.SHOPIFY_STOREFRONT_S_HEADER=nt,E.SHOPIFY_STOREFRONT_Y_HEADER=rt,E.SHOPIFY_Y=K,E.ShopPayButton=On,E.ShopifyProvider=Pr,E.ShopifySalesChannel=ft,E.Video=Rt,E.createStorefrontClient=br,E.customerAccountApiCustomScalars=Cn,E.flattenConnection=J,E.getClientBrowserParameters=cn,E.getShopifyCookies=Se,E.parseGid=F,E.parseMetafield=vn,E.sendShopifyAnalytics=on,E.storefrontApiCustomScalars=_n,E.useCart=oe,E.useCartLine=Ne,E.useLoadScript=Me,E.useMoney=Ct,E.useProduct=ct,E.useShop=ce,E.useShopifyCookies=xn,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
|
|
281
|
+
`,It=N.forwardRef(({alt:e,aspectRatio:t,crop:r="center",data:n,decoding:a="async",height:i="auto",loader:s=de,loading:o="lazy",sizes:u,src:f,srcSetOptions:h={intervals:15,startingWidth:200,incrementSize:200,placeholderWidth:100},width:d="100%",...y},m)=>{const l=N.useMemo(()=>{const p=n!=null&&n.width&&(n!=null&&n.height)?n==null?void 0:n.width:void 0,_=n!=null&&n.width&&(n!=null&&n.height)?n==null?void 0:n.height:void 0;return{width:p,height:_,unitsMatch:!!wt(p,_)}},[n]),S=N.useMemo(()=>{const _=fe((d||"100%").toString()),R=`${_.number}${_.unit}`,v=i==null,A=v?null:fe(i.toString()),b=A?`${A.number}${A.unit}`:"",H=v?"auto":b,k=f||(n==null?void 0:n.url),j=n!=null&&n.altText&&!e?n==null?void 0:n.altText:e||"",z=t||(l.unitsMatch?[ye(l.width),ye(l.height)].join("/"):void 0);return{width:R,height:H,src:k,alt:j,aspectRatio:z}},[d,i,f,n,e,t,l,y==null?void 0:y.key]),{intervals:T,startingWidth:P,incrementSize:w,placeholderWidth:I}=h,D=N.useMemo(()=>bn(d,T,P,w),[d,T,P,w]);return bt(S.width)?N.createElement(In,{aspectRatio:t,crop:r,decoding:a,height:i,imageWidths:D,loader:s,loading:o,normalizedProps:S,passthroughProps:y,ref:m,width:d}):N.createElement(wn,{aspectRatio:t,crop:r,decoding:a,imageWidths:D,loader:s,loading:o,normalizedProps:S,passthroughProps:y,placeholderWidth:I,ref:m,sizes:u})}),In=N.forwardRef(({aspectRatio:e,crop:t,decoding:r,height:n,imageWidths:a,loader:i=de,loading:s,normalizedProps:o,passthroughProps:u,width:f},h)=>{const d=N.useMemo(()=>{const y=ye(f),m=ye(n),l=e||(wt(o.width,o.height)?[y,m].join("/"):o.aspectRatio?o.aspectRatio:void 0),S=a===void 0?void 0:Pt(a,l,t),T=m||(l&&y?y*(Me(l)??1):void 0),P=vt(o.src,S,i),w=i({src:o.src,width:y,height:T,crop:o.height==="auto"?void 0:t});return{width:y,aspectRatio:l,height:T,srcSet:P,src:w}},[e,t,n,a,i,o,f]);return N.createElement("img",{ref:h,alt:o.alt,decoding:r,height:d.height,loading:s,src:d.src,srcSet:d.srcSet,width:d.width,style:{aspectRatio:d.aspectRatio,...u.style},...u})}),wn=N.forwardRef(({crop:e,decoding:t,imageWidths:r,loader:n=de,loading:a,normalizedProps:i,passthroughProps:s,placeholderWidth:o,sizes:u},f)=>{const h=N.useMemo(()=>{const d=r===void 0?void 0:Pt(r,i.aspectRatio,e),y=i.aspectRatio&&o?o*(Me(i.aspectRatio)??1):void 0,m=vt(i.src,d,n),l=n({src:i.src,width:o,height:y,crop:e});return{placeholderHeight:y,srcSet:m,src:l}},[e,r,n,i,o]);return N.createElement("img",{ref:f,alt:i.alt,decoding:t,height:h.placeholderHeight,loading:a,sizes:u,src:h.src,srcSet:h.srcSet,width:o,...s,style:{width:i.width,aspectRatio:i.aspectRatio,...s.style}})});function de({src:e,width:t,height:r,crop:n}){if(!e)return"";const a=new URL(e);return t&&a.searchParams.append("width",Math.round(t).toString()),r&&a.searchParams.append("height",Math.round(r).toString()),n&&a.searchParams.append("crop",n),a.href}function wt(e="100%",t="auto"){return fe(e.toString()).unit===fe(t.toString()).unit}function fe(e){const t=e.replace(/[0-9.]/g,""),r=parseFloat(e.replace(t,""));return{unit:t===""?r===void 0?"auto":"px":t,number:r}}function ye(e){if(e===void 0)return;const{unit:t,number:r}=fe(e.toString());switch(t){case"em":return r*16;case"rem":return r*16;case"px":return r;case"":return r;default:return}}function bt(e){return typeof e=="number"||typeof e=="string"&&/\d(px|em|rem)$/.test(e)}function vt(e,t,r=de){return e?(t==null?void 0:t.length)===0||!t?e:t.map((n,a)=>`${r({src:e,width:n.width,height:n.height,crop:n.crop})} ${t.length===3?`${a+1}x`:`${n.width??0}w`}`).join(", "):""}function bn(e="100%",t,r,n){const a=Array.from({length:t},(s,o)=>o*n+r),i=Array.from({length:3},(s,o)=>(o+1)*(ye(e)??0));return bt(e)?i:a}function Me(e){if(!e)return;const[t,r]=e.split("/");return 1/(Number(t)/Number(r))}function Pt(e,t,r="center"){return e?e.map(a=>({width:a,height:t?a*(Me(t)??1):void 0,crop:r})):void 0}const Rt={};function vn(e,t){const r=Rt[e];if(r)return r;const n=new Promise((a,i)=>{const s=document.createElement("script");t!=null&&t.module?s.type="module":s.type="text/javascript",s.src=e,s.onload=()=>{a(!0)},s.onerror=()=>{i(!1)},(t==null?void 0:t.in)==="head"?document.head.appendChild(s):document.body.appendChild(s);const o=t==null?void 0:t.attributes;o&&Object.keys(o).forEach(u=>{s.setAttribute(u,o[u])})});return Rt[e]=n,n}function Le(e,t){const[r,n]=c.useState("loading");return c.useEffect(()=>{vn(e,t).then(()=>n("done")).catch(()=>n("error"))},[e]),r}const Dt=c.forwardRef((e,t)=>{var h;const{data:r,previewImageOptions:n,id:a=r.id,playsInline:i=!0,controls:s=!0,sourceProps:o={},...u}=e,f=de({src:((h=r.previewImage)==null?void 0:h.url)??"",...n});if(!r.sources)throw new Error("<Video/> requires a 'data.sources' array");return React.createElement("video",{...u,id:a,playsInline:i,controls:s,poster:f,ref:t},r.sources.map(d=>{if(!(d!=null&&d.url&&(d!=null&&d.mimeType)))throw new Error("<Video/> needs 'source.url' and 'source.mimeType'");return React.createElement("source",{...o,key:d.url,src:d.url,type:d.mimeType})}))});function kt(e){var f,h,d;const[t,r]=c.useState(void 0),n=c.useCallback(y=>{r(y)},[]),{data:a,children:i,className:s,...o}=e,u=Le("https://unpkg.com/@google/model-viewer@v1.12.1/dist/model-viewer.min.js",{module:!0});return c.useEffect(()=>{const y={error:o.onError,load:o.onLoad,preload:o.onPreload,"model-visibility":o.onModelVisibility,progress:o.onProgress,"ar-status":o.onArStatus,"ar-tracking":o.onArTracking,"quick-look-button-tapped":o.onQuickLookButtonTapped,"camera-change":o.onCameraChange,"environment-change":o.onEnvironmentChange,play:o.onPlay,pause:o.onPause,"scene-graph-ready":o.onSceneGraphReady};if(t)return Object.entries(y).forEach(([m,l])=>{l&&t.addEventListener(m,l)}),()=>{t!=null&&Object.entries(y).forEach(([m,l])=>{l&&t.removeEventListener(m,l)})}},[t,o.onArStatus,o.onArTracking,o.onCameraChange,o.onEnvironmentChange,o.onError,o.onLoad,o.onModelVisibility,o.onPause,o.onPlay,o.onPreload,o.onProgress,o.onQuickLookButtonTapped,o.onSceneGraphReady]),u!=="done"?null:(h=(f=a.sources)==null?void 0:f[0])!=null&&h.url?React.createElement("model-viewer",{ref:n,...o,class:s,id:o.id??a.id,src:a.sources[0].url,alt:a.alt??null,"camera-controls":o.cameraControls??!0,poster:(o.poster||((d=a.previewImage)==null?void 0:d.url))??null,autoplay:o.autoplay??!0,loading:o.loading,reveal:o.reveal,ar:o.ar,"ar-modes":o.arModes,"ar-scale":o.arScale,"ar-placement":o.arPlacement,"ios-src":o.iosSrc,"touch-action":o.touchAction,"disable-zoom":o.disableZoom,"orbit-sensitivity":o.orbitSensitivity,"auto-rotate":o.autoRotate,"auto-rotate-delay":o.autoRotateDelay,"rotation-per-second":o.rotationPerSecond,"interaction-policy":o.interactionPolicy,"interaction-prompt":o.interactionPrompt,"interaction-prompt-style":o.interactionPromptStyle,"interaction-prompt-threshold":o.interactionPromptThreshold,"camera-orbit":o.cameraOrbit,"camera-target":o.cameraTarget,"field-of-view":o.fieldOfView,"max-camera-orbit":o.maxCameraOrbit,"min-camera-orbit":o.minCameraOrbit,"max-field-of-view":o.maxFieldOfView,"min-field-of-view":o.minFieldOfView,bounds:o.bounds,"interpolation-decay":o.interpolationDecay??100,"skybox-image":o.skyboxImage,"environment-image":o.environmentImage,exposure:o.exposure,"shadow-intensity":o.shadowIntensity??0,"shadow-softness":o.shadowSoftness??0,"animation-name":o.animationName,"animation-crossfade-duration":o.animationCrossfadeDuration,"variant-name":o.variantName,orientation:o.orientation,scale:o.scale},i):(console.error("<ModelViewer/> requires 'data.sources' prop to be an array, with an object that has a property 'url' on it. Rendering 'null'"),null)}function Pn({data:e,mediaOptions:t,...r}){switch(e.__typename){case"MediaImage":return e.image?React.createElement(It,{...r,...t==null?void 0:t.image,data:e.image}):(console.warn("<MediaFile/>: 'data.image' does not exist for __typename of 'MediaImage'; rendering 'null' by default."),null);case"Video":return React.createElement(Dt,{...r,...t==null?void 0:t.video,data:e});case"ExternalVideo":return React.createElement(At,{...r,...t==null?void 0:t.externalVideo,data:e});case"Model3d":return React.createElement(kt,{...r,...t==null?void 0:t.modelViewer,data:e});default:return console.error("<MediaFile /> requires the '__typename' property to exist on the 'data' prop in order to render the matching sub-component for this type of media. Rendering 'null' by default"),null}}function Rn(e){if(!e.type)return console.error("parseMetafield(): The 'type' field is required in order to parse the Metafield. Returning 'parsedValue' of 'null'"),{...e,parsedValue:null};switch(e.type){case"boolean":return{...e,parsedValue:e.value==="true"};case"collection_reference":case"file_reference":case"page_reference":case"product_reference":case"variant_reference":return{...e,parsedValue:e.reference};case"color":case"multi_line_text_field":case"single_line_text_field":case"url":return{...e,parsedValue:e.value};case"dimension":case"money":case"json":case"rating":case"volume":case"weight":case"rich_text_field":case"list.color":case"list.dimension":case"list.number_integer":case"list.number_decimal":case"list.rating":case"list.single_line_text_field":case"list.url":case"list.volume":case"list.weight":{let t=null;try{t=Ot(e.value??"")}catch{console.error("parseMetafield(): attempted to JSON.parse the 'metafield.value' property, but failed. Returning 'null' for 'parsedValue'"),t=null}return{...e,parsedValue:t}}case"date":case"date_time":return{...e,parsedValue:new Date(e.value??"")};case"list.date":case"list.date_time":{const t=Ot((e==null?void 0:e.value)??"");return{...e,parsedValue:t.map(r=>new Date(r))}}case"number_decimal":case"number_integer":return{...e,parsedValue:Number(e.value)};case"list.collection_reference":case"list.file_reference":case"list.page_reference":case"list.product_reference":case"list.variant_reference":return{...e,parsedValue:J(e.references??void 0)};default:{const t=`parseMetafield(): the 'metafield.type' you passed in is not supported. Your type: "${e.type}". If you believe this is an error, please open an issue on GitHub.`;return console.error(`${t} Returning 'parsedValue' of 'null'`),{...e,parsedValue:null}}}}function Ot(e){return String(e).includes("__proto__")?JSON.parse(e,(t,r)=>{if(t!=="__proto__")return r}):JSON.parse(e)}function Dn(e){var f,h,d,y,m,l;const{priceType:t="regular",variantId:r,valueType:n="min",data:a,...i}=e;if(a==null)throw new Error("<ProductPrice/> requires a product as the 'data' prop");let s,o;const u=r?J((a==null?void 0:a.variants)??{}).find(S=>(S==null?void 0:S.id)===r)??null:null;if(t==="compareAt")if(r&&u){if(((f=u.compareAtPriceV2)==null?void 0:f.amount)===((h=u.priceV2)==null?void 0:h.amount))return null;s=u.compareAtPriceV2}else n==="max"?s=(d=a==null?void 0:a.compareAtPriceRange)==null?void 0:d.maxVariantPrice:s=(y=a==null?void 0:a.compareAtPriceRange)==null?void 0:y.minVariantPrice;else r&&u?(s=u.priceV2,n==="unit"&&(s=u.unitPrice,o=u.unitPriceMeasurement)):n==="max"?s=(m=a.priceRange)==null?void 0:m.maxVariantPrice:s=(l=a.priceRange)==null?void 0:l.minVariantPrice;return s?o?React.createElement(we,{...i,data:s,measurement:o}):React.createElement(we,{...i,data:s}):null}const kn={root:On,heading:Un,paragraph:Nn,text:Vn,link:Mn,list:Ln,"list-item":xn};function On({node:e}){return React.createElement("div",null,e.children)}function Un({node:e}){return c.createElement(`h${e.level??"1"}`,null,e.children)}function Nn({node:e}){return React.createElement("p",null,e.children)}function Vn({node:e}){return e.bold&&e.italic?React.createElement("em",null,React.createElement("strong",null,e.value)):e.bold?React.createElement("strong",null,e.value):e.italic?React.createElement("em",null,e.value):e.value}function Mn({node:e}){return React.createElement("a",{href:e.url,title:e.title,target:e.target},e.children)}function Ln({node:e}){const t=e.listType==="unordered"?"ul":"ol";return React.createElement(t,null,e.children)}function xn({node:e}){return React.createElement("li",null,e.children)}function Fn({as:e,data:t,plain:r,components:n,...a}){try{const i=e??"div",s=c.useMemo(()=>JSON.parse(t),[t]);return React.createElement(i,{...a},r?ge(s):Ut(n,s))}catch(i){throw new Error("[h2:error:RichText] Parsing error. Make sure to pass a JSON string of rich text metafield",{cause:i})}}function Ut(e={},t,r=0){let n;"children"in t&&(n=t.children.map((i,s)=>Ut(e,i,s)));const a=e[t.type==="list-item"?"listItem":t.type]??kn[t.type];switch(t.type){case"root":return c.createElement(a,{key:r,node:{type:"root",children:n}});case"heading":return c.createElement(a,{key:r,node:{type:"heading",level:t.level,children:n}});case"paragraph":return c.createElement(a,{key:r,node:{type:"paragraph",children:n}});case"text":{const i=(t.value??"").split(`
|
|
282
|
+
`).flatMap((s,o)=>{const u=`${r}-${s}-${o}`,f=c.createElement(a,{key:u,node:{type:"text",italic:t.italic,bold:t.bold,value:s}});return o===0?f:[c.createElement("br",{key:`${u}-br`}),f]});return i.length>1?c.createElement(c.Fragment,{key:r},i):i[0]}case"link":return c.createElement(a,{key:r,node:{type:"link",url:t.url,title:t.title,target:t.target,children:n}});case"list":return c.createElement(a,{key:r,node:{type:"list",listType:t.listType,children:n}});case"list-item":return c.createElement(a,{key:r,node:{type:"list-item",children:n}})}}function ge(e,t=[]){switch(e.type){case"root":e.children.forEach(r=>ge(r,t));break;case"heading":case"paragraph":e.children.forEach(r=>ge(r,t)),t.push(" ");break;case"text":t.push(e.value||"");break;case"link":e.children.forEach(r=>ge(r,t));break;case"list":e.children.forEach(r=>{r.children&&r.children.forEach(n=>ge(n,t)),t.push(" ")});break;default:throw new Error(`Unknown node encountered ${e.type}`)}return t.join("").trim()}const $n="https://cdn.shopify.com/shopifycloud/shop-js/v1.0/client.js";function qn(e){return e==="headless"||e==="hydrogen"}function Hn({channel:e,variantIds:t,className:r,variantIdsAndQuantities:n,width:a,storeDomain:i}){const s=ce(),o=i||(s==null?void 0:s.storeDomain),u=Le($n);let f=[],h;if(!o||o===et.storeDomain)throw new Error(jn);if(t&&n)throw new Error(Yn);if(!t&&!n)throw new Error(Nt);if(e)if(qn(e))h=e;else throw new Error(Wn);if(t)f=t.reduce((y,m)=>{const l=F(m).id;return l&&y.push(l),y},[]);else if(n)f=n.reduce((y,m)=>{const l=F(m==null?void 0:m.id).id;return l&&y.push(`${l}:${(m==null?void 0:m.quantity)??1}`),y},[]);else throw new Error(Nt);if(f.length===0)throw new Error(Bn);const d=a?{"--shop-pay-button-width":a}:void 0;return React.createElement("div",{className:r,style:d},u==="done"&&React.createElement("shop-pay-button",{...h?{channel:h}:{},"store-url":o,variants:f.join(",")}))}const jn='You must pass a "storeDomain" prop to the "ShopPayButton" component, or wrap it in a "ShopifyProvider" component.',Bn='You must pass in "variantIds" in the form of ["gid://shopify/ProductVariant/1"]',Nt='You must pass in either "variantIds" or "variantIdsAndQuantities" to ShopPayButton',Yn="You must provide either a variantIds or variantIdsAndQuantities prop, but not both in the ShopPayButton component",Wn='Invalid channel attribution value. Must be either "headless" or "hydrogen"',Gn=60*60*24*360*1,Zn=60*30;function Qn(e){const{hasUserConsent:t=!1,domain:r=""}=e||{};c.useEffect(()=>{const n=Te(document.cookie);let a=r||window.document.location.host;/^localhost/.test(a)&&(a="");const i=a?/^\./.test(a)?a:`.${a}`:"";t?(be(K,n[K]||Se(),Gn,i),be(X,n[X]||Se(),Zn,i)):(be(K,"",0,i),be(X,"",0,i))},[e,t,r])}function be(e,t,r,n){document.cookie=Ur(e,t,{maxage:r,domain:n,samesite:"Lax",path:"/"})}E.AddToCartButton=Zr,E.AnalyticsEventName=te,E.AnalyticsPageType=Ie,E.BuyNowButton=gn,E.CartCheckoutButton=hn,E.CartCost=pn,E.CartLineProvider=En,E.CartLineQuantity=_n,E.CartLineQuantityAdjustButton=Cn,E.CartProvider=qr,E.ExternalVideo=At,E.IMAGE_FRAGMENT=An,E.Image=It,E.MediaFile=Pn,E.ModelViewer=kt,E.Money=we,E.ProductPrice=Dn,E.ProductProvider=Yr,E.RichText=Fn,E.SHOPIFY_S=X,E.SHOPIFY_STOREFRONT_ID_HEADER=rt,E.SHOPIFY_STOREFRONT_S_HEADER=at,E.SHOPIFY_STOREFRONT_Y_HEADER=nt,E.SHOPIFY_Y=K,E.ShopPayButton=Hn,E.ShopifyProvider=Dr,E.ShopifySalesChannel=yt,E.Video=Dt,E.createStorefrontClient=Pr,E.customerAccountApiCustomScalars=Tn,E.flattenConnection=J,E.getClientBrowserParameters=ln,E.getShopifyCookies=Te,E.parseGid=F,E.parseMetafield=Rn,E.sendShopifyAnalytics=cn,E.storefrontApiCustomScalars=Sn,E.useCart=oe,E.useCartLine=Ve,E.useLoadScript=Le,E.useMoney=St,E.useProduct=ut,E.useShop=ce,E.useShopifyCookies=Qn,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})});
|
|
282
283
|
//# sourceMappingURL=hydrogen-react.prod.js.map
|