@shopify/hydrogen 2025.7.0 → 2025.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/dev/{get-virtual-routes-KWSSQH4L.js → get-virtual-routes-ZEUPNZWL.js} +0 -36
  2. package/dist/dev/hydrogen-routes.js +1 -1
  3. package/dist/development/{get-virtual-routes-6PVSMJPH.js → get-virtual-routes-XE7G57DS.js} +3 -36
  4. package/dist/development/get-virtual-routes-XE7G57DS.js.map +1 -0
  5. package/dist/development/index.cjs +406 -124
  6. package/dist/development/index.cjs.map +1 -1
  7. package/dist/development/index.js +395 -81
  8. package/dist/development/index.js.map +1 -1
  9. package/dist/development/react-router-preset.d.ts +5 -5
  10. package/dist/development/react-router-preset.js +4 -4
  11. package/dist/development/react-router-preset.js.map +1 -1
  12. package/dist/oxygen/index.d.ts +120 -3
  13. package/dist/oxygen/index.js +111 -5
  14. package/dist/production/get-virtual-routes-MYYLGSAS.js +3 -0
  15. package/dist/production/get-virtual-routes-MYYLGSAS.js.map +1 -0
  16. package/dist/production/index.cjs +76 -76
  17. package/dist/production/index.cjs.map +1 -1
  18. package/dist/production/index.d.cts +76 -15
  19. package/dist/production/index.d.ts +76 -15
  20. package/dist/production/index.js +76 -76
  21. package/dist/production/index.js.map +1 -1
  22. package/dist/production/react-router-preset.d.ts +5 -5
  23. package/dist/production/react-router-preset.js +2 -2
  24. package/dist/vite/get-virtual-routes.d.ts +1 -17
  25. package/dist/vite/get-virtual-routes.js +0 -36
  26. package/package.json +6 -6
  27. package/dist/development/get-virtual-routes-6PVSMJPH.js.map +0 -1
  28. package/dist/oxygen/chunk-RVXKHOUX.js +0 -39
  29. package/dist/oxygen/chunk-T4YWBSCF.js +0 -14
  30. package/dist/oxygen/createRequestHandler.d.ts +0 -10
  31. package/dist/oxygen/createRequestHandler.js +0 -6
  32. package/dist/oxygen/getStorefrontHeaders-BqPh5S1b.d.ts +0 -69
  33. package/dist/oxygen/getStorefrontHeaders.d.ts +0 -1
  34. package/dist/oxygen/getStorefrontHeaders.js +0 -6
  35. package/dist/production/get-virtual-routes-JVKSNI4M.js +0 -3
  36. package/dist/production/get-virtual-routes-JVKSNI4M.js.map +0 -1
