@shopify/hydrogen 2024.4.3 → 2024.4.4
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/dist/development/index.cjs +92 -82
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +92 -81
- package/dist/development/index.js.map +1 -1
- package/dist/production/index.cjs +72 -74
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.d.cts +1 -1
- package/dist/production/index.d.ts +1 -1
- package/dist/production/index.js +31 -32
- package/dist/production/index.js.map +1 -1
- package/dist/vite/plugin.js +1 -5
- package/package.json +1 -2
|
@@ -1887,7 +1887,7 @@ type AnalyticsProviderProps = {
|
|
|
1887
1887
|
shop: Promise<ShopAnalytics | null> | ShopAnalytics | null;
|
|
1888
1888
|
/** The customer privacy consent configuration and options. */
|
|
1889
1889
|
consent: Partial<Pick<CustomerPrivacyApiProps, 'checkoutDomain' | 'storefrontAccessToken' | 'withPrivacyBanner'>>;
|
|
1890
|
-
/** Disable throwing errors when required props are missing. */
|
|
1890
|
+
/** @deprecated Disable throwing errors when required props are missing. */
|
|
1891
1891
|
disableThrowOnError?: boolean;
|
|
1892
1892
|
/** The domain scope of the cookie set with `useShopifyCookies`. **/
|
|
1893
1893
|
cookieDomain?: string;
|
|
@@ -1887,7 +1887,7 @@ type AnalyticsProviderProps = {
|
|
|
1887
1887
|
shop: Promise<ShopAnalytics | null> | ShopAnalytics | null;
|
|
1888
1888
|
/** The customer privacy consent configuration and options. */
|
|
1889
1889
|
consent: Partial<Pick<CustomerPrivacyApiProps, 'checkoutDomain' | 'storefrontAccessToken' | 'withPrivacyBanner'>>;
|
|
1890
|
-
/** Disable throwing errors when required props are missing. */
|
|
1890
|
+
/** @deprecated Disable throwing errors when required props are missing. */
|
|
1891
1891
|
disableThrowOnError?: boolean;
|
|
1892
1892
|
/** The domain scope of the cookie set with `useShopifyCookies`. **/
|
|
1893
1893
|
cookieDomain?: string;
|
package/dist/production/index.js
CHANGED
|
@@ -4,10 +4,9 @@ import { lazy, createContext, forwardRef, useMemo, createElement, Suspense, Frag
|
|
|
4
4
|
import { useMatches, useLocation, useNavigation, Link, useNavigate, useFetcher, useFetchers } from '@remix-run/react';
|
|
5
5
|
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
6
6
|
import { parse, stringify } from 'worktop/cookie';
|
|
7
|
-
import
|
|
8
|
-
import wr from 'tiny-invariant';
|
|
7
|
+
import Aa from 'content-security-policy-builder';
|
|
9
8
|
|
|
10
|
-
function
|
|
9
|
+
function Lt(e){let t=Array.isArray(e)?e:[e],r="";for(let a of t)a!=null&&(typeof a=="object"?r+=JSON.stringify(a):r+=a.toString());return encodeURIComponent(r)}var Ee="public",Br="private",Be="no-store",_t={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function fe(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):_t[r]&&t.push(`${_t[r]}=${e[r]}`);}),t.join(", ")}function We(){return {mode:Be}}function je(e){if(e?.mode&&e?.mode!==Ee&&e?.mode!==Br)throw Error("'mode' must be either 'public' or 'private'")}function oe(e){return je(e),{mode:Ee,maxAge:1,staleWhileRevalidate:9,...e}}function Ke(e){return je(e),{mode:Ee,maxAge:3600,staleWhileRevalidate:82800,...e}}function ae(e){return je(e),{mode:Ee,maxAge:1,staleWhileRevalidate:86399,...e}}function ze(e){return e}function K(e){return String(e).includes("__proto__")?JSON.parse(e,Wr):JSON.parse(e)}function Wr(e,t){if(e!=="__proto__")return t}function De(e,t){return e&&t?{...e,...t}:e||ae()}function Je(e){return fe(De(e))}async function jr(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function Kr(e,t,r,a){if(!e)return;let o=De(a),n=Je(De(o,{maxAge:(o.maxAge||0)+(o.staleWhileRevalidate||0)})),i=Je(De(o));r.headers.set("cache-control",n),r.headers.set("real-cache-control",i),r.headers.set("cache-put-date",new Date().toUTCString()),await e.put(t,r);}async function zr(e,t){e&&await e.delete(t);}function Jr(e,t){let r=e.headers.get("real-cache-control"),a=0;if(r){let n=r.match(/max-age=(\d*)/);n&&n.length>1&&(a=parseFloat(n[1]));}return [(new Date().valueOf()-new Date(t).valueOf())/1e3,a]}function Yr(e,t){let r=t.headers.get("cache-put-date");if(!r)return !1;let[a,o]=Jr(t,r),n=a>o;return n}var xe={get:jr,set:Kr,delete:zr,generateDefaultCacheControlHeader:Je,isStale:Yr};function me(e){return `https://shopify.dev/?${e}`}function Xr(e){return e||ae()}async function Ut(e,t){if(!e)return;let r=me(t),a=new Request(r),o=await xe.get(e,a);if(!o)return;let n=await o.text();try{return [K(n),o]}catch{return [n,o]}}async function Nt(e,t,r,a){if(!e)return;let o=me(t),n=new Request(o),i=new Response(JSON.stringify(r));await xe.set(e,n,i,Xr(a));}function Vt(e,t){return xe.isStale(new Request(me(e)),t)}function Mt(e,t){return [e,{status:t.status,statusText:t.statusText,headers:Array.from(t.headers.entries())}]}function Ft([e,t]){return [e,new Response(e,t)]}var $t=(e,t)=>!e?.errors&&t.status<400,Ye=new Set;async function Xe(e,t,{strategy:r=oe(),cacheInstance:a,shouldCacheResult:o=()=>!0,waitUntil:n,debugInfo:i}){let c=Lt([...typeof e=="string"?[e]:e]),y=f=>{({displayName:f.displayName,url:f.response?.url,responseInit:{status:f.response?.status||0,statusText:f.response?.statusText||"",headers:Array.from(f.response?.headers.entries()||[])}});},l=void 0;if(!a||!r||r.mode===Be){let f=await t({addDebugData:y});return f}let d=f=>Nt(a,c,{value:f,debugInfo:void 0},r),g=await Ut(a,c);if(g&&typeof g[0]!="string"){let[{value:f,debugInfo:I},v]=g;let N=Vt(c,v)?"STALE":"HIT";if(!Ye.has(c)&&N==="STALE"){Ye.add(c);let F=Promise.resolve().then(async()=>{let te=Date.now();try{let L=await t({addDebugData:y});o(L)&&(await d(L),l?.({result:L,cacheStatus:"PUT",overrideStartTime:te}));}catch(L){L.message&&(L.message="SWR in sub-request failed: "+L.message),console.error(L);}finally{Ye.delete(c);}});n?.(F);}return f}let h=await t({addDebugData:y});if(o(h)){let f=Promise.resolve().then(async()=>{await d(h);});n?.(f);}return h}async function qt(e,t,{cacheInstance:r,cache:a,cacheKey:o=[e,t],shouldCacheResponse:n=()=>!0,waitUntil:i,returnType:u="json",debugInfo:c}={}){return !a&&(!t.method||t.method==="GET")&&(a=oe()),Xe(o,async()=>{let s=await fetch(e,t),p;try{p=await s[u]();}catch{try{p=await s.text();}catch{return Mt("",s)}}return Mt(p,s)},{cacheInstance:r,waitUntil:i,strategy:a??null,debugInfo:c,shouldCacheResult:s=>n(...Ft(s))}).then(Ft)}var ge="2024.4.4";var Ze="Custom-Storefront-Request-Group-ID",et="X-Shopify-Storefront-Access-Token",tt="X-SDK-Variant",rt="X-SDK-Variant-Source",ot="X-SDK-Version",Oe="2024-04",ne=`Shopify Hydrogen ${ge}`,Ht="30243aa5-17c1-465a-8493-944bcc4e88aa",E="customerAccount",ie="buyer";function Qt(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var Gt=new Set,Wt=e=>{Gt.has(e)||(console.warn(e),Gt.add(e));},Bt=new Set,at=e=>{Bt.has(e)||(console.error(new Error(e)),Bt.add(e));};function se(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Zr=/(^|}\s)query[\s({]/im,eo=/(^|}\s)mutation[\s({]/im;function ke(e,t){if(!Zr.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function Le(e,t){if(!eo.test(e))throw new Error(`[h2:error:${t}] Can only execute mutations`)}var z=class extends Error{locations;path;extensions;constructor(t,r={}){let o=(r.clientOperation?`[h2:error:${r.clientOperation}] `:"")+t+(r.requestId?` - Request ID: ${r.requestId}`:"");super(o),this.name="GraphQLError",this.extensions=r.extensions,this.locations=r.locations,this.path=r.path,this.stack=r.stack||void 0;try{this.cause=JSON.stringify({...typeof r.cause=="object"?r.cause:{},requestId:r.requestId});}catch{r.cause&&(this.cause=r.cause);}}get[Symbol.toStringTag](){return this.name}toString(){let t=`${this.name}: ${this.message}`;if(this.path)try{t+=` | path: ${JSON.stringify(this.path)}`;}catch{}if(this.extensions)try{t+=` | extensions: ${JSON.stringify(this.extensions)}`;}catch{}return t+=`
|
|
11
10
|
`,this.stack&&(t+=`${this.stack.slice(this.stack.indexOf(`
|
|
12
11
|
`)+1)}
|
|
13
12
|
`),t}toJSON(){return {name:"Error",message:""}}};function he({url:e,response:t,errors:r,type:a,query:o,queryVariables:n,ErrorConstructor:i=Error,client:u="storefront"}){let c=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
|
|
@@ -15,7 +14,7 @@ function kt(e){let t=Array.isArray(e)?e:[e],r="";for(let a of t)a!=null&&(typeof
|
|
|
15
14
|
API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{errors:r},clientOperation:`${u}.${a}`,requestId:t.headers.get("x-request-id")});throw new i(s.message,{cause:s.cause})}function ce(e,t={}){let r=new Error,a=(o,n="Error")=>{let i=(r.stack??"").split(`
|
|
16
15
|
`).slice(3+(t.stackOffset??0)).join(`
|
|
17
16
|
`).replace(/ at loader(\d+) \(/,(u,c)=>u.replace(c,""));return `${n}: ${o}
|
|
18
|
-
`+i};return e.then(o=>{if(o?.errors&&Array.isArray(o.errors)){let n=typeof t.logErrors=="function"?t.logErrors:()=>t.logErrors??!1;o.errors.forEach(i=>{i&&(i.stack=a(i.message,i.name),n(i)&&console.error(i));});}return o}).catch(o=>{throw o&&(o.stack=a(o.message,o.name)),o})}var q=void 0;var
|
|
17
|
+
`+i};return e.then(o=>{if(o?.errors&&Array.isArray(o.errors)){let n=typeof t.logErrors=="function"?t.logErrors:()=>t.logErrors??!1;o.errors.forEach(i=>{i&&(i.stack=a(i.message,i.name),n(i)&&console.error(i));});}return o}).catch(o=>{throw o&&(o.stack=a(o.message,o.name)),o})}var q=void 0;var io={language:"EN",country:"US"};function Jn(e){let {storefrontHeaders:t,cache:r,waitUntil:a,i18n:o,storefrontId:n,logErrors:i=!0,...u}=e,{getPublicTokenHeaders:s,getPrivateTokenHeaders:p,getStorefrontApiUrl:y,getShopifyDomain:m}=createStorefrontClient(u),d=(u.privateStorefrontToken?p:s)({contentType:"json",buyerIp:t?.buyerIp||""});if(d[Ze]=t?.requestGroupId||Qt(),n&&(d[SHOPIFY_STOREFRONT_ID_HEADER]=n),(d["user-agent"]=`Hydrogen ${ge}`),t&&t.cookie){let f=getShopifyCookies(t.cookie??"");f[SHOPIFY_Y]&&(d[SHOPIFY_STOREFRONT_Y_HEADER]=f[SHOPIFY_Y]),f[SHOPIFY_S]&&(d[SHOPIFY_STOREFRONT_S_HEADER]=f[SHOPIFY_S]);}let g=JSON.stringify({"content-type":d["content-type"],"user-agent":d["user-agent"],[tt]:d[tt],[rt]:d[rt],[ot]:d[ot],[et]:d[et]});async function h({query:f,mutation:I,variables:v,cache:N,headers:F=[],storefrontApiVersion:te,displayName:L,stackInfo:be}){let C=F instanceof Headers?Object.fromEntries(F.entries()):Array.isArray(F)?Object.fromEntries(F):F,S=f??I,A={...v};o&&(!v?.country&&/\$country/.test(S)&&(A.country=o.country),!v?.language&&/\$language/.test(S)&&(A.language=o.language));let T=y({storefrontApiVersion:te}),V=JSON.stringify({query:S,variables:A}),M={method:"POST",headers:{...d,...C},body:V},x=[T,M.method,g,M.body],[O,k]=await qt(T,M,{cacheInstance:I?void 0:r,cache:N||ae(),cacheKey:x,shouldCacheResponse:$t,waitUntil:a,debugInfo:{requestId:M.headers[Ze],displayName:L,url:T,stackInfo:be,graphql:V,purpose:t?.purpose}}),b={url:T,response:k,type:I?"mutation":"query",query:S,queryVariables:A,errors:void 0};if(!k.ok){let $;try{$=K(O);}catch{$=[{message:O}];}he({...b,errors:$});}let{data:U,errors:le}=O,re=le?.map(({message:$,...ye})=>new z($,{...ye,clientOperation:`storefront.${b.type}`,requestId:k.headers.get("x-request-id"),queryVariables:A,query:S}));return P(U,re)}return {storefront:{query(f,I){f=se(f),ke(f,"storefront.query");let v=zt?.(f);return ce(h({...I,query:f,stackInfo:q?.(v)}),{stackOffset:v,logErrors:i})},mutate(f,I){f=se(f),Le(f,"storefront.mutate");let v=zt?.(f);return ce(h({...I,mutation:f,stackInfo:q?.(v)}),{stackOffset:v,logErrors:i})},cache:r,CacheNone:We,CacheLong:Ke,CacheShort:oe,CacheCustom:ze,generateCacheControlHeader:fe,getPublicTokenHeaders:s,getPrivateTokenHeaders:p,getShopifyDomain:m,getApiUrl:y,i18n:o??io}}}var zt=void 0;function P(e,t){return {...e,...t&&{errors:t}}}function _e(e,t){let r=e.headers?.get?.(t)??e.headers?.[t];return typeof r=="string"?r:null}function J(e){return {requestId:e?_e(e,"request-id"):void 0,purpose:e?_e(e,"purpose"):void 0}}function ri({cache:e,waitUntil:t,request:r}){return function(o,n,i){return Xe(o,i,{strategy:n,cacheInstance:e,waitUntil:t,debugInfo:{...J(r),stackInfo:q?.()}})}}var nt=class{#e;constructor(){this.#e=new Map;}add(t){throw new Error("Method not implemented. Use `put` instead.")}addAll(t){throw new Error("Method not implemented. Use `put` instead.")}matchAll(t,r){throw new Error("Method not implemented. Use `match` instead.")}async put(t,r){if(t.method!=="GET")throw new TypeError("Cannot cache response to non-GET request.");if(r.status===206)throw new TypeError("Cannot cache response to a range request (206 Partial Content).");if(r.headers.get("vary")?.includes("*"))throw new TypeError("Cannot cache response with 'Vary: *' header.");this.#e.set(t.url,{body:new Uint8Array(await r.arrayBuffer()),status:r.status,headers:[...r.headers],timestamp:Date.now()});}async match(t){if(t.method!=="GET")return;let r=this.#e.get(t.url);if(!r)return;let{body:a,timestamp:o,...n}=r,i=new Headers(n.headers),u=i.get("cache-control")||i.get("real-cache-control")||"",c=parseInt(u.match(/max-age=(\d+)/)?.[1]||"0",10),s=parseInt(u.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-o)/1e3;if(p>c+s){this.#e.delete(t.url);return}let m=p>c;return i.set("cache",m?"STALE":"HIT"),i.set("date",new Date(o).toUTCString()),new Response(a,{status:n.status??200,headers:i})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),!0):!1}keys(t){let r=[];for(let a of this.#e.keys())(!t||t.url===a)&&r.push(new Request(a));return Promise.resolve(r)}};function Ue(e){if(!e)return;let{pathname:t,search:r}=new URL(e),a=t+r,o=new URLSearchParams(r),n=o.get("return_to")||o.get("redirect");if(n){if(Yt(e,n))return n;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${a} to ${n}`);}}function Yt(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return !1}}function it({requestUrl:e,defaultUrl:t,redirectUrl:r}){let a=e,o=Jt(e,t),n=r?Jt(e,r):o;return Yt(e,n.toString())?n.toString():(console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${a} to ${n}. Default url ${o} is used instead.`),o.toString())}function Jt(e,t){return so(t)?new URL(t):new URL(t,new URL(e).origin)}function so(e){try{return new URL(e),!0}catch{return !1}}async function co(e){let{storefront:t,request:r,noAdminRedirect:a,matchQueryParams:o,response:n=new Response("Not Found",{status:404})}=e,i=new URL(r.url),{pathname:u,searchParams:c}=i,s=c.has("_data");c.delete("redirect"),c.delete("return_to"),c.delete("_data");let p=(o?i.toString().replace(i.origin,""):u).toLowerCase();if(i.pathname==="/admin"&&!a)return ct(`${t.getShopifyDomain()}/admin`,s,c,o);try{let{urlRedirects:y}=await t.query(uo,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),m=y?.edges?.[0]?.node?.target;if(m)return ct(m,s,c,o);let l=Ue(r.url);if(l)return ct(l,s,c,o)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,y);}return n}var st="https://example.com";function ct(e,t,r,a){let o=new URL(e,st);if(!a)for(let[n,i]of r)o.searchParams.append(n,i);return t?new Response(null,{status:200,headers:{"X-Remix-Redirect":o.toString().replace(st,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:o.toString().replace(st,"")}})}var uo=`#graphql
|
|
19
18
|
query redirects($query: String) {
|
|
20
19
|
urlRedirects(first: 1, query: $query) {
|
|
21
20
|
edges {
|
|
@@ -25,7 +24,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
25
24
|
}
|
|
26
25
|
}
|
|
27
26
|
}
|
|
28
|
-
`;var
|
|
27
|
+
`;var po=async function({request:t,context:r}){let a=r.storefront,o=r.customerAccount,n=new URL(t.url);if(!a)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let i={};if(a){let s="X-Shopify-Storefront-Access-Token";i.storefront={name:"Storefront API",authHeader:s,accessToken:a.getPublicTokenHeaders()[s],apiUrl:a.getApiUrl(),icon:"SF"};}if(o){let s=await(await fetch(n.origin+"/graphiql/customer-account.schema.json")).json(),p=await o.getAccessToken();s&&(i["customer-account"]={name:"Customer Account API",value:s,authHeader:"Authorization",accessToken:p,apiUrl:o.getApiUrl(),icon:"CA"});}let u="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",c=String.raw;return new Response(c`
|
|
29
28
|
<!DOCTYPE html>
|
|
30
29
|
<html lang="en">
|
|
31
30
|
<head>
|
|
@@ -291,13 +290,13 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
291
290
|
</script>
|
|
292
291
|
</body>
|
|
293
292
|
</html>
|
|
294
|
-
`,{status:200,headers:{"content-type":"text/html"}})};var po={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},lo=/[&><\u2028\u2029]/g;function Jt(e){return e.replace(lo,t=>po[t])}var B="Error in SEO input: ",H={title:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`title` should be a string"));if(typeof e=="string"&&e.length>120)throw new Error(B.concat("`title` should not be longer than 120 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(B.concat("`description` should not be longer than 155 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(B.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(B.concat("`handle` should start with `@`"));return e}}};function Yt(e){let t=[];for(let r of Object.keys(e))switch(r){case"title":{let a=Q(H.title,e.title),o=ut(e?.titleTemplate,a);if(!o)break;t.push(x("title",{title:o}),x("meta",{property:"og:title",content:o}),x("meta",{name:"twitter:title",content:o}));break}case"description":{let a=Q(H.description,e.description);if(!a)break;t.push(x("meta",{name:"description",content:a}),x("meta",{property:"og:description",content:a}),x("meta",{name:"twitter:description",content:a}));break}case"url":{let a=Q(H.url,e.url);if(!a)break;let n=a.split("?")[0].replace(/\/$/,"");t.push(x("link",{rel:"canonical",href:n}),x("meta",{property:"og:url",content:n}));break}case"handle":{let a=Q(H.handle,e.handle);if(!a)break;t.push(x("meta",{name:"twitter:site",content:a}),x("meta",{name:"twitter:creator",content:a}));break}case"media":{let a,o=W(e.media);for(let n of o)if(typeof n=="string"&&t.push(x("meta",{name:"og:image",content:n})),n&&typeof n=="object"){let i=n.type||"image",u=n?{url:n?.url,secure_url:n?.url,type:pt(n.url),width:n?.width,height:n?.height,alt:n?.altText}:{};for(let c of Object.keys(u))u[c]&&(a=u[c],t.push(x("meta",{property:`og:${i}:${c}`,content:a},u.url)));}break}case"jsonLd":{let a=W(e.jsonLd),o=0;for(let n of a){if(typeof n!="object")continue;let i=x("script",{type:"application/ld+json",children:JSON.stringify(n,(u,c)=>typeof c=="string"?Jt(c):c)},`json-ld-${n?.["@type"]||n?.name||o++}`);t.push(i);}break}case"alternates":{let a=W(e.alternates);for(let o of a){if(!o)continue;let{language:n,url:i,default:u}=o,c=n?`${n}${u?"-default":""}`:void 0;t.push(x("link",{rel:"alternate",hrefLang:c,href:i}));}break}case"robots":{if(!e.robots)break;let{maxImagePreview:a,maxSnippet:o,maxVideoPreview:n,noArchive:i,noFollow:u,noImageIndex:c,noIndex:s,noSnippet:p,noTranslate:y,unavailableAfter:m}=e.robots,l=[i&&"noarchive",c&&"noimageindex",p&&"nosnippet",y&&"notranslate",a&&`max-image-preview:${a}`,o&&`max-snippet:${o}`,n&&`max-video-preview:${n}`,m&&`unavailable_after:${m}`],d=(s?"noindex":"index")+","+(u?"nofollow":"follow");for(let g of l)g&&(d+=`,${g}`);t.push(x("meta",{name:"robots",content:d}));break}}return t.flat().sort((r,a)=>r.key.localeCompare(a.key))}function x(e,t,r){let a={tag:e,props:{},key:""};return e==="title"?(a.children=t.title,a.key=ct(a),a):e==="script"?(a.children=typeof t.children=="string"?t.children:"",a.key=ct(a,r),delete t.children,a.props=t,a):(a.props=t,Object.keys(a.props).forEach(o=>!a.props[o]&&delete a.props[o]),a.key=ct(a,r),a)}function ct(e,t){let{tag:r,props:a}=e;if(r==="title")return "0-title";if(r==="meta"){let o=a.content===t&&typeof a.property=="string"&&!a.property.endsWith("secure_url")&&"0";return [r,...[t,o],a.property||a.name].filter(i=>i).join("-")}return r==="link"?[r,a.rel,a.hrefLang||a.media].filter(n=>n).join("-").replace(/\s+/g,"-"):r==="script"?`${r}-${t}`:`${r}-${a.type}`}function ut(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function pt(e){switch(e&&e.split(".").pop()){case"svg":return "image/svg+xml";case"png":return "image/png";case"gif":return "image/gif";case"swf":return "application/x-shockwave-flash";case"mp3":return "audio/mpeg";case"jpg":case"jpeg":default:return "image/jpeg"}}function W(e){return Array.isArray(e)?e:[e]}function Q(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}var Co=lazy(()=>import('./log-seo-tags-TY72EQWZ.js'));function So({debug:e}){let t=useMatches(),r=useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/2024-01/utilities/getseometa");let a=useMemo(()=>t.flatMap(i=>{let{handle:u,...c}=i,s={...c,...r},p=u?.seo,y=c?.data?.seo;return !p&&!y?[]:p?Ne(p,s):[y]}).reduce((i,u)=>{Object.keys(u).forEach(s=>!u[s]&&delete u[s]);let{jsonLd:c}=u;return c?i?.jsonLd?Array.isArray(c)?{...i,...u,jsonLd:[...i.jsonLd,...c]}:{...i,...u,jsonLd:[...i.jsonLd,c]}:{...i,...u,jsonLd:[c]}:{...i,...u}},{}),[t,r]),{html:o,loggerMarkup:n}=useMemo(()=>{let i=Yt(a),u=i.map(s=>s.tag==="script"?createElement(s.tag,{...s.props,key:s.key,dangerouslySetInnerHTML:{__html:s.children}}):createElement(s.tag,{...s.props,key:s.key},s.children)),c=createElement(Suspense,{fallback:null},createElement(Co,{headTags:i}));return {html:u,loggerMarkup:c}},[a]);return createElement(Fragment,null,o,e&&n)}function Ne(e,...t){if(e instanceof Function)return Ne(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((a,o)=>[...a,Ne(o)],[]),r):e instanceof Object?(Object.entries(e).forEach(([o,n])=>{r[o]=Ne(n,...t);}),r):e}function Po(...e){let t=[],r=e.reduce((a,o)=>{if(!o)return a;Object.keys(o).forEach(i=>!o[i]&&delete o[i]);let{jsonLd:n}=o;return n?a?.jsonLd?{...a,...o,jsonLd:W(a.jsonLd).concat(n)}:{...a,...o,jsonLd:[n]}:{...a,...o}},{})||{};for(let a of Object.keys(r))switch(a){case"title":{let o=Q(H.title,r.title),n=ut(r?.titleTemplate,o);if(!n)break;t.push({title:n},{property:"og:title",content:n},{property:"twitter:title",content:n});break}case"description":{let o=Q(H.description,r.description);if(!o)break;t.push({name:"description",content:o},{property:"og:description",content:o},{property:"twitter:description",content:o});break}case"url":{let o=Q(H.url,r.url);if(!o)break;let i=o.split("?")[0].replace(/\/$/,"");t.push({tagName:"link",rel:"canonical",href:i},{property:"og:url",content:i});break}case"handle":{let o=Q(H.handle,r.handle);if(!o)break;t.push({property:"twitter:site",content:o},{property:"twitter:creator",content:o});break}case"media":{let o,n=W(r.media);for(let i of n)if(typeof i=="string"&&t.push({property:"og:image",content:i}),i&&typeof i=="object"){let u=i.type||"image",c=i?{url:i?.url,secure_url:i?.url,type:pt(i.url),width:i?.width,height:i?.height,alt:i?.altText}:{};for(let s of Object.keys(c))c[s]&&(o=c[s],t.push({property:`og:${u}:${s}`,content:o}));}break}case"jsonLd":{let o=W(r.jsonLd);for(let i of o)typeof i!="object"||Object.keys(i).length===0||t.push({"script:ld+json":i});break}case"alternates":{let o=W(r.alternates);for(let n of o){if(!n)continue;let{language:i,url:u,default:c}=n,s=i?`${i}${c?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:s,href:u});}break}case"robots":{if(!r.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:i,noArchive:u,noFollow:c,noImageIndex:s,noIndex:p,noSnippet:y,noTranslate:m,unavailableAfter:l}=r.robots,d=[u&&"noarchive",s&&"noimageindex",y&&"nosnippet",m&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,i&&`max-video-preview:${i}`,l&&`unavailable_after:${l}`],g=(p?"noindex":"index")+","+(c?"nofollow":"follow");for(let h of d)h&&(g+=`,${h}`);t.push({name:"robots",content:g});break}}return t}function Io({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null)}){let a=useNavigation().state==="loading",{endCursor:o,hasNextPage:n,hasPreviousPage:i,nextPageUrl:u,nodes:c,previousPageUrl:s,startCursor:p}=wo(e),y=useMemo(()=>({pageInfo:{endCursor:o,hasPreviousPage:i,hasNextPage:n,startCursor:p},nodes:c}),[o,n,i,p,c]),m=useMemo(()=>forwardRef(function(g,h){return n?createElement(Link,{preventScrollReset:!0,...g,to:u,state:y,replace:!0,ref:h}):null}),[n,u,y]),l=useMemo(()=>forwardRef(function(g,h){return i?createElement(Link,{preventScrollReset:!0,...g,to:s,state:y,replace:!0,ref:h}):null}),[i,s,y]);return t({state:y,hasNextPage:n,hasPreviousPage:i,isLoading:a,nextPageUrl:u,nodes:c,previousPageUrl:s,NextLink:m,PreviousLink:l})}function Ve(e){let t=new URLSearchParams(e);return t.delete("cursor"),t.delete("direction"),t.toString()}function Se(e){throw new Error(`The Pagination component requires ${"`"+e+"`"} to be a part of your query. See the guide on how to setup your query to include ${"`"+e+"`"}: https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/pagination#setup-the-paginated-query`)}function wo(e){e.pageInfo||Se("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Se("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Se("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Se("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Se("pageInfo.hasPreviousPage");let t=useNavigate(),{state:r,search:a,pathname:o}=useLocation(),u=new URLSearchParams(a).get("direction")==="previous",c=useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!r||!r?.nodes?flattenConnection(e):u?[...flattenConnection(e),...r.nodes]:[...r.nodes,...flattenConnection(e)],[r,e]),s=useMemo(()=>{let l=globalThis?.window?.__hydrogenHydrated,d=!l||r?.pageInfo?.startCursor===void 0?e.pageInfo.startCursor:r.pageInfo.startCursor,g=!l||r?.pageInfo?.endCursor===void 0?e.pageInfo.endCursor:r.pageInfo.endCursor,h=!l||r?.pageInfo?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:r.pageInfo.hasPreviousPage,f=!l||r?.pageInfo?.hasNextPage===void 0?e.pageInfo.hasNextPage:r.pageInfo.hasNextPage;return r?.nodes&&(u?(d=e.pageInfo.startCursor,h=e.pageInfo.hasPreviousPage):(g=e.pageInfo.endCursor,f=e.pageInfo.hasNextPage)),{startCursor:d,endCursor:g,hasPreviousPage:h,hasNextPage:f}},[u,r,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),p=useRef({params:Ve(a),pathname:o});useEffect(()=>{window.__hydrogenHydrated=!0;},[]),useEffect(()=>{(Ve(a)!==p.current.params||o!==p.current.pathname)&&(p.current={pathname:o,params:Ve(a)},t(`${o}?${Ve(a)}`,{replace:!0,preventScrollReset:!0,state:{nodes:void 0,pageInfo:void 0}}));},[o,a]);let y=useMemo(()=>{let l=new URLSearchParams(a);return l.set("direction","previous"),s.startCursor&&l.set("cursor",s.startCursor),`?${l.toString()}`},[a,s.startCursor]),m=useMemo(()=>{let l=new URLSearchParams(a);return l.set("direction","next"),s.endCursor&&l.set("cursor",s.endCursor),`?${l.toString()}`},[a,s.endCursor]);return {...s,previousPageUrl:y,nextPageUrl:m,nodes:c}}function bo(e,t={pageBy:20}){if(typeof e?.url>"u")throw new Error("getPaginationVariables must be called with the Request object passed to your loader function");let{pageBy:r}=t,a=new URLSearchParams(new URL(e.url).search),o=a.get("cursor")??void 0;return (a.get("direction")==="previous"?"previous":"next")==="previous"?{last:r,startCursor:o??null}:{first:r,endCursor:o??null}}var _=class extends Response{constructor(t,r,a){super(`Bad request: ${t}`,{status:400,headers:a});}};function Ae(e,t={}){let r=t.headers?new Headers(t.headers):new Headers({});return r.set("location",e),new Response(null,{status:t.status||302,headers:r})}async function Eo({session:e,customerAccountId:t,customerAccountUrl:r,httpsOrigin:a,debugInfo:o,exchangeForStorefrontCustomerAccessToken:n}){let i=new URLSearchParams,u=e.get(E),c=u?.refreshToken,s=u?.idToken;if(!c)throw new _("Unauthorized","No refreshToken found in the session. Make sure your session is configured correctly and passed to `createCustomerAccountClient`.");i.append("grant_type","refresh_token"),i.append("refresh_token",c),i.append("client_id",t);let p={"content-type":"application/x-www-form-urlencoded","User-Agent":ne,Origin:a};new Date().getTime();let m=`${r}/auth/oauth/token`,l=await fetch(m,{method:"POST",headers:p,body:i});if(!l.ok){let v=await l.text();throw new Response(v,{status:l.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:d,expires_in:g,refresh_token:h}=await l.json(),f=await lt(d,t,r,a);e.set(E,{accessToken:f,expiresAt:new Date(new Date().getTime()+(g-120)*1e3).getTime()+"",refreshToken:h,idToken:s}),await n();}function ue(e){e.unset(E),e.unset(ie);}async function or({locks:e,expiresAt:t,session:r,customerAccountId:a,customerAccountUrl:o,httpsOrigin:n,debugInfo:i,exchangeForStorefrontCustomerAccessToken:u}){if(parseInt(t,10)-1e3<new Date().getTime())try{e.refresh||(e.refresh=Eo({session:r,customerAccountId:a,customerAccountUrl:o,httpsOrigin:n,debugInfo:i,exchangeForStorefrontCustomerAccessToken:u})),await e.refresh,delete e.refresh;}catch(c){throw ue(r),c&&c.status!==401?c:new _("Unauthorized","Login before querying the Customer Account API.",{"Set-Cookie":await r.commit()})}}function ar(){let e=xo();return ir(e)}async function nr(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=Do(t);return ir(r)}function xo(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function ir(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Do(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function sr(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function lt(e,t,r,a,o){let n=t;if(!e)throw new _("Unauthorized","oAuth access token was not provided during token exchange.");let i=new URLSearchParams;i.append("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.append("client_id",n),i.append("audience",qt),i.append("subject_token",e),i.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.append("scopes","https://api.customers.com/auth/customer.graphql");let u={"content-type":"application/x-www-form-urlencoded","User-Agent":ne,Origin:a};new Date().getTime();let s=`${r}/auth/oauth/token`,p=await fetch(s,{method:"POST",headers:u,body:i});let y=await p.json();if(y.error)throw new _(y.error_description);return y.access_token}function cr(e){return Oo(e).payload.nonce}function Oo(e){let[t,r,a]=e.split("."),o=JSON.parse(atob(t)),n=JSON.parse(atob(r));return {header:o,payload:n,signature:a}}function Me(){return Lo(ko())}function ko(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function Lo(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}var ur="/account/login",_o="/account/authorize",pr="/account";function Uo(e){if(!e.url)return ur;let{pathname:t}=new URL(e.url),r=ur+`?${new URLSearchParams({return_to:t}).toString()}`;return Ae(r)}function No({session:e,customerAccountId:t,customerAccountUrl:r,customerApiVersion:a=Oe,request:o,waitUntil:n,authUrl:i,customAuthStatusHandler:u,logErrors:c=!0,unstableB2b:s=!1}){if(a!==Oe&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${a} when this version of Hydrogen was built for ${Oe}.`),!o?.url)throw new Error("[h2:error:createCustomerAccountClient] The request object does not contain a URL.");let p=u||(()=>Uo(o)),y=new URL(o.url),m=y.protocol==="http:"?y.origin.replace("http","https"):y.origin,l=nt({requestUrl:m,defaultUrl:_o,redirectUrl:i}),d=`${r}/account/customer/api/${a}/graphql`,g={};async function h({query:C,type:S,variables:T={}}){let R=await P();if(!R)throw p();new Date().getTime();let D=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":ne,Origin:m,Authorization:R},body:JSON.stringify({query:C,variables:T})});let O=await D.text(),k={url:d,response:D,type:S,query:C,queryVariables:T,errors:void 0,client:"customer"};if(!D.ok){if(D.status===401){ue(e);let U=p();throw U instanceof Response&&U.headers.set("Set-Cookie",await e.commit()),U}let b;try{b=K(O);}catch{b=[{message:O}];}he({...k,errors:b});}try{let b=K(O),{errors:U}=b,le=U?.map(({message:re,...$})=>new z(re,{...$,clientOperation:`customerAccount.${k.type}`,requestId:D.headers.get("x-request-id"),queryVariables:T,query:C}));return {...b,...U&&{errors:le}}}catch{he({...k,errors:[{message:O}]});}}async function f(){if(!r||!t)return !1;let C=e.get(E),S=C?.accessToken,T=C?.expiresAt;if(!S||!T)return !1;let R=q?.();try{await or({locks:g,expiresAt:T,session:e,customerAccountId:t,customerAccountUrl:r,httpsOrigin:m,debugInfo:{waitUntil:n,stackInfo:R,...J(o)},exchangeForStorefrontCustomerAccessToken:be});}catch{return !1}return !0}async function v(){if(!await f())throw p()}async function P(){if(await f())return e.get(E)?.accessToken}async function N(C,S){return Te(r,t),C=se(C),Le(C,"customer.mutate"),ce(h({query:C,type:"mutation",...S}),{logErrors:c})}async function F(C,S){return Te(r,t),C=se(C),ke(C,"customer.query"),ce(h({query:C,type:"query",...S}),{logErrors:c})}function te(C){e.set(ie,{...e.get(ie),...C});}async function L(){if(await f())return e.get(ie)}async function be(){if(!s)return;let C=`#graphql
|
|
293
|
+
`,{status:200,headers:{"content-type":"text/html"}})};var lo={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},yo=/[&><\u2028\u2029]/g;function Xt(e){return e.replace(yo,t=>lo[t])}var B="Error in SEO input: ",H={title:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`title` should be a string"));if(typeof e=="string"&&e.length>120)throw new Error(B.concat("`title` should not be longer than 120 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(B.concat("`description` should not be longer than 155 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(B.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(B.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(B.concat("`handle` should start with `@`"));return e}}};function Zt(e){let t=[];for(let r of Object.keys(e))switch(r){case"title":{let a=Q(H.title,e.title),o=pt(e?.titleTemplate,a);if(!o)break;t.push(D("title",{title:o}),D("meta",{property:"og:title",content:o}),D("meta",{name:"twitter:title",content:o}));break}case"description":{let a=Q(H.description,e.description);if(!a)break;t.push(D("meta",{name:"description",content:a}),D("meta",{property:"og:description",content:a}),D("meta",{name:"twitter:description",content:a}));break}case"url":{let a=Q(H.url,e.url);if(!a)break;let n=a.split("?")[0].replace(/\/$/,"");t.push(D("link",{rel:"canonical",href:n}),D("meta",{property:"og:url",content:n}));break}case"handle":{let a=Q(H.handle,e.handle);if(!a)break;t.push(D("meta",{name:"twitter:site",content:a}),D("meta",{name:"twitter:creator",content:a}));break}case"media":{let a,o=W(e.media);for(let n of o)if(typeof n=="string"&&t.push(D("meta",{name:"og:image",content:n})),n&&typeof n=="object"){let i=n.type||"image",u=n?{url:n?.url,secure_url:n?.url,type:dt(n.url),width:n?.width,height:n?.height,alt:n?.altText}:{};for(let c of Object.keys(u))u[c]&&(a=u[c],t.push(D("meta",{property:`og:${i}:${c}`,content:a},u.url)));}break}case"jsonLd":{let a=W(e.jsonLd),o=0;for(let n of a){if(typeof n!="object")continue;let i=D("script",{type:"application/ld+json",children:JSON.stringify(n,(u,c)=>typeof c=="string"?Xt(c):c)},`json-ld-${n?.["@type"]||n?.name||o++}`);t.push(i);}break}case"alternates":{let a=W(e.alternates);for(let o of a){if(!o)continue;let{language:n,url:i,default:u}=o,c=n?`${n}${u?"-default":""}`:void 0;t.push(D("link",{rel:"alternate",hrefLang:c,href:i}));}break}case"robots":{if(!e.robots)break;let{maxImagePreview:a,maxSnippet:o,maxVideoPreview:n,noArchive:i,noFollow:u,noImageIndex:c,noIndex:s,noSnippet:p,noTranslate:y,unavailableAfter:m}=e.robots,l=[i&&"noarchive",c&&"noimageindex",p&&"nosnippet",y&&"notranslate",a&&`max-image-preview:${a}`,o&&`max-snippet:${o}`,n&&`max-video-preview:${n}`,m&&`unavailable_after:${m}`],d=(s?"noindex":"index")+","+(u?"nofollow":"follow");for(let g of l)g&&(d+=`,${g}`);t.push(D("meta",{name:"robots",content:d}));break}}return t.flat().sort((r,a)=>r.key.localeCompare(a.key))}function D(e,t,r){let a={tag:e,props:{},key:""};return e==="title"?(a.children=t.title,a.key=ut(a),a):e==="script"?(a.children=typeof t.children=="string"?t.children:"",a.key=ut(a,r),delete t.children,a.props=t,a):(a.props=t,Object.keys(a.props).forEach(o=>!a.props[o]&&delete a.props[o]),a.key=ut(a,r),a)}function ut(e,t){let{tag:r,props:a}=e;if(r==="title")return "0-title";if(r==="meta"){let o=a.content===t&&typeof a.property=="string"&&!a.property.endsWith("secure_url")&&"0";return [r,...[t,o],a.property||a.name].filter(i=>i).join("-")}return r==="link"?[r,a.rel,a.hrefLang||a.media].filter(n=>n).join("-").replace(/\s+/g,"-"):r==="script"?`${r}-${t}`:`${r}-${a.type}`}function pt(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function dt(e){switch(e&&e.split(".").pop()){case"svg":return "image/svg+xml";case"png":return "image/png";case"gif":return "image/gif";case"swf":return "application/x-shockwave-flash";case"mp3":return "audio/mpeg";case"jpg":case"jpeg":default:return "image/jpeg"}}function W(e){return Array.isArray(e)?e:[e]}function Q(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}var So=lazy(()=>import('./log-seo-tags-TY72EQWZ.js'));function Po({debug:e}){let t=useMatches(),r=useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/2024-01/utilities/getseometa");let a=useMemo(()=>t.flatMap(i=>{let{handle:u,...c}=i,s={...c,...r},p=u?.seo,y=c?.data?.seo;return !p&&!y?[]:p?Ne(p,s):[y]}).reduce((i,u)=>{Object.keys(u).forEach(s=>!u[s]&&delete u[s]);let{jsonLd:c}=u;return c?i?.jsonLd?Array.isArray(c)?{...i,...u,jsonLd:[...i.jsonLd,...c]}:{...i,...u,jsonLd:[...i.jsonLd,c]}:{...i,...u,jsonLd:[c]}:{...i,...u}},{}),[t,r]),{html:o,loggerMarkup:n}=useMemo(()=>{let i=Zt(a),u=i.map(s=>s.tag==="script"?createElement(s.tag,{...s.props,key:s.key,dangerouslySetInnerHTML:{__html:s.children}}):createElement(s.tag,{...s.props,key:s.key},s.children)),c=createElement(Suspense,{fallback:null},createElement(So,{headTags:i}));return {html:u,loggerMarkup:c}},[a]);return createElement(Fragment,null,o,e&&n)}function Ne(e,...t){if(e instanceof Function)return Ne(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((a,o)=>[...a,Ne(o)],[]),r):e instanceof Object?(Object.entries(e).forEach(([o,n])=>{r[o]=Ne(n,...t);}),r):e}function Ao(...e){let t=[],r=e.reduce((a,o)=>{if(!o)return a;Object.keys(o).forEach(i=>!o[i]&&delete o[i]);let{jsonLd:n}=o;return n?a?.jsonLd?{...a,...o,jsonLd:W(a.jsonLd).concat(n)}:{...a,...o,jsonLd:[n]}:{...a,...o}},{})||{};for(let a of Object.keys(r))switch(a){case"title":{let o=Q(H.title,r.title),n=pt(r?.titleTemplate,o);if(!n)break;t.push({title:n},{property:"og:title",content:n},{property:"twitter:title",content:n});break}case"description":{let o=Q(H.description,r.description);if(!o)break;t.push({name:"description",content:o},{property:"og:description",content:o},{property:"twitter:description",content:o});break}case"url":{let o=Q(H.url,r.url);if(!o)break;let i=o.split("?")[0].replace(/\/$/,"");t.push({tagName:"link",rel:"canonical",href:i},{property:"og:url",content:i});break}case"handle":{let o=Q(H.handle,r.handle);if(!o)break;t.push({property:"twitter:site",content:o},{property:"twitter:creator",content:o});break}case"media":{let o,n=W(r.media);for(let i of n)if(typeof i=="string"&&t.push({property:"og:image",content:i}),i&&typeof i=="object"){let u=i.type||"image",c=i?{url:i?.url,secure_url:i?.url,type:dt(i.url),width:i?.width,height:i?.height,alt:i?.altText}:{};for(let s of Object.keys(c))c[s]&&(o=c[s],t.push({property:`og:${u}:${s}`,content:o}));}break}case"jsonLd":{let o=W(r.jsonLd);for(let i of o)typeof i!="object"||Object.keys(i).length===0||t.push({"script:ld+json":i});break}case"alternates":{let o=W(r.alternates);for(let n of o){if(!n)continue;let{language:i,url:u,default:c}=n,s=i?`${i}${c?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:s,href:u});}break}case"robots":{if(!r.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:i,noArchive:u,noFollow:c,noImageIndex:s,noIndex:p,noSnippet:y,noTranslate:m,unavailableAfter:l}=r.robots,d=[u&&"noarchive",s&&"noimageindex",y&&"nosnippet",m&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,i&&`max-video-preview:${i}`,l&&`unavailable_after:${l}`],g=(p?"noindex":"index")+","+(c?"nofollow":"follow");for(let h of d)h&&(g+=`,${h}`);t.push({name:"robots",content:g});break}}return t}function wo({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null)}){let a=useNavigation().state==="loading",{endCursor:o,hasNextPage:n,hasPreviousPage:i,nextPageUrl:u,nodes:c,previousPageUrl:s,startCursor:p}=bo(e),y=useMemo(()=>({pageInfo:{endCursor:o,hasPreviousPage:i,hasNextPage:n,startCursor:p},nodes:c}),[o,n,i,p,c]),m=useMemo(()=>forwardRef(function(g,h){return n?createElement(Link,{preventScrollReset:!0,...g,to:u,state:y,replace:!0,ref:h}):null}),[n,u,y]),l=useMemo(()=>forwardRef(function(g,h){return i?createElement(Link,{preventScrollReset:!0,...g,to:s,state:y,replace:!0,ref:h}):null}),[i,s,y]);return t({state:y,hasNextPage:n,hasPreviousPage:i,isLoading:a,nextPageUrl:u,nodes:c,previousPageUrl:s,NextLink:m,PreviousLink:l})}function Ve(e){let t=new URLSearchParams(e);return t.delete("cursor"),t.delete("direction"),t.toString()}function Se(e){throw new Error(`The Pagination component requires ${"`"+e+"`"} to be a part of your query. See the guide on how to setup your query to include ${"`"+e+"`"}: https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/pagination#setup-the-paginated-query`)}function bo(e){e.pageInfo||Se("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Se("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Se("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Se("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Se("pageInfo.hasPreviousPage");let t=useNavigate(),{state:r,search:a,pathname:o}=useLocation(),u=new URLSearchParams(a).get("direction")==="previous",c=useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!r||!r?.nodes?flattenConnection(e):u?[...flattenConnection(e),...r.nodes]:[...r.nodes,...flattenConnection(e)],[r,e]),s=useMemo(()=>{let l=globalThis?.window?.__hydrogenHydrated,d=!l||r?.pageInfo?.startCursor===void 0?e.pageInfo.startCursor:r.pageInfo.startCursor,g=!l||r?.pageInfo?.endCursor===void 0?e.pageInfo.endCursor:r.pageInfo.endCursor,h=!l||r?.pageInfo?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:r.pageInfo.hasPreviousPage,f=!l||r?.pageInfo?.hasNextPage===void 0?e.pageInfo.hasNextPage:r.pageInfo.hasNextPage;return r?.nodes&&(u?(d=e.pageInfo.startCursor,h=e.pageInfo.hasPreviousPage):(g=e.pageInfo.endCursor,f=e.pageInfo.hasNextPage)),{startCursor:d,endCursor:g,hasPreviousPage:h,hasNextPage:f}},[u,r,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),p=useRef({params:Ve(a),pathname:o});useEffect(()=>{window.__hydrogenHydrated=!0;},[]),useEffect(()=>{(Ve(a)!==p.current.params||o!==p.current.pathname)&&(p.current={pathname:o,params:Ve(a)},t(`${o}?${Ve(a)}`,{replace:!0,preventScrollReset:!0,state:{nodes:void 0,pageInfo:void 0}}));},[o,a]);let y=useMemo(()=>{let l=new URLSearchParams(a);return l.set("direction","previous"),s.startCursor&&l.set("cursor",s.startCursor),`?${l.toString()}`},[a,s.startCursor]),m=useMemo(()=>{let l=new URLSearchParams(a);return l.set("direction","next"),s.endCursor&&l.set("cursor",s.endCursor),`?${l.toString()}`},[a,s.endCursor]);return {...s,previousPageUrl:y,nextPageUrl:m,nodes:c}}function Eo(e,t={pageBy:20}){if(typeof e?.url>"u")throw new Error("getPaginationVariables must be called with the Request object passed to your loader function");let{pageBy:r}=t,a=new URLSearchParams(new URL(e.url).search),o=a.get("cursor")??void 0;return (a.get("direction")==="previous"?"previous":"next")==="previous"?{last:r,startCursor:o??null}:{first:r,endCursor:o??null}}var _=class extends Response{constructor(t,r,a){super(`Bad request: ${t}`,{status:400,headers:a});}};function Ae(e,t={}){let r=t.headers?new Headers(t.headers):new Headers({});return r.set("location",e),new Response(null,{status:t.status||302,headers:r})}async function Do({session:e,customerAccountId:t,customerAccountUrl:r,httpsOrigin:a,debugInfo:o,exchangeForStorefrontCustomerAccessToken:n}){let i=new URLSearchParams,u=e.get(E),c=u?.refreshToken,s=u?.idToken;if(!c)throw new _("Unauthorized","No refreshToken found in the session. Make sure your session is configured correctly and passed to `createCustomerAccountClient`.");i.append("grant_type","refresh_token"),i.append("refresh_token",c),i.append("client_id",t);let p={"content-type":"application/x-www-form-urlencoded","User-Agent":ne,Origin:a};new Date().getTime();let m=`${r}/auth/oauth/token`,l=await fetch(m,{method:"POST",headers:p,body:i});if(!l.ok){let I=await l.text();throw new Response(I,{status:l.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:d,expires_in:g,refresh_token:h}=await l.json(),f=await yt(d,t,r,a);e.set(E,{accessToken:f,expiresAt:new Date(new Date().getTime()+(g-120)*1e3).getTime()+"",refreshToken:h,idToken:s}),await n();}function ue(e){e.unset(E),e.unset(ie);}async function nr({locks:e,expiresAt:t,session:r,customerAccountId:a,customerAccountUrl:o,httpsOrigin:n,debugInfo:i,exchangeForStorefrontCustomerAccessToken:u}){if(parseInt(t,10)-1e3<new Date().getTime())try{e.refresh||(e.refresh=Do({session:r,customerAccountId:a,customerAccountUrl:o,httpsOrigin:n,debugInfo:i,exchangeForStorefrontCustomerAccessToken:u})),await e.refresh,delete e.refresh;}catch(c){throw ue(r),c&&c.status!==401?c:new _("Unauthorized","Login before querying the Customer Account API.",{"Set-Cookie":await r.commit()})}}function ir(){let e=xo();return cr(e)}async function sr(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=Oo(t);return cr(r)}function xo(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function cr(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Oo(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function ur(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function yt(e,t,r,a,o){let n=t;if(!e)throw new _("Unauthorized","oAuth access token was not provided during token exchange.");let i=new URLSearchParams;i.append("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.append("client_id",n),i.append("audience",Ht),i.append("subject_token",e),i.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.append("scopes","https://api.customers.com/auth/customer.graphql");let u={"content-type":"application/x-www-form-urlencoded","User-Agent":ne,Origin:a};new Date().getTime();let s=`${r}/auth/oauth/token`,p=await fetch(s,{method:"POST",headers:u,body:i});let y=await p.json();if(y.error)throw new _(y.error_description);return y.access_token}function pr(e){return ko(e).payload.nonce}function ko(e){let[t,r,a]=e.split("."),o=JSON.parse(atob(t)),n=JSON.parse(atob(r));return {header:o,payload:n,signature:a}}function Me(){return _o(Lo())}function Lo(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function _o(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}var dr="/account/login",Uo="/account/authorize",lr="/account";function No(e){if(!e.url)return dr;let{pathname:t}=new URL(e.url),r=dr+`?${new URLSearchParams({return_to:t}).toString()}`;return Ae(r)}function Vo({session:e,customerAccountId:t,customerAccountUrl:r,customerApiVersion:a=Oe,request:o,waitUntil:n,authUrl:i,customAuthStatusHandler:u,logErrors:c=!0,unstableB2b:s=!1}){if(a!==Oe&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${a} when this version of Hydrogen was built for ${Oe}.`),!o?.url)throw new Error("[h2:error:createCustomerAccountClient] The request object does not contain a URL.");let p=u||(()=>No(o)),y=new URL(o.url),m=y.protocol==="http:"?y.origin.replace("http","https"):y.origin,l=it({requestUrl:m,defaultUrl:Uo,redirectUrl:i}),d=`${r}/account/customer/api/${a}/graphql`,g={};async function h({query:C,type:S,variables:A={}}){let T=await v();if(!T)throw p();new Date().getTime();let x=await fetch(d,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":ne,Origin:m,Authorization:T},body:JSON.stringify({query:C,variables:A})});let O=await x.text(),k={url:d,response:x,type:S,query:C,queryVariables:A,errors:void 0,client:"customer"};if(!x.ok){if(x.status===401){ue(e);let U=p();throw U instanceof Response&&U.headers.set("Set-Cookie",await e.commit()),U}let b;try{b=K(O);}catch{b=[{message:O}];}he({...k,errors:b});}try{let b=K(O),{errors:U}=b,le=U?.map(({message:re,...$})=>new z(re,{...$,clientOperation:`customerAccount.${k.type}`,requestId:x.headers.get("x-request-id"),queryVariables:A,query:C}));return {...b,...U&&{errors:le}}}catch{he({...k,errors:[{message:O}]});}}async function f(){if(!r||!t)return !1;let C=e.get(E),S=C?.accessToken,A=C?.expiresAt;if(!S||!A)return !1;let T=q?.();try{await nr({locks:g,expiresAt:A,session:e,customerAccountId:t,customerAccountUrl:r,httpsOrigin:m,debugInfo:{waitUntil:n,stackInfo:T,...J(o)},exchangeForStorefrontCustomerAccessToken:be});}catch{return !1}return !0}async function I(){if(!await f())throw p()}async function v(){if(await f())return e.get(E)?.accessToken}async function N(C,S){return Te(r,t),C=se(C),Le(C,"customer.mutate"),ce(h({query:C,type:"mutation",...S}),{logErrors:c})}async function F(C,S){return Te(r,t),C=se(C),ke(C,"customer.query"),ce(h({query:C,type:"query",...S}),{logErrors:c})}function te(C){e.set(ie,{...e.get(ie),...C});}async function L(){if(await f())return e.get(ie)}async function be(){if(!s)return;let C=`#graphql
|
|
295
294
|
mutation storefrontCustomerAccessTokenCreate {
|
|
296
295
|
storefrontCustomerAccessTokenCreate {
|
|
297
296
|
customerAccessToken
|
|
298
297
|
}
|
|
299
298
|
}
|
|
300
|
-
`,{data:S}=await N(C),
|
|
299
|
+
`,{data:S}=await N(C),A=S?.storefrontCustomerAccessTokenCreate?.customerAccessToken;A&&te({customerAccessToken:A});}return {login:async C=>{Te(r,t);let S=new URL(`${r}/auth/oauth/authorize`),A=ur(),T=Me();if(S.searchParams.set("client_id",t),S.searchParams.set("scope","openid email"),S.searchParams.append("response_type","code"),S.searchParams.append("redirect_uri",l),S.searchParams.set("scope","openid email https://api.customers.com/auth/customer.graphql"),S.searchParams.append("state",A),S.searchParams.append("nonce",T),C?.uiLocales){let[x,O]=C.uiLocales.split("-"),k=x.toLowerCase();O&&(k+=`-${O.toUpperCase()}`),S.searchParams.append("ui_locales",k);}let V=ir(),M=await sr(V);return e.set(E,{...e.get(E),codeVerifier:V,state:A,nonce:T,redirectPath:Ue(o.url)||_e(o,"Referer")||lr}),S.searchParams.append("code_challenge",M),S.searchParams.append("code_challenge_method","S256"),Ae(S.toString(),{headers:{"Set-Cookie":await e.commit()}})},logout:async C=>{Te(r,t);let S=e.get(E)?.idToken,A=it({requestUrl:m,defaultUrl:m,redirectUrl:C?.postLogoutRedirectUri}),T=S?new URL(`${r}/auth/logout?${new URLSearchParams([["id_token_hint",S],["post_logout_redirect_uri",A]]).toString()}`).toString():A;return ue(e),Ae(T,{headers:{"Set-Cookie":await e.commit()}})},isLoggedIn:f,handleAuthStatus:I,getAccessToken:v,getApiUrl:()=>d,mutate:N,query:F,authorize:async()=>{Te(r,t);let C=y.searchParams.get("code"),S=y.searchParams.get("state");if(!C||!S)throw ue(e),new _("Unauthorized","No code or state parameter found in the redirect URL.",{"Set-Cookie":await e.commit()});if(e.get(E)?.state!==S)throw ue(e),new _("Unauthorized","The session state does not match the state parameter. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.",{"Set-Cookie":await e.commit()});let A=t,T=new URLSearchParams;T.append("grant_type","authorization_code"),T.append("client_id",A),T.append("redirect_uri",l),T.append("code",C);let V=e.get(E)?.codeVerifier;if(!V)throw new _("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");T.append("code_verifier",V);let M={"content-type":"application/x-www-form-urlencoded","User-Agent":ne,Origin:m},x=q?.();new Date().getTime();let k=`${r}/auth/oauth/token`,b=await fetch(k,{method:"POST",headers:M,body:T});if(!b.ok)throw new Response(await b.text(),{status:b.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:U,expires_in:le,id_token:re,refresh_token:$}=await b.json(),ye=e.get(E)?.nonce,kt=await pr(re);if(ye!==kt)throw new _("Unauthorized",`Returned nonce does not match: ${ye} !== ${kt}`);let Qr=await yt(U,t,r,m,{waitUntil:n,stackInfo:x,...J(o)}),Gr=e.get(E)?.redirectPath;return e.set(E,{accessToken:Qr,expiresAt:new Date(new Date().getTime()+(le-120)*1e3).getTime()+"",refreshToken:$,idToken:re}),await be(),Ae(Gr||lr,{headers:{"Set-Cookie":await e.commit()}})},UNSTABLE_setBuyer:te,UNSTABLE_getBuyer:L}}function Te(e,t){try{if(!e||!t)throw Error();new URL(e);}catch{console.error(new Error("[h2:error:customerAccount] You do not have the valid credential to use Customer Account API.\nRun `h2 env pull` to link your store credentials."));let r="Internal Server Error";throw new Response(r,{status:500})}}var Mo="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function Fo({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||Mo)}var yr="cartFormInput";function G({children:e,action:t,inputs:r,route:a,fetcherKey:o}){let n=useFetcher({key:o});return jsxs(n.Form,{action:a||"",method:"post",children:[(t||r)&&jsx("input",{type:"hidden",name:yr,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(n):e]})}G.INPUT_NAME=yr;G.ACTIONS={AttributesUpdateInput:"AttributesUpdateInput",BuyerIdentityUpdate:"BuyerIdentityUpdate",Create:"Create",DiscountCodesUpdate:"DiscountCodesUpdate",LinesAdd:"LinesAdd",LinesRemove:"LinesRemove",LinesUpdate:"LinesUpdate",NoteUpdate:"NoteUpdate",SelectedDeliveryOptionsUpdate:"SelectedDeliveryOptionsUpdate",MetafieldsSet:"MetafieldsSet",MetafieldDelete:"MetafieldDelete"};function qo(e){let t={};for(let i of e.entries()){let u=i[0],c=e.getAll(u);t[u]=c.length>1?c:i[1];}let{cartFormInput:r,...a}=t,{action:o,inputs:n}=r?JSON.parse(String(r)):{};return {action:o,inputs:{...n,...a}}}G.getFormInput=qo;var R=`#graphql
|
|
301
300
|
fragment CartApiError on CartUserError {
|
|
302
301
|
message
|
|
303
302
|
field
|
|
@@ -308,7 +307,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
308
307
|
id
|
|
309
308
|
totalQuantity
|
|
310
309
|
}
|
|
311
|
-
`;function
|
|
310
|
+
`;function ft(e){return async(t,r)=>{let a=e.customerAccount?await e.customerAccount.UNSTABLE_getBuyer():void 0,{cartId:o,...n}=r||{},{buyerIdentity:i,...u}=t,{cartCreate:c,errors:s}=await e.storefront.mutate(Go(e.cartFragment),{variables:{input:{...u,buyerIdentity:{...a,...i}},...n}});return P(c,s)}}var Go=(e=w)=>`#graphql
|
|
312
311
|
mutation cartCreate(
|
|
313
312
|
$input: CartInput!
|
|
314
313
|
$country: CountryCode = ZZ
|
|
@@ -325,8 +324,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
325
324
|
}
|
|
326
325
|
}
|
|
327
326
|
${e}
|
|
328
|
-
${
|
|
329
|
-
`;function
|
|
327
|
+
${R}
|
|
328
|
+
`;function mt({storefront:e,customerAccount:t,getCartId:r,cartFragment:a}){return async o=>{let n=r();if(!n)return null;let[i,{cart:u,errors:c}]=await Promise.all([t?t.isLoggedIn():!1,e.query(Wo(a),{variables:{cartId:n,...o},cache:e.CacheNone()})]);return P(Bo(i,u),c)}}function Bo(e,t){if(e&&t&&t.checkoutUrl){let r=new URL(t.checkoutUrl);r.searchParams.set("logged_in","true"),t.checkoutUrl=r.toString();}return t}var Wo=(e=jo)=>`#graphql
|
|
330
329
|
query CartQuery(
|
|
331
330
|
$cartId: ID!
|
|
332
331
|
$numCartLines: Int = 100
|
|
@@ -339,7 +338,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
339
338
|
}
|
|
340
339
|
|
|
341
340
|
${e}
|
|
342
|
-
`,
|
|
341
|
+
`,jo=`#graphql
|
|
343
342
|
fragment CartApiQuery on Cart {
|
|
344
343
|
updatedAt
|
|
345
344
|
id
|
|
@@ -447,7 +446,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
447
446
|
width
|
|
448
447
|
height
|
|
449
448
|
}
|
|
450
|
-
`;function
|
|
449
|
+
`;function gt(e){return async(t,r)=>{let{cartLinesAdd:a,errors:o}=await e.storefront.mutate(Ko(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return P(a,o)}}var Ko=(e=w)=>`#graphql
|
|
451
450
|
mutation cartLinesAdd(
|
|
452
451
|
$cartId: ID!
|
|
453
452
|
$lines: [CartLineInput!]!
|
|
@@ -465,8 +464,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
465
464
|
}
|
|
466
465
|
|
|
467
466
|
${e}
|
|
468
|
-
${
|
|
469
|
-
`;var
|
|
467
|
+
${R}
|
|
468
|
+
`;var fr="__h_pending_";function mr(e){return fr+e}function Fe(e){return e.startsWith(fr)}function $e(e,t){if(t.some(r=>Fe(typeof r=="string"?r:r.id)))throw new Error(`Tried to perform an action on an optimistic line. Make sure to disable your "${e}" CartForm action when the line is optimistic.`)}function ht(e){return async(t,r)=>{$e("updateLines",t);let{cartLinesUpdate:a,errors:o}=await e.storefront.mutate(zo(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return P(a,o)}}var zo=(e=w)=>`#graphql
|
|
470
469
|
mutation cartLinesUpdate(
|
|
471
470
|
$cartId: ID!
|
|
472
471
|
$lines: [CartLineUpdateInput!]!
|
|
@@ -484,8 +483,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
484
483
|
}
|
|
485
484
|
|
|
486
485
|
${e}
|
|
487
|
-
${
|
|
488
|
-
`;function
|
|
486
|
+
${R}
|
|
487
|
+
`;function Ct(e){return async(t,r)=>{$e("removeLines",t);let{cartLinesRemove:a,errors:o}=await e.storefront.mutate(Jo(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return P(a,o)}}var Jo=(e=w)=>`#graphql
|
|
489
488
|
mutation cartLinesRemove(
|
|
490
489
|
$cartId: ID!
|
|
491
490
|
$lineIds: [ID!]!
|
|
@@ -503,8 +502,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
503
502
|
}
|
|
504
503
|
|
|
505
504
|
${e}
|
|
506
|
-
${
|
|
507
|
-
`;function
|
|
505
|
+
${R}
|
|
506
|
+
`;function St(e){return async(t,r)=>{let a=t.filter((i,u,c)=>c.indexOf(i)===u),{cartDiscountCodesUpdate:o,errors:n}=await e.storefront.mutate(Yo(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:a,...r}});return P(o,n)}}var Yo=(e=w)=>`#graphql
|
|
508
507
|
mutation cartDiscountCodesUpdate(
|
|
509
508
|
$cartId: ID!
|
|
510
509
|
$discountCodes: [String!]
|
|
@@ -521,8 +520,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
521
520
|
}
|
|
522
521
|
}
|
|
523
522
|
${e}
|
|
524
|
-
${
|
|
525
|
-
`;function
|
|
523
|
+
${R}
|
|
524
|
+
`;function Pt(e){return async(t,r)=>{t.companyLocationId&&e.customerAccount&&e.customerAccount.UNSTABLE_setBuyer({companyLocationId:t.companyLocationId});let a=e.customerAccount?await e.customerAccount.UNSTABLE_getBuyer():void 0,{cartBuyerIdentityUpdate:o,errors:n}=await e.storefront.mutate(Xo(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...a,...t},...r}});return P(o,n)}}var Xo=(e=w)=>`#graphql
|
|
526
525
|
mutation cartBuyerIdentityUpdate(
|
|
527
526
|
$cartId: ID!
|
|
528
527
|
$buyerIdentity: CartBuyerIdentityInput!
|
|
@@ -539,8 +538,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
539
538
|
}
|
|
540
539
|
}
|
|
541
540
|
${e}
|
|
542
|
-
${
|
|
543
|
-
`;function
|
|
541
|
+
${R}
|
|
542
|
+
`;function At(e){return async(t,r)=>{let{cartNoteUpdate:a,errors:o}=await e.storefront.mutate(Zo(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return P(a,o)}}var Zo=(e=w)=>`#graphql
|
|
544
543
|
mutation cartNoteUpdate(
|
|
545
544
|
$cartId: ID!
|
|
546
545
|
$note: String!
|
|
@@ -557,8 +556,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
557
556
|
}
|
|
558
557
|
}
|
|
559
558
|
${e}
|
|
560
|
-
${
|
|
561
|
-
`;function
|
|
559
|
+
${R}
|
|
560
|
+
`;function Tt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:a,errors:o}=await e.storefront.mutate(ea(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return P(a,o)}}var ea=(e=w)=>`#graphql
|
|
562
561
|
mutation cartSelectedDeliveryOptionsUpdate(
|
|
563
562
|
$cartId: ID!
|
|
564
563
|
$selectedDeliveryOptions: [CartSelectedDeliveryOptionInput!]!
|
|
@@ -575,8 +574,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
575
574
|
}
|
|
576
575
|
}
|
|
577
576
|
${e}
|
|
578
|
-
${
|
|
579
|
-
`;function
|
|
577
|
+
${R}
|
|
578
|
+
`;function vt(e){return async(t,r)=>{let{cartAttributesUpdate:a,errors:o}=await e.storefront.mutate(ta(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t}});return P(a,o)}}var ta=(e=w)=>`#graphql
|
|
580
579
|
mutation cartAttributesUpdate(
|
|
581
580
|
$cartId: ID!
|
|
582
581
|
$attributes: [AttributeInput!]!
|
|
@@ -591,8 +590,8 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
591
590
|
}
|
|
592
591
|
}
|
|
593
592
|
${e}
|
|
594
|
-
${
|
|
595
|
-
`;function
|
|
593
|
+
${R}
|
|
594
|
+
`;function It(e){return async(t,r)=>{let a=r?.cartId||e.getCartId(),o=t.map(u=>({...u,ownerId:a})),{cartMetafieldsSet:n,errors:i}=await e.storefront.mutate(ra(),{variables:{metafields:o}});return P({cart:{id:a},...n},i)}}var ra=()=>`#graphql
|
|
596
595
|
mutation cartMetafieldsSet(
|
|
597
596
|
$metafields: [CartMetafieldsSetInput!]!
|
|
598
597
|
$language: LanguageCode
|
|
@@ -607,7 +606,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
607
606
|
}
|
|
608
607
|
}
|
|
609
608
|
}
|
|
610
|
-
`;function Rt(e){return async(t,r)=>{let a=r?.cartId||e.getCartId(),{cartMetafieldDelete:o,errors:n}=await e.storefront.mutate(
|
|
609
|
+
`;function Rt(e){return async(t,r)=>{let a=r?.cartId||e.getCartId(),{cartMetafieldDelete:o,errors:n}=await e.storefront.mutate(oa(),{variables:{input:{ownerId:a,key:t}}});return P({cart:{id:a},...o},n)}}var oa=()=>`#graphql
|
|
611
610
|
mutation cartMetafieldDelete(
|
|
612
611
|
$input: CartMetafieldDeleteInput!
|
|
613
612
|
) {
|
|
@@ -619,7 +618,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
619
618
|
}
|
|
620
619
|
}
|
|
621
620
|
}
|
|
622
|
-
`;var aa=e=>{let t=parse(e.get("Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var ia=e=>t=>{let r=new Headers;return r.append("Set-Cookie",stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function sa(e){let{getCartId:t,setCartId:r,storefront:a,customerAccount:o,cartQueryFragment:n,cartMutateFragment:i}=e,u=t(),c=()=>u||t(),s={storefront:a,getCartId:c,cartFragment:i,customerAccount:o},p=yt(s),y=async function(...l){let d=await p(...l);return u=d?.cart?.id,d},m={get:ft({storefront:a,customerAccount:o,getCartId:c,cartFragment:n}),getCartId:c,setCartId:r,create:y,addLines:async(l,d)=>{let g=l.map(h=>({attributes:h.attributes,quantity:h.quantity,merchandiseId:h.merchandiseId,sellingPlanId:h.sellingPlanId}));return u||d?.cartId?await mt(s)(g,d):await y({lines:g},d)},updateLines:gt(s),removeLines:ht(s),updateDiscountCodes:async(l,d)=>u||d?.cartId?await Ct(s)(l,d):await y({discountCodes:l},d),updateBuyerIdentity:async(l,d)=>u||d?.cartId?await St(s)(l,d):await y({buyerIdentity:l},d),updateNote:async(l,d)=>u||d?.cartId?await Pt(s)(l,d):await y({note:l},d),updateSelectedDeliveryOption:At(s),updateAttributes:async(l,d)=>u||d?.cartId?await Tt(s)(l,d):await y({attributes:l},d),setMetafields:async(l,d)=>u||d?.cartId?await vt(s)(l,d):await y({metafields:l},d),deleteMetafield:Rt(s)};return "customMethods"in e?{...m,...e.customMethods??{}}:m}function ua(e){let t=useFetchers();if(!t||!t.length)return e;let r=e?.lines?structuredClone(e):{lines:{nodes:[]}},a=r.lines.nodes,o=!1;for(let{formData:n}of t){if(!n)continue;let i=G.getFormInput(n);if(i.action===G.ACTIONS.LinesAdd)for(let u of i.inputs.lines){if(!u.selectedVariant){console.error("[h2:error:useOptimisticCart] No selected variant was passed in the cart action. Make sure to pass the selected variant if you want to use an optimistic cart");continue}let c=a.find(s=>s.merchandise.id===u.selectedVariant?.id);o=!0,c?(c.quantity=(c.quantity||1)+(u.quantity||1),c.isOptimistic=!0):a.unshift({id:yr(u.selectedVariant.id),merchandise:u.selectedVariant,isOptimistic:!0,quantity:u.quantity||1});}else if(i.action===G.ACTIONS.LinesRemove)for(let u of i.inputs.lineIds){let c=a.findIndex(s=>s.id===u);if(c!==-1){if(Fe(a[c].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}a.splice(c,1),o=!0;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${u}' but it doesn't exist in the cart`);}else if(i.action===G.ACTIONS.LinesUpdate)for(let u of i.inputs.lines){let c=a.findIndex(s=>u.id===s.id);if(c>-1){if(Fe(a[c].id)){console.error("[h2:error:useOptimisticCart] Tried to update an optimistic line that has not been added to the cart yet");continue}a[c].quantity=u.quantity,a[c].quantity===0&&a.splice(c,1),o=!0;}else console.warn(`[h2:warn:useOptimisticCart] Tried to update line '${u.id}' but it doesn't exist in the cart`);}}return o&&(r.isOptimistic=o),r}function fa({handle:e,options:t=[],variants:r=[],productPath:a="products",children:o}){let n=r instanceof Array?r:flattenConnection(r),{searchParams:i,path:u,alreadyOnProductPage:c}=ga(e,a),s=t.filter(p=>p?.values?.length===1);return createElement(Fragment,null,...useMemo(()=>t.filter(p=>p?.values?.length>1).map(p=>{let y,m=[];for(let l of p.values){let d=new URLSearchParams(c?i:void 0);d.set(p.name,l),s.forEach(P=>{d.set(P.name,P.values[0]);});let g=n.find(P=>P?.selectedOptions?.every(N=>d.get(N?.name)===N?.value)),h=i.get(p.name),f=h?h===l:!1;f&&(y=l);let v="?"+d.toString();m.push({value:l,isAvailable:g?g.availableForSale:!0,to:u+v,search:v,isActive:f,variant:g});}return o({option:{name:p.name,value:y,values:m}})}),[t,n,o]))}var ma=e=>{if(typeof e?.url>"u")throw new TypeError(`Expected a Request instance, got ${typeof e}`);let t=new URL(e.url).searchParams,r=[];return t.forEach((a,o)=>{r.push({name:o,value:a});}),r};function ga(e,t){let{pathname:r,search:a}=useLocation();return useMemo(()=>{let o=/(\/[a-zA-Z]{2}-[a-zA-Z]{2}\/)/g.exec(r),n=o&&o.length>0;t=t.startsWith("/")?t.substring(1):t;let i=n?`${o[0]}${t}/${e}`:`/${t}/${e}`;return {searchParams:new URLSearchParams(a),alreadyOnProductPage:i===r,path:i}},[r,a,e,t])}var mr=createContext(void 0),Aa=mr.Provider,It=()=>useContext(mr);function Ta(e){let t=Me(),r=va(t,e);return {nonce:t,header:r,NonceProvider:({children:o})=>createElement(Aa,{value:t},o)}}function va(e,t){let{shop:r,...a}=t??{},o=`'nonce-${e}'`,n=["'self'","'unsafe-inline'","https://cdn.shopify.com"],i=["'self'","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&i.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&i.push(`https://${r.storeDomain}`);let c={baseUri:["'self'"],defaultSrc:["'self'",o,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:n,connectSrc:i},s=Object.assign({},c,a);for(let p in c){let y=a[p];p&&y&&(s[p]=Ra(y,c[p]));}return s.scriptSrc instanceof Array&&!s.scriptSrc.includes(o)?s.scriptSrc.push(o):s.defaultSrc instanceof Array&&!s.defaultSrc.includes(o)&&s.defaultSrc.push(o),Pa({directives:s})}function Ra(e,t){let r=typeof t=="string"?[t]:t,a=Array.isArray(e)?e:[String(e)];return Array.isArray(r)?r.every(n=>n==="'none'")?a:[...a,...r]:r}var wa=forwardRef((e,t)=>{let r=It();return jsx("script",{suppressHydrationWarning:!0,...e,nonce:r,ref:t})});function xa(e){let t=useFetchers(),r={};for(let{formData:a}of t)if(a?.get("optimistic-identifier")===e)try{if(a.has("optimistic-data")){let o=JSON.parse(String(a.get("optimistic-data")));Object.assign(r,o);}}catch{}return r}function Da({id:e,data:t}){return jsxs(Fragment$1,{children:[jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function _a(e){return jsx(ShopPayButton,{channel:"hydrogen",...e})}function pe(e){let{type:t,data:r={},customData:a}=e,o=useLocation(),{publish:n,cart:i,prevCart:u,shop:c}=X(),s=o.pathname+o.search,p={...r,customData:a,cart:i,prevCart:u,shop:c};return useEffect(()=>{c?.shopId&&(p={...p,url:window.location.href},n(t,p));},[n,s,c?.shopId]),null}function hr(e){return jsx(pe,{...e,type:"page_viewed"})}function Cr(e){return jsx(pe,{...e,type:"product_viewed"})}function Sr(e){return jsx(pe,{...e,type:"collection_viewed"})}function Pr(e){return jsx(pe,{...e,type:"cart_viewed"})}function Ar(e){return jsx(pe,{...e,type:"search_viewed"})}function Tr(e){return jsx(pe,{...e})}var Z={PAGE_VIEWED:"page_viewed",PRODUCT_VIEWED:"product_viewed",COLLECTION_VIEWED:"collection_viewed",CART_VIEWED:"cart_viewed",SEARCH_VIEWED:"search_viewed",CART_UPDATED:"cart_updated",PRODUCT_ADD_TO_CART:"product_added_to_cart",PRODUCT_REMOVED_FROM_CART:"product_removed_from_cart",CUSTOM_EVENT:"custom_"};var $a="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js",qa="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function Rr(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function wt(e){let{withPrivacyBanner:t=!0,onVisitorConsentCollected:r,onReady:a,...o}=e,n=useRef(!1),i=useLoadScript(t?qa:$a,{attributes:{id:"customer-privacy-api"}});useEffect(()=>{let u=c=>{r&&r(c.detail);};return document.addEventListener("visitorConsentCollected",u),()=>{document.removeEventListener("visitorConsentCollected",u);}},[r]),useEffect(()=>{if(i!=="done"||n.current||(n.current=!0,o.checkoutDomain||Rr("checkoutDomain"),o.storefrontAccessToken||Rr("storefrontAccessToken"),(o.storefrontAccessToken.startsWith("shpat_")||o.storefrontAccessToken.length!==32)&&console.error("[h2:error:useCustomerPrivacy] It looks like you passed a private access token, make sure to use the public token"),t&&window?.privacyBanner&&window?.privacyBanner?.loadBanner({checkoutRootDomain:o.checkoutDomain,storefrontAccessToken:o.storefrontAccessToken}),!window.Shopify?.customerPrivacy))return;let u=window.Shopify.customerPrivacy.setTrackingConsent;function c(s,p){u({...s,headlessStorefront:!0,checkoutRootDomain:o.checkoutDomain,storefrontAccessToken:o.storefrontAccessToken},p);}window.Shopify.customerPrivacy.setTrackingConsent=c,a&&a();},[i,t,o]);}function bt(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Ba(){let e=bt();if(!e)throw new Error("Shopify Customer Privacy API not available. Must be used within a useEffect. Make sure to load the Shopify Customer Privacy API with useCustomerPrivacy() or <AnalyticsProvider>.");return e}function br(e){return `[h2:error:Analytics.Provider] - ${e} is required`}function Er({consent:e,onReady:t,domain:r,disableThrowOnError:a,isMockShop:o}){if(o)Gt("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!e.checkoutDomain){let P=br("consent.checkoutDomain");a?console.error(P):wr(!1,P);}if(!e.storefrontAccessToken){let P=br("consent.storefrontAccessToken");a?console.error(P):wr(!1,P);}}let{subscribe:n,register:i,canTrack:u}=X(),[c,s]=useState(!1),[p,y]=useState(!1),{ready:m}=i("Internal_Shopify_Analytics"),{ready:l}=i("Internal_Shopify_CustomerPrivacy"),d=()=>{c&&p&&t();},g=()=>{y(!0),l(),d();},{checkoutDomain:h,storefrontAccessToken:f,withPrivacyBanner:v}=e;return wt({checkoutDomain:o||!h?"mock.shop":h,storefrontAccessToken:o||!f?"abcdefghijklmnopqrstuvwxyz123456":f,withPrivacyBanner:o?!1:v,onVisitorConsentCollected:g,onReady:()=>{setTimeout(g,3e3);}}),useShopifyCookies({hasUserConsent:u(),domain:r}),useEffect(()=>{n(Z.PAGE_VIEWED,ja),n(Z.PRODUCT_VIEWED,Ka),n(Z.COLLECTION_VIEWED,za),n(Z.SEARCH_VIEWED,Ja),n(Z.PRODUCT_ADD_TO_CART,Ya),m(),s(!0),d();},[n,m]),null}function qe(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function Ie(e){let t=Ba(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){qe("shopId");return}if(!e?.shop?.acceptedLanguage){qe("acceptedLanguage");return}if(!e?.shop?.currency){qe("currency");return}if(!e?.shop?.hydrogenSubchannelId){qe("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",...e.shop,hasUserConsent:r,...getClientBrowserParameters(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function Wa(e,t){if(t===null)return;let r=Ie(e);return r?{...r,cartId:t.id}:void 0}var j={};function ja(e){let t=Ie(e);t&&(sendShopifyAnalytics({eventName:AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...j}}),j={});}function Ka(e){let t=Ie(e);if(t&&xr({eventName:Za,productField:"products",variantField:"product.<displayed_variant>",fromSource:"product_viewed products array",products:e.products})){let r=Et(e.products);j={pageType:AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...j,products:Et(e.products)},sendShopifyAnalytics({eventName:AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function za(e){let t=Ie(e);t&&(j={pageType:AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...j,collectionHandle:e.collection.handle},sendShopifyAnalytics({eventName:AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function Ja(e){let t=Ie(e);t&&(j={pageType:AnalyticsPageType.search},t={...t,...j,searchString:e.searchTerm},sendShopifyAnalytics({eventName:AnalyticsEventName.SEARCH_VIEW,payload:t}));}function Ya(e){let{cart:t,currentLine:r}=e,a=Wa(e,t);!a||!r?.id||Xa({matchedLine:r,eventPayload:a});}function Xa({matchedLine:e,eventPayload:t}){let r={id:e.merchandise.product.id,variantId:e.id,title:e.merchandise.product.title,variantTitle:e.merchandise.title,vendor:e.merchandise.product.vendor,price:e.merchandise.price.amount,quantity:e.quantity,productType:e.merchandise.product.productType,sku:e.merchandise.sku};xr({eventName:en,productField:"merchandise.product",variantField:"merchandise",fromSource:"cart query",products:[r]})&&sendShopifyAnalytics({eventName:AnalyticsEventName.ADD_TO_CART,payload:{...t,products:Et([r])}});}var Za="Product viewed",en="Add to cart";function ee(e,t,r){console.error(`[h2:error:ShopifyAnalytics] ${e}: ${t} is required from the ${r}.`);}function xr({eventName:e,productField:t,variantField:r,products:a,fromSource:o}){return !a||a.length===0?(ee(e,`${t}`,o),!1):(a.forEach(n=>{if(!n.id)return ee(e,`${t}.id`,o),!1;if(!n.title)return ee(e,`${t}.title`,o),!1;if(!n.price)return ee(e,`${r}.price.amount`,o),!1;if(!n.vendor)return ee(e,`${t}.vendor`,o),!1;if(!n.variantId)return ee(e,`${r}.id`,o),!1;if(!n.variantTitle)return ee(e,`${r}.title`,o),!1}),!0)}function Et(e){return e.map(t=>{let r={productGid:t.id,variantGid:t.variantId,name:t.title,variantName:t.variantTitle,brand:t.vendor,price:t.price,quantity:t.quantity||1,category:t.productType};return t.sku&&(r.sku=t.sku),t.productType&&(r.category=t.productType),r})}function kr(e){console.error(`[h2:error:CartAnalytics] Unable to set up cart analytics events: ${e} is missing.`);}function Lr({cart:e,setCarts:t}){let{publish:r,shop:a,customData:o,canTrack:n,cart:i,prevCart:u}=X(),c=useRef(null);return useEffect(()=>{if(e)return Promise.resolve(e).then(s=>{if(s&&s.lines){if(!s.id){kr("cart.id");return}if(!s.updatedAt){kr("cart.updatedAt");return}}t(({cart:p,prevCart:y})=>s?.updatedAt!==p?.updatedAt?{cart:s,prevCart:p}:{cart:p,prevCart:y});}),()=>{}},[t,e]),useEffect(()=>{if(!i||!i?.updatedAt||i?.updatedAt===u?.updatedAt)return;let s;try{s=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{s=null;}if(i.id===s?.id&&i.updatedAt===s?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:i,prevCart:u,shop:a,customData:o};if(i.updatedAt===c.current)return;c.current=i.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:i.id,updatedAt:i.updatedAt}));let y=u?.lines?flattenConnection(u?.lines):[],m=i.lines?flattenConnection(i.lines):[];y?.forEach(l=>{let d=m.filter(g=>l.id===g.id);if(d?.length===1){let g=d[0];l.quantity<g.quantity?r("product_added_to_cart",{...p,prevLine:l,currentLine:g}):l.quantity>g.quantity&&r("product_removed_from_cart",{...p,prevLine:l,currentLine:g});}else r("product_removed_from_cart",{...p,prevLine:l});}),m?.forEach(l=>{let d=y.filter(g=>l.id===g.id);(!d||d.length===0)&&r("product_added_to_cart",{...p,currentLine:l});});},[i,u,r,a,o,n]),null}var cn={canTrack:()=>!1,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}})},Mr=createContext(cn),Qe=new Map,we={};function Fr(){return Object.values(we).every(Boolean)}function _r(e,t){Qe.has(e)||Qe.set(e,new Map),Qe.get(e)?.set(t.toString(),t);}var Ge=new Map;function Ur(e,t){if(!Fr()){Ge.set(e,t);return}$r(e,t);}function $r(e,t){(Qe.get(e)??new Map).forEach((r,a)=>{try{r(t);}catch(o){typeof o=="object"&&o instanceof Error?console.error("Analytics publish error",o.message,a,o.stack):console.error("Analytics publish error",o,a);}});}function Nr(e){return we.hasOwnProperty(e)||(we[e]=!1),{ready:()=>{we[e]=!0,Fr()&&Ge.size>0&&(Ge.forEach((t,r)=>{$r(r,t);}),Ge.clear());}}}function Vr(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return !1}function un({canTrack:e,cart:t,children:r,consent:a,customData:o={},shop:n=null,disableThrowOnError:i=!1,cookieDomain:u}){let c=useRef(!1),{shop:s}=pn(n),[p,y]=useState(!!e),[m,l]=useState({cart:null,prevCart:null}),[d,g]=useState(e?()=>e:()=>Vr),h=useMemo(()=>({canTrack:d,...m,customData:o,publish:d()?Ur:()=>{},shop:s,subscribe:_r,register:Nr}),[p,d(),d,JSON.stringify(d),m,m.cart?.updatedAt,m.prevCart,Ur,_r,o,s,Nr,JSON.stringify(we)]);return jsxs(Mr.Provider,{value:h,children:[r,!!s&&jsx(hr,{}),!!s&&!!t&&jsx(Lr,{cart:t,setCarts:l}),!!s&&jsx(Er,{consent:a,onReady:()=>{c.current=!0,y(!0),g(()=>Vr);},domain:u,disableThrowOnError:i,isMockShop:/\/68817551382$/.test(s.shopId)})]})}function X(){let e=useContext(Mr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function pn(e){let[t,r]=useState(null);return useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function dn({storefront:e,publicStorefrontId:t="0"}){return e.query(ln,{cache:e.CacheLong()}).then(({shop:r,localization:a})=>({shopId:r.id,acceptedLanguage:a.language.isoCode,currency:a.country.currency.isoCode,hydrogenSubchannelId:t}))}var ln=`#graphql
|
|
621
|
+
`;var na=e=>{let t=parse(e.get("Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var sa=e=>t=>{let r=new Headers;return r.append("Set-Cookie",stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function ca(e){let{getCartId:t,setCartId:r,storefront:a,customerAccount:o,cartQueryFragment:n,cartMutateFragment:i}=e,u=t(),c=()=>u||t(),s={storefront:a,getCartId:c,cartFragment:i,customerAccount:o},p=ft(s),y=async function(...l){let d=await p(...l);return u=d?.cart?.id,d},m={get:mt({storefront:a,customerAccount:o,getCartId:c,cartFragment:n}),getCartId:c,setCartId:r,create:y,addLines:async(l,d)=>{let g=l.map(h=>({attributes:h.attributes,quantity:h.quantity,merchandiseId:h.merchandiseId,sellingPlanId:h.sellingPlanId}));return u||d?.cartId?await gt(s)(g,d):await y({lines:g},d)},updateLines:ht(s),removeLines:Ct(s),updateDiscountCodes:async(l,d)=>u||d?.cartId?await St(s)(l,d):await y({discountCodes:l},d),updateBuyerIdentity:async(l,d)=>u||d?.cartId?await Pt(s)(l,d):await y({buyerIdentity:l},d),updateNote:async(l,d)=>u||d?.cartId?await At(s)(l,d):await y({note:l},d),updateSelectedDeliveryOption:Tt(s),updateAttributes:async(l,d)=>u||d?.cartId?await vt(s)(l,d):await y({attributes:l},d),setMetafields:async(l,d)=>u||d?.cartId?await It(s)(l,d):await y({metafields:l},d),deleteMetafield:Rt(s)};return "customMethods"in e?{...m,...e.customMethods??{}}:m}function pa(e){let t=useFetchers();if(!t||!t.length)return e;let r=e?.lines?structuredClone(e):{lines:{nodes:[]}},a=r.lines.nodes,o=!1;for(let{formData:n}of t){if(!n)continue;let i=G.getFormInput(n);if(i.action===G.ACTIONS.LinesAdd)for(let u of i.inputs.lines){if(!u.selectedVariant){console.error("[h2:error:useOptimisticCart] No selected variant was passed in the cart action. Make sure to pass the selected variant if you want to use an optimistic cart");continue}let c=a.find(s=>s.merchandise.id===u.selectedVariant?.id);o=!0,c?(c.quantity=(c.quantity||1)+(u.quantity||1),c.isOptimistic=!0):a.unshift({id:mr(u.selectedVariant.id),merchandise:u.selectedVariant,isOptimistic:!0,quantity:u.quantity||1});}else if(i.action===G.ACTIONS.LinesRemove)for(let u of i.inputs.lineIds){let c=a.findIndex(s=>s.id===u);if(c!==-1){if(Fe(a[c].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}a.splice(c,1),o=!0;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${u}' but it doesn't exist in the cart`);}else if(i.action===G.ACTIONS.LinesUpdate)for(let u of i.inputs.lines){let c=a.findIndex(s=>u.id===s.id);if(c>-1){if(Fe(a[c].id)){console.error("[h2:error:useOptimisticCart] Tried to update an optimistic line that has not been added to the cart yet");continue}a[c].quantity=u.quantity,a[c].quantity===0&&a.splice(c,1),o=!0;}else console.warn(`[h2:warn:useOptimisticCart] Tried to update line '${u.id}' but it doesn't exist in the cart`);}}return o&&(r.isOptimistic=o),r}function ma({handle:e,options:t=[],variants:r=[],productPath:a="products",children:o}){let n=r instanceof Array?r:flattenConnection(r),{searchParams:i,path:u,alreadyOnProductPage:c}=ha(e,a),s=t.filter(p=>p?.values?.length===1);return createElement(Fragment,null,...useMemo(()=>t.filter(p=>p?.values?.length>1).map(p=>{let y,m=[];for(let l of p.values){let d=new URLSearchParams(c?i:void 0);d.set(p.name,l),s.forEach(v=>{d.set(v.name,v.values[0]);});let g=n.find(v=>v?.selectedOptions?.every(N=>d.get(N?.name)===N?.value)),h=i.get(p.name),f=h?h===l:!1;f&&(y=l);let I="?"+d.toString();m.push({value:l,isAvailable:g?g.availableForSale:!0,to:u+I,search:I,isActive:f,variant:g});}return o({option:{name:p.name,value:y,values:m}})}),[t,n,o]))}var ga=e=>{if(typeof e?.url>"u")throw new TypeError(`Expected a Request instance, got ${typeof e}`);let t=new URL(e.url).searchParams,r=[];return t.forEach((a,o)=>{r.push({name:o,value:a});}),r};function ha(e,t){let{pathname:r,search:a}=useLocation();return useMemo(()=>{let o=/(\/[a-zA-Z]{2}-[a-zA-Z]{2}\/)/g.exec(r),n=o&&o.length>0;t=t.startsWith("/")?t.substring(1):t;let i=n?`${o[0]}${t}/${e}`:`/${t}/${e}`;return {searchParams:new URLSearchParams(a),alreadyOnProductPage:i===r,path:i}},[r,a,e,t])}var hr=createContext(void 0),Ta=hr.Provider,wt=()=>useContext(hr);function va(e){let t=Me(),r=Ia(t,e);return {nonce:t,header:r,NonceProvider:({children:o})=>createElement(Ta,{value:t},o)}}function Ia(e,t){let{shop:r,...a}=t??{},o=`'nonce-${e}'`,n=["'self'","'unsafe-inline'","https://cdn.shopify.com"],i=["'self'","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&i.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&i.push(`https://${r.storeDomain}`);let c={baseUri:["'self'"],defaultSrc:["'self'",o,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:n,connectSrc:i},s=Object.assign({},c,a);for(let p in c){let y=a[p];p&&y&&(s[p]=Ra(y,c[p]));}return s.scriptSrc instanceof Array&&!s.scriptSrc.includes(o)?s.scriptSrc.push(o):s.defaultSrc instanceof Array&&!s.defaultSrc.includes(o)&&s.defaultSrc.push(o),Aa({directives:s})}function Ra(e,t){let r=typeof t=="string"?[t]:t,a=Array.isArray(e)?e:[String(e)];return Array.isArray(r)?r.every(n=>n==="'none'")?a:[...a,...r]:r}var ba=forwardRef((e,t)=>{let r=wt();return jsx("script",{suppressHydrationWarning:!0,...e,nonce:r,ref:t})});function xa(e){let t=useFetchers(),r={};for(let{formData:a}of t)if(a?.get("optimistic-identifier")===e)try{if(a.has("optimistic-data")){let o=JSON.parse(String(a.get("optimistic-data")));Object.assign(r,o);}}catch{}return r}function Oa({id:e,data:t}){return jsxs(Fragment$1,{children:[jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function Ua(e){return jsx(ShopPayButton,{channel:"hydrogen",...e})}function pe(e){let{type:t,data:r={},customData:a}=e,o=useLocation(),{publish:n,cart:i,prevCart:u,shop:c,customData:s}=X(),p=o.pathname+o.search,y={...r,customData:{...s,...a},cart:i,prevCart:u,shop:c};return useEffect(()=>{c?.shopId&&(y={...y,url:window.location.href},n(t,y));},[n,p,c?.shopId]),null}function Sr(e){return jsx(pe,{...e,type:"page_viewed"})}function Pr(e){return jsx(pe,{...e,type:"product_viewed"})}function Ar(e){return jsx(pe,{...e,type:"collection_viewed"})}function Tr(e){return jsx(pe,{...e,type:"cart_viewed"})}function vr(e){return jsx(pe,{...e,type:"search_viewed"})}function Ir(e){return jsx(pe,{...e})}var Z={PAGE_VIEWED:"page_viewed",PRODUCT_VIEWED:"product_viewed",COLLECTION_VIEWED:"collection_viewed",CART_VIEWED:"cart_viewed",SEARCH_VIEWED:"search_viewed",CART_UPDATED:"cart_updated",PRODUCT_ADD_TO_CART:"product_added_to_cart",PRODUCT_REMOVED_FROM_CART:"product_removed_from_cart",CUSTOM_EVENT:"custom_"};var qa="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js",Ha="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function wr(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function bt(e){let{withPrivacyBanner:t=!0,onVisitorConsentCollected:r,onReady:a,...o}=e,n=useRef(!1),i=useLoadScript(t?Ha:qa,{attributes:{id:"customer-privacy-api"}});useEffect(()=>{let u=c=>{r&&r(c.detail);};return document.addEventListener("visitorConsentCollected",u),()=>{document.removeEventListener("visitorConsentCollected",u);}},[r]),useEffect(()=>{if(i!=="done"||n.current||(n.current=!0,o.checkoutDomain||wr("checkoutDomain"),o.storefrontAccessToken||wr("storefrontAccessToken"),(o.storefrontAccessToken.startsWith("shpat_")||o.storefrontAccessToken.length!==32)&&console.error("[h2:error:useCustomerPrivacy] It looks like you passed a private access token, make sure to use the public token"),t&&window?.privacyBanner&&window?.privacyBanner?.loadBanner({checkoutRootDomain:o.checkoutDomain,storefrontAccessToken:o.storefrontAccessToken}),!window.Shopify?.customerPrivacy))return;let u=window.Shopify.customerPrivacy.setTrackingConsent;function c(s,p){u({...s,headlessStorefront:!0,checkoutRootDomain:o.checkoutDomain,storefrontAccessToken:o.storefrontAccessToken},p);}window.Shopify.customerPrivacy.setTrackingConsent=c,a&&a();},[i,t,o]);}function Et(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Wa(){let e=Et();if(!e)throw new Error("Shopify Customer Privacy API not available. Must be used within a useEffect. Make sure to load the Shopify Customer Privacy API with useCustomerPrivacy() or <AnalyticsProvider>.");return e}function Er({consent:e,onReady:t,domain:r}){let{subscribe:a,register:o,canTrack:n}=X(),[i,u]=useState(!1),[c,s]=useState(!1),{ready:p}=o("Internal_Shopify_Analytics"),{ready:y}=o("Internal_Shopify_CustomerPrivacy"),m=()=>{i&&c&&t();},l=()=>{s(!0),y(),m();},{checkoutDomain:d,storefrontAccessToken:g,withPrivacyBanner:h}=e;return bt({checkoutDomain:d||"mock.shop",storefrontAccessToken:g||"abcdefghijklmnopqrstuvwxyz123456",withPrivacyBanner:h,onVisitorConsentCollected:l,onReady:()=>{setTimeout(l,3e3);}}),useShopifyCookies({hasUserConsent:n(),domain:r}),useEffect(()=>{a(Z.PAGE_VIEWED,Ka),a(Z.PRODUCT_VIEWED,za),a(Z.COLLECTION_VIEWED,Ja),a(Z.SEARCH_VIEWED,Ya),a(Z.PRODUCT_ADD_TO_CART,Xa),p(),u(!0),m();},[a,p]),null}function qe(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function Re(e){let t=Wa(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){qe("shopId");return}if(!e?.shop?.acceptedLanguage){qe("acceptedLanguage");return}if(!e?.shop?.currency){qe("currency");return}if(!e?.shop?.hydrogenSubchannelId){qe("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",...e.shop,hasUserConsent:r,...getClientBrowserParameters(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function ja(e,t){if(t===null)return;let r=Re(e);return r?{...r,cartId:t.id}:void 0}var j={};function Ka(e){let t=Re(e);t&&(sendShopifyAnalytics({eventName:AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...j}}),j={});}function za(e){let t=Re(e);if(t&&Dr({eventName:en,productField:"products",variantField:"product.<displayed_variant>",fromSource:"product_viewed products array",products:e.products})){let r=Dt(e.products);j={pageType:AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...j,products:Dt(e.products)},sendShopifyAnalytics({eventName:AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function Ja(e){let t=Re(e);t&&(j={pageType:AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...j,collectionHandle:e.collection.handle},sendShopifyAnalytics({eventName:AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function Ya(e){let t=Re(e);t&&(j={pageType:AnalyticsPageType.search},t={...t,...j,searchString:e.searchTerm},sendShopifyAnalytics({eventName:AnalyticsEventName.SEARCH_VIEW,payload:t}));}function Xa(e){let{cart:t,currentLine:r}=e,a=ja(e,t);!a||!r?.id||Za({matchedLine:r,eventPayload:a});}function Za({matchedLine:e,eventPayload:t}){let r={id:e.merchandise.product.id,variantId:e.id,title:e.merchandise.product.title,variantTitle:e.merchandise.title,vendor:e.merchandise.product.vendor,price:e.merchandise.price.amount,quantity:e.quantity,productType:e.merchandise.product.productType,sku:e.merchandise.sku};Dr({eventName:tn,productField:"merchandise.product",variantField:"merchandise",fromSource:"cart query",products:[r]})&&sendShopifyAnalytics({eventName:AnalyticsEventName.ADD_TO_CART,payload:{...t,products:Dt([r])}});}var en="Product viewed",tn="Add to cart";function ee(e,t,r){console.error(`[h2:error:ShopifyAnalytics] ${e}: ${t} is required from the ${r}.`);}function Dr({eventName:e,productField:t,variantField:r,products:a,fromSource:o}){return !a||a.length===0?(ee(e,`${t}`,o),!1):(a.forEach(n=>{if(!n.id)return ee(e,`${t}.id`,o),!1;if(!n.title)return ee(e,`${t}.title`,o),!1;if(!n.price)return ee(e,`${r}.price.amount`,o),!1;if(!n.vendor)return ee(e,`${t}.vendor`,o),!1;if(!n.variantId)return ee(e,`${r}.id`,o),!1;if(!n.variantTitle)return ee(e,`${r}.title`,o),!1}),!0)}function Dt(e){return e.map(t=>{let r={productGid:t.id,variantGid:t.variantId,name:t.title,variantName:t.variantTitle,brand:t.vendor,price:t.price,quantity:t.quantity||1,category:t.productType};return t.sku&&(r.sku=t.sku),t.productType&&(r.category=t.productType),r})}function kr(e){console.error(`[h2:error:CartAnalytics] Unable to set up cart analytics events: ${e} is missing.`);}function Lr({cart:e,setCarts:t}){let{publish:r,shop:a,customData:o,canTrack:n,cart:i,prevCart:u}=X(),c=useRef(null);return useEffect(()=>{if(e)return Promise.resolve(e).then(s=>{if(s&&s.lines){if(!s.id){kr("cart.id");return}if(!s.updatedAt){kr("cart.updatedAt");return}}t(({cart:p,prevCart:y})=>s?.updatedAt!==p?.updatedAt?{cart:s,prevCart:p}:{cart:p,prevCart:y});}),()=>{}},[t,e]),useEffect(()=>{if(!i||!i?.updatedAt||i?.updatedAt===u?.updatedAt)return;let s;try{s=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{s=null;}if(i.id===s?.id&&i.updatedAt===s?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:i,prevCart:u,shop:a,customData:o};if(i.updatedAt===c.current)return;c.current=i.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:i.id,updatedAt:i.updatedAt}));let y=u?.lines?flattenConnection(u?.lines):[],m=i.lines?flattenConnection(i.lines):[];y?.forEach(l=>{let d=m.filter(g=>l.id===g.id);if(d?.length===1){let g=d[0];l.quantity<g.quantity?r("product_added_to_cart",{...p,prevLine:l,currentLine:g}):l.quantity>g.quantity&&r("product_removed_from_cart",{...p,prevLine:l,currentLine:g});}else r("product_removed_from_cart",{...p,prevLine:l});}),m?.forEach(l=>{let d=y.filter(g=>l.id===g.id);(!d||d.length===0)&&r("product_added_to_cart",{...p,currentLine:l});});},[i,u,r,a,o,n]),null}var un={canTrack:()=>!1,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}})},Fr=createContext(un),Qe=new Map,we={};function $r(){return Object.values(we).every(Boolean)}function _r(e,t){Qe.has(e)||Qe.set(e,new Map),Qe.get(e)?.set(t.toString(),t);}var Ge=new Map;function Ur(e,t){if(!$r()){Ge.set(e,t);return}qr(e,t);}function qr(e,t){(Qe.get(e)??new Map).forEach((r,a)=>{try{r(t);}catch(o){typeof o=="object"&&o instanceof Error?console.error("Analytics publish error",o.message,a,o.stack):console.error("Analytics publish error",o,a);}});}function Nr(e){return we.hasOwnProperty(e)||(we[e]=!1),{ready:()=>{we[e]=!0,$r()&&Ge.size>0&&(Ge.forEach((t,r)=>{qr(r,t);}),Ge.clear());}}}function Vr(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return !1}function Mr(e,t){return `[h2:error:Analytics.Provider] - ${e} is required. Make sure ${t} is defined in your environment variables. See https://h2o.fyi/analytics/consent to learn how to setup environment variables in the Shopify admin.`}function pn({canTrack:e,cart:t,children:r,consent:a,customData:o={},shop:n=null,disableThrowOnError:i=!1,cookieDomain:u}){let c=useRef(!1),{shop:s}=dn(n),[p,y]=useState(!!e),[m,l]=useState({cart:null,prevCart:null}),[d,g]=useState(e?()=>e:()=>Vr);if(s)if(/\/68817551382$/.test(s.shopId))Wt("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!a.checkoutDomain){let f=Mr("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");at(f);}if(!a.storefrontAccessToken){let f=Mr("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");at(f);}}let h=useMemo(()=>({canTrack:d,...m,customData:o,publish:d()?Ur:()=>{},shop:s,subscribe:_r,register:Nr}),[p,d(),d,JSON.stringify(d),m,m.cart?.updatedAt,m.prevCart,Ur,_r,o,s,Nr,JSON.stringify(we)]);return jsxs(Fr.Provider,{value:h,children:[r,!!s&&jsx(Sr,{}),!!s&&!!t&&jsx(Lr,{cart:t,setCarts:l}),!!s&&a.checkoutDomain&&jsx(Er,{consent:a,onReady:()=>{c.current=!0,y(!0),g(()=>Vr);},domain:u})]})}function X(){let e=useContext(Fr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function dn(e){let[t,r]=useState(null);return useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function ln({storefront:e,publicStorefrontId:t="0"}){return e.query(yn,{cache:e.CacheLong()}).then(({shop:r,localization:a})=>({shopId:r.id,acceptedLanguage:a.language.isoCode,currency:a.country.currency.isoCode,hydrogenSubchannelId:t}))}var yn=`#graphql
|
|
623
622
|
query ShopData(
|
|
624
623
|
$country: CountryCode
|
|
625
624
|
$language: LanguageCode
|
|
@@ -638,7 +637,7 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
638
637
|
}
|
|
639
638
|
}
|
|
640
639
|
}
|
|
641
|
-
`,
|
|
640
|
+
`,fn={CartView:Tr,CollectionView:Ar,CustomView:Ir,ProductView:Pr,Provider:pn,SearchView:vr};var Cn=function(e){return jsx(RichText,{...e,components:{link:({node:t})=>jsx(Link,{to:t.url,title:t.title,target:t.target,prefetch:"intent",children:t.children}),...e.components}})};//! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartCreate
|
|
642
641
|
//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
|
|
643
642
|
//! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd
|
|
644
643
|
//! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesUpdate
|
|
@@ -650,6 +649,6 @@ API response error: ${t.status}`,s=new z(c,{query:o,queryVariables:n,cause:{erro
|
|
|
650
649
|
//! @see https://shopify.dev/docs/api/storefront/latest/mutations/cartMetafieldsSet
|
|
651
650
|
//! @see https://shopify.dev/docs/api/storefront/2024-04/mutations/cartMetafieldDelete
|
|
652
651
|
|
|
653
|
-
export {
|
|
652
|
+
export { fn as Analytics, Z as AnalyticsEvent, ze as CacheCustom, Ke as CacheLong, We as CacheNone, oe as CacheShort, G as CartForm, nt as InMemoryCache, Oa as OptimisticInput, wo as Pagination, Cn as RichText, ba as Script, Po as Seo, Ua as ShopPayButton, ma as VariantSelector, vt as cartAttributesUpdateDefault, Pt as cartBuyerIdentityUpdateDefault, ft as cartCreateDefault, St as cartDiscountCodesUpdateDefault, mt as cartGetDefault, na as cartGetIdDefault, gt as cartLinesAddDefault, Ct as cartLinesRemoveDefault, ht as cartLinesUpdateDefault, Rt as cartMetafieldDeleteDefault, It as cartMetafieldsSetDefault, At as cartNoteUpdateDefault, Tt as cartSelectedDeliveryOptionsUpdateDefault, sa as cartSetIdDefault, Fo as changelogHandler, ca as createCartHandler, va as createContentSecurityPolicy, Vo as createCustomerAccountClient, Jn as createStorefrontClient, ri as createWithCache, P as formatAPIResult, fe as generateCacheControlHeader, Et as getCustomerPrivacy, Eo as getPaginationVariables, ga as getSelectedProductOptions, Ao as getSeoMeta, ln as getShopAnalytics, po as graphiqlLoader, co as storefrontRedirect, X as useAnalytics, bt as useCustomerPrivacy, wt as useNonce, pa as useOptimisticCart, xa as useOptimisticData };
|
|
654
653
|
//# sourceMappingURL=out.js.map
|
|
655
654
|
//# sourceMappingURL=index.js.map
|