@@ -1,4 +1,4 @@
1
- 'use strict';var url=require('url'),rt=require('path'),promises=require('fs/promises'),react=require('react'),reactRouter=require('react-router'),jsxRuntime=require('react/jsx-runtime'),hydrogenReact=require('@shopify/hydrogen-react'),graphqlClient=require('@shopify/graphql-client'),cookie=require('worktop/cookie'),Ga=require('content-security-policy-builder');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var rt__default=/*#__PURE__*/_interopDefault(rt);var Ga__default=/*#__PURE__*/_interopDefault(Ga);var Qo=Object.defineProperty;var pr=(e,t)=>()=>(e&&(t=e(e=0)),t);var dr=(e,t)=>{for(var r in t)Qo(e,r,{get:t[r],enumerable:true});};var Io={};dr(Io,{VIRTUAL_ROOT:()=>Za,VIRTUAL_ROOT_ORIG:()=>Xt,VIRTUAL_ROUTES_DIR:()=>_e,VIRTUAL_ROUTES_DIR_ORIG:()=>Yt,VIRTUAL_ROUTES_DIR_PARTS:()=>Ro,VIRTUAL_ROUTES_ROUTES_DIR_PARTS:()=>Ue,getVirtualRoutes:()=>ts,getVirtualRoutesV3:()=>es});function De(e,t){let r=new URL("../",(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),o=e.reduce((n,a)=>new URL(`${a}/`,n),r);return new URL(t,o).pathname.replace(/^\/[a-zA-Z]:\//,"/")}async function es(){return {routes:[{id:`${_e}/graphiql`,path:"graphiql",file:De(Ue,"graphiql.jsx"),index:false},{id:`${_e}/subrequest-profiler`,path:"subrequest-profiler",file:De(Ue,"subrequest-profiler.jsx"),index:false},{id:`${_e}/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json`,path:".well-known/appspecific/com.chrome.devtools.json",file:De(Ue,"[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx"),index:false},{id:`${_e}/index`,path:"",file:De(Ue,"index.jsx"),index:true}],layout:{file:De(Ro,"layout.jsx")}}}async function ts(){let e=rt__default.default.dirname(url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)))),t=rt__default.default.join(e,Yt);return {routes:await promises.readdir(t,{recursive:true}).then(o=>o.map(n=>{let a=rt__default.default.join(t,n),s=n.replace(/\.[jt]sx?$/,"").replaceAll("\\","/"),c=/(^|\/)index$/.test(s),i=s.replace(/(^|\/)index$/,"");return {id:`${Yt}/${s}`,path:i,file:a,index:c}})),root:{id:Xt,path:"",file:rt__default.default.join(e,Xt+".jsx")}}}var _e,Ue,Ro,Za,Yt,Xt;var $o={};dr($o,{default:()=>Mo,logSeoTags:()=>Vo});function Mo({headTags:e}){return Vo(e),null}function Vo(e){console.log(" "),console.log("%cSEO Meta Tags",`${ks}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",sr),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,sr),t.children)if(typeof t.children=="string")console.log(`\u21B3 ${t.children}`);else try{Object.entries(JSON.parse(t.children)).map(([r,o])=>console.log(`\u21B3 ${o}`));}catch{console.log(t.children);}if(t.props.property==="og:image:url"){let r=t.props.content;Ns(r).then(o=>{let n=`font-size: 400px; padding: 10px; background: white url(${o}) no-repeat center; background-size: contain;`;console.log("%c\u2022 Share image preview",sr),console.log("%c ",n),console.log(`\u21B3 ${r}`);}).catch(o=>{console.error(o);});}Object.entries(t.props).map(([r,o])=>{console.log(`\u21B3 ${r} \u2192 ${o}`);});}console.log(" ");});}async function Ns(e){let o=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${Ms(o)}`}function Ms(e){let t="",r=new Uint8Array(e),o=r.byteLength;for(let n=0;n<o;n++)t+=String.fromCharCode(r[n]);return btoa(t)}var sr,ks,Fo=pr(()=>{sr="text-transform: uppercase;",ks="text-transform: uppercase; font-weight: bold; text-transform: uppercase;font-weight: bold";});function pe(e){let{type:t,data:r={},customData:o}=e,n=reactRouter.useLocation(),{publish:a,cart:s,prevCart:c,shop:i,customData:u}=j(),p=n.pathname+n.search,d={...r,customData:{...u,...o},cart:s,prevCart:c,shop:i};return react.useEffect(()=>{i?.shopId&&(d={...d,url:window.location.href},a(t,d));},[a,p,i?.shopId]),null}function lr(e){return jsxRuntime.jsx(pe,{...e,type:"page_viewed"})}function yr(e){return jsxRuntime.jsx(pe,{...e,type:"product_viewed"})}function fr(e){return jsxRuntime.jsx(pe,{...e,type:"collection_viewed"})}function mr(e){return jsxRuntime.jsx(pe,{...e,type:"cart_viewed"})}function gr(e){return jsxRuntime.jsx(pe,{...e,type:"search_viewed"})}function hr(e){return jsxRuntime.jsx(pe,{...e})}var $={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 Xo="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.1/consent-tracking-api.js",Zo="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function st(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function it(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,...n}=e;hydrogenReact.useLoadScript(t?Zo:Xo,{attributes:{id:"customer-privacy-api"}});let{observing:a,setLoaded:s}=en({withPrivacyBanner:t,onLoaded:o}),c=react.useMemo(()=>{let{checkoutDomain:u,storefrontAccessToken:p}=n;return u||st("checkoutDomain"),p||st("storefrontAccessToken"),(p.startsWith("shpat_")||p.length!==32)&&console.error("[h2:error:useCustomerPrivacy] It looks like you passed a private access token, make sure to use the public token"),{checkoutRootDomain:u,storefrontAccessToken:p,storefrontRootDomain:Pr(u),country:n.country,locale:n.locale}},[n,Pr,st]);react.useEffect(()=>{let u=p=>{r&&r(p.detail);};return document.addEventListener("visitorConsentCollected",u),()=>{document.removeEventListener("visitorConsentCollected",u);}},[r]),react.useEffect(()=>{if(!t||a.current.privacyBanner)return;a.current.privacyBanner=true;let u=window.privacyBanner||void 0;Object.defineProperty(window,"privacyBanner",{configurable:true,get(){return u},set(d){if(typeof d=="object"&&d!==null&&"showPreferences"in d&&"loadBanner"in d){let g=d;g.loadBanner(c),u=vr({privacyBanner:g,config:c}),s.privacyBanner(),Ar();}}});},[t,c,vr,s.privacyBanner]),react.useEffect(()=>{if(a.current.customerPrivacy)return;a.current.customerPrivacy=true;let u=null,p=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return p},set(d){typeof d=="object"&&d!==null&&Object.keys(d).length===0&&(p=d,Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return u},set(g){if(typeof g=="object"&&g!==null&&"setTrackingConsent"in g){let m=g;u={...m,setTrackingConsent:Sr({customerPrivacy:m,config:c})},p={...p,customerPrivacy:u},s.customerPrivacy(),Ar();}}}));}});},[c,Sr,s.customerPrivacy]);let i={customerPrivacy:le()};return t&&(i.privacyBanner=Ve()),i}var Cr=false;function Ar(){if(Cr)return;Cr=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function en({withPrivacyBanner:e,onLoaded:t}){let r=react.useRef({customerPrivacy:false,privacyBanner:false}),[o,n]=react.useState(e?[false,false]:[false]),a=o.every(Boolean),s={customerPrivacy:()=>{n(e?c=>[true,c[1]]:()=>[true]);},privacyBanner:()=>{e&&n(c=>[c[0],true]);}};return react.useEffect(()=>{a&&t&&t();},[a,t]),{observing:r,setLoaded:s}}function Pr(e){if(typeof window>"u")return;let t=window.document.location.host,r=e.split(".").reverse(),o=t.split(".").reverse(),n=[];return r.forEach((a,s)=>{a===o[s]&&n.push(a);}),n.reverse().join(".")}function Sr({customerPrivacy:e,config:t}){let r=e.setTrackingConsent,{locale:o,country:n,...a}=t;function s(c,i){r({...a,headlessStorefront:true,...c},i);}return s}function vr({privacyBanner:e,config:t}){let r=e.loadBanner,o=e.showPreferences;function n(s){if(typeof s=="object"){r({...t,...s});return}r(t);}function a(s){if(typeof s=="object"){o({...t,...s});return}o(t);}return {loadBanner:n,showPreferences:a}}function le(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Ve(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var Rr="2025.7.0";function an(){let e=le();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:o,register:n,canTrack:a}=j(),[s,c]=react.useState(false),[i,u]=react.useState(false),p=react.useRef(false),{checkoutDomain:d,storefrontAccessToken:g,language:m}=e,{ready:l}=n("Internal_Shopify_Analytics");return it({...e,locale:m,checkoutDomain:d||"mock.shop",storefrontAccessToken:g||"abcdefghijklmnopqrstuvwxyz123456",onVisitorConsentCollected:()=>u(true),onReady:()=>u(true)}),hydrogenReact.useShopifyCookies({hasUserConsent:i?a():true,domain:r,checkoutDomain:d}),react.useEffect(()=>{p.current||(p.current=true,o($.PAGE_VIEWED,cn),o($.PRODUCT_VIEWED,un),o($.COLLECTION_VIEWED,pn),o($.SEARCH_VIEWED,dn),o($.PRODUCT_ADD_TO_CART,ln),c(true));},[o]),react.useEffect(()=>{s&&i&&(l(),t());},[s,i,t]),null}function $e(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function Re(e){let t=an(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){$e("shopId");return}if(!e?.shop?.acceptedLanguage){$e("acceptedLanguage");return}if(!e?.shop?.currency){$e("currency");return}if(!e?.shop?.hydrogenSubchannelId){$e("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:Rr,...e.shop,hasUserConsent:r,...hydrogenReact.getClientBrowserParameters(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed()),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed()}}function sn(e,t){if(t===null)return;let r=Re(e);return r?{...r,cartId:t.id}:void 0}var te={};function cn(e){let t=Re(e);t&&(hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...te}}),te={});}function un(e){let t=Re(e);if(t&&br({type:"product",products:e.products})){let r=ct(e.products);te={pageType:hydrogenReact.AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...te,products:ct(e.products)},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function pn(e){let t=Re(e);t&&(te={pageType:hydrogenReact.AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...te,collectionHandle:e.collection.handle,collectionId:e.collection.id},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function dn(e){let t=Re(e);t&&(te={pageType:hydrogenReact.AnalyticsPageType.search},t={...t,...te,searchString:e.searchTerm},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.SEARCH_VIEW,payload:t}));}function ln(e){let{cart:t,currentLine:r}=e,o=sn(e,t);!o||!r?.id||yn({matchedLine:r,eventPayload:o});}function yn({matchedLine:e,eventPayload:t}){let r={id:e.merchandise.product.id,variantId:e.merchandise.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};br({type:"cart",products:[r]})&&hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.ADD_TO_CART,payload:{...t,products:ct([r])}});}function se(e,t,r,o){if(e==="cart"){let n=`${r?"merchandise":"merchandise.product"}.${t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up cart analytics events because the \`cart.lines[].${n}\` value is missing from your GraphQL cart query. In your project, search for where \`fragment CartLine on CartLine\` is defined and make sure \`${n}\` is part of your cart query. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/lib/fragments.ts#L25-L56.`);}else {let n=`${o||t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up product view analytics events because the \`${n}\` is missing from your \`<Analytics.ProductView>\`. Make sure \`${n}\` is part of your products data prop. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/routes/products.%24handle.tsx#L159-L165.`);}}function br({type:e,products:t}){return !t||t.length===0?(se(e,"",false,"data.products"),false):(t.forEach(r=>{if(!r.id)return se(e,"id",false),false;if(!r.title)return se(e,"title",false),false;if(!r.price)return se(e,"price.amount",true,"price"),false;if(!r.vendor)return se(e,"vendor",false),false;if(!r.variantId)return se(e,"id",true,"variantId"),false;if(!r.variantTitle)return se(e,"title",true,"variantTitle"),false}),true)}function ct(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 Or(e){console.error(`[h2:error:CartAnalytics] Can't set up cart analytics events because the \`cart.${e}\` value is missing from your GraphQL cart query. In your project, search for where \`fragment CartApiQuery on Cart\` is defined and make sure \`${e}\` is part of your cart query. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/lib/fragments.ts#L59.`);}function Dr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:c}=j(),i=react.useRef(null);return react.useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){Or("id");return}if(!u.updatedAt){Or("updatedAt");return}}t(({cart:p,prevCart:d})=>u?.updatedAt!==p?.updatedAt?{cart:u,prevCart:p}:{cart:p,prevCart:d});}),()=>{}},[t,e]),react.useEffect(()=>{if(!s||!s?.updatedAt||s?.updatedAt===c?.updatedAt)return;let u;try{u=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{u=null;}if(s.id===u?.id&&s.updatedAt===u?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:s,prevCart:c,shop:o,customData:n};if(s.updatedAt===i.current)return;i.current=s.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let d=c?.lines?hydrogenReact.flattenConnection(c?.lines):[],g=s.lines?hydrogenReact.flattenConnection(s.lines):[];d?.forEach(m=>{let l=g.filter(y=>m.id===y.id);if(l?.length===1){let y=l[0];m.quantity<y.quantity?r("product_added_to_cart",{...p,prevLine:m,currentLine:y}):m.quantity>y.quantity&&r("product_removed_from_cart",{...p,prevLine:m,currentLine:y});}else r("product_removed_from_cart",{...p,prevLine:m});}),g?.forEach(m=>{let l=d.filter(y=>m.id===y.id);(!l||l.length===0)&&r("product_added_to_cart",{...p,currentLine:m});});},[s,c,r,o,n,a]),null}var An="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function _r({shop:e}){let t=react.useRef(false),{subscribe:r,register:o}=j(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=hydrogenReact.useLoadScript(An,{attributes:{id:"perfkit","data-application":"hydrogen","data-shop-id":hydrogenReact.parseGid(e.shopId).id.toString(),"data-storefront-id":e.hydrogenSubchannelId,"data-monorail-region":"global","data-spa-mode":"true","data-resource-timing-sampling-rate":"100"}});return react.useEffect(()=>{a!=="done"||t.current||(t.current=true,r($.PAGE_VIEWED,()=>{window.PerfKit?.navigate();}),r($.PRODUCT_VIEWED,()=>{window.PerfKit?.setPageType("product");}),r($.COLLECTION_VIEWED,()=>{window.PerfKit?.setPageType("collection");}),r($.SEARCH_VIEWED,()=>{window.PerfKit?.setPageType("search");}),r($.CART_VIEWED,()=>{window.PerfKit?.setPageType("cart");}),n());},[r,n,a]),null}var Ur=new Set,K=e=>{Ur.has(e)||(console.warn(e),Ur.add(e));},Lr=new Set,pt=e=>{Lr.has(e)||(console.error(new Error(e)),Lr.add(e));};var Tn={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},Fr=react.createContext(Tn),He=new Map,Ie={};function qr(){return Object.values(Ie).every(Boolean)}function kr(e,t){He.has(e)||He.set(e,new Map),He.get(e)?.set(t.toString(),t);}var Ge=new Map;function Nr(e,t){if(!qr()){Ge.set(e,t);return}Hr(e,t);}function Hr(e,t){(He.get(e)??new Map).forEach((r,o)=>{try{r(t);}catch(n){typeof n=="object"&&n instanceof Error?console.error("Analytics publish error",n.message,o,n.stack):console.error("Analytics publish error",n,o);}});}function Mr(e){return Ie.hasOwnProperty(e)||(Ie[e]=false),{ready:()=>{Ie[e]=true,qr()&&Ge.size>0&&(Ge.forEach((t,r)=>{Hr(r,t);}),Ge.clear());}}}function Vr(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return false}function $r(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 En({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let c=react.useRef(false),{shop:i}=bn(a),[u,p]=react.useState(!!e),[d,g]=react.useState({cart:null,prevCart:null}),[m,l]=react.useState(e?()=>e:()=>Vr);if(i)if(/\/68817551382$/.test(i.shopId))K("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let h=$r("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");pt(h);}if(!o.storefrontAccessToken){let h=$r("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");pt(h);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let y=react.useMemo(()=>({canTrack:m,...d,customData:n,publish:m()?Nr:()=>{},shop:i,subscribe:kr,register:Mr,customerPrivacy:le(),privacyBanner:Ve()}),[u,m,d,d.cart?.updatedAt,d.prevCart,Nr,kr,n,i,Mr,JSON.stringify(Ie),le,Ve]);return jsxRuntime.jsxs(Fr.Provider,{value:y,children:[r,!!i&&jsxRuntime.jsx(lr,{}),!!i&&!!t&&jsxRuntime.jsx(Dr,{cart:t,setCarts:g}),!!i&&o.checkoutDomain&&jsxRuntime.jsx(Er,{consent:o,onReady:()=>{c.current=true,p(true),l(e?()=>e:()=>Vr);},domain:s}),!!i&&jsxRuntime.jsx(_r,{shop:i})]})}function j(){let e=react.useContext(Fr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function bn(e){let[t,r]=react.useState(null);return react.useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function wn({storefront:e,publicStorefrontId:t="0"}){return e.query(xn,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var xn=`#graphql
1
+ 'use strict';var react=require('react'),reactRouter=require('react-router'),jsxRuntime=require('react/jsx-runtime'),hydrogenReact=require('@shopify/hydrogen-react'),loadScript=require('@shopify/hydrogen-react/load-script'),graphqlClient=require('@shopify/graphql-client'),cookie=require('worktop/cookie'),as=require('content-security-policy-builder');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var as__default=/*#__PURE__*/_interopDefault(as);var rn=Object.defineProperty;var Ar=(e,t)=>()=>(e&&(t=e(e=0)),t);var Sr=(e,t)=>{for(var r in t)rn(e,r,{get:t[r],enumerable:true});};var ko={};Sr(ko,{VIRTUAL_ROUTES_DIR:()=>He,VIRTUAL_ROUTES_DIR_PARTS:()=>Lo,VIRTUAL_ROUTES_ROUTES_DIR_PARTS:()=>Fe,getVirtualRoutesV3:()=>ys});function Ve(e,t){let r=new URL("../",(typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))),o=e.reduce((n,a)=>new URL(`${a}/`,n),r);return new URL(t,o).pathname.replace(/^\/[a-zA-Z]:\//,"/")}async function ys(){return {routes:[{id:`${He}/graphiql`,path:"graphiql",file:Ve(Fe,"graphiql.jsx"),index:false},{id:`${He}/subrequest-profiler`,path:"subrequest-profiler",file:Ve(Fe,"subrequest-profiler.jsx"),index:false},{id:`${He}/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json`,path:".well-known/appspecific/com.chrome.devtools.json",file:Ve(Fe,"[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx"),index:false},{id:`${He}/index`,path:"",file:Ve(Fe,"index.jsx"),index:true}],layout:{file:Ve(Lo,"layout.jsx")}}}var He,Fe,Lo;var zo={};Sr(zo,{default:()=>Ko,logSeoTags:()=>Yo});function Ko({headTags:e}){return Yo(e),null}function Yo(e){console.log(" "),console.log("%cSEO Meta Tags",`${js}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",Cr),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,Cr),t.children)if(typeof t.children=="string")console.log(`\u21B3 ${t.children}`);else try{Object.entries(JSON.parse(t.children)).map(([r,o])=>console.log(`\u21B3 ${o}`));}catch{console.log(t.children);}if(t.props.property==="og:image:url"){let r=t.props.content;Ks(r).then(o=>{let n=`font-size: 400px; padding: 10px; background: white url(${o}) no-repeat center; background-size: contain;`;console.log("%c\u2022 Share image preview",Cr),console.log("%c ",n),console.log(`\u21B3 ${r}`);}).catch(o=>{console.error(o);});}Object.entries(t.props).map(([r,o])=>{console.log(`\u21B3 ${r} \u2192 ${o}`);});}console.log(" ");});}async function Ks(e){let o=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${Ys(o)}`}function Ys(e){let t="",r=new Uint8Array(e),o=r.byteLength;for(let n=0;n<o;n++)t+=String.fromCharCode(r[n]);return btoa(t)}var Cr,js,Jo=Ar(()=>{Cr="text-transform: uppercase;",js="text-transform: uppercase; font-weight: bold; text-transform: uppercase;font-weight: bold";});function le(e){let{type:t,data:r={},customData:o}=e,n=reactRouter.useLocation(),{publish:a,cart:s,prevCart:c,shop:i,customData:u}=Y(),p=n.pathname+n.search,y={...r,customData:{...u,...o},cart:s,prevCart:c,shop:i};return react.useEffect(()=>{i?.shopId&&(y={...y,url:window.location.href},a(t,y));},[a,p,i?.shopId]),null}function Pr(e){return jsxRuntime.jsx(le,{...e,type:"page_viewed"})}function vr(e){return jsxRuntime.jsx(le,{...e,type:"product_viewed"})}function Rr(e){return jsxRuntime.jsx(le,{...e,type:"collection_viewed"})}function Tr(e){return jsxRuntime.jsx(le,{...e,type:"cart_viewed"})}function Ir(e){return jsxRuntime.jsx(le,{...e,type:"search_viewed"})}function Er(e){return jsxRuntime.jsx(le,{...e})}var F={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 Qe="Custom-Storefront-Request-Group-ID",We="X-Shopify-Storefront-Access-Token",ht="X-SDK-Variant",Ct="X-SDK-Variant-Source",At="X-SDK-Version",St="X-Shopify-Client-IP",Re="X-Shopify-Client-IP-Sig",je="_sfapi_proxy",Ke="_server_tracking";function an(e){return Object.entries(e).map(([t,r])=>r?`${t};desc=${r}`:void 0).filter(Boolean).join(", ")}function Te(e,t){let r=typeof t=="string"?t:an(t);r&&e.headers.append("Server-Timing",r);}var sn=["_y","_s","_cmp"];function br(e){let t={};if(!e)return t;let r=new RegExp(`\\b(${sn.join("|")});desc="?([^",]+)"?`,"g"),o;for(;(o=r.exec(e))!==null;)t[o[1]]=o[2];return t}function wr(e){if(typeof window>"u")return false;try{return !!window.performance.getEntriesByType("navigation")[0]?.serverTiming?.some(r=>r.name===e)}catch{return false}}function xr(){return wr(je)}function Or(){return wr(Ke)}var yn="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js",fn="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function vt(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function Rt(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,checkoutDomain:n,storefrontAccessToken:a,country:s,locale:c,sameDomainForStorefrontApi:i}=e,u=react.useMemo(()=>i??xr(),[i]),p=react.useMemo(()=>u&&!Or(),[u]),y=hydrogenReact.useShopifyCookies({fetchTrackingValues:p,storefrontAccessToken:a,ignoreDeprecatedCookies:true}),g=react.useMemo(hydrogenReact.getTrackingValues,[y]),{revalidate:m}=reactRouter.useRevalidator();loadScript.useLoadScript(t?fn:yn,{attributes:{id:"customer-privacy-api"}});let{observing:d,setLoaded:l,apisLoaded:S}=gn({withPrivacyBanner:t}),f=react.useMemo(()=>{n||vt("checkoutDomain"),a||vt("storefrontAccessToken"),(a.startsWith("shpat_")||a.length!==32)&&console.error("[h2:error:useCustomerPrivacy] It looks like you passed a private access token, make sure to use the public token");let C=hn(n);return {checkoutRootDomain:u&&typeof window<"u"?window.location.host:n,storefrontRootDomain:C?"."+C:void 0,storefrontAccessToken:a,country:s,locale:c}},[vt,n,a,s,c]);react.useEffect(()=>{let C=A=>{let h=hydrogenReact.getTrackingValues();if((g.visitToken!==h.visitToken||g.uniqueToken!==h.uniqueToken)&&m().catch(()=>{console.warn("[h2:warn:useCustomerPrivacy] Revalidation failed after consent change.");}),r){let R=re();if(R?.shouldShowBanner()){let T=R.currentVisitorConsent();if(T&&T.marketing===""&&T.analytics===""&&T.preferences==="")return}r(A.detail);}};return document.addEventListener("visitorConsentCollected",C),()=>{document.removeEventListener("visitorConsentCollected",C);}},[r]),react.useEffect(()=>{if(!t||d.current.privacyBanner)return;d.current.privacyBanner=true;let C=window.privacyBanner||void 0;Object.defineProperty(window,"privacyBanner",{configurable:true,get(){return C},set(h){typeof h=="object"&&h!==null&&"showPreferences"in h&&"loadBanner"in h&&(C=Ur({privacyBanner:h,config:f}),l.privacyBanner());}});},[t,f,Ur,l.privacyBanner]),react.useEffect(()=>{if(d.current.customerPrivacy)return;d.current.customerPrivacy=true;let C=null,A=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return A},set(h){typeof h=="object"&&h!==null&&Object.keys(h).length===0&&(A=h,Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return C},set(R){if(typeof R=="object"&&R!==null&&"setTrackingConsent"in R){let T=R;C={...T,setTrackingConsent:_r({customerPrivacy:T,config:f})},A={...A,customerPrivacy:C},l.customerPrivacy();}}}));}});},[f,_r,l.customerPrivacy]),react.useEffect(()=>{if(!S||!y)return;let C=re();if(C&&!C.cachedConsent){let A=hydrogenReact.getTrackingValues();A.consent&&(C.cachedConsent=A.consent);}if(t){let A=Ie();A&&A.loadBanner(f);}mn(),o?.();},[S,y]);let P={customerPrivacy:re()};return t&&(P.privacyBanner=Ie()),P}var Dr=false;function mn(){if(Dr)return;Dr=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function gn({withPrivacyBanner:e}){let t=react.useRef({customerPrivacy:false,privacyBanner:false}),[r,o]=react.useState(e?[false,false]:[false]),n=r.every(Boolean);return {observing:t,setLoaded:{customerPrivacy:()=>{o(e?s=>[true,s[1]]:()=>[true]);},privacyBanner:()=>{e&&o(s=>[s[0],true]);}},apisLoaded:n}}function hn(e){if(typeof window>"u")return;let t=window.location.host,r=e.split(".").reverse(),o=t.split(".").reverse(),n=[];return r.forEach((a,s)=>{a===o[s]&&n.push(a);}),n.reverse().join(".")||void 0}function _r({customerPrivacy:e,config:t}){let r=e.setTrackingConsent,{locale:o,country:n,...a}=t;function s(c,i){r({...a,headlessStorefront:true,...c},i);}return s}function Ur({privacyBanner:e,config:t}){let r=e.loadBanner,o=e.showPreferences;function n(s){if(typeof s=="object"){r({...t,...s});return}r(t);}function a(s){if(typeof s=="object"){o({...t,...s});return}o(t);}return {loadBanner:n,showPreferences:a}}function re(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Ie(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var Lr="2025.7.2";function Rn(){let e=re();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 Nr({consent:e,onReady:t,domain:r}){let{subscribe:o,register:n,canTrack:a}=Y(),[s,c]=react.useState(false),[i,u]=react.useState(false),[p,y]=react.useState(""),g=react.useRef(false),{checkoutDomain:m,storefrontAccessToken:d,language:l}=e,{ready:S}=n("Internal_Shopify_Analytics");Rt({...e,locale:l,checkoutDomain:m||"mock.shop",storefrontAccessToken:d||"abcdefghijklmnopqrstuvwxyz123456",onReady:()=>!e.withPrivacyBanner&&u(true),onVisitorConsentCollected:P=>{try{y(JSON.stringify(P));}catch{}u(true);}});let f=react.useMemo(()=>i?a():true,[i,a,p]);return hydrogenReact.useShopifyCookies({hasUserConsent:f,domain:r,checkoutDomain:m,fetchTrackingValues:false,ignoreDeprecatedCookies:!i}),react.useEffect(()=>{g.current||(g.current=true,o(F.PAGE_VIEWED,In),o(F.PRODUCT_VIEWED,En),o(F.COLLECTION_VIEWED,bn),o(F.SEARCH_VIEWED,wn),o(F.PRODUCT_ADD_TO_CART,xn),c(true));},[o]),react.useEffect(()=>{s&&i&&(S(),t());},[s,i,t]),null}function Je(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function we(e){let t=Rn(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){Je("shopId");return}if(!e?.shop?.acceptedLanguage){Je("acceptedLanguage");return}if(!e?.shop?.currency){Je("currency");return}if(!e?.shop?.hydrogenSubchannelId){Je("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:Lr,...e.shop,hasUserConsent:r,...hydrogenReact.getClientBrowserParameters(),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function Tn(e,t){if(t===null)return;let r=we(e);return r?{...r,cartId:t.id}:void 0}var oe={};function In(e){let t=we(e);t&&(hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...oe}}),oe={});}function En(e){let t=we(e);if(t&&Mr({type:"product",products:e.products})){let r=It(e.products);oe={pageType:hydrogenReact.AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...oe,products:It(e.products)},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function bn(e){let t=we(e);t&&(oe={pageType:hydrogenReact.AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...oe,collectionHandle:e.collection.handle,collectionId:e.collection.id},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function wn(e){let t=we(e);t&&(oe={pageType:hydrogenReact.AnalyticsPageType.search},t={...t,...oe,searchString:e.searchTerm},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.SEARCH_VIEW,payload:t}));}function xn(e){let{cart:t,currentLine:r}=e,o=Tn(e,t);!o||!r?.id||On({matchedLine:r,eventPayload:o});}function On({matchedLine:e,eventPayload:t}){let r={id:e.merchandise.product.id,variantId:e.merchandise.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};Mr({type:"cart",products:[r]})&&hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.ADD_TO_CART,payload:{...t,products:It([r])}});}function ce(e,t,r,o){if(e==="cart"){let n=`${r?"merchandise":"merchandise.product"}.${t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up cart analytics events because the \`cart.lines[].${n}\` value is missing from your GraphQL cart query. In your project, search for where \`fragment CartLine on CartLine\` is defined and make sure \`${n}\` is part of your cart query. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/lib/fragments.ts#L25-L56.`);}else {let n=`${o||t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up product view analytics events because the \`${n}\` is missing from your \`<Analytics.ProductView>\`. Make sure \`${n}\` is part of your products data prop. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/routes/products.%24handle.tsx#L159-L165.`);}}function Mr({type:e,products:t}){return !t||t.length===0?(ce(e,"",false,"data.products"),false):(t.forEach(r=>{if(!r.id)return ce(e,"id",false),false;if(!r.title)return ce(e,"title",false),false;if(!r.price)return ce(e,"price.amount",true,"price"),false;if(!r.vendor)return ce(e,"vendor",false),false;if(!r.variantId)return ce(e,"id",true,"variantId"),false;if(!r.variantTitle)return ce(e,"title",true,"variantTitle"),false}),true)}function It(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 Fr(e){console.error(`[h2:error:CartAnalytics] Can't set up cart analytics events because the \`cart.${e}\` value is missing from your GraphQL cart query. In your project, search for where \`fragment CartApiQuery on Cart\` is defined and make sure \`${e}\` is part of your cart query. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/lib/fragments.ts#L59.`);}function qr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:c}=Y(),i=react.useRef(null);return react.useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){Fr("id");return}if(!u.updatedAt){Fr("updatedAt");return}}t(({cart:p,prevCart:y})=>u?.updatedAt!==p?.updatedAt?{cart:u,prevCart:p}:{cart:p,prevCart:y});}),()=>{}},[t,e]),react.useEffect(()=>{if(!s||!s?.updatedAt||s?.updatedAt===c?.updatedAt)return;let u;try{u=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{u=null;}if(s.id===u?.id&&s.updatedAt===u?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:s,prevCart:c,shop:o,customData:n};if(s.updatedAt===i.current)return;i.current=s.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let y=c?.lines?hydrogenReact.flattenConnection(c?.lines):[],g=s.lines?hydrogenReact.flattenConnection(s.lines):[];y?.forEach(m=>{let d=g.filter(l=>m.id===l.id);if(d?.length===1){let l=d[0];m.quantity<l.quantity?r("product_added_to_cart",{...p,prevLine:m,currentLine:l}):m.quantity>l.quantity&&r("product_removed_from_cart",{...p,prevLine:m,currentLine:l});}else r("product_removed_from_cart",{...p,prevLine:m});}),g?.forEach(m=>{let d=y.filter(l=>m.id===l.id);(!d||d.length===0)&&r("product_added_to_cart",{...p,currentLine:m});});},[s,c,r,o,n,a]),null}var Nn="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function $r({shop:e}){let t=react.useRef(false),{subscribe:r,register:o}=Y(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=hydrogenReact.useLoadScript(Nn,{attributes:{id:"perfkit","data-application":"hydrogen","data-shop-id":hydrogenReact.parseGid(e.shopId).id.toString(),"data-storefront-id":e.hydrogenSubchannelId,"data-monorail-region":"global","data-spa-mode":"true","data-resource-timing-sampling-rate":"100"}});return react.useEffect(()=>{a!=="done"||t.current||(t.current=true,r(F.PAGE_VIEWED,()=>{window.PerfKit?.navigate();}),r(F.PRODUCT_VIEWED,()=>{window.PerfKit?.setPageType("product");}),r(F.COLLECTION_VIEWED,()=>{window.PerfKit?.setPageType("collection");}),r(F.SEARCH_VIEWED,()=>{window.PerfKit?.setPageType("search");}),r(F.CART_VIEWED,()=>{window.PerfKit?.setPageType("cart");}),n());},[r,n,a]),null}var Gr=new Set,B=e=>{Gr.has(e)||(console.warn(e),Gr.add(e));},Br=new Set,bt=e=>{Br.has(e)||(console.error(new Error(e)),Br.add(e));};var qn={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},zr=react.createContext(qn),Ze=new Map,Oe={};function Jr(){return Object.values(Oe).every(Boolean)}function Qr(e,t){Ze.has(e)||Ze.set(e,new Map),Ze.get(e)?.set(t.toString(),t);}var et=new Map;function Wr(e,t){if(!Jr()){et.set(e,t);return}Xr(e,t);}function Xr(e,t){(Ze.get(e)??new Map).forEach((r,o)=>{try{r(t);}catch(n){typeof n=="object"&&n instanceof Error?console.error("Analytics publish error",n.message,o,n.stack):console.error("Analytics publish error",n,o);}});}function jr(e){return Oe.hasOwnProperty(e)||(Oe[e]=false),{ready:()=>{Oe[e]=true,Jr()&&et.size>0&&(et.forEach((t,r)=>{Xr(r,t);}),et.clear());}}}function Kr(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return false}function Yr(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 $n({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let{shop:c}=Gn(a),[i,u]=react.useState(!!e),[p,y]=react.useState(false),[g,m]=react.useState({cart:null,prevCart:null}),[d,l]=react.useState(e?()=>e:()=>Kr);if(c)if(/\/68817551382$/.test(c.shopId))B("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let f=Yr("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");bt(f);}if(!o.storefrontAccessToken){let f=Yr("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");bt(f);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let S=react.useMemo(()=>({canTrack:d,...g,customData:n,publish:d()?Wr:()=>{},shop:c,subscribe:Qr,register:jr,customerPrivacy:re(),privacyBanner:Ie()}),[i,d,g,g.cart?.updatedAt,g.prevCart,Wr,Qr,n,c,jr,JSON.stringify(Oe),re,Ie]);return jsxRuntime.jsxs(zr.Provider,{value:S,children:[r,!!c&&jsxRuntime.jsx(Pr,{}),!!c&&!!t&&jsxRuntime.jsx(qr,{cart:t,setCarts:m}),!!c&&jsxRuntime.jsx(Nr,{consent:o,onReady:()=>{u(true),l(e?()=>e:()=>Kr),y(true);},domain:s}),!!c&&p&&jsxRuntime.jsx($r,{shop:c})]})}function Y(){let e=react.useContext(zr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function Gn(e){let[t,r]=react.useState(null);return react.useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function Bn({storefront:e,publicStorefrontId:t="0"}){return e.query(Qn,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var Qn=`#graphql
2
2
  query ShopData(
3
3
  $country: CountryCode
4
4
  $language: LanguageCode
@@ -17,15 +17,15 @@
17
17
  }
18
18
  }
19
19
  }
20
- `,On={CartView:mr,CollectionView:fr,CustomView:hr,ProductView:yr,Provider:En,SearchView:gr};function z(e,t){return dt(e.headers,t)}function dt(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function re(e){return {requestId:e?z(e,"request-id"):void 0,purpose:e?z(e,"purpose"):void 0}}function ye(e,t={}){let r=new Error,o=(n,a="Error")=>{let s=(r.stack??"").split(`
20
+ `,Wn={CartView:Tr,CollectionView:Rr,CustomView:Er,ProductView:vr,Provider:$n,SearchView:Ir};function W(e,t){return wt(e.headers,t)}function wt(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function ne(e){return {requestId:e?W(e,"request-id"):void 0,purpose:e?W(e,"purpose"):void 0}}function Zr(e){return {requestGroupId:W(e,"request-id"),buyerIp:W(e,"oxygen-buyer-ip"),buyerIpSig:W(e,Re),cookie:W(e,"cookie"),purpose:W(e,"sec-purpose")||W(e,"purpose")}}var xt=/^\/api\/(unstable|2\d{3}-\d{2})\/graphql\.json$/,Ot=e=>{try{return new URL(e,"http://e.c").pathname}catch{return "/"}};function Dt(e,t){return t.reduce((r,o)=>{let n=e(o);return n&&r.push([o,n]),r},[])}function fe(e,t={}){let r=new Error,o=(n,a="Error")=>{let s=(r.stack??"").split(`
21
21
  `).slice(3+(t.stackOffset??0)).join(`
22
22
  `).replace(/ at loader(\d+) \(/,(c,i)=>c.replace(i,""));return `${a}: ${n}
23
- `+s};return e.then(n=>{if(n?.errors&&Array.isArray(n.errors)){let a=typeof t.logErrors=="function"?t.logErrors:()=>t.logErrors??false;n.errors.forEach(s=>{s&&(s.stack=o(s.message,s.name),a(s)&&console.error(s));});}return n}).catch(n=>{throw n&&(n.stack=o(n.message,n.name)),n})}var H=void 0;var Be="public",_n="private",lt="no-store",Gr={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function Te(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):Gr[r]&&t.push(`${Gr[r]}=${e[r]}`);}),t.join(", ")}function yt(){return {mode:lt}}function ft(e){if(e?.mode&&e?.mode!==Be&&e?.mode!==_n)throw Error("'mode' must be either 'public' or 'private'")}function ie(e){return ft(e),{mode:Be,maxAge:1,staleWhileRevalidate:9,...e}}function mt(e){return ft(e),{mode:Be,maxAge:3600,staleWhileRevalidate:82800,...e}}function fe(e){return ft(e),{mode:Be,maxAge:1,staleWhileRevalidate:86399,...e}}function gt(e){return e}function J(e){return String(e).includes("__proto__")?JSON.parse(e,Un):JSON.parse(e)}function Un(e,t){if(e!=="__proto__")return t}function Qe(e,t){return e&&t?{...e,...t}:e||fe()}function ht(e){return Te(Qe(e))}async function Ln(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function kn(e,t,r,o){if(!e)return;let n=Qe(o),a=ht(Qe(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=ht(Qe(n));r.headers.set("cache-control",a),r.headers.set("real-cache-control",s),r.headers.set("cache-put-date",String(Date.now())),await e.put(t,r);}async function Nn(e,t){e&&await e.delete(t);}function Mn(e,t){let r=e.headers.get("real-cache-control"),o=0;if(r){let a=r.match(/max-age=(\d*)/);a&&a.length>1&&(o=parseFloat(a[1]));}return [(Date.now()-Number(t))/1e3,o]}function Vn(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=Mn(t,r),a=o>n;return a}var We={get:Ln,set:kn,delete:Nn,generateDefaultCacheControlHeader:ht,isStale:Vn};function Ee(e){return `https://shopify.dev/?${e}`}function $n(e){return e||fe()}async function Br(e,t){if(!e)return;let r=Ee(t),o=new Request(r),n=await We.get(e,o);if(!n)return;let a=await n.text();try{return [J(a),n]}catch{return [a,n]}}async function Qr(e,t,r,o){if(!e)return;let n=Ee(t),a=new Request(n),s=new Response(JSON.stringify(r));await We.set(e,a,s,$n(o));}function Wr(e,t){return We.isStale(new Request(Ee(e)),t)}function jr(e){let t=Array.isArray(e)?e:[e],r="";for(let o of t)o!=null&&(typeof o=="object"?r+=JSON.stringify(o):r+=o.toString());return encodeURIComponent(r)}var Ct=new Set;async function je(e,t,{strategy:r=ie(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let i=jr([...typeof e=="string"?[e]:e]),d=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()||[])}});},m=void 0;if(!o||!r||r.mode===lt){let f=await t({addDebugData:d});return f}let l=f=>Qr(o,i,{value:f,debugInfo:void 0},r),y=await Br(o,i);if(y&&typeof y[0]!="string"){let[{value:f,debugInfo:P},C]=y;let v=Wr(i,C)?"STALE":"HIT";if(!Ct.has(i)&&v==="STALE"){Ct.add(i);let b=Promise.resolve().then(async()=>{let O=Date.now();try{let w=await t({addDebugData:d});n(w)&&(await l(w),m?.({result:w,cacheStatus:"PUT",overrideStartTime:O}));}catch(w){w.message&&(w.message="SWR in sub-request failed: "+w.message),console.error(w);}finally{Ct.delete(i);}});a?.(b);}return f}let h=await t({addDebugData:d});if(n(h)){let f=Promise.resolve().then(async()=>{await l(h);});a?.(f);}return h}function Kr(e,t){return [e,{status:t.status,statusText:t.statusText,headers:Array.from(t.headers.entries())}]}function zr([e,t]){return [e,new Response(e,t)]}async function Ke(e,t,{cacheInstance:r,cache:o,cacheKey:n=[e,t],shouldCacheResponse:a,waitUntil:s,debugInfo:c,streamConfig:i}){return !o&&(!t.method||t.method==="GET")&&(o=ie()),je(n,async()=>{if(i){let d=null,m=await graphqlClient.createGraphQLClient({url:e,customFetchApi:async(h,f)=>(d=await fetch(h,f),d),headers:t.headers}).requestStream(i.query,{variables:i.variables}),l,y;for await(let h of m){let{data:f,errors:P}=h;l=f,y=P?.graphQLErrors??P;}return d?.ok?Kr({data:l,errors:y},d):d}let u=await fetch(e,t);if(!u.ok)return u;let p=await u.text().catch(()=>"");try{p&&(p=J(p));}catch{}return Kr(p,u)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:c,shouldCacheResult:u=>"ok"in u?!1:a(...zr(u))}).then(u=>"ok"in u?[null,u]:zr(u))}function qn(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},c)=>je(n,c,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...re(o),stackInfo:H?.()}}),fetch:(n,a,s)=>Ke(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...re(o),stackInfo:H?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([c,i])=>({data:c,response:i}))}}var At=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:o,timestamp:n,...a}=r,s=new Headers(a.headers),c=s.get("cache-control")||s.get("real-cache-control")||"",i=parseInt(c.match(/max-age=(\d+)/)?.[1]||"0",10),u=parseInt(c.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-n)/1e3;if(p>i+u){this.#e.delete(t.url);return}let g=p>i;return s.set("cache",g?"STALE":"HIT"),s.set("date",new Date(n).toUTCString()),new Response(o,{status:a.status??200,headers:s})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),true):false}keys(t){let r=[];for(let o of this.#e.keys())(!t||t.url===o)&&r.push(new Request(o));return Promise.resolve(r)}};var Jr="cartFormInput";function Y({children:e,action:t,inputs:r,route:o,fetcherKey:n}){let a=reactRouter.useFetcher({key:n});return jsxRuntime.jsxs(a.Form,{action:o||"",method:"post",children:[(t||r)&&jsxRuntime.jsx("input",{type:"hidden",name:Jr,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}Y.INPUT_NAME=Jr;Y.ACTIONS={AttributesUpdateInput:"AttributesUpdateInput",BuyerIdentityUpdate:"BuyerIdentityUpdate",Create:"Create",DiscountCodesUpdate:"DiscountCodesUpdate",GiftCardCodesUpdate:"GiftCardCodesUpdate",GiftCardCodesRemove:"GiftCardCodesRemove",LinesAdd:"LinesAdd",LinesRemove:"LinesRemove",LinesUpdate:"LinesUpdate",NoteUpdate:"NoteUpdate",SelectedDeliveryOptionsUpdate:"SelectedDeliveryOptionsUpdate",MetafieldsSet:"MetafieldsSet",MetafieldDelete:"MetafieldDelete",DeliveryAddressesAdd:"DeliveryAddressesAdd",DeliveryAddressesUpdate:"DeliveryAddressesUpdate",DeliveryAddressesRemove:"DeliveryAddressesRemove"};function Gn(e){let t={};for(let s of e.entries()){let c=s[0],i=e.getAll(c);t[c]=i.length>1?i:s[1],t[c]==="on"?t[c]=true:t[c]==="off"&&(t[c]=false);}let{cartFormInput:r,...o}=t,{action:n,inputs:a}=r?JSON.parse(String(r)):{};return {action:n,inputs:{...a,...o}}}Y.getFormInput=Gn;var Pt=e=>{let t=cookie.parse(dt(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var St=e=>t=>{let r=new Headers;return r.append("Set-Cookie",cookie.stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};var vt="Custom-Storefront-Request-Group-ID",Rt="X-Shopify-Storefront-Access-Token",It="X-SDK-Variant",Tt="X-SDK-Variant-Source",Et="X-SDK-Version";function Yr(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var be="2025.7.0";function me(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Kn=/(^|}\s)query[\s({]/im,zn=/(^|}\s)mutation[\s({]/im;function ze(e,t){if(!Kn.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function Je(e,t){if(!zn.test(e))throw new Error(`[h2:error:${t}] Can only execute mutations`)}var ce=class extends Error{locations;path;extensions;constructor(t,r={}){let n=(r.clientOperation?`[h2:error:${r.clientOperation}] `:"")+t+(r.requestId?` - Request ID: ${r.requestId}`:"");super(n),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+=`
23
+ `+s};return e.then(n=>{if(n?.errors&&Array.isArray(n.errors)){let a=typeof t.logErrors=="function"?t.logErrors:()=>t.logErrors??false;n.errors.forEach(s=>{s&&(s.stack=o(s.message,s.name),a(s)&&console.error(s));});}return n}).catch(n=>{throw n&&(n.stack=o(n.message,n.name)),n})}var j=void 0;var tt="public",Kn="private",_t="no-store",eo={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function De(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):eo[r]&&t.push(`${eo[r]}=${e[r]}`);}),t.join(", ")}function Ut(){return {mode:_t}}function Lt(e){if(e?.mode&&e?.mode!==tt&&e?.mode!==Kn)throw Error("'mode' must be either 'public' or 'private'")}function ue(e){return Lt(e),{mode:tt,maxAge:1,staleWhileRevalidate:9,...e}}function kt(e){return Lt(e),{mode:tt,maxAge:3600,staleWhileRevalidate:82800,...e}}function me(e){return Lt(e),{mode:tt,maxAge:1,staleWhileRevalidate:86399,...e}}function Nt(e){return e}function z(e){return String(e).includes("__proto__")?JSON.parse(e,Yn):JSON.parse(e)}function Yn(e,t){if(e!=="__proto__")return t}function rt(e,t){return e&&t?{...e,...t}:e||me()}function Mt(e){return De(rt(e))}async function zn(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function Jn(e,t,r,o){if(!e)return;let n=rt(o),a=Mt(rt(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=Mt(rt(n));r.headers.set("cache-control",a),r.headers.set("real-cache-control",s),r.headers.set("cache-put-date",String(Date.now())),await e.put(t,r);}async function Xn(e,t){e&&await e.delete(t);}function Zn(e,t){let r=e.headers.get("real-cache-control"),o=0;if(r){let a=r.match(/max-age=(\d*)/);a&&a.length>1&&(o=parseFloat(a[1]));}return [(Date.now()-Number(t))/1e3,o]}function ea(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=Zn(t,r),a=o>n;return a}var ot={get:zn,set:Jn,delete:Xn,generateDefaultCacheControlHeader:Mt,isStale:ea};function _e(e){return `https://shopify.dev/?${e}`}function ta(e){return e||me()}async function to(e,t){if(!e)return;let r=_e(t),o=new Request(r),n=await ot.get(e,o);if(!n)return;let a=await n.text();try{return [z(a),n]}catch{return [a,n]}}async function ro(e,t,r,o){if(!e)return;let n=_e(t),a=new Request(n),s=new Response(JSON.stringify(r));await ot.set(e,a,s,ta(o));}function oo(e,t){return ot.isStale(new Request(_e(e)),t)}function no(e){let t=Array.isArray(e)?e:[e],r="";for(let o of t)o!=null&&(typeof o=="object"?r+=JSON.stringify(o):r+=o.toString());return encodeURIComponent(r)}var Vt=new Set;async function nt(e,t,{strategy:r=ue(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let i=no([...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()||[])}});},m=void 0;if(!o||!r||r.mode===_t){let f=await t({addDebugData:y});return f}let d=f=>ro(o,i,{value:f,debugInfo:void 0},r),l=await to(o,i);if(l&&typeof l[0]!="string"){let[{value:f,debugInfo:P},C]=l;let A=oo(i,C)?"STALE":"HIT";if(!Vt.has(i)&&A==="STALE"){Vt.add(i);let h=Promise.resolve().then(async()=>{let R=Date.now();try{let T=await t({addDebugData:y});n(T)&&(await d(T),m?.({result:T,cacheStatus:"PUT",overrideStartTime:R}));}catch(T){T.message&&(T.message="SWR in sub-request failed: "+T.message),console.error(T);}finally{Vt.delete(i);}});a?.(h);}return f}let S=await t({addDebugData:y});if(n(S)){let f=Promise.resolve().then(async()=>{await d(S);});a?.(f);}return S}var oa=["set-cookie","server-timing"];function ao(e,t){return [e,{status:t.status,statusText:t.statusText,headers:[...t.headers].filter(([r])=>!oa.includes(r.toLowerCase()))}]}function so([e,t]){return [e,new Response(e,t)]}async function at(e,t,{cacheInstance:r,cache:o,cacheKey:n=[e,t],shouldCacheResponse:a,waitUntil:s,debugInfo:c,streamConfig:i,onRawHeaders:u}){return !o&&(!t.method||t.method==="GET")&&(o=ue()),nt(n,async()=>{if(i){let g=null,d=await graphqlClient.createGraphQLClient({url:e,customFetchApi:async(f,P)=>(g=await fetch(f,P),u?.(g.headers),g),headers:t.headers}).requestStream(i.query,{variables:i.variables}),l,S;for await(let f of d){let{data:P,errors:C}=f;l=P,S=C?.graphQLErrors??C;}return g?.ok?ao({data:l,errors:S},g):g}let p=await fetch(e,t);if(u?.(p.headers),!p.ok)return p;let y=await p.text().catch(()=>"");try{y&&(y=z(y));}catch{}return ao(y,p)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:c,shouldCacheResult:p=>"ok"in p?!1:a(...so(p))}).then(p=>"ok"in p?[null,p]:so(p))}function na(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},c)=>nt(n,c,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...ne(o),stackInfo:j?.()}}),fetch:(n,a,s)=>at(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...ne(o),stackInfo:j?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([c,i])=>({data:c,response:i}))}}var Ht=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:o,timestamp:n,...a}=r,s=new Headers(a.headers),c=s.get("cache-control")||s.get("real-cache-control")||"",i=parseInt(c.match(/max-age=(\d+)/)?.[1]||"0",10),u=parseInt(c.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-n)/1e3;if(p>i+u){this.#e.delete(t.url);return}let g=p>i;return s.set("cache",g?"STALE":"HIT"),s.set("date",new Date(n).toUTCString()),new Response(o,{status:a.status??200,headers:s})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),true):false}keys(t){let r=[];for(let o of this.#e.keys())(!t||t.url===o)&&r.push(new Request(o));return Promise.resolve(r)}};var io="cartFormInput";function J({children:e,action:t,inputs:r,route:o,fetcherKey:n}){let a=reactRouter.useFetcher({key:n});return jsxRuntime.jsxs(a.Form,{action:o||"",method:"post",children:[(t||r)&&jsxRuntime.jsx("input",{type:"hidden",name:io,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}J.INPUT_NAME=io;J.ACTIONS={AttributesUpdateInput:"AttributesUpdateInput",BuyerIdentityUpdate:"BuyerIdentityUpdate",Create:"Create",DiscountCodesUpdate:"DiscountCodesUpdate",GiftCardCodesUpdate:"GiftCardCodesUpdate",GiftCardCodesRemove:"GiftCardCodesRemove",LinesAdd:"LinesAdd",LinesRemove:"LinesRemove",LinesUpdate:"LinesUpdate",NoteUpdate:"NoteUpdate",SelectedDeliveryOptionsUpdate:"SelectedDeliveryOptionsUpdate",MetafieldsSet:"MetafieldsSet",MetafieldDelete:"MetafieldDelete",DeliveryAddressesAdd:"DeliveryAddressesAdd",DeliveryAddressesUpdate:"DeliveryAddressesUpdate",DeliveryAddressesRemove:"DeliveryAddressesRemove"};function sa(e){let t={};for(let s of e.entries()){let c=s[0],i=e.getAll(c);t[c]=i.length>1?i:s[1],t[c]==="on"?t[c]=true:t[c]==="off"&&(t[c]=false);}let{cartFormInput:r,...o}=t,{action:n,inputs:a}=r?JSON.parse(String(r)):{};return {action:n,inputs:{...a,...o}}}J.getFormInput=sa;var Ft=e=>{let t=cookie.parse(wt(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var qt=e=>t=>{let r=new Headers;return r.append("Set-Cookie",cookie.stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function st(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var Ue="2025.7.2";function ge(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var da=/(^|}\s)query[\s({]/im,la=/(^|}\s)mutation[\s({]/im;function it(e,t){if(!da.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function ct(e,t){if(!la.test(e))throw new Error(`[h2:error:${t}] Can only execute mutations`)}var pe=class extends Error{locations;path;extensions;constructor(t,r={}){let n=(r.clientOperation?`[h2:error:${r.clientOperation}] `:"")+t+(r.requestId?` - Request ID: ${r.requestId}`:"");super(n),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+=`
24
24
  `,this.stack&&(t+=`${this.stack.slice(this.stack.indexOf(`
25
25
  `)+1)}
26
- `),t}toJSON(){return {name:"Error",message:""}}};function we({url:e,response:t,errors:r,type:o,query:n,queryVariables:a,ErrorConstructor:s=Error,client:c="storefront"}){let i=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
26
+ `),t}toJSON(){return {name:"Error",message:""}}};function Le({url:e,response:t,errors:r,type:o,query:n,queryVariables:a,ErrorConstructor:s=Error,client:c="storefront"}){let i=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
27
27
  `))||`URL: ${e}
28
- API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{errors:r},clientOperation:`${c}.${o}`,requestId:t.headers.get("x-request-id")});throw new s(u.message,{cause:u.cause})}var ta={language:"EN",country:"US"};function to(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...c}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getStorefrontApiUrl:d,getShopifyDomain:g}=hydrogenReact.createStorefrontClient(c),l=(c.privateStorefrontToken?p:u)({contentType:"json",buyerIp:t?.buyerIp||""});if(l[vt]=t?.requestGroupId||Yr(),a&&(l[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=a),(l["user-agent"]=`Hydrogen ${be}`),t&&t.cookie){let f=hydrogenReact.getShopifyCookies(t.cookie??"");f[hydrogenReact.SHOPIFY_Y]&&(l[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=f[hydrogenReact.SHOPIFY_Y]),f[hydrogenReact.SHOPIFY_S]&&(l[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=f[hydrogenReact.SHOPIFY_S]);}let y=JSON.stringify({"content-type":l["content-type"],"user-agent":l["user-agent"],[It]:l[It],[Tt]:l[Tt],[Et]:l[Et],[Rt]:l[Rt]});async function h({query:f,mutation:P,variables:C,cache:v,headers:b=[],storefrontApiVersion:O,displayName:w,stackInfo:G}){let Ne=b instanceof Headers?Object.fromEntries(b.entries()):Array.isArray(b)?Object.fromEntries(b):b,B=f??P,Q={...C};n&&(!C?.country&&/\$country/.test(B)&&(Q.country=n.country),!C?.language&&/\$language/.test(B)&&(Q.language=n.language));let ae=d({storefrontApiVersion:O}),A=JSON.stringify({query:B,variables:Q}),R={method:"POST",headers:{...l,...Ne},body:A},D=[ae,R.method,y,R.body],x=B.includes("@defer")?{query:B,variables:Q}:void 0,[M,q]=await Ke(ae,R,{cacheInstance:P?void 0:r,cache:v||fe(),cacheKey:D,waitUntil:o,shouldCacheResponse:U=>!U?.errors,debugInfo:{requestId:R.headers[vt],displayName:w,url:ae,stackInfo:G,graphql:A,purpose:t?.purpose},streamConfig:x}),N={url:ae,response:q,type:P?"mutation":"query",query:B,queryVariables:Q,errors:void 0};if(!q.ok){let U,W=M;try{W??=await q.text(),U=J(W);}catch{U=[{message:W??"Could not parse Storefront API response"}];}we({...N,errors:U});}let{data:ee,errors:V}=M;V=V?Array.isArray(V)?V:[V]:void 0;let _=V?.map(({message:U,...W})=>new ce(U,{...W,clientOperation:`storefront.${N.type}`,requestId:q.headers.get("x-request-id"),queryVariables:Q,query:B}));return S(ee,_)}return {storefront:{query(f,P){f=me(f),ze(f,"storefront.query");let C=eo?.(f);return ye(h({...P,query:f,stackInfo:H?.(C)}),{stackOffset:C,logErrors:s})},mutate(f,P){f=me(f),Je(f,"storefront.mutate");let C=eo?.(f);return ye(h({...P,mutation:f,stackInfo:H?.(C)}),{stackOffset:C,logErrors:s})},cache:r,CacheNone:yt,CacheLong:mt,CacheShort:ie,CacheCustom:gt,generateCacheControlHeader:Te,getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getShopifyDomain:g,getApiUrl:d,i18n:n??ta}}}var eo=void 0;function S(e,t){return {...e,...t&&{errors:t}}}function bt({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let[s,{cart:c,errors:i}]=await Promise.all([t?t.isLoggedIn():false,e.query(ra(o),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(s&&c?.checkoutUrl){let u=new URL(c.checkoutUrl);u.searchParams.set("logged_in","true"),c.checkoutUrl=u.toString();}return c||i?S(c,i):null}}var ra=(e=oa)=>`#graphql
28
+ API response error: ${t.status}`,u=new pe(i,{query:n,queryVariables:a,cause:{errors:r},clientOperation:`${c}.${o}`,requestId:t.headers.get("x-request-id")});throw new s(u.message,{cause:u.cause})}var ga={language:"EN",country:"US"};function yo(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...c}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getStorefrontApiUrl:y,getShopifyDomain:g}=hydrogenReact.createStorefrontClient(c),d=(c.privateStorefrontToken?p:u)({contentType:"json",buyerIp:t?.buyerIp||""});t?.buyerIp&&(d[St]=t.buyerIp),t?.buyerIpSig&&(d[Re]=t.buyerIpSig),d[Qe]=t?.requestGroupId||st(),a&&(d[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=a),(d["user-agent"]=`Hydrogen ${Ue}`);let l=t?.cookie??"";l&&(d.cookie=l);let S,f;if(!/\b_shopify_(analytics|marketing)=/.test(l)){let h=l.match(/\b_shopify_y=([^;]+)/)?.[1],R=l.match(/\b_shopify_s=([^;]+)/)?.[1];h&&(d[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=h),R&&(d[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=R),S=h??st(),f=R??st(),d[hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER]=S,d[hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]=f;}let P,C=JSON.stringify({"content-type":d["content-type"],"user-agent":d["user-agent"],[ht]:d[ht],[Ct]:d[Ct],[At]:d[At],[We]:d[We]});async function A({query:h,mutation:R,variables:T,cache:N,headers:k=[],storefrontApiVersion:ie,displayName:Ge,stackInfo:Be}){let v=k instanceof Headers?Object.fromEntries(k.entries()):Array.isArray(k)?Object.fromEntries(k):k,I=h??R,O={...T};n&&(!T?.country&&/\$country/.test(I)&&(O.country=n.country),!T?.language&&/\$language/.test(I)&&(O.language=n.language));let D=y({storefrontApiVersion:ie}),M=JSON.stringify({query:I,variables:O}),$={method:"POST",headers:{...d,...v},body:M},V=[D,$.method,C,$.body],ee=I.includes("@defer")?{query:I,variables:O}:void 0,[K,_]=await at(D,$,{cacheInstance:R?void 0:r,cache:N||me(),cacheKey:V,waitUntil:o,shouldCacheResponse:H=>!H?.errors,debugInfo:{requestId:$.headers[Qe],displayName:Ge,url:D,stackInfo:Be,graphql:M,purpose:t?.purpose},streamConfig:ee,onRawHeaders:H=>{P??={setCookie:H.getSetCookie(),serverTiming:H.get("server-timing")??""};}}),Q={url:D,response:_,type:R?"mutation":"query",query:I,queryVariables:O,errors:void 0};if(!_.ok){let H,te=K;try{te??=await _.text(),H=z(te);}catch{H=[{message:te??"Could not parse Storefront API response"}];}Le({...Q,errors:H});}let{data:Pe,errors:G}=K;G=G?Array.isArray(G)?G:[G]:void 0;let ve=G?.map(({message:H,...te})=>new pe(H,{...te,clientOperation:`storefront.${Q.type}`,requestId:_.headers.get("x-request-id"),queryVariables:O,query:I}));return E(Pe,ve)}return {storefront:{query(h,R){h=ge(h),it(h,"storefront.query");let T=lo?.(h);return fe(A({...R,query:h,stackInfo:j?.(T)}),{stackOffset:T,logErrors:s})},mutate(h,R){h=ge(h),ct(h,"storefront.mutate");let T=lo?.(h);return fe(A({...R,mutation:h,stackInfo:j?.(T)}),{stackOffset:T,logErrors:s})},cache:r,CacheNone:Ut,CacheLong:kt,CacheShort:ue,CacheCustom:Nt,generateCacheControlHeader:De,getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getHeaders:()=>({...d}),getShopifyDomain:g,getApiUrl:y,i18n:n??ga,isStorefrontApiUrl(h){return xt.test(Ot(h.url??""))},async forward(h,R){let T=new Headers([...Dt(ie=>h.headers.get(ie),["accept","accept-encoding","accept-language","access-control-request-headers","access-control-request-method","content-type","content-length","cookie","origin","referer","user-agent",We,hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER,hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]),...Dt(ie=>d[ie],[St,Re,hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER,Qe])]);t?.buyerIp&&T.set("x-forwarded-for",t.buyerIp);let N=R?.storefrontApiVersion??Ot(h.url).match(xt)?.[1],k=await fetch(y({storefrontApiVersion:N}),{method:h.method,body:h.body,headers:T});return new Response(k.body,k)},setCollectedSubrequestHeaders:h=>{if(P)for(let k of P.setCookie)h.headers.append("Set-Cookie",k);let R=br(P?.serverTiming),T=h.headers.get("content-type")?.startsWith("text/html");Te(h,{...T?{_y:S,_s:f}:void 0,...R}),T&&P&&P.setCookie.length>1&&R?._y&&R?._s&&R?._cmp&&Te(h,{[Ke]:"1"});}}}}var lo=void 0;function E(e,t){return {...e,...t&&{errors:t}}}function $t({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let[s,{cart:c,errors:i}]=await Promise.all([t?t.isLoggedIn():false,e.query(ha(o),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(s&&c?.checkoutUrl){let u=new URL(c.checkoutUrl);u.searchParams.set("logged_in","true"),c.checkoutUrl=u.toString();}return c||i?E(c,i):null}}var ha=(e=Ca)=>`#graphql
29
29
  query CartQuery(
30
30
  $cartId: ID!
31
31
  $numCartLines: Int = 100
@@ -38,7 +38,7 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
38
38
  }
39
39
 
40
40
  ${e}
41
- `,oa=`#graphql
41
+ `,Ca=`#graphql
42
42
  fragment CartApiQuery on Cart {
43
43
  updatedAt
44
44
  id
@@ -153,25 +153,25 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
153
153
  width
154
154
  height
155
155
  }
156
- `;var I=`#graphql
156
+ `;var b=`#graphql
157
157
  fragment CartApiError on CartUserError {
158
158
  message
159
159
  field
160
160
  code
161
161
  }
162
- `,T=`#graphql
162
+ `,w=`#graphql
163
163
  fragment CartApiMutation on Cart {
164
164
  id
165
165
  totalQuantity
166
166
  checkoutUrl
167
167
  }
168
- `,E=`#graphql
168
+ `,x=`#graphql
169
169
  fragment CartApiWarning on CartWarning {
170
170
  code
171
171
  message
172
172
  target
173
173
  }
174
- `;function wt(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...c}=t,{cartCreate:i,errors:u}=await e.storefront.mutate(na(e.cartFragment),{variables:{input:{...c,buyerIdentity:{...o,...s}},...a}});return S(i,u)}}var na=(e=T)=>`#graphql
174
+ `;function Gt(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...c}=t,{cartCreate:i,errors:u}=await e.storefront.mutate(Aa(e.cartFragment),{variables:{input:{...c,buyerIdentity:{...o,...s}},...a}});return E(i,u)}}var Aa=(e=w)=>`#graphql
175
175
  mutation cartCreate(
176
176
  $input: CartInput!
177
177
  $country: CountryCode = ZZ
@@ -191,9 +191,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
191
191
  }
192
192
  }
193
193
  ${e}
194
- ${I}
195
- ${E}
196
- `;function xt(e){return async(t,r)=>{let{cartLinesAdd:o,errors:n}=await e.storefront.mutate(aa(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return S(o,n)}}var aa=(e=T)=>`#graphql
194
+ ${b}
195
+ ${x}
196
+ `;function Bt(e){return async(t,r)=>{let{cartLinesAdd:o,errors:n}=await e.storefront.mutate(Sa(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return E(o,n)}}var Sa=(e=w)=>`#graphql
197
197
  mutation cartLinesAdd(
198
198
  $cartId: ID!
199
199
  $lines: [CartLineInput!]!
@@ -213,9 +213,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
213
213
  }
214
214
  }
215
215
  ${e}
216
- ${I}
217
- ${E}
218
- `;var ro="__h_pending_";function oo(e){return ro+e}function Ye(e){return e.startsWith(ro)}function Xe(e,t){if(t.some(r=>Ye(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 Ot(e){return async(t,r)=>{Xe("updateLines",t);let{cartLinesUpdate:o,errors:n}=await e.storefront.mutate(sa(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return S(o,n)}}var sa=(e=T)=>`#graphql
216
+ ${b}
217
+ ${x}
218
+ `;var fo="__h_pending_";function mo(e){return fo+e}function ut(e){return e.startsWith(fo)}function pt(e,t){if(t.some(r=>ut(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 Qt(e){return async(t,r)=>{pt("updateLines",t);let{cartLinesUpdate:o,errors:n}=await e.storefront.mutate(Pa(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return E(o,n)}}var Pa=(e=w)=>`#graphql
219
219
  mutation cartLinesUpdate(
220
220
  $cartId: ID!
221
221
  $lines: [CartLineUpdateInput!]!
@@ -235,9 +235,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
235
235
  }
236
236
  }
237
237
  ${e}
238
- ${I}
239
- ${E}
240
- `;function Dt(e){return async(t,r)=>{Xe("removeLines",t);let{cartLinesRemove:o,errors:n}=await e.storefront.mutate(ia(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return S(o,n)}}var ia=(e=T)=>`#graphql
238
+ ${b}
239
+ ${x}
240
+ `;function Wt(e){return async(t,r)=>{pt("removeLines",t);let{cartLinesRemove:o,errors:n}=await e.storefront.mutate(va(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return E(o,n)}}var va=(e=w)=>`#graphql
241
241
  mutation cartLinesRemove(
242
242
  $cartId: ID!
243
243
  $lineIds: [ID!]!
@@ -257,9 +257,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
257
257
  }
258
258
  }
259
259
  ${e}
260
- ${I}
261
- ${E}
262
- `;function _t(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartDiscountCodesUpdate:n,errors:a}=await e.storefront.mutate(ca(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return S(n,a)}}var ca=(e=T)=>`#graphql
260
+ ${b}
261
+ ${x}
262
+ `;function jt(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartDiscountCodesUpdate:n,errors:a}=await e.storefront.mutate(Ra(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return E(n,a)}}var Ra=(e=w)=>`#graphql
263
263
  mutation cartDiscountCodesUpdate(
264
264
  $cartId: ID!
265
265
  $discountCodes: [String!]
@@ -281,9 +281,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
281
281
  }
282
282
  }
283
283
  ${e}
284
- ${I}
285
- ${E}
286
- `;function Ut(e){return async(t,r)=>{t.companyLocationId&&e.customerAccount&&e.customerAccount.setBuyer({companyLocationId:t.companyLocationId});let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartBuyerIdentityUpdate:n,errors:a}=await e.storefront.mutate(ua(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return S(n,a)}}var ua=(e=T)=>`#graphql
284
+ ${b}
285
+ ${x}
286
+ `;function Kt(e){return async(t,r)=>{t.companyLocationId&&e.customerAccount&&e.customerAccount.setBuyer({companyLocationId:t.companyLocationId});let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartBuyerIdentityUpdate:n,errors:a}=await e.storefront.mutate(Ta(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return E(n,a)}}var Ta=(e=w)=>`#graphql
287
287
  mutation cartBuyerIdentityUpdate(
288
288
  $cartId: ID!
289
289
  $buyerIdentity: CartBuyerIdentityInput!
@@ -303,9 +303,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
303
303
  }
304
304
  }
305
305
  ${e}
306
- ${I}
307
- ${E}
308
- `;function Lt(e){return async(t,r)=>{let{cartNoteUpdate:o,errors:n}=await e.storefront.mutate(pa(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return S(o,n)}}var pa=(e=T)=>`#graphql
306
+ ${b}
307
+ ${x}
308
+ `;function Yt(e){return async(t,r)=>{let{cartNoteUpdate:o,errors:n}=await e.storefront.mutate(Ia(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return E(o,n)}}var Ia=(e=w)=>`#graphql
309
309
  mutation cartNoteUpdate(
310
310
  $cartId: ID!
311
311
  $note: String!
@@ -325,9 +325,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
325
325
  }
326
326
  }
327
327
  ${e}
328
- ${I}
329
- ${E}
330
- `;function kt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:o,errors:n}=await e.storefront.mutate(da(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return S(o,n)}}var da=(e=T)=>`#graphql
328
+ ${b}
329
+ ${x}
330
+ `;function zt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:o,errors:n}=await e.storefront.mutate(Ea(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return E(o,n)}}var Ea=(e=w)=>`#graphql
331
331
  mutation cartSelectedDeliveryOptionsUpdate(
332
332
  $cartId: ID!
333
333
  $selectedDeliveryOptions: [CartSelectedDeliveryOptionInput!]!
@@ -347,9 +347,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
347
347
  }
348
348
  }
349
349
  ${e}
350
- ${I}
351
- ${E}
352
- `;function Nt(e){return async(t,r)=>{let{cartAttributesUpdate:o,errors:n}=await e.storefront.mutate(la(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t}});return S(o,n)}}var la=(e=T)=>`#graphql
350
+ ${b}
351
+ ${x}
352
+ `;function Jt(e){return async(t,r)=>{let{cartAttributesUpdate:o,errors:n}=await e.storefront.mutate(ba(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t}});return E(o,n)}}var ba=(e=w)=>`#graphql
353
353
  mutation cartAttributesUpdate(
354
354
  $cartId: ID!
355
355
  $attributes: [AttributeInput!]!
@@ -367,9 +367,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
367
367
  }
368
368
  }
369
369
  ${e}
370
- ${I}
371
- ${E}
372
- `;function Mt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(c=>({...c,ownerId:o})),{cartMetafieldsSet:a,errors:s}=await e.storefront.mutate(ya(),{variables:{metafields:n}});return S({cart:{id:o},...a},s)}}var ya=()=>`#graphql
370
+ ${b}
371
+ ${x}
372
+ `;function Xt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(c=>({...c,ownerId:o})),{cartMetafieldsSet:a,errors:s}=await e.storefront.mutate(wa(),{variables:{metafields:n}});return E({cart:{id:o},...a},s)}}var wa=()=>`#graphql
373
373
  mutation cartMetafieldsSet(
374
374
  $metafields: [CartMetafieldsSetInput!]!
375
375
  $language: LanguageCode
@@ -384,7 +384,7 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
384
384
  }
385
385
  }
386
386
  }
387
- `;function Vt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),{cartMetafieldDelete:n,errors:a}=await e.storefront.mutate(fa(),{variables:{input:{ownerId:o,key:t}}});return S({cart:{id:o},...n},a)}}var fa=()=>`#graphql
387
+ `;function Zt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),{cartMetafieldDelete:n,errors:a}=await e.storefront.mutate(xa(),{variables:{input:{ownerId:o,key:t}}});return E({cart:{id:o},...n},a)}}var xa=()=>`#graphql
388
388
  mutation cartMetafieldDelete(
389
389
  $input: CartMetafieldDeleteInput!
390
390
  ) {
@@ -396,7 +396,7 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
396
396
  }
397
397
  }
398
398
  }
399
- `;function $t(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartGiftCardCodesUpdate:n,errors:a}=await e.storefront.mutate(ma(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:o,...r}});return S(n,a)}}var ma=(e=T)=>`#graphql
399
+ `;function er(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartGiftCardCodesUpdate:n,errors:a}=await e.storefront.mutate(Oa(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:o,...r}});return E(n,a)}}var Oa=(e=w)=>`#graphql
400
400
  mutation cartGiftCardCodesUpdate(
401
401
  $cartId: ID!
402
402
  $giftCardCodes: [String!]!
@@ -416,9 +416,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
416
416
  }
417
417
  }
418
418
  ${e}
419
- ${I}
420
- ${E}
421
- `;function Ft(e){return async(t,r)=>{let{cartGiftCardCodesRemove:o,errors:n}=await e.storefront.mutate(ga(e.cartFragment),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return S(o,n)}}var ga=(e=T)=>`#graphql
419
+ ${b}
420
+ ${x}
421
+ `;function tr(e){return async(t,r)=>{let{cartGiftCardCodesRemove:o,errors:n}=await e.storefront.mutate(Da(e.cartFragment),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return E(o,n)}}var Da=(e=w)=>`#graphql
422
422
  mutation cartGiftCardCodesRemove(
423
423
  $cartId: ID!
424
424
  $appliedGiftCardIds: [ID!]!
@@ -438,9 +438,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
438
438
  }
439
439
  }
440
440
  ${e}
441
- ${I}
442
- ${E}
443
- `;function no(e){return async(t,r)=>{let{cartDeliveryAddressesAdd:o,errors:n}=await e.storefront.mutate(ha(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return S(o,n)}}var ha=(e=T)=>`#graphql
441
+ ${b}
442
+ ${x}
443
+ `;function go(e){return async(t,r)=>{let{cartDeliveryAddressesAdd:o,errors:n}=await e.storefront.mutate(_a(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return E(o,n)}}var _a=(e=w)=>`#graphql
444
444
  mutation cartDeliveryAddressesAdd(
445
445
  $cartId: ID!
446
446
  $addresses: [CartSelectableAddressInput!]!,
@@ -460,9 +460,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
460
460
  }
461
461
  }
462
462
  ${e}
463
- ${I}
464
- ${E}
465
- `;function ao(e){return async(t,r)=>{let{cartDeliveryAddressesRemove:o,errors:n}=await e.storefront.mutate(Ca(e.cartFragment),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return S(o,n)}}var Ca=(e=T)=>`#graphql
463
+ ${b}
464
+ ${x}
465
+ `;function ho(e){return async(t,r)=>{let{cartDeliveryAddressesRemove:o,errors:n}=await e.storefront.mutate(Ua(e.cartFragment),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return E(o,n)}}var Ua=(e=w)=>`#graphql
466
466
  mutation cartDeliveryAddressesRemove(
467
467
  $cartId: ID!
468
468
  $addressIds: [ID!]!,
@@ -482,9 +482,9 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
482
482
  }
483
483
  }
484
484
  ${e}
485
- ${I}
486
- ${E}
487
- `;function so(e){return async(t,r)=>{let{cartDeliveryAddressesUpdate:o,errors:n}=await e.storefront.mutate(Aa(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return S(o,n)}}var Aa=(e=T)=>`#graphql
485
+ ${b}
486
+ ${x}
487
+ `;function Co(e){return async(t,r)=>{let{cartDeliveryAddressesUpdate:o,errors:n}=await e.storefront.mutate(La(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return E(o,n)}}var La=(e=w)=>`#graphql
488
488
  mutation cartDeliveryAddressesUpdate(
489
489
  $cartId: ID!
490
490
  $addresses: [CartSelectableAddressUpdateInput!]!,
@@ -504,19 +504,19 @@ API response error: ${t.status}`,u=new ce(i,{query:n,queryVariables:a,cause:{err
504
504
  }
505
505
  }
506
506
  ${e}
507
- ${I}
508
- ${E}
509
- `;function qt(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:c}=e,i=t(),u=()=>i||t(),p={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},d=wt(p),g=async function(...l){l[0].buyerIdentity={...c,...l[0].buyerIdentity};let y=await d(...l);return i=y?.cart?.id,y},m={get:bt({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:g,addLines:async(l,y)=>{let h=l.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId}));return i||y?.cartId?await xt(p)(h,y):await g({lines:h,buyerIdentity:c},y)},updateLines:Ot(p),removeLines:Dt(p),updateDiscountCodes:async(l,y)=>i||y?.cartId?await _t(p)(l,y):await g({discountCodes:l},y),updateGiftCardCodes:async(l,y)=>i||y?.cartId?await $t(p)(l,y):await g({giftCardCodes:l},y),removeGiftCardCodes:Ft(p),updateBuyerIdentity:async(l,y)=>i||y?.cartId?await Ut(p)(l,y):await g({buyerIdentity:l},y),updateNote:async(l,y)=>i||y?.cartId?await Lt(p)(l,y):await g({note:l},y),updateSelectedDeliveryOption:kt(p),updateAttributes:async(l,y)=>i||y?.cartId?await Nt(p)(l,y):await g({attributes:l},y),setMetafields:async(l,y)=>i||y?.cartId?await Mt(p)(l,y):await g({metafields:l},y),deleteMetafield:Vt(p),addDeliveryAddresses:no(p),removeDeliveryAddresses:ao(p),updateDeliveryAddresses:so(p)};return "customMethods"in e?{...m,...e.customMethods??{}}:m}function Sa(e){let t=reactRouter.useFetchers();if(!t||!t.length)return e;let r=e?.lines?structuredClone(e):{lines:{nodes:[]}},o=r.lines.nodes,n=false;for(let{formData:a}of t){if(!a)continue;let s=Y.getFormInput(a);if(s.action===Y.ACTIONS.LinesAdd)for(let c of s.inputs.lines){if(!c.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 i=o.find(u=>u.merchandise.id===c.selectedVariant?.id);n=true,i?(i.quantity=(i.quantity||1)+(c.quantity||1),i.isOptimistic=true):o.unshift({id:oo(c.selectedVariant.id),merchandise:c.selectedVariant,isOptimistic:true,quantity:c.quantity||1});}else if(s.action===Y.ACTIONS.LinesRemove)for(let c of s.inputs.lineIds){let i=o.findIndex(u=>u.id===c);if(i!==-1){if(Ye(o[i].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}o.splice(i,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${c}' but it doesn't exist in the cart`);}else if(s.action===Y.ACTIONS.LinesUpdate)for(let c of s.inputs.lines){let i=o.findIndex(u=>c.id===u.id);if(i>-1){if(Ye(o[i].id)){console.error("[h2:error:useOptimisticCart] Tried to update an optimistic line that has not been added to the cart yet");continue}o[i].quantity=c.quantity,o[i].quantity===0&&o.splice(i,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to update line '${c.id}' but it doesn't exist in the cart`);}}return n&&(r.isOptimistic=n),r.totalQuantity=o.reduce((a,s)=>a+s.quantity,0),r}var va="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function Ra({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||va)}var Ht=reactRouter.createContext(),Gt=reactRouter.createContext(),Bt=reactRouter.createContext(),Qt=reactRouter.createContext(),Wt=reactRouter.createContext(),jt=reactRouter.createContext(),Ia={storefront:Ht,cart:Gt,customerAccount:Bt,env:Qt,session:Wt,waitUntil:jt};var Ze="2025-07",he=`Shopify Hydrogen ${be}`,io="30243aa5-17c1-465a-8493-944bcc4e88aa",L="customerAccount",Ce="buyer";var F=class extends Response{constructor(t,r,o){super(`Bad request: ${t}`,{status:400,headers:o});}};function Oe(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 Ta({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(L),c=s?.refreshToken,i=s?.idToken;if(!c)throw new F("Unauthorized","No refreshToken found in the session. Make sure your session is configured correctly and passed to `createCustomerAccountClient`.");a.append("grant_type","refresh_token"),a.append("refresh_token",c),a.append("client_id",t);let u={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:o};new Date().getTime();let d=r,g=await fetch(d,{method:"POST",headers:u,body:a});if(!g.ok){let h=await g.text();throw new Response(h,{status:g.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:m,expires_in:l,refresh_token:y}=await g.json();if(!m||m.length===0)throw new F("Unauthorized","Invalid access token received.");e.set(L,{accessToken:m,expiresAt:new Date(new Date().getTime()+(l-120)*1e3).getTime()+"",refreshToken:y,idToken:i});}function Ae(e){e.unset(L),e.unset(Ce);}async function co({locks:e,expiresAt:t,session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s}){if(parseInt(t,10)-1e3<new Date().getTime())try{e.refresh||(e.refresh=Ta({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(c){throw Ae(r),c&&c.status!==401?c:new F("Unauthorized","Login before querying the Customer Account API.")}}function uo(){let e=Ea();return lo(e)}async function po(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=ba(t);return lo(r)}function Ea(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function lo(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function ba(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function yo(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function fo(e,t,r,o,n){let a=t;if(!e)throw new F("Unauthorized","oAuth access token was not provided during token exchange.");let s=new URLSearchParams;s.append("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),s.append("client_id",a),s.append("audience",io),s.append("subject_token",e),s.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),s.append("scopes","https://api.customers.com/auth/customer.graphql");let c={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:o};new Date().getTime();let u=r,p=await fetch(u,{method:"POST",headers:c,body:s});let d=await p.json();if(d.error)throw new F(d.error_description);return d.access_token}function mo(e){return wa(e).payload.nonce}function wa(e){let[t,r,o]=e.split("."),n=JSON.parse(atob(t)),a=JSON.parse(atob(r));return {header:n,payload:a,signature:o}}function et(){return Oa(xa())}function xa(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function Oa(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function tt(e){if(!e)return;let{pathname:t,search:r}=new URL(e),o=t+r,n=new URLSearchParams(r),a=n.get("return_to")||n.get("redirect");if(a){if(ho(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function ho(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function Kt({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=go(e,t),a=r?go(e,r):n;return ho(e,a.toString())?a.toString():(console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}. Default url ${n} is used instead.`),n.toString())}function go(e,t){return Da(t)?new URL(t):new URL(t,new URL(e).origin)}function Da(e){try{return new URL(e),!0}catch{return false}}function Co(e,t){let r=`https://shopify.com/${t}`,o=`https://shopify.com/authentication/${t}`;return function(a){switch(a){case "CA_BASE_URL":return r;case "CA_BASE_AUTH_URL":return o;case "GRAPHQL":return `${r}/account/customer/api/${e}/graphql`;case "AUTH":return `${o}/oauth/authorize`;case "LOGIN_SCOPE":return t?"openid email customer-account-api:full":"openid email https://api.customers.com/auth/customer.graphql";case "TOKEN_EXCHANGE":return `${o}/oauth/token`;case "LOGOUT":return `${o}/logout`}}}function _a(e,t){if(!e.url)return t;let{pathname:r}=new URL(e.url),o=r.replace(/\.data$/,"").replace(/\/_root$/,"/").replace(/(.+)\/$/,"$1"),n=t+`?${new URLSearchParams({return_to:o}).toString()}`;return Oe(n)}function zt({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=Ze,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:c,logErrors:i=true,loginPath:u="/account/login",authorizePath:p="/account/authorize",defaultRedirectPath:d="/account",language:g}){if(o!==Ze&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${Ze}.`),e||console.warn("[h2:warn:createCustomerAccountClient] session is required to use Customer Account API. Ensure the session object passed in exist."),!n?.url)throw new Error("[h2:error:createCustomerAccountClient] The request object does not contain a URL.");let m=c||(()=>_a(n,u)),l=new URL(n.url),y=l.protocol==="http:"?l.origin.replace("http","https"):l.origin,h=Kt({requestUrl:y,defaultUrl:p,redirectUrl:s}),f=Co(o,r),P=Ua(f,t),C=f("GRAPHQL"),v={};async function b({query:A,type:R,variables:D={}}){let x=await G();if(!x)throw m();new Date().getTime();let N=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":he,Origin:y,Authorization:x},body:JSON.stringify({query:A,variables:D})});let ee=await N.text(),V={url:C,response:N,type:R,query:A,queryVariables:D,errors:void 0,client:"customer"};if(!N.ok){if(N.status===401)throw Ae(e),m();let _;try{_=J(ee);}catch{_=[{message:ee}];}we({...V,errors:_});}try{let _=J(ee),{errors:U}=_,W=U?.map(({message:Pe,...at})=>new ce(Pe,{...at,clientOperation:`customerAccount.${V.type}`,requestId:N.headers.get("x-request-id"),queryVariables:D,query:A}));return {..._,...U&&{errors:W}}}catch{we({...V,errors:[{message:ee}]});}}async function O(){if(!r)return false;let A=e.get(L),R=A?.accessToken,D=A?.expiresAt;if(!R||!D)return false;let x=H?.();try{await co({locks:v,expiresAt:D,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:f("TOKEN_EXCHANGE"),httpsOrigin:y,debugInfo:{waitUntil:a,stackInfo:x,...re(n)}});}catch{return false}return true}async function w(){if(!await O())throw m()}async function G(){if(await O())return e.get(L)?.accessToken}async function Ne(A,R){return P(),A=me(A),Je(A,"customer.mutate"),ye(b({query:A,type:"mutation",...R}),{logErrors:i})}async function B(A,R){return P(),A=me(A),ze(A,"customer.query"),ye(b({query:A,type:"query",...R}),{logErrors:i})}function Q(A){e.set(Ce,{...e.get(Ce),...A});}async function ae(){let A=await G();if(A)return {...e.get(Ce),customerAccessToken:A}}return {i18n:{language:g??"EN"},login:async A=>{P();let R=new URL(f("AUTH")),D=yo(),x=et();R.searchParams.set("client_id",t),R.searchParams.set("scope","openid email"),R.searchParams.append("response_type","code"),R.searchParams.append("redirect_uri",h),R.searchParams.set("scope",f("LOGIN_SCOPE")),R.searchParams.append("state",D),R.searchParams.append("nonce",x);let M=La({contextLanguage:g??null,uiLocalesOverride:A?.uiLocales??null});M!=null&&R.searchParams.append("ui_locales",M),A?.countryCode&&R.searchParams.append("region_country",A.countryCode);let q=uo(),N=await po(q);return e.set(L,{...e.get(L),codeVerifier:q,state:D,nonce:x,redirectPath:tt(n.url)||z(n,"Referer")||d}),R.searchParams.append("code_challenge",N),R.searchParams.append("code_challenge_method","S256"),Oe(R.toString())},logout:async A=>{P();let R=e.get(L)?.idToken,D=Kt({requestUrl:y,defaultUrl:y,redirectUrl:A?.postLogoutRedirectUri}),x=R?new URL(`${f("LOGOUT")}?${new URLSearchParams([["id_token_hint",R],["post_logout_redirect_uri",D]]).toString()}`).toString():D;Ae(e);let M=A?.headers instanceof Headers?A?.headers:new Headers(A?.headers);return A?.keepSession||(e.destroy?M.set("Set-Cookie",await e.destroy()):console.warn("[h2:warn:customerAccount] session.destroy is not available on your session implementation. All session data might not be cleared on logout."),e.isPending=false),Oe(x,{headers:M})},isLoggedIn:O,handleAuthStatus:w,getAccessToken:G,getApiUrl:()=>C,mutate:Ne,query:B,authorize:async()=>{P();let A=l.searchParams.get("code"),R=l.searchParams.get("state");if(!A||!R)throw Ae(e),new F("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(L)?.state!==R)throw Ae(e),new F("Unauthorized","The session state does not match the state parameter. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");let D=t,x=new URLSearchParams;x.append("grant_type","authorization_code"),x.append("client_id",D),x.append("redirect_uri",h),x.append("code",A);let M=e.get(L)?.codeVerifier;if(!M)throw new F("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");x.append("code_verifier",M);let q={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:y};new Date().getTime();let V=f("TOKEN_EXCHANGE"),_=await fetch(V,{method:"POST",headers:q,body:x});if(!_.ok)throw new Response(await _.text(),{status:_.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:U,expires_in:W,id_token:Pe,refresh_token:at}=await _.json(),ir=e.get(L)?.nonce,cr=await mo(Pe);if(ir!==cr)throw new F("Unauthorized",`Returned nonce does not match: ${ir} !== ${cr}`);let ur=U;r||(ur=await fo(U,t,f("TOKEN_EXCHANGE"),y,{...re(n)}));let Bo=e.get(L)?.redirectPath;return e.set(L,{accessToken:ur,expiresAt:new Date(new Date().getTime()+(W-120)*1e3).getTime()+"",refreshToken:at,idToken:Pe}),Oe(Bo||d)},setBuyer:Q,getBuyer:ae,UNSTABLE_setBuyer:A=>{K("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),Q(A);},UNSTABLE_getBuyer:()=>(K("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),ae())}}function Ua(e,t){return function(){try{if(!t)throw Error();new URL(e("CA_BASE_URL")),new URL(e("CA_BASE_AUTH_URL"));}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 o="Internal Server Error";throw new Response(o,{status:500})}}}function La(e){let t=Ao(e.contextLanguage??null);return Ao(e.uiLocalesOverride)??t??null}function Ao(e){if(e==null)return null;let o=Na(e).toLowerCase().replaceAll("_","-").split("-"),n=o.at(0)??null,a=o.at(1)??null;return a?`${n}-${a.toUpperCase()}`:n}var ka={PT:"PT_PT",ZH:"ZH_CN"};function Na(e){return ka[e]??e}function Va(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:c,logErrors:i,storefront:u={},customerAccount:p,cart:d={},buyerIdentity:g}=e;c||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),p?.unstableB2b&&K("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:m}=to({cache:n,waitUntil:a,i18n:s,logErrors:i,storefrontHeaders:u.headers||$a(o),storefrontApiVersion:u.apiVersion,storefrontId:r.PUBLIC_STOREFRONT_ID,storeDomain:r.PUBLIC_STORE_DOMAIN,privateStorefrontToken:r.PRIVATE_STOREFRONT_API_TOKEN,publicStorefrontToken:r.PUBLIC_STOREFRONT_API_TOKEN}),l=zt({session:c,request:o,waitUntil:a,logErrors:i,customerApiVersion:p?.apiVersion,authUrl:p?.authUrl,customAuthStatusHandler:p?.customAuthStatusHandler,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),y=qt({getCartId:d.getId||Pt(o.headers),setCartId:d.setId||St(),cartQueryFragment:d.queryFragment,cartMutateFragment:d.mutateFragment,customMethods:d.customMethods,buyerIdentity:g,storefront:m,customerAccount:l}),h=new reactRouter.RouterContextProvider;h.set(Ht,m),h.set(Gt,y),h.set(Bt,l),h.set(Qt,r),h.set(Wt,c),a&&h.set(jt,a);let f={storefront:m,cart:y,customerAccount:l,env:r,session:c,waitUntil:a,...t||{}};return new Proxy(h,{get(C,v,b){if(v in C){let O=C[v];return typeof O=="function"?O.bind(C):O}return v in f?f[v]:Reflect.get(C,v,b)},has(C,v){return v in C||v in f},ownKeys(C){return [...Reflect.ownKeys(C),...Object.keys(f)]},getOwnPropertyDescriptor(C,v){if(v in C)return Reflect.getOwnPropertyDescriptor(C,v);if(v in f)return {enumerable:true,configurable:true,writable:false,value:f[v]}}})}function $a(e){return {requestGroupId:z(e,"request-id"),buyerIp:z(e,"oxygen-buyer-ip"),cookie:z(e,"cookie"),purpose:z(e,"purpose")}}var Po=react.createContext(void 0),So=Po.Provider,Jt=()=>react.useContext(Po);function Ba(e){let t=et(),r=Qa(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>react.createElement(So,{value:t},n)}}function Qa(e,t){let{shop:r,...o}=t??{},n=`'nonce-${e}'`,a=["'self'","'unsafe-inline'","https://cdn.shopify.com"],s=["'self'","https://cdn.shopify.com/","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&s.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&s.push(`https://${r.storeDomain}`);let i={baseUri:["'self'"],defaultSrc:["'self'",n,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:a,connectSrc:s},u=Object.assign({},i,o);for(let p in i){let d=o[p];p&&d&&(u[p]=Wa(d,i[p]));}return u.scriptSrc instanceof Array?u.scriptSrc=[...u.scriptSrc.filter(p=>!p.startsWith("'nonce")),n]:u.defaultSrc instanceof Array&&(u.defaultSrc=[...u.defaultSrc.filter(p=>!p.startsWith("'nonce")),n]),Ga__default.default({directives:u})}function Wa(e,t){let r=typeof t=="string"?[t]:t,o=Array.isArray(e)?e:[String(e)];return Array.isArray(r)?r.every(a=>a==="'none'")?o:[...o,...r]:r}var za=react.forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=Jt();return r?jsxRuntime.jsx(Ja,{src:o,options:n}):jsxRuntime.jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function Ja({src:e,options:t}){if(!e)throw new Error("`waitForHydration` with the Script component requires a `src` prop");return hydrogenReact.useLoadScript(e,{attributes:t}),null}async function rs(e){return e;}function ns(e){let t=reactRouter.useFetchers(),r={};for(let{formData:o}of t)if(o?.get("optimistic-identifier")===e)try{if(o.has("optimistic-data")){let n=JSON.parse(String(o.get("optimistic-data")));Object.assign(r,n);}}catch{}return r}function as({id:e,data:t}){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsxRuntime.jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function ps({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null),namespace:r=""}){let [o,n]=react.useState(false),a=reactRouter.useNavigation(),s=reactRouter.useLocation();reactRouter.useNavigate();react.useEffect(()=>{a.state==="idle"&&n(false);},[a.state]);let{endCursor:i,hasNextPage:u,hasPreviousPage:p,nextPageUrl:d,nodes:g,previousPageUrl:m,startCursor:l}=ds(e,r),y=react.useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:i,hasPreviousPage:p,hasNextPage:u,startCursor:l},nodes:g}}}),[i,u,p,l,g,r,s.state]),h=react.useMemo(()=>react.forwardRef(function(C,v){return u?react.createElement(reactRouter.Link,{preventScrollReset:true,...C,to:d,state:y,replace:true,ref:v,onClick:()=>n(true)}):null}),[u,d,y]),f=react.useMemo(()=>react.forwardRef(function(C,v){return p?react.createElement(reactRouter.Link,{preventScrollReset:true,...C,to:m,state:y,replace:true,ref:v,onClick:()=>n(true)}):null}),[p,m,y]);return t({state:y,hasNextPage:u,hasPreviousPage:p,isLoading:o,nextPageUrl:d,nodes:g,previousPageUrl:m,NextLink:h,PreviousLink:f})}function ot(e,t){let r=new URLSearchParams(e);return Object.keys(t?.pagination||{}).forEach(n=>{let a=n===""?"":`${n}_`,s=`${a}cursor`,c=`${a}direction`;r.delete(s),r.delete(c);}),r.toString()}function Le(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 ds(e,t=""){e.pageInfo||Le("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Le("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Le("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Le("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Le("pageInfo.hasPreviousPage");let r=reactRouter.useNavigation(),o=reactRouter.useNavigate(),{state:n,search:a,pathname:s}=reactRouter.useLocation(),c=t?`${t}_cursor`:"cursor",i=t?`${t}_direction`:"direction",d=new URLSearchParams(a).get(i)==="previous",g=react.useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!n?.pagination?.[t]?.nodes?hydrogenReact.flattenConnection(e):d?[...hydrogenReact.flattenConnection(e),...n.pagination[t].nodes||[]]:[...n.pagination[t].nodes||[],...hydrogenReact.flattenConnection(e)],[n,e,t]),m=react.useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,P=n?.pagination?.[t]?.pageInfo,C=!f||P?.startCursor===void 0?e.pageInfo.startCursor:P.startCursor,v=!f||P?.endCursor===void 0?e.pageInfo.endCursor:P.endCursor,b=!f||P?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:P.hasPreviousPage,O=!f||P?.hasNextPage===void 0?e.pageInfo.hasNextPage:P.hasNextPage;return n?.pagination?.[t]?.nodes&&(d?(C=e.pageInfo.startCursor,b=e.pageInfo.hasPreviousPage):(v=e.pageInfo.endCursor,O=e.pageInfo.hasNextPage)),{startCursor:C,endCursor:v,hasPreviousPage:b,hasNextPage:O}},[d,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),l=react.useRef({params:ot(a,n),pathname:s});react.useEffect(()=>{window.__hydrogenHydrated=true;},[]),react.useEffect(()=>{let f=ot(a,n),P=l.current.params;(s!==l.current.pathname||f!==P)&&!(r.state==="idle"&&!r.location)&&(l.current={pathname:s,params:ot(a,n)},o(`${s}?${ot(a,n)}`,{replace:true,preventScrollReset:true,state:{nodes:void 0,pageInfo:void 0}}));},[s,a,n]);let y=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"previous"),m.startCursor&&f.set(c,m.startCursor),`?${f.toString()}`},[a,m.startCursor]),h=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"next"),m.endCursor&&f.set(c,m.endCursor),`?${f.toString()}`},[a,m.endCursor]);return {...m,previousPageUrl:y,nextPageUrl:h,nodes:g}}function ls(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,namespace:o=""}=t,n=new URLSearchParams(new URL(e.url).search),a=o?`${o}_cursor`:"cursor",s=o?`${o}_direction`:"direction",c=n.get(a)??void 0;return (n.get(s)==="previous"?"previous":"next")==="previous"?{last:r,startCursor:c??null}:{first:r,endCursor:c??null}}function gs(e,t){let r=reactRouter.useNavigation(),[o,n]=react.useState([]);if(react.useEffect(()=>{Promise.resolve(t).then(a=>{a&&n(a instanceof Array?a:a.product?.variants?.nodes||[]);}).catch(a=>{reportError(new Error("[h2:error:useOptimisticVariant] An error occurred while resolving the variants for the optimistic product hook.",{cause:a}));});},[JSON.stringify(t)]),r.state==="loading"){let a=new URLSearchParams(r.location.search),s=false,c=o.find(i=>i.selectedOptions?i.selectedOptions.every(u=>a.get(u.name)===u.value):(s||(s=true,reportError(new Error("[h2:error:useOptimisticVariant] The optimistic product hook requires your product query to include variants with the selectedOptions field."))),false));if(c)return {...c,isOptimistic:true}}return e}function vs({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let c=t;c[0]?.values&&(K("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),c[0]&&!c[0].optionValues&&(c=t.map(l=>({...l,optionValues:l.values?.map(y=>({name:y}))||[]}))));let i=r instanceof Array?r:hydrogenReact.flattenConnection(r),{searchParams:u,path:p,alreadyOnProductPage:d}=Is(e,o,n),g=c.filter(l=>l?.optionValues?.length===1),m=a?a?.selectedOptions?.reduce((l,y)=>(l[y.name]=y.value,l),{}):{};return react.createElement(react.Fragment,null,...react.useMemo(()=>c.map(l=>{let y,h=[];for(let f of l.optionValues){let P=new URLSearchParams(d?u:void 0);P.set(l.name,f.name),g.forEach(w=>{w.optionValues[0].name&&P.set(w.name,w.optionValues[0].name);});let C=i.find(w=>w?.selectedOptions?.every(G=>(P.get(G?.name)||m?.[G?.name])===G?.value)),v=u.get(l.name);!v&&a&&(v=m?.[l.name]||null);let b=v?v===f.name:false;b&&(y=f.name);let O="?"+P.toString();h.push({value:f.name,optionValue:f,isAvailable:C?C.availableForSale:true,to:p+O,search:O,isActive:b,variant:C});}return s({option:{name:l.name,value:y,values:h}})}),[c,i,s]))}var Rs=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((o,n)=>{r.push({name:n,value:o});}),r};function Is(e,t,r){let{pathname:o,search:n}=reactRouter.useLocation(),a=reactRouter.useNavigation();return react.useMemo(()=>{let s=/(\/[a-zA-Z]{2}-[a-zA-Z]{2}\/)/g.exec(o),c=s&&s.length>0;t=t.startsWith("/")?t.substring(1):t;let i=c?`${s[0]}${t}/${e}`:`/${t}/${e}`;return {searchParams:new URLSearchParams(r||a.state!=="loading"?n:a.location.search),alreadyOnProductPage:i===o,path:i}},[o,n,r,e,t,a])}function Ts(){return {name:"hydrogen-2025.7.0",reactRouterConfig:()=>({appDirectory:"app",buildDirectory:"dist",ssr:true,future:{v8_middleware:true,unstable_optimizeDeps:true,unstable_splitRouteModules:true,unstable_subResourceIntegrity:false,unstable_viteEnvironmentApi:false}}),reactRouterConfigResolved:({reactRouterConfig:e})=>{if(e.basename&&e.basename!=="/")throw new Error(`[Hydrogen Preset] basename is not supported in Hydrogen 2025.7.0.
507
+ ${b}
508
+ ${x}
509
+ `;function rr(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:c}=e,i=t(),u=()=>i||t(),p={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},y=Gt(p),g=async function(...d){d[0].buyerIdentity={...c,...d[0].buyerIdentity};let l=await y(...d);return i=l?.cart?.id,l},m={get:$t({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:g,addLines:async(d,l)=>{let S=d.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId}));return i||l?.cartId?await Bt(p)(S,l):await g({lines:S,buyerIdentity:c},l)},updateLines:Qt(p),removeLines:Wt(p),updateDiscountCodes:async(d,l)=>i||l?.cartId?await jt(p)(d,l):await g({discountCodes:d},l),updateGiftCardCodes:async(d,l)=>i||l?.cartId?await er(p)(d,l):await g({giftCardCodes:d},l),removeGiftCardCodes:tr(p),updateBuyerIdentity:async(d,l)=>i||l?.cartId?await Kt(p)(d,l):await g({buyerIdentity:d},l),updateNote:async(d,l)=>i||l?.cartId?await Yt(p)(d,l):await g({note:d},l),updateSelectedDeliveryOption:zt(p),updateAttributes:async(d,l)=>i||l?.cartId?await Jt(p)(d,l):await g({attributes:d},l),setMetafields:async(d,l)=>i||l?.cartId?await Xt(p)(d,l):await g({metafields:d},l),deleteMetafield:Zt(p),addDeliveryAddresses:go(p),removeDeliveryAddresses:ho(p),updateDeliveryAddresses:Co(p)};return "customMethods"in e?{...m,...e.customMethods??{}}:m}function Na(e){let t=reactRouter.useFetchers();if(!t||!t.length)return e;let r=e?.lines?structuredClone(e):{lines:{nodes:[]}},o=r.lines.nodes,n=false;for(let{formData:a}of t){if(!a)continue;let s=J.getFormInput(a);if(s.action===J.ACTIONS.LinesAdd)for(let c of s.inputs.lines){if(!c.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 i=o.find(u=>u.merchandise.id===c.selectedVariant?.id);n=true,i?(i.quantity=(i.quantity||1)+(c.quantity||1),i.isOptimistic=true):o.unshift({id:mo(c.selectedVariant.id),merchandise:c.selectedVariant,isOptimistic:true,quantity:c.quantity||1});}else if(s.action===J.ACTIONS.LinesRemove)for(let c of s.inputs.lineIds){let i=o.findIndex(u=>u.id===c);if(i!==-1){if(ut(o[i].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}o.splice(i,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${c}' but it doesn't exist in the cart`);}else if(s.action===J.ACTIONS.LinesUpdate)for(let c of s.inputs.lines){let i=o.findIndex(u=>c.id===u.id);if(i>-1){if(ut(o[i].id)){console.error("[h2:error:useOptimisticCart] Tried to update an optimistic line that has not been added to the cart yet");continue}o[i].quantity=c.quantity,o[i].quantity===0&&o.splice(i,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to update line '${c.id}' but it doesn't exist in the cart`);}}return n&&(r.isOptimistic=n),r.totalQuantity=o.reduce((a,s)=>a+s.quantity,0),r}var Ma="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function Va({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||Ma)}var ke=reactRouter.createContext(),or=reactRouter.createContext(),nr=reactRouter.createContext(),ar=reactRouter.createContext(),sr=reactRouter.createContext(),ir=reactRouter.createContext(),Ha={storefront:ke,cart:or,customerAccount:nr,env:ar,session:sr,waitUntil:ir};var dt="2025-07",Ce=`Shopify Hydrogen ${Ue}`,Ao="30243aa5-17c1-465a-8493-944bcc4e88aa",U="customerAccount",Ae="buyer";var q=class extends Response{constructor(t,r,o){super(`Bad request: ${t}`,{status:400,headers:o});}};function Me(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 Fa({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(U),c=s?.refreshToken,i=s?.idToken;if(!c)throw new q("Unauthorized","No refreshToken found in the session. Make sure your session is configured correctly and passed to `createCustomerAccountClient`.");a.append("grant_type","refresh_token"),a.append("refresh_token",c),a.append("client_id",t);let u={"content-type":"application/x-www-form-urlencoded","User-Agent":Ce,Origin:o};new Date().getTime();let y=r,g=await fetch(y,{method:"POST",headers:u,body:a});if(!g.ok){let S=await g.text();throw new Response(S,{status:g.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:m,expires_in:d,refresh_token:l}=await g.json();if(!m||m.length===0)throw new q("Unauthorized","Invalid access token received.");e.set(U,{accessToken:m,expiresAt:new Date(new Date().getTime()+(d-120)*1e3).getTime()+"",refreshToken:l,idToken:i});}function Se(e){e.unset(U),e.unset(Ae);}async function So({locks:e,expiresAt:t,session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s}){if(parseInt(t,10)-1e3<new Date().getTime())try{e.refresh||(e.refresh=Fa({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(c){throw Se(r),c&&c.status!==401?c:new q("Unauthorized","Login before querying the Customer Account API.")}}function Po(){let e=qa();return Ro(e)}async function vo(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=$a(t);return Ro(r)}function qa(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function Ro(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function $a(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function To(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function Io(e,t,r,o,n){let a=t;if(!e)throw new q("Unauthorized","oAuth access token was not provided during token exchange.");let s=new URLSearchParams;s.append("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),s.append("client_id",a),s.append("audience",Ao),s.append("subject_token",e),s.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),s.append("scopes","https://api.customers.com/auth/customer.graphql");let c={"content-type":"application/x-www-form-urlencoded","User-Agent":Ce,Origin:o};new Date().getTime();let u=r,p=await fetch(u,{method:"POST",headers:c,body:s});let y=await p.json();if(y.error)throw new q(y.error_description);return y.access_token}function Eo(e){return Ga(e).payload.nonce}function Ga(e){let[t,r,o]=e.split("."),n=JSON.parse(atob(t)),a=JSON.parse(atob(r));return {header:n,payload:a,signature:o}}function lt(){return Qa(Ba())}function Ba(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function Qa(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function yt(e){if(!e)return;let{pathname:t,search:r}=new URL(e),o=t+r,n=new URLSearchParams(r),a=n.get("return_to")||n.get("redirect");if(a){if(wo(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function wo(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function cr({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=bo(e,t),a=r?bo(e,r):n;return wo(e,a.toString())?a.toString():(console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}. Default url ${n} is used instead.`),n.toString())}function bo(e,t){return Wa(t)?new URL(t):new URL(t,new URL(e).origin)}function Wa(e){try{return new URL(e),!0}catch{return false}}function xo(e,t){let r=`https://shopify.com/${t}`,o=`https://shopify.com/authentication/${t}`;return function(a){switch(a){case "CA_BASE_URL":return r;case "CA_BASE_AUTH_URL":return o;case "GRAPHQL":return `${r}/account/customer/api/${e}/graphql`;case "AUTH":return `${o}/oauth/authorize`;case "LOGIN_SCOPE":return t?"openid email customer-account-api:full":"openid email https://api.customers.com/auth/customer.graphql";case "TOKEN_EXCHANGE":return `${o}/oauth/token`;case "LOGOUT":return `${o}/logout`}}}function ja(e,t){if(!e.url)return t;let{pathname:r}=new URL(e.url),o=r.replace(/\.data$/,"").replace(/\/_root$/,"/").replace(/(.+)\/$/,"$1"),n=t+`?${new URLSearchParams({return_to:o}).toString()}`;return Me(n)}function ur({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=dt,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:c,logErrors:i=true,loginPath:u="/account/login",authorizePath:p="/account/authorize",defaultRedirectPath:y="/account",language:g}){if(o!==dt&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${dt}.`),e||console.warn("[h2:warn:createCustomerAccountClient] session is required to use Customer Account API. Ensure the session object passed in exist."),!n?.url)throw new Error("[h2:error:createCustomerAccountClient] The request object does not contain a URL.");let m=c||(()=>ja(n,u)),d=new URL(n.url),l=d.protocol==="http:"?d.origin.replace("http","https"):d.origin,S=cr({requestUrl:l,defaultUrl:p,redirectUrl:s}),f=xo(o,r),P=Ka(f,t),C=f("GRAPHQL"),A={};async function h({query:v,type:I,variables:O={}}){let D=await N();if(!D)throw m();new Date().getTime();let V=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":Ce,Origin:l,Authorization:D},body:JSON.stringify({query:v,variables:O})});let ee=await V.text(),K={url:C,response:V,type:I,query:v,queryVariables:O,errors:void 0,client:"customer"};if(!V.ok){if(V.status===401)throw Se(e),m();let _;try{_=z(ee);}catch{_=[{message:ee}];}Le({...K,errors:_});}try{let _=z(ee),{errors:Q}=_,Pe=Q?.map(({message:G,...ve})=>new pe(G,{...ve,clientOperation:`customerAccount.${K.type}`,requestId:V.headers.get("x-request-id"),queryVariables:O,query:v}));return {..._,...Q&&{errors:Pe}}}catch{Le({...K,errors:[{message:ee}]});}}async function R(){if(!r)return false;let v=e.get(U),I=v?.accessToken,O=v?.expiresAt;if(!I||!O)return false;let D=j?.();try{await So({locks:A,expiresAt:O,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:f("TOKEN_EXCHANGE"),httpsOrigin:l,debugInfo:{waitUntil:a,stackInfo:D,...ne(n)}});}catch{return false}return true}async function T(){if(!await R())throw m()}async function N(){if(await R())return e.get(U)?.accessToken}async function k(v,I){return P(),v=ge(v),ct(v,"customer.mutate"),fe(h({query:v,type:"mutation",...I}),{logErrors:i})}async function ie(v,I){return P(),v=ge(v),it(v,"customer.query"),fe(h({query:v,type:"query",...I}),{logErrors:i})}function Ge(v){e.set(Ae,{...e.get(Ae),...v});}async function Be(){let v=await N();if(v)return {...e.get(Ae),customerAccessToken:v}}return {i18n:{language:g??"EN"},login:async v=>{P();let I=new URL(f("AUTH")),O=To(),D=lt();I.searchParams.set("client_id",t),I.searchParams.set("scope","openid email"),I.searchParams.append("response_type","code"),I.searchParams.append("redirect_uri",S),I.searchParams.set("scope",f("LOGIN_SCOPE")),I.searchParams.append("state",O),I.searchParams.append("nonce",D);let M=Ya({contextLanguage:g??null,uiLocalesOverride:v?.uiLocales??null});M!=null&&I.searchParams.append("ui_locales",M),v?.countryCode&&I.searchParams.append("region_country",v.countryCode),v?.acrValues&&I.searchParams.append("acr_values",v.acrValues),v?.loginHint&&I.searchParams.append("login_hint",v.loginHint);let $=Po(),V=await vo($);return e.set(U,{...e.get(U),codeVerifier:$,state:O,nonce:D,redirectPath:yt(n.url)||W(n,"Referer")||y}),I.searchParams.append("code_challenge",V),I.searchParams.append("code_challenge_method","S256"),Me(I.toString())},logout:async v=>{P();let I=e.get(U)?.idToken,O=cr({requestUrl:l,defaultUrl:l,redirectUrl:v?.postLogoutRedirectUri}),D=I?new URL(`${f("LOGOUT")}?${new URLSearchParams([["id_token_hint",I],["post_logout_redirect_uri",O]]).toString()}`).toString():O;Se(e);let M=v?.headers instanceof Headers?v?.headers:new Headers(v?.headers);return v?.keepSession||(e.destroy?M.set("Set-Cookie",await e.destroy()):console.warn("[h2:warn:customerAccount] session.destroy is not available on your session implementation. All session data might not be cleared on logout."),e.isPending=false),Me(D,{headers:M})},isLoggedIn:R,handleAuthStatus:T,getAccessToken:N,getApiUrl:()=>C,mutate:k,query:ie,authorize:async()=>{P();let v=d.searchParams.get("code"),I=d.searchParams.get("state");if(!v||!I)throw Se(e),new q("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(U)?.state!==I)throw Se(e),new q("Unauthorized","The session state does not match the state parameter. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");let O=t,D=new URLSearchParams;D.append("grant_type","authorization_code"),D.append("client_id",O),D.append("redirect_uri",S),D.append("code",v);let M=e.get(U)?.codeVerifier;if(!M)throw new q("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");D.append("code_verifier",M);let $={"content-type":"application/x-www-form-urlencoded","User-Agent":Ce,Origin:l};new Date().getTime();let K=f("TOKEN_EXCHANGE"),_=await fetch(K,{method:"POST",headers:$,body:D});if(!_.ok)throw new Response(await _.text(),{status:_.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:Q,expires_in:Pe,id_token:G,refresh_token:ve}=await _.json(),H=e.get(U)?.nonce,te=await Eo(G);if(H!==te)throw new q("Unauthorized",`Returned nonce does not match: ${H} !== ${te}`);let gt=Q;r||(gt=await Io(Q,t,f("TOKEN_EXCHANGE"),l,{...ne(n)}));let tn=e.get(U)?.redirectPath;return e.set(U,{accessToken:gt,expiresAt:new Date(new Date().getTime()+(Pe-120)*1e3).getTime()+"",refreshToken:ve,idToken:G}),Me(tn||y)},setBuyer:Ge,getBuyer:Be,UNSTABLE_setBuyer:v=>{B("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),Ge(v);},UNSTABLE_getBuyer:()=>(B("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),Be())}}function Ka(e,t){return function(){try{if(!t)throw Error();new URL(e("CA_BASE_URL")),new URL(e("CA_BASE_AUTH_URL"));}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 o="Internal Server Error";throw new Response(o,{status:500})}}}function Ya(e){let t=Oo(e.contextLanguage??null);return Oo(e.uiLocalesOverride)??t??null}function Oo(e){if(e==null)return null;let o=Ja(e).toLowerCase().replaceAll("_","-").split("-"),n=o.at(0)??null,a=o.at(1)??null;return a?`${n}-${a.toUpperCase()}`:n}var za={PT:"PT_PT",ZH:"ZH_CN"};function Ja(e){return za[e]??e}function Za(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:c,logErrors:i,storefront:u={},customerAccount:p,cart:y={},buyerIdentity:g}=e;c||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),p?.unstableB2b&&B("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:m}=yo({cache:n,waitUntil:a,i18n:s,logErrors:i,storefrontHeaders:u.headers||Zr(o),storefrontApiVersion:u.apiVersion,storefrontId:r.PUBLIC_STOREFRONT_ID,storeDomain:r.PUBLIC_STORE_DOMAIN,privateStorefrontToken:r.PRIVATE_STOREFRONT_API_TOKEN,publicStorefrontToken:r.PUBLIC_STOREFRONT_API_TOKEN}),d=ur({session:c,request:o,waitUntil:a,logErrors:i,customerApiVersion:p?.apiVersion,authUrl:p?.authUrl,customAuthStatusHandler:p?.customAuthStatusHandler,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),l=rr({getCartId:y.getId||Ft(o.headers),setCartId:y.setId||qt(),cartQueryFragment:y.queryFragment,cartMutateFragment:y.mutateFragment,customMethods:y.customMethods,buyerIdentity:g,storefront:m,customerAccount:d}),S=new reactRouter.RouterContextProvider;S.set(ke,m),S.set(or,l),S.set(nr,d),S.set(ar,r),S.set(sr,c),a&&S.set(ir,a);let f={storefront:m,cart:l,customerAccount:d,env:r,session:c,waitUntil:a,...t||{}};return new Proxy(S,{get(C,A,h){if(A in C){let R=C[A];return typeof R=="function"?R.bind(C):R}return A in f?f[A]:Reflect.get(C,A,h)},has(C,A){return A in C||A in f},ownKeys(C){return [...Reflect.ownKeys(C),...Object.keys(f)]},getOwnPropertyDescriptor(C,A){if(A in C)return Reflect.getOwnPropertyDescriptor(C,A);if(A in f)return {enumerable:true,configurable:true,writable:false,value:f[A]}}})}function ts({build:e,mode:t,poweredByHeader:r=true,getLoadContext:o,collectTrackingInformation:n=true,proxyStandardRoutes:a=true}){let s=reactRouter.createRequestHandler(e,t),c=r?i=>i.headers.append("powered-by","Shopify, Hydrogen"):void 0;return async i=>{let u=i.method;if((u==="GET"||u==="HEAD")&&i.body)return new Response(`${u} requests cannot have a body`,{status:400});let p=new URL(i.url);if(p.pathname.includes("//"))return new Response(null,{status:301,headers:{location:p.pathname.replace(/\/+/g,"/")}});let y=await o?.(i),g=y?.storefront||y?.get?.(ke);if(a&&(g||B("[h2:createRequestHandler] Storefront instance is required to proxy standard routes."),g?.isStorefrontApiUrl(i))){let d=await g.forward(i);return c?.(d),d}let m=await s(i,y);if(g&&a){n&&g.setCollectedSubrequestHeaders(m);let d=i.headers.get("sec-fetch-dest");(d&&d==="document"||i.headers.get("accept")?.includes("text/html"))&&Te(m,{[je]:"1"});}return c?.(m),m}}var Do=react.createContext(void 0),_o=Do.Provider,pr=()=>react.useContext(Do);function ss(e){let t=lt(),r=is(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>react.createElement(_o,{value:t},n)}}function is(e,t){let{shop:r,...o}=t??{},n=`'nonce-${e}'`,a=["'self'","'unsafe-inline'","https://cdn.shopify.com"],s=["'self'","https://cdn.shopify.com/","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&s.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&s.push(`https://${r.storeDomain}`);let i={baseUri:["'self'"],defaultSrc:["'self'",n,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:a,connectSrc:s},u=Object.assign({},i,o);for(let p in i){let y=o[p];p&&y&&(u[p]=cs(y,i[p]));}return u.scriptSrc instanceof Array?u.scriptSrc=[...u.scriptSrc.filter(p=>!p.startsWith("'nonce")),n]:u.defaultSrc instanceof Array&&(u.defaultSrc=[...u.defaultSrc.filter(p=>!p.startsWith("'nonce")),n]),as__default.default({directives:u})}function cs(e,t){let r=typeof t=="string"?[t]:t,o=Array.isArray(e)?e:[String(e)];return Array.isArray(r)?r.every(a=>a==="'none'")?o:[...o,...r]:r}var ds=react.forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=pr();return r?jsxRuntime.jsx(ls,{src:o,options:n}):jsxRuntime.jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function ls({src:e,options:t}){if(!e)throw new Error("`waitForHydration` with the Script component requires a `src` prop");return hydrogenReact.useLoadScript(e,{attributes:t}),null}async function fs(e){return e;}function gs(e){let t=reactRouter.useFetchers(),r={};for(let{formData:o}of t)if(o?.get("optimistic-identifier")===e)try{if(o.has("optimistic-data")){let n=JSON.parse(String(o.get("optimistic-data")));Object.assign(r,n);}}catch{}return r}function hs({id:e,data:t}){return jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsxRuntime.jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function vs({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null),namespace:r=""}){let [o,n]=react.useState(false),a=reactRouter.useNavigation(),s=reactRouter.useLocation();reactRouter.useNavigate();react.useEffect(()=>{a.state==="idle"&&n(false);},[a.state]);let{endCursor:i,hasNextPage:u,hasPreviousPage:p,nextPageUrl:y,nodes:g,previousPageUrl:m,startCursor:d}=Rs(e,r),l=react.useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:i,hasPreviousPage:p,hasNextPage:u,startCursor:d},nodes:g}}}),[i,u,p,d,g,r,s.state]),S=react.useMemo(()=>react.forwardRef(function(C,A){return u?react.createElement(reactRouter.Link,{preventScrollReset:true,...C,to:y,state:l,replace:true,ref:A,onClick:()=>n(true)}):null}),[u,y,l]),f=react.useMemo(()=>react.forwardRef(function(C,A){return p?react.createElement(reactRouter.Link,{preventScrollReset:true,...C,to:m,state:l,replace:true,ref:A,onClick:()=>n(true)}):null}),[p,m,l]);return t({state:l,hasNextPage:u,hasPreviousPage:p,isLoading:o,nextPageUrl:y,nodes:g,previousPageUrl:m,NextLink:S,PreviousLink:f})}function ft(e,t){let r=new URLSearchParams(e);return Object.keys(t?.pagination||{}).forEach(n=>{let a=n===""?"":`${n}_`,s=`${a}cursor`,c=`${a}direction`;r.delete(s),r.delete(c);}),r.toString()}function qe(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 Rs(e,t=""){e.pageInfo||qe("pageInfo"),typeof e.pageInfo.startCursor>"u"&&qe("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&qe("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&qe("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&qe("pageInfo.hasPreviousPage");let r=reactRouter.useNavigation(),o=reactRouter.useNavigate(),{state:n,search:a,pathname:s}=reactRouter.useLocation(),c=t?`${t}_cursor`:"cursor",i=t?`${t}_direction`:"direction",y=new URLSearchParams(a).get(i)==="previous",g=react.useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!n?.pagination?.[t]?.nodes?hydrogenReact.flattenConnection(e):y?[...hydrogenReact.flattenConnection(e),...n.pagination[t].nodes||[]]:[...n.pagination[t].nodes||[],...hydrogenReact.flattenConnection(e)],[n,e,t]),m=react.useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,P=n?.pagination?.[t]?.pageInfo,C=!f||P?.startCursor===void 0?e.pageInfo.startCursor:P.startCursor,A=!f||P?.endCursor===void 0?e.pageInfo.endCursor:P.endCursor,h=!f||P?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:P.hasPreviousPage,R=!f||P?.hasNextPage===void 0?e.pageInfo.hasNextPage:P.hasNextPage;return n?.pagination?.[t]?.nodes&&(y?(C=e.pageInfo.startCursor,h=e.pageInfo.hasPreviousPage):(A=e.pageInfo.endCursor,R=e.pageInfo.hasNextPage)),{startCursor:C,endCursor:A,hasPreviousPage:h,hasNextPage:R}},[y,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),d=react.useRef({params:ft(a,n),pathname:s});react.useEffect(()=>{window.__hydrogenHydrated=true;},[]),react.useEffect(()=>{let f=ft(a,n),P=d.current.params;(s!==d.current.pathname||f!==P)&&!(r.state==="idle"&&!r.location)&&(d.current={pathname:s,params:ft(a,n)},o(`${s}?${ft(a,n)}`,{replace:true,preventScrollReset:true,state:{nodes:void 0,pageInfo:void 0}}));},[s,a,n]);let l=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"previous"),m.startCursor&&f.set(c,m.startCursor),`?${f.toString()}`},[a,m.startCursor]),S=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"next"),m.endCursor&&f.set(c,m.endCursor),`?${f.toString()}`},[a,m.endCursor]);return {...m,previousPageUrl:l,nextPageUrl:S,nodes:g}}function Ts(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,namespace:o=""}=t,n=new URLSearchParams(new URL(e.url).search),a=o?`${o}_cursor`:"cursor",s=o?`${o}_direction`:"direction",c=n.get(a)??void 0;return (n.get(s)==="previous"?"previous":"next")==="previous"?{last:r,startCursor:c??null}:{first:r,endCursor:c??null}}function ws(e,t){let r=reactRouter.useNavigation(),[o,n]=react.useState([]);if(react.useEffect(()=>{Promise.resolve(t).then(a=>{a&&n(a instanceof Array?a:a.product?.variants?.nodes||[]);}).catch(a=>{reportError(new Error("[h2:error:useOptimisticVariant] An error occurred while resolving the variants for the optimistic product hook.",{cause:a}));});},[JSON.stringify(t)]),r.state==="loading"){let a=new URLSearchParams(r.location.search),s=false,c=o.find(i=>i.selectedOptions?i.selectedOptions.every(u=>a.get(u.name)===u.value):(s||(s=true,reportError(new Error("[h2:error:useOptimisticVariant] The optimistic product hook requires your product query to include variants with the selectedOptions field."))),false));if(c)return {...c,isOptimistic:true}}return e}function Ls({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let c=t;c[0]?.values&&(B("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),c[0]&&!c[0].optionValues&&(c=t.map(d=>({...d,optionValues:d.values?.map(l=>({name:l}))||[]}))));let i=r instanceof Array?r:hydrogenReact.flattenConnection(r),{searchParams:u,path:p,alreadyOnProductPage:y}=Ns(e,o,n),g=c.filter(d=>d?.optionValues?.length===1),m=a?a?.selectedOptions?.reduce((d,l)=>(d[l.name]=l.value,d),{}):{};return react.createElement(react.Fragment,null,...react.useMemo(()=>c.map(d=>{let l,S=[];for(let f of d.optionValues){let P=new URLSearchParams(y?u:void 0);P.set(d.name,f.name),g.forEach(T=>{T.optionValues[0].name&&P.set(T.name,T.optionValues[0].name);});let C=i.find(T=>T?.selectedOptions?.every(N=>(P.get(N?.name)||m?.[N?.name])===N?.value)),A=u.get(d.name);!A&&a&&(A=m?.[d.name]||null);let h=A?A===f.name:false;h&&(l=f.name);let R="?"+P.toString();S.push({value:f.name,optionValue:f,isAvailable:C?C.availableForSale:true,to:p+R,search:R,isActive:h,variant:C});}return s({option:{name:d.name,value:l,values:S}})}),[c,i,s]))}var ks=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((o,n)=>{r.push({name:n,value:o});}),r};function Ns(e,t,r){let{pathname:o,search:n}=reactRouter.useLocation(),a=reactRouter.useNavigation();return react.useMemo(()=>{let s=/(\/[a-zA-Z]{2}-[a-zA-Z]{2}\/)/g.exec(o),c=s&&s.length>0;t=t.startsWith("/")?t.substring(1):t;let i=c?`${s[0]}${t}/${e}`:`/${t}/${e}`;return {searchParams:new URLSearchParams(r||a.state!=="loading"?n:a.location.search),alreadyOnProductPage:i===o,path:i}},[o,n,r,e,t,a])}function Ms(){return {name:"hydrogen-2025.7.0",reactRouterConfig:()=>({appDirectory:"app",buildDirectory:"dist",ssr:true,future:{v8_middleware:true,v8_splitRouteModules:true,v8_viteEnvironmentApi:false,unstable_optimizeDeps:true,unstable_subResourceIntegrity:false}}),reactRouterConfigResolved:({reactRouterConfig:e})=>{if(e.basename&&e.basename!=="/")throw new Error(`[Hydrogen Preset] basename is not supported in Hydrogen 2025.7.0.
510
510
  Reason: Requires major CLI infrastructure modernization.
511
511
  Workaround: Use reverse proxy or CDN path rewriting for subdirectory hosting.`);if(e.prerender)throw new Error(`[Hydrogen Preset] prerender is not supported in Hydrogen 2025.7.0.
512
512
  Reason: React Router plugin incompatibility with Hydrogen CLI build pipeline.
513
513
  Workaround: Use external static generation tools or server-side caching.`);if(e.serverBundles)throw new Error(`[Hydrogen Preset] serverBundles is not supported in Hydrogen 2025.7.0.
514
514
  Reason: React Router plugin manifest incompatibility with Hydrogen CLI.
515
- Alternative: Route-level code splitting via unstable_splitRouteModules is enabled.`);if(e.buildEnd)throw new Error(`[Hydrogen Preset] buildEnd is not supported in Hydrogen 2025.7.0.
515
+ Alternative: Route-level code splitting via v8_splitRouteModules is enabled.`);if(e.buildEnd)throw new Error(`[Hydrogen Preset] buildEnd is not supported in Hydrogen 2025.7.0.
516
516
  Reason: Hydrogen CLI bypasses React Router buildEnd hook execution.
517
517
  Workaround: Use external build scripts or package.json post-build hooks.`);if(e.future?.unstable_subResourceIntegrity===true)throw new Error(`[Hydrogen Preset] unstable_subResourceIntegrity cannot be enabled.
518
518
  Reason: Conflicts with Hydrogen CSP nonce-based authentication.
519
- Impact: Would break Content Security Policy and cause script execution failures.`)}}}var ws=function(e){return jsxRuntime.jsx(hydrogenReact.RichText,{...e,components:{link:({node:t})=>jsxRuntime.jsx(reactRouter.Link,{to:t.url,title:t.title,target:t.target,prefetch:"intent",children:t.children}),...e.components}})};var xs=async function({request:t,context:r}){let o=r.storefront,n=r.customerAccount,a=new URL(t.url);if(!o)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let s={};if(o){let u="X-Shopify-Storefront-Access-Token";s.storefront={name:"Storefront API",authHeader:u,accessToken:o.getPublicTokenHeaders()[u],apiUrl:o.getApiUrl(),icon:"SF"};}if(n){let u=await(await fetch(a.origin+"/graphiql/customer-account.schema.json")).json(),p=await n.getAccessToken();u&&(s["customer-account"]={name:"Customer Account API",value:u,authHeader:"Authorization",accessToken:p,apiUrl:n.getApiUrl(),icon:"CA"});}let c="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",i=String.raw;return new Response(i`
519
+ Impact: Would break Content Security Policy and cause script execution failures.`)}}}var Fs=function(e){return jsxRuntime.jsx(hydrogenReact.RichText,{...e,components:{link:({node:t})=>jsxRuntime.jsx(reactRouter.Link,{to:t.url,title:t.title,target:t.target,prefetch:"intent",children:t.children}),...e.components}})};var qs=async function({request:t,context:r}){let o=r.storefront,n=r.customerAccount,a=new URL(t.url);if(!o)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let s={};if(o){let u="X-Shopify-Storefront-Access-Token";s.storefront={name:"Storefront API",authHeader:u,accessToken:o.getPublicTokenHeaders()[u],apiUrl:o.getApiUrl(),icon:"SF"};}if(n){let u=await(await fetch(a.origin+"/graphiql/customer-account.schema.json")).json(),p=await n.getAccessToken();u&&(s["customer-account"]={name:"Customer Account API",value:u,authHeader:"Authorization",accessToken:p,apiUrl:n.getApiUrl(),icon:"CA"});}let c="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",i=String.raw;return new Response(i`
520
520
  <!DOCTYPE html>
521
521
  <html lang="en">
522
522
  <head>
@@ -835,7 +835,7 @@ Impact: Would break Content Security Policy and cause script execution failures.
835
835
  </div>
836
836
  </body>
837
837
  </html>
838
- `,{status:200,headers:{"content-type":"text/html"}})};async function Os(e){let{storefront:t,request:r,noAdminRedirect:o,matchQueryParams:n,response:a=new Response("Not Found",{status:404})}=e,s=new URL(r.url),{pathname:c,searchParams:i}=s,u=i.has("_data");i.delete("redirect"),i.delete("return_to"),i.delete("_data");let p=(n?s.toString().replace(s.origin,""):c).toLowerCase();if(s.pathname==="/admin"&&!o)return rr(`${t.getShopifyDomain()}/admin`,u,i,n);try{let{urlRedirects:d}=await t.query(Ds,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),g=d?.edges?.[0]?.node?.target;if(g)return rr(g,u,i,n);let m=tt(r.url);if(m)return rr(m,u,i,n)}catch(d){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,d);}return a}var tr="https://example.com";function rr(e,t,r,o){let n=new URL(e,tr);if(!o)for(let[a,s]of r)n.searchParams.append(a,s);return t?new Response(null,{status:200,headers:{"X-Remix-Redirect":n.toString().replace(tr,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(tr,"")}})}var Ds=`#graphql
838
+ `,{status:200,headers:{"content-type":"text/html"}})};async function $s(e){let{storefront:t,request:r,noAdminRedirect:o,matchQueryParams:n,response:a=new Response("Not Found",{status:404})}=e,s=new URL(r.url),{pathname:c,searchParams:i}=s,u=i.has("_data");i.delete("redirect"),i.delete("return_to"),i.delete("_data");let p=(n?s.toString().replace(s.origin,""):c).toLowerCase();if(s.pathname==="/admin"&&!o)return fr(`${t.getShopifyDomain()}/admin`,u,i,n);try{let{urlRedirects:y}=await t.query(Gs,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),g=y?.edges?.[0]?.node?.target;if(g)return fr(g,u,i,n);let m=yt(r.url);if(m)return fr(m,u,i,n)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,y);}return a}var yr="https://example.com";function fr(e,t,r,o){let n=new URL(e,yr);if(!o)for(let[a,s]of r)n.searchParams.append(a,s);return t?new Response(null,{status:200,headers:{"X-Remix-Redirect":n.toString().replace(yr,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(yr,"")}})}var Gs=`#graphql
839
839
  query redirects($query: String) {
840
840
  urlRedirects(first: 1, query: $query) {
841
841
  edges {
@@ -845,24 +845,24 @@ Impact: Would break Content Security Policy and cause script execution failures.
845
845
  }
846
846
  }
847
847
  }
848
- `;var _s={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},Us=/[&><\u2028\u2029]/g;function ko(e){return e.replace(Us,t=>_s[t])}var oe="Error in SEO input: ",X={title:{validate:e=>{if(typeof e!="string")throw new Error(oe.concat("`title` should be a string"));if(typeof e=="string"&&e.length>120)throw new Error(oe.concat("`title` should not be longer than 120 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(oe.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(oe.concat("`description` should not be longer than 155 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(oe.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(oe.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(oe.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(oe.concat("`handle` should start with `@`"));return e}}};function No(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=Z(X.title,e.title),n=nr(e?.titleTemplate,o);if(!n)break;t.push(k("title",{title:n}),k("meta",{property:"og:title",content:n}),k("meta",{name:"twitter:title",content:n}));break}case "description":{let o=Z(X.description,e.description);if(!o)break;t.push(k("meta",{name:"description",content:o}),k("meta",{property:"og:description",content:o}),k("meta",{name:"twitter:description",content:o}));break}case "url":{let o=Z(X.url,e.url);if(!o)break;let a=o.split("?")[0].replace(/\/$/,"");t.push(k("link",{rel:"canonical",href:a}),k("meta",{property:"og:url",content:a}));break}case "handle":{let o=Z(X.handle,e.handle);if(!o)break;t.push(k("meta",{name:"twitter:site",content:o}),k("meta",{name:"twitter:creator",content:o}));break}case "media":{let o,n=ne(e.media);for(let a of n)if(typeof a=="string"&&t.push(k("meta",{name:"og:image",content:a})),a&&typeof a=="object"){let s=a.type||"image",c=a?{url:a?.url,secure_url:a?.url,type:ar(a.url),width:a?.width,height:a?.height,alt:a?.altText}:{};for(let i of Object.keys(c))c[i]&&(o=c[i],t.push(k("meta",{property:`og:${s}:${i}`,content:o},c.url)));}break}case "jsonLd":{let o=ne(e.jsonLd),n=0;for(let a of o){if(typeof a!="object")continue;let s=k("script",{type:"application/ld+json",children:JSON.stringify(a,(c,i)=>typeof i=="string"?ko(i):i)},`json-ld-${a?.["@type"]||a?.name||n++}`);t.push(s);}break}case "alternates":{let o=ne(e.alternates);for(let n of o){if(!n)continue;let{language:a,url:s,default:c}=n,i=a?`${a}${c?"-default":""}`:void 0;t.push(k("link",{rel:"alternate",hrefLang:i,href:s}));}break}case "robots":{if(!e.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:a,noArchive:s,noFollow:c,noImageIndex:i,noIndex:u,noSnippet:p,noTranslate:d,unavailableAfter:g}=e.robots,m=[s&&"noarchive",i&&"noimageindex",p&&"nosnippet",d&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,a&&`max-video-preview:${a}`,g&&`unavailable_after:${g}`],l=(u?"noindex":"index")+","+(c?"nofollow":"follow");for(let y of m)y&&(l+=`,${y}`);t.push(k("meta",{name:"robots",content:l}));break}}return t.flat().sort((r,o)=>r.key.localeCompare(o.key))}function k(e,t,r){let o={tag:e,props:{},key:""};return e==="title"?(o.children=t.title,o.key=or(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=or(o,r),delete t.children,o.props=t,o):(o.props=t,Object.keys(o.props).forEach(n=>!o.props[n]&&delete o.props[n]),o.key=or(o,r),o)}function or(e,t){let{tag:r,props:o}=e;if(r==="title")return "0-title";if(r==="meta"){let n=o.content===t&&typeof o.property=="string"&&!o.property.endsWith("secure_url")&&"0";return [r,...[t,n],o.property||o.name].filter(s=>s).join("-")}return r==="link"?[r,o.rel,o.hrefLang||o.media].filter(a=>a).join("-").replace(/\s+/g,"-"):r==="script"?`${r}-${t}`:`${r}-${o.type}`}function nr(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function ar(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 ne(e){return Array.isArray(e)?e:[e]}function Z(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}function Ls(...e){let t=[],r=e.reduce((o,n)=>{if(!n)return o;Object.keys(n).forEach(s=>!n[s]&&delete n[s]);let{jsonLd:a}=n;return a?o?.jsonLd?{...o,...n,jsonLd:ne(o.jsonLd).concat(a)}:{...o,...n,jsonLd:[a]}:{...o,...n}},{})||{};for(let o of Object.keys(r))switch(o){case "title":{let n=Z(X.title,r.title),a=nr(r?.titleTemplate,n);if(!a)break;t.push({title:a},{property:"og:title",content:a},{property:"twitter:title",content:a});break}case "description":{let n=Z(X.description,r.description);if(!n)break;t.push({name:"description",content:n},{property:"og:description",content:n},{property:"twitter:description",content:n});break}case "url":{let n=Z(X.url,r.url);if(!n)break;let s=n.split("?")[0].replace(/\/$/,"");t.push({tagName:"link",rel:"canonical",href:s},{property:"og:url",content:s});break}case "handle":{let n=Z(X.handle,r.handle);if(!n)break;t.push({property:"twitter:site",content:n},{property:"twitter:creator",content:n});break}case "media":{let n,a=ne(r.media);for(let s of a)if(typeof s=="string"&&t.push({property:"og:image",content:s}),s&&typeof s=="object"){let c=s.type||"image",i=s?{url:s?.url,secure_url:s?.url,type:ar(s.url),width:s?.width,height:s?.height,alt:s?.altText}:{};for(let u of Object.keys(i))i[u]&&(n=i[u],t.push({property:`og:${c}:${u}`,content:n}));}break}case "jsonLd":{let n=ne(r.jsonLd);for(let s of n)typeof s!="object"||Object.keys(s).length===0||t.push({"script:ld+json":s});break}case "alternates":{let n=ne(r.alternates);for(let a of n){if(!a)continue;let{language:s,url:c,default:i}=a,u=s?`${s}${i?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:u,href:c});}break}case "robots":{if(!r.robots)break;let{maxImagePreview:n,maxSnippet:a,maxVideoPreview:s,noArchive:c,noFollow:i,noImageIndex:u,noIndex:p,noSnippet:d,noTranslate:g,unavailableAfter:m}=r.robots,l=[c&&"noarchive",u&&"noimageindex",d&&"nosnippet",g&&"notranslate",n&&`max-image-preview:${n}`,a&&`max-snippet:${a}`,s&&`max-video-preview:${s}`,m&&`unavailable_after:${m}`],y=(p?"noindex":"index")+","+(i?"nofollow":"follow");for(let h of l)h&&(y+=`,${h}`);t.push({name:"robots",content:y});break}}return t}var Gs=react.lazy(()=>Promise.resolve().then(()=>(Fo(),$o)));function Bs({debug:e}){let t=reactRouter.useMatches(),r=reactRouter.useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/utilities/getseometa");let o=react.useMemo(()=>t.flatMap(s=>{let{handle:c,...i}=s,u={...i,...r},p=c?.seo,d=i?.data?.seo;return !p&&!d?[]:p?nt(p,u):[d]}).reduce((s,c)=>{Object.keys(c).forEach(u=>!c[u]&&delete c[u]);let{jsonLd:i}=c;return i?s?.jsonLd?Array.isArray(i)?{...s,...c,jsonLd:[...s.jsonLd,...i]}:{...s,...c,jsonLd:[...s.jsonLd,i]}:{...s,...c,jsonLd:[i]}:{...s,...c}},{}),[t,r]),{html:n,loggerMarkup:a}=react.useMemo(()=>{let s=No(o),c=s.map(u=>u.tag==="script"?react.createElement(u.tag,{...u.props,key:u.key,dangerouslySetInnerHTML:{__html:u.children}}):react.createElement(u.tag,{...u.props,key:u.key},u.children)),i=react.createElement(react.Suspense,{fallback:null},react.createElement(Gs,{headTags:s}));return {html:c,loggerMarkup:i}},[o]);return react.createElement(react.Fragment,null,n,e&&a)}function nt(e,...t){if(e instanceof Function)return nt(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,nt(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=nt(a,...t);}),r):e}function Ws(e){return jsxRuntime.jsx(hydrogenReact.ShopPayButton,{channel:"hydrogen",...e})}var Ks=`<?xml version="1.0" encoding="UTF-8"?>
848
+ `;var Bs={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},Qs=/[&><\u2028\u2029]/g;function Wo(e){return e.replace(Qs,t=>Bs[t])}var ae="Error in SEO input: ",X={title:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`title` should be a string"));if(typeof e=="string"&&e.length>70)throw new Error(ae.concat("`title` should not be longer than 70 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(ae.concat("`description` should not be longer than 160 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(ae.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(ae.concat("`handle` should start with `@`"));return e}}};function jo(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=Z(X.title,e.title),n=gr(e?.titleTemplate,o);if(!n)break;t.push(L("title",{title:n}),L("meta",{property:"og:title",content:n}),L("meta",{name:"twitter:title",content:n}));break}case "description":{let o=Z(X.description,e.description);if(!o)break;t.push(L("meta",{name:"description",content:o}),L("meta",{property:"og:description",content:o}),L("meta",{name:"twitter:description",content:o}));break}case "url":{let o=Z(X.url,e.url);if(!o)break;let a=o.split("?")[0].replace(/\/$/,"");t.push(L("link",{rel:"canonical",href:a}),L("meta",{property:"og:url",content:a}));break}case "handle":{let o=Z(X.handle,e.handle);if(!o)break;t.push(L("meta",{name:"twitter:site",content:o}),L("meta",{name:"twitter:creator",content:o}));break}case "media":{let o,n=se(e.media);for(let a of n)if(typeof a=="string"&&t.push(L("meta",{name:"og:image",content:a})),a&&typeof a=="object"){let s=a.type||"image",c=a?{url:a?.url,secure_url:a?.url,type:hr(a.url),width:a?.width,height:a?.height,alt:a?.altText}:{};for(let i of Object.keys(c))c[i]&&(o=c[i],t.push(L("meta",{property:`og:${s}:${i}`,content:o},c.url)));}break}case "jsonLd":{let o=se(e.jsonLd),n=0;for(let a of o){if(typeof a!="object")continue;let s=L("script",{type:"application/ld+json",children:JSON.stringify(a,(c,i)=>typeof i=="string"?Wo(i):i)},`json-ld-${a?.["@type"]||a?.name||n++}`);t.push(s);}break}case "alternates":{let o=se(e.alternates);for(let n of o){if(!n)continue;let{language:a,url:s,default:c}=n,i=a?`${a}${c?"-default":""}`:void 0;t.push(L("link",{rel:"alternate",hrefLang:i,href:s}));}break}case "robots":{if(!e.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:a,noArchive:s,noFollow:c,noImageIndex:i,noIndex:u,noSnippet:p,noTranslate:y,unavailableAfter:g}=e.robots,m=[s&&"noarchive",i&&"noimageindex",p&&"nosnippet",y&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,a&&`max-video-preview:${a}`,g&&`unavailable_after:${g}`],d=(u?"noindex":"index")+","+(c?"nofollow":"follow");for(let l of m)l&&(d+=`,${l}`);t.push(L("meta",{name:"robots",content:d}));break}}return t.flat().sort((r,o)=>r.key.localeCompare(o.key))}function L(e,t,r){let o={tag:e,props:{},key:""};return e==="title"?(o.children=t.title,o.key=mr(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=mr(o,r),delete t.children,o.props=t,o):(o.props=t,Object.keys(o.props).forEach(n=>!o.props[n]&&delete o.props[n]),o.key=mr(o,r),o)}function mr(e,t){let{tag:r,props:o}=e;if(r==="title")return "0-title";if(r==="meta"){let n=o.content===t&&typeof o.property=="string"&&!o.property.endsWith("secure_url")&&"0";return [r,...[t,n],o.property||o.name].filter(s=>s).join("-")}return r==="link"?[r,o.rel,o.hrefLang||o.media].filter(a=>a).join("-").replace(/\s+/g,"-"):r==="script"?`${r}-${t}`:`${r}-${o.type}`}function gr(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function hr(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 se(e){return Array.isArray(e)?e:[e]}function Z(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}function Ws(...e){let t=[],r=e.reduce((o,n)=>{if(!n)return o;Object.keys(n).forEach(s=>!n[s]&&delete n[s]);let{jsonLd:a}=n;return a?o?.jsonLd?{...o,...n,jsonLd:se(o.jsonLd).concat(a)}:{...o,...n,jsonLd:[a]}:{...o,...n}},{})||{};for(let o of Object.keys(r))switch(o){case "title":{let n=Z(X.title,r.title),a=gr(r?.titleTemplate,n);if(!a)break;t.push({title:a},{property:"og:title",content:a},{property:"twitter:title",content:a});break}case "description":{let n=Z(X.description,r.description);if(!n)break;t.push({name:"description",content:n},{property:"og:description",content:n},{property:"twitter:description",content:n});break}case "url":{let n=Z(X.url,r.url);if(!n)break;let s=n.split("?")[0].replace(/\/$/,"");t.push({tagName:"link",rel:"canonical",href:s},{property:"og:url",content:s});break}case "handle":{let n=Z(X.handle,r.handle);if(!n)break;t.push({property:"twitter:site",content:n},{property:"twitter:creator",content:n});break}case "media":{let n,a=se(r.media);for(let s of a)if(typeof s=="string"&&t.push({property:"og:image",content:s}),s&&typeof s=="object"){let c=s.type||"image",i=s?{url:s?.url,secure_url:s?.url,type:hr(s.url),width:s?.width,height:s?.height,alt:s?.altText}:{};for(let u of Object.keys(i))i[u]&&(n=i[u],t.push({property:`og:${c}:${u}`,content:n}));}break}case "jsonLd":{let n=se(r.jsonLd);for(let s of n)typeof s!="object"||Object.keys(s).length===0||t.push({"script:ld+json":s});break}case "alternates":{let n=se(r.alternates);for(let a of n){if(!a)continue;let{language:s,url:c,default:i}=a,u=s?`${s}${i?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:u,href:c});}break}case "robots":{if(!r.robots)break;let{maxImagePreview:n,maxSnippet:a,maxVideoPreview:s,noArchive:c,noFollow:i,noImageIndex:u,noIndex:p,noSnippet:y,noTranslate:g,unavailableAfter:m}=r.robots,d=[c&&"noarchive",u&&"noimageindex",y&&"nosnippet",g&&"notranslate",n&&`max-image-preview:${n}`,a&&`max-snippet:${a}`,s&&`max-video-preview:${s}`,m&&`unavailable_after:${m}`],l=(p?"noindex":"index")+","+(i?"nofollow":"follow");for(let S of d)S&&(l+=`,${S}`);t.push({name:"robots",content:l});break}}return t}var ti=react.lazy(()=>Promise.resolve().then(()=>(Jo(),zo)));function ri({debug:e}){let t=reactRouter.useMatches(),r=reactRouter.useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/utilities/getseometa");let o=react.useMemo(()=>t.flatMap(s=>{let{handle:c,...i}=s,u={...i,...r},p=c?.seo,y=i?.data?.seo;return !p&&!y?[]:p?mt(p,u):[y]}).reduce((s,c)=>{Object.keys(c).forEach(u=>!c[u]&&delete c[u]);let{jsonLd:i}=c;return i?s?.jsonLd?Array.isArray(i)?{...s,...c,jsonLd:[...s.jsonLd,...i]}:{...s,...c,jsonLd:[...s.jsonLd,i]}:{...s,...c,jsonLd:[i]}:{...s,...c}},{}),[t,r]),{html:n,loggerMarkup:a}=react.useMemo(()=>{let s=jo(o),c=s.map(u=>u.tag==="script"?react.createElement(u.tag,{...u.props,key:u.key,dangerouslySetInnerHTML:{__html:u.children}}):react.createElement(u.tag,{...u.props,key:u.key},u.children)),i=react.createElement(react.Suspense,{fallback:null},react.createElement(ti,{headTags:s}));return {html:c,loggerMarkup:i}},[o]);return react.createElement(react.Fragment,null,n,e&&a)}function mt(e,...t){if(e instanceof Function)return mt(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,mt(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=mt(a,...t);}),r):e}function ni(e){return jsxRuntime.jsx(hydrogenReact.ShopPayButton,{channel:"hydrogen",...e})}var si=`<?xml version="1.0" encoding="UTF-8"?>
849
849
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
850
- `,zs=`
851
- </sitemapindex>`,Ho=`<?xml version="1.0" encoding="UTF-8"?>
852
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">`,Go="</urlset>";async function Js(e){let{storefront:t,request:r,types:o=["products","pages","collections","metaObjects","articles","blogs"],customChildSitemaps:n=[]}=e;if(!r||!r.url)throw new Error("A request object is required to generate a sitemap index");if(!t||!t.query)throw new Error("A storefront client is required to generate a sitemap index");let a=await t.query(ii);if(!a)throw console.warn("[h2:sitemap:warning] Sitemap index is available in API version 2024-10 and later"),new Response("Sitemap index not found.",{status:404});let s=new URL(r.url).origin,c=Ks+o.map(i=>{if(!a[i])throw new Error(`[h2:sitemap:error] No data found for type ${i}. Check types passed to \`getSitemapIndex\``);return Xs(i,a[i].pagesCount.count,s)}).join(`
850
+ `,ii=`
851
+ </sitemapindex>`,Zo=`<?xml version="1.0" encoding="UTF-8"?>
852
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">`,en="</urlset>";async function ci(e){let{storefront:t,request:r,types:o=["products","pages","collections","metaObjects","articles","blogs"],customChildSitemaps:n=[]}=e;if(!r||!r.url)throw new Error("A request object is required to generate a sitemap index");if(!t||!t.query)throw new Error("A storefront client is required to generate a sitemap index");let a=await t.query(Ai);if(!a)throw console.warn("[h2:sitemap:warning] Sitemap index is available in API version 2024-10 and later"),new Response("Sitemap index not found.",{status:404});let s=new URL(r.url).origin,c=si+o.map(i=>{if(!a[i])throw new Error(`[h2:sitemap:error] No data found for type ${i}. Check types passed to \`getSitemapIndex\``);return pi(i,a[i].pagesCount.count,s)}).join(`
853
853
  `)+n.map(i=>" <sitemap><loc>"+(s+(i.startsWith("/")?i:"/"+i))+"</loc></sitemap>").join(`
854
- `)+zs;return new Response(c,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function Ys(e){let{storefront:t,request:r,params:o,getLink:n,locales:a=[],getChangeFreq:s,noItemsFallback:c="/"}=e;if(!o)throw new Error("[h2:sitemap:error] Remix params object is required to generate a sitemap");if(!r||!r.url)throw new Error("A request object is required to generate a sitemap");if(!t||!t.query)throw new Error("A storefront client is required to generate a index");if(!n)throw new Error("A `getLink` function to generate each resource is required to build a sitemap");if(!o.type||!o.page)throw new Response("No data found",{status:404});let i=o.type,u=ci[i];if(!u)throw new Response("Not found",{status:404});let p=await t.query(u,{variables:{page:parseInt(o.page,10)}});if(!p)throw console.warn("[h2:sitemap:warning] Sitemap is available in API version 2024-10 and later"),new Response("Sitemap not found.",{status:404});let d=new URL(r.url).origin,g="";return p?.sitemap?.resources?.items?.length?g=Ho+p.sitemap.resources.items.map(m=>Zs({getChangeFreq:s,url:n({type:m.type??i,baseUrl:d,handle:m.handle}),type:i,getLink:n,updatedAt:m.updatedAt,handle:m.handle,metaobjectType:m.type,locales:a,baseUrl:d})).join(`
855
- `)+Go:g=Ho+`
856
- <url><loc>${d+c}</loc></url>
857
- `+Go,new Response(g,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function Xs(e,t,r){let o="";for(let n=1;n<=t;n++)o+=` <sitemap><loc>${r}/sitemap/${e}/${n}.xml</loc></sitemap>
858
- `;return o}function Zs({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:c,metaobjectType:i}){return `<url>
854
+ `)+ii;return new Response(c,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function ui(e){let{storefront:t,request:r,params:o,getLink:n,locales:a=[],getChangeFreq:s,noItemsFallback:c="/"}=e;if(!o)throw new Error("[h2:sitemap:error] Remix params object is required to generate a sitemap");if(!r||!r.url)throw new Error("A request object is required to generate a sitemap");if(!t||!t.query)throw new Error("A storefront client is required to generate a index");if(!n)throw new Error("A `getLink` function to generate each resource is required to build a sitemap");if(!o.type||!o.page)throw new Response("No data found",{status:404});let i=o.type,u=Si[i];if(!u)throw new Response("Not found",{status:404});let p=await t.query(u,{variables:{page:parseInt(o.page,10)}});if(!p)throw console.warn("[h2:sitemap:warning] Sitemap is available in API version 2024-10 and later"),new Response("Sitemap not found.",{status:404});let y=new URL(r.url).origin,g="";return p?.sitemap?.resources?.items?.length?g=Zo+p.sitemap.resources.items.map(m=>di({getChangeFreq:s,url:n({type:m.type??i,baseUrl:y,handle:m.handle}),type:i,getLink:n,updatedAt:m.updatedAt,handle:m.handle,metaobjectType:m.type,locales:a,baseUrl:y})).join(`
855
+ `)+en:g=Zo+`
856
+ <url><loc>${y+c}</loc></url>
857
+ `+en,new Response(g,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function pi(e,t,r){let o="";for(let n=1;n<=t;n++)o+=` <sitemap><loc>${r}/sitemap/${e}/${n}.xml</loc></sitemap>
858
+ `;return o}function di({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:c,metaobjectType:i}){return `<url>
859
859
  <loc>${e}</loc>
860
860
  <lastmod>${t}</lastmod>
861
861
  <changefreq>${c?c({type:i??o,handle:s}):"weekly"}</changefreq>
862
- ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
862
+ ${r.map(u=>li(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
863
863
  `)}
864
864
  </url>
865
- `.trim()}function ei(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var ti=`#graphql
865
+ `.trim()}function li(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var yi=`#graphql
866
866
  query SitemapProducts($page: Int!) {
867
867
  sitemap(type: PRODUCT) {
868
868
  resources(page: $page) {
@@ -873,7 +873,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
873
873
  }
874
874
  }
875
875
  }
876
- `,ri=`#graphql
876
+ `,fi=`#graphql
877
877
  query SitemapCollections($page: Int!) {
878
878
  sitemap(type: COLLECTION) {
879
879
  resources(page: $page) {
@@ -884,7 +884,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
884
884
  }
885
885
  }
886
886
  }
887
- `,oi=`#graphql
887
+ `,mi=`#graphql
888
888
  query SitemapArticles($page: Int!) {
889
889
  sitemap(type: ARTICLE) {
890
890
  resources(page: $page) {
@@ -895,7 +895,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
895
895
  }
896
896
  }
897
897
  }
898
- `,ni=`#graphql
898
+ `,gi=`#graphql
899
899
  query SitemapPages($page: Int!) {
900
900
  sitemap(type: PAGE) {
901
901
  resources(page: $page) {
@@ -906,7 +906,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
906
906
  }
907
907
  }
908
908
  }
909
- `,ai=`#graphql
909
+ `,hi=`#graphql
910
910
  query SitemapBlogs($page: Int!) {
911
911
  sitemap(type: BLOG) {
912
912
  resources(page: $page) {
@@ -917,7 +917,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
917
917
  }
918
918
  }
919
919
  }
920
- `,si=`#graphql
920
+ `,Ci=`#graphql
921
921
  query SitemapMetaobjects($page: Int!) {
922
922
  sitemap(type: METAOBJECT) {
923
923
  resources(page: $page) {
@@ -931,7 +931,7 @@ ${r.map(u=>ei(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
931
931
  }
932
932
  }
933
933
  }
934
- `,ii=`#graphql
934
+ `,Ai=`#graphql
935
935
  query SitemapIndex {
936
936
  products: sitemap(type: PRODUCT) {
937
937
  pagesCount {
@@ -964,7 +964,7 @@ query SitemapIndex {
964
964
  }
965
965
  }
966
966
  }
967
- `,ci={products:ti,articles:oi,collections:ri,pages:ni,blogs:ai,metaObjects:si};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
967
+ `,Si={products:yi,articles:mi,collections:fi,pages:gi,blogs:hi,metaObjects:Ci};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
968
968
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartCreate
969
969
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd
970
970
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesUpdate
@@ -980,5 +980,5 @@ query SitemapIndex {
980
980
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesAdd
981
981
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesRemove
982
982
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesUpdate
983
- Object.defineProperty(exports,"AnalyticsEventName",{enumerable:true,get:function(){return hydrogenReact.AnalyticsEventName}});Object.defineProperty(exports,"AnalyticsPageType",{enumerable:true,get:function(){return hydrogenReact.AnalyticsPageType}});Object.defineProperty(exports,"ExternalVideo",{enumerable:true,get:function(){return hydrogenReact.ExternalVideo}});Object.defineProperty(exports,"IMAGE_FRAGMENT",{enumerable:true,get:function(){return hydrogenReact.IMAGE_FRAGMENT}});Object.defineProperty(exports,"Image",{enumerable:true,get:function(){return hydrogenReact.Image}});Object.defineProperty(exports,"MediaFile",{enumerable:true,get:function(){return hydrogenReact.MediaFile}});Object.defineProperty(exports,"ModelViewer",{enumerable:true,get:function(){return hydrogenReact.ModelViewer}});Object.defineProperty(exports,"Money",{enumerable:true,get:function(){return hydrogenReact.Money}});Object.defineProperty(exports,"ShopifySalesChannel",{enumerable:true,get:function(){return hydrogenReact.ShopifySalesChannel}});Object.defineProperty(exports,"Video",{enumerable:true,get:function(){return hydrogenReact.Video}});Object.defineProperty(exports,"customerAccountApiCustomScalars",{enumerable:true,get:function(){return hydrogenReact.customerAccountApiCustomScalars}});Object.defineProperty(exports,"decodeEncodedVariant",{enumerable:true,get:function(){return hydrogenReact.decodeEncodedVariant}});Object.defineProperty(exports,"flattenConnection",{enumerable:true,get:function(){return hydrogenReact.flattenConnection}});Object.defineProperty(exports,"getAdjacentAndFirstAvailableVariants",{enumerable:true,get:function(){return hydrogenReact.getAdjacentAndFirstAvailableVariants}});Object.defineProperty(exports,"getClientBrowserParameters",{enumerable:true,get:function(){return hydrogenReact.getClientBrowserParameters}});Object.defineProperty(exports,"getProductOptions",{enumerable:true,get:function(){return hydrogenReact.getProductOptions}});Object.defineProperty(exports,"getShopifyCookies",{enumerable:true,get:function(){return hydrogenReact.getShopifyCookies}});Object.defineProperty(exports,"isOptionValueCombinationInEncodedVariant",{enumerable:true,get:function(){return hydrogenReact.isOptionValueCombinationInEncodedVariant}});Object.defineProperty(exports,"mapSelectedProductOptionToObject",{enumerable:true,get:function(){return hydrogenReact.mapSelectedProductOptionToObject}});Object.defineProperty(exports,"parseGid",{enumerable:true,get:function(){return hydrogenReact.parseGid}});Object.defineProperty(exports,"parseMetafield",{enumerable:true,get:function(){return hydrogenReact.parseMetafield}});Object.defineProperty(exports,"sendShopifyAnalytics",{enumerable:true,get:function(){return hydrogenReact.sendShopifyAnalytics}});Object.defineProperty(exports,"storefrontApiCustomScalars",{enumerable:true,get:function(){return hydrogenReact.storefrontApiCustomScalars}});Object.defineProperty(exports,"useLoadScript",{enumerable:true,get:function(){return hydrogenReact.useLoadScript}});Object.defineProperty(exports,"useMoney",{enumerable:true,get:function(){return hydrogenReact.useMoney}});Object.defineProperty(exports,"useSelectedOptionInUrlParam",{enumerable:true,get:function(){return hydrogenReact.useSelectedOptionInUrlParam}});Object.defineProperty(exports,"useShopifyCookies",{enumerable:true,get:function(){return hydrogenReact.useShopifyCookies}});exports.Analytics=On;exports.AnalyticsEvent=$;exports.CacheCustom=gt;exports.CacheLong=mt;exports.CacheNone=yt;exports.CacheShort=ie;exports.CartForm=Y;exports.InMemoryCache=At;exports.NonceProvider=So;exports.OptimisticInput=as;exports.Pagination=ps;exports.RichText=ws;exports.Script=za;exports.Seo=Bs;exports.ShopPayButton=Ws;exports.VariantSelector=vs;exports.cartAttributesUpdateDefault=Nt;exports.cartBuyerIdentityUpdateDefault=Ut;exports.cartCreateDefault=wt;exports.cartDiscountCodesUpdateDefault=_t;exports.cartGetDefault=bt;exports.cartGetIdDefault=Pt;exports.cartGiftCardCodesRemoveDefault=Ft;exports.cartGiftCardCodesUpdateDefault=$t;exports.cartLinesAddDefault=xt;exports.cartLinesRemoveDefault=Dt;exports.cartLinesUpdateDefault=Ot;exports.cartMetafieldDeleteDefault=Vt;exports.cartMetafieldsSetDefault=Mt;exports.cartNoteUpdateDefault=Lt;exports.cartSelectedDeliveryOptionsUpdateDefault=kt;exports.cartSetIdDefault=St;exports.changelogHandler=Ra;exports.createCartHandler=qt;exports.createContentSecurityPolicy=Ba;exports.createCustomerAccountClient=zt;exports.createHydrogenContext=Va;exports.createStorefrontClient=to;exports.createWithCache=qn;exports.formatAPIResult=S;exports.generateCacheControlHeader=Te;exports.getPaginationVariables=ls;exports.getSelectedProductOptions=Rs;exports.getSeoMeta=Ls;exports.getShopAnalytics=wn;exports.getSitemap=Ys;exports.getSitemapIndex=Js;exports.graphiqlLoader=xs;exports.hydrogenContext=Ia;exports.hydrogenPreset=Ts;exports.hydrogenRoutes=rs;exports.storefrontRedirect=Os;exports.useAnalytics=j;exports.useCustomerPrivacy=it;exports.useNonce=Jt;exports.useOptimisticCart=Sa;exports.useOptimisticData=ns;exports.useOptimisticVariant=gs;//# sourceMappingURL=index.cjs.map
983
+ Object.defineProperty(exports,"AnalyticsEventName",{enumerable:true,get:function(){return hydrogenReact.AnalyticsEventName}});Object.defineProperty(exports,"AnalyticsPageType",{enumerable:true,get:function(){return hydrogenReact.AnalyticsPageType}});Object.defineProperty(exports,"ExternalVideo",{enumerable:true,get:function(){return hydrogenReact.ExternalVideo}});Object.defineProperty(exports,"IMAGE_FRAGMENT",{enumerable:true,get:function(){return hydrogenReact.IMAGE_FRAGMENT}});Object.defineProperty(exports,"Image",{enumerable:true,get:function(){return hydrogenReact.Image}});Object.defineProperty(exports,"MediaFile",{enumerable:true,get:function(){return hydrogenReact.MediaFile}});Object.defineProperty(exports,"ModelViewer",{enumerable:true,get:function(){return hydrogenReact.ModelViewer}});Object.defineProperty(exports,"Money",{enumerable:true,get:function(){return hydrogenReact.Money}});Object.defineProperty(exports,"ShopifySalesChannel",{enumerable:true,get:function(){return hydrogenReact.ShopifySalesChannel}});Object.defineProperty(exports,"Video",{enumerable:true,get:function(){return hydrogenReact.Video}});Object.defineProperty(exports,"customerAccountApiCustomScalars",{enumerable:true,get:function(){return hydrogenReact.customerAccountApiCustomScalars}});Object.defineProperty(exports,"decodeEncodedVariant",{enumerable:true,get:function(){return hydrogenReact.decodeEncodedVariant}});Object.defineProperty(exports,"flattenConnection",{enumerable:true,get:function(){return hydrogenReact.flattenConnection}});Object.defineProperty(exports,"getAdjacentAndFirstAvailableVariants",{enumerable:true,get:function(){return hydrogenReact.getAdjacentAndFirstAvailableVariants}});Object.defineProperty(exports,"getClientBrowserParameters",{enumerable:true,get:function(){return hydrogenReact.getClientBrowserParameters}});Object.defineProperty(exports,"getProductOptions",{enumerable:true,get:function(){return hydrogenReact.getProductOptions}});Object.defineProperty(exports,"getShopifyCookies",{enumerable:true,get:function(){return hydrogenReact.getShopifyCookies}});Object.defineProperty(exports,"getTrackingValues",{enumerable:true,get:function(){return hydrogenReact.getTrackingValues}});Object.defineProperty(exports,"isOptionValueCombinationInEncodedVariant",{enumerable:true,get:function(){return hydrogenReact.isOptionValueCombinationInEncodedVariant}});Object.defineProperty(exports,"mapSelectedProductOptionToObject",{enumerable:true,get:function(){return hydrogenReact.mapSelectedProductOptionToObject}});Object.defineProperty(exports,"parseGid",{enumerable:true,get:function(){return hydrogenReact.parseGid}});Object.defineProperty(exports,"parseMetafield",{enumerable:true,get:function(){return hydrogenReact.parseMetafield}});Object.defineProperty(exports,"sendShopifyAnalytics",{enumerable:true,get:function(){return hydrogenReact.sendShopifyAnalytics}});Object.defineProperty(exports,"storefrontApiCustomScalars",{enumerable:true,get:function(){return hydrogenReact.storefrontApiCustomScalars}});Object.defineProperty(exports,"useLoadScript",{enumerable:true,get:function(){return hydrogenReact.useLoadScript}});Object.defineProperty(exports,"useMoney",{enumerable:true,get:function(){return hydrogenReact.useMoney}});Object.defineProperty(exports,"useSelectedOptionInUrlParam",{enumerable:true,get:function(){return hydrogenReact.useSelectedOptionInUrlParam}});Object.defineProperty(exports,"useShopifyCookies",{enumerable:true,get:function(){return hydrogenReact.useShopifyCookies}});exports.Analytics=Wn;exports.AnalyticsEvent=F;exports.CacheCustom=Nt;exports.CacheLong=kt;exports.CacheNone=Ut;exports.CacheShort=ue;exports.CartForm=J;exports.InMemoryCache=Ht;exports.NonceProvider=_o;exports.OptimisticInput=hs;exports.Pagination=vs;exports.RichText=Fs;exports.Script=ds;exports.Seo=ri;exports.ShopPayButton=ni;exports.VariantSelector=Ls;exports.cartAttributesUpdateDefault=Jt;exports.cartBuyerIdentityUpdateDefault=Kt;exports.cartCreateDefault=Gt;exports.cartDiscountCodesUpdateDefault=jt;exports.cartGetDefault=$t;exports.cartGetIdDefault=Ft;exports.cartGiftCardCodesRemoveDefault=tr;exports.cartGiftCardCodesUpdateDefault=er;exports.cartLinesAddDefault=Bt;exports.cartLinesRemoveDefault=Wt;exports.cartLinesUpdateDefault=Qt;exports.cartMetafieldDeleteDefault=Zt;exports.cartMetafieldsSetDefault=Xt;exports.cartNoteUpdateDefault=Yt;exports.cartSelectedDeliveryOptionsUpdateDefault=zt;exports.cartSetIdDefault=qt;exports.changelogHandler=Va;exports.createCartHandler=rr;exports.createContentSecurityPolicy=ss;exports.createCustomerAccountClient=ur;exports.createHydrogenContext=Za;exports.createRequestHandler=ts;exports.createStorefrontClient=yo;exports.createWithCache=na;exports.formatAPIResult=E;exports.generateCacheControlHeader=De;exports.getPaginationVariables=Ts;exports.getSelectedProductOptions=ks;exports.getSeoMeta=Ws;exports.getShopAnalytics=Bn;exports.getSitemap=ui;exports.getSitemapIndex=ci;exports.graphiqlLoader=qs;exports.hydrogenContext=Ha;exports.hydrogenPreset=Ms;exports.hydrogenRoutes=fs;exports.storefrontRedirect=$s;exports.useAnalytics=Y;exports.useCustomerPrivacy=Rt;exports.useNonce=pr;exports.useOptimisticCart=Na;exports.useOptimisticData=gs;exports.useOptimisticVariant=ws;//# sourceMappingURL=index.cjs.map
984
984
  //# sourceMappingURL=index.cjs.map