@shopify/hydrogen 2026.4.0 → 2026.4.1

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.
@@ -1,4 +1,4 @@
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'),ps=require('content-security-policy-builder');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ps__default=/*#__PURE__*/_interopDefault(ps);var un=Object.defineProperty;var Ir=(e,t)=>()=>(e&&(t=e(e=0)),t);var Tr=(e,t)=>{for(var r in t)un(e,r,{get:t[r],enumerable:true});};var Ho={};Tr(Ho,{VIRTUAL_ROUTES_DIR:()=>He,VIRTUAL_ROUTES_DIR_PARTS:()=>$o,VIRTUAL_ROUTES_ROUTES_DIR_PARTS:()=>qe,createVirtualRoutesPath:()=>Fo,getVirtualRoutesV3:()=>As});function Fo(e,t,r){let o=new URL("../",e),n=t.reduce((s,i)=>new URL(`${i}/`,s),o),a=new URL(r,n).pathname.replace(/^\/[a-zA-Z]:\//,"/");return decodeURIComponent(a)}function Fe(e,t){return Fo((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)),e,t)}async function As(){return {routes:[{id:`${He}/graphiql`,path:"graphiql",file:Fe(qe,"graphiql.jsx"),index:false},{id:`${He}/subrequest-profiler`,path:"subrequest-profiler",file:Fe(qe,"subrequest-profiler.jsx"),index:false},{id:`${He}/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json`,path:".well-known/appspecific/com.chrome.devtools.json",file:Fe(qe,"[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx"),index:false},{id:`${He}/index`,path:"",file:Fe(qe,"index.jsx"),index:true}],layout:{file:Fe($o,"layout.jsx")}}}var He,qe,$o;var rn={};Tr(rn,{default:()=>en,logSeoTags:()=>tn});function en({headTags:e}){return tn(e),null}function tn(e){console.log(" "),console.log("%cSEO Meta Tags",`${Zs}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",Pr),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,Pr),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;ei(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",Pr),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 ei(e){let o=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${ti(o)}`}function ti(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 Pr,Zs,on=Ir(()=>{Pr="text-transform: uppercase;",Zs="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:i,shop:c,customData:u}=J(),p=n.pathname+n.search,y={...r,customData:{...u,...o},cart:s,prevCart:i,shop:c};return react.useEffect(()=>{c?.shopId&&(y={...y,url:window.location.href},a(t,y));},[a,p,c?.shopId]),null}function Er(e){return jsxRuntime.jsx(le,{...e,type:"page_viewed"})}function br(e){return jsxRuntime.jsx(le,{...e,type:"product_viewed"})}function wr(e){return jsxRuntime.jsx(le,{...e,type:"collection_viewed"})}function Dr(e){return jsxRuntime.jsx(le,{...e,type:"cart_viewed"})}function xr(e){return jsxRuntime.jsx(le,{...e,type:"search_viewed"})}function Or(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 Re="Custom-Storefront-Request-Group-ID",Ie="X-Shopify-Storefront-Access-Token",St="X-SDK-Variant",Pt="X-SDK-Variant-Source",vt="X-SDK-Version",We="X-Shopify-Client-IP",fe="X-Shopify-Client-IP-Sig",je="_sfapi_proxy",Ke="_server_tracking";function ln(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:ln(t);r&&e.headers.append("Server-Timing",r);}var yn=["_y","_s","_cmp"];function _r(e){let t={};if(!e)return t;let r=new RegExp(`\\b(${yn.join("|")});desc="?([^",]+)"?`,"g"),o;for(;(o=r.exec(e))!==null;)t[o[1]]=o[2];return t}function Ur(e){if(typeof window>"u")return false;try{return !!window.performance.getEntriesByType("navigation")[0]?.serverTiming?.some(r=>r.name===e)}catch{return false}}function Lr(){return Ur(je)}function kr(){return Ur(Ke)}var An="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js",Sn="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function It(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function Tt(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,checkoutDomain:n,storefrontAccessToken:a,country:s,locale:i,sameDomainForStorefrontApi:c}=e,u=react.useMemo(()=>c??Lr(),[c]),p=react.useMemo(()=>u&&!kr(),[u]),y=hydrogenReact.useShopifyCookies({fetchTrackingValues:p,storefrontAccessToken:a,ignoreDeprecatedCookies:true}),m=react.useMemo(hydrogenReact.getTrackingValues,[y]),{revalidate:g}=reactRouter.useRevalidator();loadScript.useLoadScript(t?Sn:An,{attributes:{id:"customer-privacy-api"}});let{observing:d,setLoaded:l,apisLoaded:P}=vn({withPrivacyBanner:t}),f=react.useMemo(()=>{n||It("checkoutDomain"),a||It("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 h=Rn(n);return {checkoutRootDomain:u&&typeof window<"u"?window.location.host:n,storefrontRootDomain:h?"."+h:void 0,storefrontAccessToken:a,country:s,locale:i}},[It,n,a,s,i]);react.useEffect(()=>{let h=S=>{let C=hydrogenReact.getTrackingValues();if((m.visitToken!==C.visitToken||m.uniqueToken!==C.uniqueToken)&&g().catch(()=>{console.warn("[h2:warn:useCustomerPrivacy] Revalidation failed after consent change.");}),r){let I=oe();if(I?.shouldShowBanner()){let v=I.currentVisitorConsent();if(v&&v.marketing===""&&v.analytics===""&&v.preferences==="")return}r(S.detail);}};return document.addEventListener("visitorConsentCollected",h),()=>{document.removeEventListener("visitorConsentCollected",h);}},[r]),react.useEffect(()=>{if(!t||d.current.privacyBanner)return;d.current.privacyBanner=true;let h=window.privacyBanner||void 0;Object.defineProperty(window,"privacyBanner",{configurable:true,get(){return h},set(C){typeof C=="object"&&C!==null&&"showPreferences"in C&&"loadBanner"in C&&(h=Vr({privacyBanner:C,config:f}),l.privacyBanner());}});},[t,f,Vr,l.privacyBanner]),react.useEffect(()=>{if(d.current.customerPrivacy)return;d.current.customerPrivacy=true;let h=null,S=null,C=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return C},set(I){typeof I=="object"&&I!==null&&Object.keys(I).length===0&&(C=I,h={backendConsentEnabled:true},Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return S??h},set(v){if(typeof v=="object"&&v!==null&&"setTrackingConsent"in v){let x=v;S={...x,setTrackingConsent:Mr({customerPrivacy:x,config:f})},C={...C,customerPrivacy:S},l.customerPrivacy();}}}));}});},[f,Mr,l.customerPrivacy]),react.useEffect(()=>{if(!P||!y)return;let h=oe();if(h&&!h.cachedConsent){let S=hydrogenReact.getTrackingValues();S.consent&&(h.cachedConsent=S.consent);}if(t){let S=Ee();S&&S.loadBanner(f);}Pn(),o?.();},[P,y]);let R={customerPrivacy:oe()};return t&&(R.privacyBanner=Ee()),R}var Nr=false;function Pn(){if(Nr)return;Nr=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function vn({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 Rn(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 Mr({customerPrivacy:e,config:t}){let r=e.setTrackingConsent,{locale:o,country:n,...a}=t;function s(i,c){r({...a,headlessStorefront:true,...i},c);}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 oe(){try{let e=window.Shopify?.customerPrivacy;return e&&"setTrackingConsent"in e?e:null}catch{return null}}function Ee(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var $r="2026.4.0";function Dn(){let e=oe();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 Hr({consent:e,onReady:t,domain:r}){let{subscribe:o,register:n,canTrack:a}=J(),[s,i]=react.useState(false),[c,u]=react.useState(false),[p,y]=react.useState(""),m=react.useRef(false),{checkoutDomain:g,storefrontAccessToken:d,language:l}=e,{ready:P}=n("Internal_Shopify_Analytics");Tt({...e,locale:l,checkoutDomain:g||"mock.shop",storefrontAccessToken:d||"abcdefghijklmnopqrstuvwxyz123456",onReady:()=>!e.withPrivacyBanner&&u(true),onVisitorConsentCollected:R=>{try{y(JSON.stringify(R));}catch{}u(true);}});let f=react.useMemo(()=>c?a():true,[c,a,p]);return hydrogenReact.useShopifyCookies({hasUserConsent:f,domain:r,checkoutDomain:g,fetchTrackingValues:false,ignoreDeprecatedCookies:!c}),react.useEffect(()=>{m.current||(m.current=true,o(F.PAGE_VIEWED,On),o(F.PRODUCT_VIEWED,_n),o(F.COLLECTION_VIEWED,Un),o(F.SEARCH_VIEWED,Ln),o(F.PRODUCT_ADD_TO_CART,kn),i(true));},[o]),react.useEffect(()=>{s&&c&&(P(),t());},[s,c,t]),null}function ze(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function De(e){let t=Dn(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){ze("shopId");return}if(!e?.shop?.acceptedLanguage){ze("acceptedLanguage");return}if(!e?.shop?.currency){ze("currency");return}if(!e?.shop?.hydrogenSubchannelId){ze("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:$r,...e.shop,hasUserConsent:r,...hydrogenReact.getClientBrowserParameters(),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function xn(e,t){if(t===null)return;let r=De(e);return r?{...r,cartId:t.id}:void 0}var ne={};function On(e){let t=De(e);t&&(hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...ne}}),ne={});}function _n(e){let t=De(e);if(t&&qr({type:"product",products:e.products})){let r=bt(e.products);ne={pageType:hydrogenReact.AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...ne,products:bt(e.products)},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function Un(e){let t=De(e);t&&(ne={pageType:hydrogenReact.AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...ne,collectionHandle:e.collection.handle,collectionId:e.collection.id},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function Ln(e){let t=De(e);t&&(ne={pageType:hydrogenReact.AnalyticsPageType.search},t={...t,...ne,searchString:e.searchTerm},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.SEARCH_VIEW,payload:t}));}function kn(e){let{cart:t,currentLine:r}=e,o=xn(e,t);!o||!r?.id||Nn({matchedLine:r,eventPayload:o});}function Nn({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};qr({type:"cart",products:[r]})&&hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.ADD_TO_CART,payload:{...t,products:bt([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 qr({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 bt(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 Qr(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 Wr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:i}=J(),c=react.useRef(null);return react.useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){Qr("id");return}if(!u.updatedAt){Qr("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===i?.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:i,shop:o,customData:n};if(s.updatedAt===c.current)return;c.current=s.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let y=i?.lines?hydrogenReact.flattenConnection(i?.lines):[],m=s.lines?hydrogenReact.flattenConnection(s.lines):[];y?.forEach(g=>{let d=m.filter(l=>g.id===l.id);if(d?.length===1){let l=d[0];g.quantity<l.quantity?r("product_added_to_cart",{...p,prevLine:g,currentLine:l}):g.quantity>l.quantity&&r("product_removed_from_cart",{...p,prevLine:g,currentLine:l});}else r("product_removed_from_cart",{...p,prevLine:g});}),m?.forEach(g=>{let d=y.filter(l=>g.id===l.id);(!d||d.length===0)&&r("product_added_to_cart",{...p,currentLine:g});});},[s,i,r,o,n,a]),null}var qn="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function jr({shop:e}){let t=react.useRef(false),{subscribe:r,register:o}=J(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=hydrogenReact.useLoadScript(qn,{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 Kr=new Set,z=e=>{Kr.has(e)||(console.warn(e),Kr.add(e));},Yr=new Set,Dt=e=>{Yr.has(e)||(console.error(new Error(e)),Yr.add(e));};var jn={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},to=react.createContext(jn),Ze=new Map,Oe={};function ro(){return Object.values(Oe).every(Boolean)}function Jr(e,t){Ze.has(e)||Ze.set(e,new Map),Ze.get(e)?.set(t.toString(),t);}var et=new Map;function zr(e,t){if(!ro()){et.set(e,t);return}oo(e,t);}function oo(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 Xr(e){return Oe.hasOwnProperty(e)||(Oe[e]=false),{ready:()=>{Oe[e]=true,ro()&&et.size>0&&(et.forEach((t,r)=>{oo(r,t);}),et.clear());}}}function Zr(){try{return window.Shopify.customerPrivacy?.analyticsProcessingAllowed?.()??!1}catch{}return false}function eo(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 Kn({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let{shop:i}=Yn(a),[c,u]=react.useState(!!e),[p,y]=react.useState(false),[m,g]=react.useState({cart:null,prevCart:null}),[d,l]=react.useState(e?()=>e:()=>Zr);if(i)if(/\/68817551382$/.test(i.shopId))z("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let f=eo("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");Dt(f);}if(!o.storefrontAccessToken){let f=eo("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");Dt(f);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let P=react.useMemo(()=>({canTrack:d,...m,customData:n,publish:d()?zr:()=>{},shop:i,subscribe:Jr,register:Xr,customerPrivacy:oe(),privacyBanner:Ee()}),[c,d,m,m.cart?.updatedAt,m.prevCart,zr,Jr,n,i,Xr,JSON.stringify(Oe),oe,Ee]);return jsxRuntime.jsxs(to.Provider,{value:P,children:[r,!!i&&jsxRuntime.jsx(Er,{}),!!i&&!!t&&jsxRuntime.jsx(Wr,{cart:t,setCarts:g}),!!i&&jsxRuntime.jsx(Hr,{consent:o,onReady:()=>{u(true),l(e?()=>e:()=>Zr),y(true);},domain:s}),!!i&&p&&jsxRuntime.jsx(jr,{shop:i})]})}function J(){let e=react.useContext(to);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function Yn(e){let[t,r]=react.useState(null);return react.useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function Jn({storefront:e,publicStorefrontId:t="0"}){return e.query(zn,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var zn=`#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'),fs=require('content-security-policy-builder');var _documentCurrentScript=typeof document!=='undefined'?document.currentScript:null;function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var fs__default=/*#__PURE__*/_interopDefault(fs);var ln=Object.defineProperty;var br=(e,t)=>()=>(e&&(t=e(e=0)),t);var wr=(e,t)=>{for(var r in t)ln(e,r,{get:t[r],enumerable:true});};var Bo={};wr(Bo,{VIRTUAL_ROUTES_DIR:()=>Be,VIRTUAL_ROUTES_DIR_PARTS:()=>qo,VIRTUAL_ROUTES_ROUTES_DIR_PARTS:()=>Qe,createVirtualRoutesPath:()=>Go,getVirtualRoutesV3:()=>vs});function Go(e,t,r){let o=new URL("../",e),n=t.reduce((s,c)=>new URL(`${c}/`,s),o),a=new URL(r,n).pathname.replace(/^\/[a-zA-Z]:\//,"/");return decodeURIComponent(a)}function Ge(e,t){return Go((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)),e,t)}async function vs(){return {routes:[{id:`${Be}/graphiql`,path:"graphiql",file:Ge(Qe,"graphiql.jsx"),index:false},{id:`${Be}/subrequest-profiler`,path:"subrequest-profiler",file:Ge(Qe,"subrequest-profiler.jsx"),index:false},{id:`${Be}/[.]well-known.appspecific.com[.]chrome[.]devtools[.]json`,path:".well-known/appspecific/com.chrome.devtools.json",file:Ge(Qe,"[.]well-known.appspecific.com[.]chrome[.]devtools[.]json.jsx"),index:false},{id:`${Be}/index`,path:"",file:Ge(Qe,"index.jsx"),index:true}],layout:{file:Ge(qo,"layout.jsx")}}}var Be,Qe,qo;var an={};wr(an,{default:()=>on,logSeoTags:()=>nn});function on({headTags:e}){return nn(e),null}function nn(e){console.log(" "),console.log("%cSEO Meta Tags",`${ri}`),console.log(" "),e.forEach(t=>{if(t.tag==="script"){if(console.log("%c\u2022 JSON LD ",Ir),t.children)try{console.table(JSON.parse(t.children),["name","content"]);}catch{console.log(t.children);}}else {if(console.log(`%c\u2022 ${t.tag} `,Ir),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;oi(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",Ir),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 oi(e){let o=await(await(await fetch(e)).blob()).arrayBuffer();return `data:image/png;base64,${ni(o)}`}function ni(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 Ir,ri,sn=br(()=>{Ir="text-transform: uppercase;",ri="text-transform: uppercase; font-weight: bold; text-transform: uppercase;font-weight: bold";});function me(e){let{type:t,data:r={},customData:o}=e,n=reactRouter.useLocation(),{publish:a,cart:s,prevCart:c,shop:i,customData:u}=Z(),d=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,d,i?.shopId]),null}function Dr(e){return jsxRuntime.jsx(me,{...e,type:"page_viewed"})}function xr(e){return jsxRuntime.jsx(me,{...e,type:"product_viewed"})}function Or(e){return jsxRuntime.jsx(me,{...e,type:"collection_viewed"})}function _r(e){return jsxRuntime.jsx(me,{...e,type:"cart_viewed"})}function Ur(e){return jsxRuntime.jsx(me,{...e,type:"search_viewed"})}function Lr(e){return jsxRuntime.jsx(me,{...e})}var G={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 Ee="Custom-Storefront-Request-Group-ID",be="X-Shopify-Storefront-Access-Token",Rt="X-SDK-Variant",It="X-SDK-Variant-Source",Tt="X-SDK-Version",Ye="X-Shopify-Client-IP",Ce="X-Shopify-Client-IP-Sig",Je="_sfapi_proxy",ze="_server_tracking";function mn(e){return Object.entries(e).map(([t,r])=>r?`${t};desc=${r}`:void 0).filter(Boolean).join(", ")}function we(e,t){let r=typeof t=="string"?t:mn(t);r&&e.headers.append("Server-Timing",r);}var gn=["_y","_s","_cmp"];function kr(e){let t={};if(!e)return t;let r=new RegExp(`\\b(${gn.join("|")});desc="?([^",]+)"?`,"g"),o;for(;(o=r.exec(e))!==null;)t[o[1]]=o[2];return t}function Vr(e){if(typeof window>"u")return false;try{return !!window.performance.getEntriesByType("navigation")[0]?.serverTiming?.some(r=>r.name===e)}catch{return false}}function Nr(){return Vr(Je)}function Mr(){return Vr(ze)}var vn="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js",Rn="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function bt(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function wt(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,checkoutDomain:n,storefrontAccessToken:a,country:s,locale:c,sameDomainForStorefrontApi:i}=e,u=react.useMemo(()=>i??Nr(),[i]),d=react.useMemo(()=>u&&!Mr(),[u]),y=hydrogenReact.useShopifyCookies({fetchTrackingValues:d,storefrontAccessToken:a,ignoreDeprecatedCookies:true}),m=react.useMemo(hydrogenReact.getTrackingValues,[y]),{revalidate:g}=reactRouter.useRevalidator();loadScript.useLoadScript(t?Rn:vn,{attributes:{id:"customer-privacy-api"}});let{observing:p,setLoaded:l,apisLoaded:P}=Tn({withPrivacyBanner:t}),f=react.useMemo(()=>{n||bt("checkoutDomain"),a||bt("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 h=En(n);return {checkoutRootDomain:u&&typeof window<"u"?window.location.host:n,storefrontRootDomain:h?"."+h:void 0,storefrontAccessToken:a,country:s,locale:c}},[bt,n,a,s,c]);react.useEffect(()=>{let h=S=>{let C=hydrogenReact.getTrackingValues();if((m.visitToken!==C.visitToken||m.uniqueToken!==C.uniqueToken)&&g().catch(()=>{console.warn("[h2:warn:useCustomerPrivacy] Revalidation failed after consent change.");}),r){let I=se();if(I?.shouldShowBanner()){let v=I.currentVisitorConsent();if(v&&v.marketing===""&&v.analytics===""&&v.preferences==="")return}r(S.detail);}};return document.addEventListener("visitorConsentCollected",h),()=>{document.removeEventListener("visitorConsentCollected",h);}},[r]),react.useEffect(()=>{if(!t||p.current.privacyBanner)return;p.current.privacyBanner=true;let h=window.privacyBanner||void 0;Object.defineProperty(window,"privacyBanner",{configurable:true,get(){return h},set(C){typeof C=="object"&&C!==null&&"showPreferences"in C&&"loadBanner"in C&&(h=$r({privacyBanner:C,config:f}),l.privacyBanner());}});},[t,f,$r,l.privacyBanner]),react.useEffect(()=>{if(p.current.customerPrivacy)return;p.current.customerPrivacy=true;let h=null,S=null,C=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return C},set(I){typeof I=="object"&&I!==null&&Object.keys(I).length===0&&(C=I,h={backendConsentEnabled:true},Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return S??h},set(v){if(typeof v=="object"&&v!==null&&"setTrackingConsent"in v){let U=v;S={...U,setTrackingConsent:Hr({customerPrivacy:U,config:f})},C={...C,customerPrivacy:S},l.customerPrivacy();}}}));}});},[f,Hr,l.customerPrivacy]),react.useEffect(()=>{if(!P||!y)return;let h=se();if(h&&!h.cachedConsent){let S=hydrogenReact.getTrackingValues();S.consent&&(h.cachedConsent=S.consent);}if(t){let S=De();S&&S.loadBanner(f);}In(),o?.();},[P,y]);let R={customerPrivacy:se()};return t&&(R.privacyBanner=De()),R}var Fr=false;function In(){if(Fr)return;Fr=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function Tn({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 En(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 Hr({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 $r({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 se(){try{let e=window.Shopify?.customerPrivacy;return e&&"setTrackingConsent"in e?e:null}catch{return null}}function De(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var qr="2026.4.1";function _n(){let e=se();if(!e)throw new Error("Shopify Customer Privacy API not available. Must be used within a useEffect. Make sure to load the Shopify Customer Privacy API with useCustomerPrivacy() or <AnalyticsProvider>.");return e}function Br({consent:e,onReady:t,domain:r}){let{subscribe:o,register:n,canTrack:a}=Z(),[s,c]=react.useState(false),[i,u]=react.useState(false),[d,y]=react.useState(""),m=react.useRef(false),{checkoutDomain:g,storefrontAccessToken:p,language:l}=e,{ready:P}=n("Internal_Shopify_Analytics");wt({...e,locale:l,checkoutDomain:g||"mock.shop",storefrontAccessToken:p||"abcdefghijklmnopqrstuvwxyz123456",onReady:()=>!e.withPrivacyBanner&&u(true),onVisitorConsentCollected:R=>{try{y(JSON.stringify(R));}catch{}u(true);}});let f=react.useMemo(()=>i?a():true,[i,a,d]);return hydrogenReact.useShopifyCookies({hasUserConsent:f,domain:r,checkoutDomain:g,fetchTrackingValues:false,ignoreDeprecatedCookies:!i}),react.useEffect(()=>{m.current||(m.current=true,o(G.PAGE_VIEWED,Ln),o(G.PRODUCT_VIEWED,kn),o(G.COLLECTION_VIEWED,Vn),o(G.SEARCH_VIEWED,Nn),o(G.PRODUCT_ADD_TO_CART,Mn),c(true));},[o]),react.useEffect(()=>{s&&i&&(P(),t());},[s,i,t]),null}function et(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function _e(e){let t=_n(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){et("shopId");return}if(!e?.shop?.acceptedLanguage){et("acceptedLanguage");return}if(!e?.shop?.currency){et("currency");return}if(!e?.shop?.hydrogenSubchannelId){et("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:qr,...e.shop,hasUserConsent:r,...hydrogenReact.getClientBrowserParameters(),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function Un(e,t){if(t===null)return;let r=_e(e);return r?{...r,cartId:t.id}:void 0}var ie={};function Ln(e){let t=_e(e);t&&(hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...ie}}),ie={});}function kn(e){let t=_e(e);if(t&&Qr({type:"product",products:e.products})){let r=xt(e.products);ie={pageType:hydrogenReact.AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...ie,products:xt(e.products)},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function Vn(e){let t=_e(e);t&&(ie={pageType:hydrogenReact.AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...ie,collectionHandle:e.collection.handle,collectionId:e.collection.id},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function Nn(e){let t=_e(e);t&&(ie={pageType:hydrogenReact.AnalyticsPageType.search},t={...t,...ie,searchString:e.searchTerm},hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.SEARCH_VIEW,payload:t}));}function Mn(e){let{cart:t,currentLine:r}=e,o=Un(e,t);!o||!r?.id||Fn({matchedLine:r,eventPayload:o});}function Fn({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};Qr({type:"cart",products:[r]})&&hydrogenReact.sendShopifyAnalytics({eventName:hydrogenReact.AnalyticsEventName.ADD_TO_CART,payload:{...t,products:xt([r])}});}function pe(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 Qr({type:e,products:t}){return !t||t.length===0?(pe(e,"",false,"data.products"),false):(t.forEach(r=>{if(!r.id)return pe(e,"id",false),false;if(!r.title)return pe(e,"title",false),false;if(!r.price)return pe(e,"price.amount",true,"price"),false;if(!r.vendor)return pe(e,"vendor",false),false;if(!r.variantId)return pe(e,"id",true,"variantId"),false;if(!r.variantTitle)return pe(e,"title",true,"variantTitle"),false}),true)}function xt(e){return e.map(t=>{let r={productGid:t.id,variantGid:t.variantId,name:t.title,variantName:t.variantTitle,brand:t.vendor,price:t.price,quantity:t.quantity||1,category:t.productType};return t.sku&&(r.sku=t.sku),t.productType&&(r.category=t.productType),r})}function Kr(e){console.error(`[h2:error:CartAnalytics] 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 Yr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:c}=Z(),i=react.useRef(null);return react.useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){Kr("id");return}if(!u.updatedAt){Kr("updatedAt");return}}t(({cart:d,prevCart:y})=>u?.updatedAt!==d?.updatedAt?{cart:u,prevCart:d}:{cart:d,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 d={eventTimestamp:Date.now(),cart:s,prevCart:c,shop:o,customData:n};if(s.updatedAt===i.current)return;i.current=s.updatedAt,r("cart_updated",d),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let y=c?.lines?hydrogenReact.flattenConnection(c?.lines):[],m=s.lines?hydrogenReact.flattenConnection(s.lines):[];y?.forEach(g=>{let p=m.filter(l=>g.id===l.id);if(p?.length===1){let l=p[0];g.quantity<l.quantity?r("product_added_to_cart",{...d,prevLine:g,currentLine:l}):g.quantity>l.quantity&&r("product_removed_from_cart",{...d,prevLine:g,currentLine:l});}else r("product_removed_from_cart",{...d,prevLine:g});}),m?.forEach(g=>{let p=y.filter(l=>g.id===l.id);(!p||p.length===0)&&r("product_added_to_cart",{...d,currentLine:g});});},[s,c,r,o,n,a]),null}var Qn="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function Jr({shop:e}){let t=react.useRef(false),{subscribe:r,register:o}=Z(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=hydrogenReact.useLoadScript(Qn,{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(G.PAGE_VIEWED,()=>{window.PerfKit?.navigate();}),r(G.PRODUCT_VIEWED,()=>{window.PerfKit?.setPageType("product");}),r(G.COLLECTION_VIEWED,()=>{window.PerfKit?.setPageType("collection");}),r(G.SEARCH_VIEWED,()=>{window.PerfKit?.setPageType("search");}),r(G.CART_VIEWED,()=>{window.PerfKit?.setPageType("cart");}),n());},[r,n,a]),null}var zr=new Set,ee=e=>{zr.has(e)||(console.warn(e),zr.add(e));},Xr=new Set,_t=e=>{Xr.has(e)||(console.error(new Error(e)),Xr.add(e));};var Jn={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},no=react.createContext(Jn),rt=new Map,Le={};function ao(){return Object.values(Le).every(Boolean)}function Zr(e,t){rt.has(e)||rt.set(e,new Map),rt.get(e)?.set(t.toString(),t);}var ot=new Map;function eo(e,t){if(!ao()){ot.set(e,t);return}so(e,t);}function so(e,t){(rt.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 to(e){return Le.hasOwnProperty(e)||(Le[e]=false),{ready:()=>{Le[e]=true,ao()&&ot.size>0&&(ot.forEach((t,r)=>{so(r,t);}),ot.clear());}}}function ro(){try{return window.Shopify.customerPrivacy?.analyticsProcessingAllowed?.()??!1}catch{}return false}function oo(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 zn({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let{shop:c}=Xn(a),[i,u]=react.useState(!!e),[d,y]=react.useState(false),[m,g]=react.useState({cart:null,prevCart:null}),[p,l]=react.useState(e?()=>e:()=>ro);if(c)if(/\/68817551382$/.test(c.shopId))ee("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let f=oo("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");_t(f);}if(!o.storefrontAccessToken){let f=oo("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");_t(f);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let P=react.useMemo(()=>({canTrack:p,...m,customData:n,publish:p()?eo:()=>{},shop:c,subscribe:Zr,register:to,customerPrivacy:se(),privacyBanner:De()}),[i,p,m,m.cart?.updatedAt,m.prevCart,eo,Zr,n,c,to,JSON.stringify(Le),se,De]);return jsxRuntime.jsxs(no.Provider,{value:P,children:[r,!!c&&jsxRuntime.jsx(Dr,{}),!!c&&!!t&&jsxRuntime.jsx(Yr,{cart:t,setCarts:g}),!!c&&jsxRuntime.jsx(Br,{consent:o,onReady:()=>{u(true),l(e?()=>e:()=>ro),y(true);},domain:s}),!!c&&d&&jsxRuntime.jsx(Jr,{shop:c})]})}function Z(){let e=react.useContext(no);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function Xn(e){let[t,r]=react.useState(null);return react.useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function Zn({storefront:e,publicStorefrontId:t="0"}){return e.query(ea,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var ea=`#graphql
2
2
  query ShopData(
3
3
  $country: CountryCode
4
4
  $language: LanguageCode
@@ -17,29 +17,29 @@
17
17
  }
18
18
  }
19
19
  }
20
- `,Xn={CartView:Dr,CollectionView:wr,CustomView:Or,ProductView:br,Provider:Kn,SearchView:xr};function W(e,t){return xt(e.headers,t)}function xt(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function ae(e){return {requestId:e?W(e,"request-id"):void 0,purpose:e?W(e,"purpose"):void 0}}function no(e){return {requestGroupId:W(e,"request-id"),buyerIp:W(e,"oxygen-buyer-ip"),buyerIpSig:W(e,fe),cookie:W(e,"cookie"),purpose:W(e,"sec-purpose")||W(e,"purpose")}}var Ot=/^\/api\/(unstable|2\d{3}-\d{2})\/graphql\.json$/,ao=/^\/api\/mcp$/,tt=e=>{try{return new URL(e,"http://e.c").pathname}catch{return "/"}};function _e(e,t){return t.reduce((r,o)=>{let n=e(o);return n&&r.push([o,n]),r},[])}function me(e,t={}){let r=new Error,o=(n,a="Error")=>{let s=(r.stack??"").split(`
20
+ `,ta={CartView:_r,CollectionView:Or,CustomView:Lr,ProductView:xr,Provider:zn,SearchView:Ur};function Y(e,t){return Ut(e.headers,t)}function Ut(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function ce(e){return {requestId:e?Y(e,"request-id"):void 0,purpose:e?Y(e,"purpose"):void 0}}function io(e){return {requestGroupId:Y(e,"request-id"),buyerIp:Y(e,"oxygen-buyer-ip"),buyerIpSig:Y(e,Ce),cookie:Y(e,"cookie"),purpose:Y(e,"sec-purpose")||Y(e,"purpose")}}var Lt=/^\/api\/(unstable|2\d{3}-\d{2})\/graphql\.json$/,co=/^\/api\/mcp$/,nt=e=>{try{return new URL(e,"http://e.c").pathname}catch{return "/"}};function ke(e,t){return t.reduce((r,o)=>{let n=e(o);return n&&r.push([o,n]),r},[])}function he(e,t={}){let r=new Error,o=(n,a="Error")=>{let s=(r.stack??"").split(`
21
21
  `).slice(3+(t.stackOffset??0)).join(`
22
- `).replace(/ at loader(\d+) \(/,(i,c)=>i.replace(c,""));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 j=void 0;var rt="public",ea="private",_t="no-store",so={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function Ue(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):so[r]&&t.push(`${so[r]}=${e[r]}`);}),t.join(", ")}function Ut(){return {mode:_t}}function Lt(e){if(e?.mode&&e?.mode!==rt&&e?.mode!==ea)throw Error("'mode' must be either 'public' or 'private'")}function ue(e){return Lt(e),{mode:rt,maxAge:1,staleWhileRevalidate:9,...e}}function kt(e){return Lt(e),{mode:rt,maxAge:3600,staleWhileRevalidate:82800,...e}}function ge(e){return Lt(e),{mode:rt,maxAge:1,staleWhileRevalidate:86399,...e}}function Nt(e){return e}function X(e){return String(e).includes("__proto__")?JSON.parse(e,ta):JSON.parse(e)}function ta(e,t){if(e!=="__proto__")return t}function ot(e,t){return e&&t?{...e,...t}:e||ge()}function Mt(e){return Ue(ot(e))}async function ra(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function oa(e,t,r,o){if(!e)return;let n=ot(o),a=Mt(ot(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=Mt(ot(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 na(e,t){e&&await e.delete(t);}function aa(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 sa(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=aa(t,r),a=o>n;return a}var nt={get:ra,set:oa,delete:na,generateDefaultCacheControlHeader:Mt,isStale:sa};function Le(e){return `https://shopify.dev/?${e}`}function ia(e){return e||ge()}async function io(e,t){if(!e)return;let r=Le(t),o=new Request(r),n=await nt.get(e,o);if(!n)return;let a=await n.text();try{return [X(a),n]}catch{return [a,n]}}async function co(e,t,r,o){if(!e)return;let n=Le(t),a=new Request(n),s=new Response(JSON.stringify(r));await nt.set(e,a,s,ia(o));}function uo(e,t){return nt.isStale(new Request(Le(e)),t)}function po(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 at(e,t,{strategy:r=ue(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let c=po([...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()||[])}});},g=void 0;if(!o||!r||r.mode===_t){let f=await t({addDebugData:y});return f}let d=f=>co(o,c,{value:f,debugInfo:void 0},r),l=await io(o,c);if(l&&typeof l[0]!="string"){let[{value:f,debugInfo:R},h]=l;let S=uo(c,h)?"STALE":"HIT";if(!Vt.has(c)&&S==="STALE"){Vt.add(c);let C=Promise.resolve().then(async()=>{let I=Date.now();try{let v=await t({addDebugData:y});n(v)&&(await d(v),g?.({result:v,cacheStatus:"PUT",overrideStartTime:I}));}catch(v){v.message&&(v.message="SWR in sub-request failed: "+v.message),console.error(v);}finally{Vt.delete(c);}});a?.(C);}return f}let P=await t({addDebugData:y});if(n(P)){let f=Promise.resolve().then(async()=>{await d(P);});a?.(f);}return P}var ua=["set-cookie","server-timing"];function lo(e,t){return [e,{status:t.status,statusText:t.statusText,headers:[...t.headers].filter(([r])=>!ua.includes(r.toLowerCase()))}]}function yo([e,t]){return [e,new Response(e,t)]}async function st(e,t,{cacheInstance:r,cache:o,cacheKey:n=[e,t],shouldCacheResponse:a,waitUntil:s,debugInfo:i,streamConfig:c,onRawHeaders:u}){return !o&&(!t.method||t.method==="GET")&&(o=ue()),at(n,async()=>{if(c){let m=null,d=await graphqlClient.createGraphQLClient({url:e,customFetchApi:async(f,R)=>(m=await fetch(f,R),u?.(m.headers),m),headers:t.headers}).requestStream(c.query,{variables:c.variables}),l,P;for await(let f of d){let{data:R,errors:h}=f;l=R,P=h?.graphQLErrors??h;}return m?.ok?lo({data:l,errors:P},m):m}let p=await fetch(e,t);if(u?.(p.headers),!p.ok)return p;let y=await p.text().catch(()=>"");try{y&&(y=X(y));}catch{}return lo(y,p)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:i,shouldCacheResult:p=>"ok"in p?!1:a(...yo(p))}).then(p=>"ok"in p?[null,p]:yo(p))}function da(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},i)=>at(n,i,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...ae(o),stackInfo:j?.()}}),fetch:(n,a,s)=>st(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...ae(o),stackInfo:j?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([i,c])=>({data:i,response:c}))}}var $t=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),i=s.get("cache-control")||s.get("real-cache-control")||"",c=parseInt(i.match(/max-age=(\d+)/)?.[1]||"0",10),u=parseInt(i.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-n)/1e3;if(p>c+u){this.#e.delete(t.url);return}let m=p>c;return s.set("cache",m?"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 fo="cartFormInput";function Z({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:fo,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}Z.INPUT_NAME=fo;Z.ACTIONS={AttributesUpdateInput:"AttributesUpdateInput",BuyerIdentityUpdate:"BuyerIdentityUpdate",Create:"Create",DiscountCodesUpdate:"DiscountCodesUpdate",GiftCardCodesUpdate:"GiftCardCodesUpdate",GiftCardCodesAdd:"GiftCardCodesAdd",GiftCardCodesRemove:"GiftCardCodesRemove",LinesAdd:"LinesAdd",LinesRemove:"LinesRemove",LinesUpdate:"LinesUpdate",NoteUpdate:"NoteUpdate",SelectedDeliveryOptionsUpdate:"SelectedDeliveryOptionsUpdate",MetafieldsSet:"MetafieldsSet",MetafieldDelete:"MetafieldDelete",DeliveryAddressesAdd:"DeliveryAddressesAdd",DeliveryAddressesUpdate:"DeliveryAddressesUpdate",DeliveryAddressesRemove:"DeliveryAddressesRemove",DeliveryAddressesReplace:"DeliveryAddressesReplace"};function la(e){let t={};for(let s of e.entries()){let i=s[0],c=e.getAll(i);t[i]=c.length>1?c:s[1],t[i]==="on"?t[i]=true:t[i]==="off"&&(t[i]=false);}let{cartFormInput:r,...o}=t,{action:n,inputs:a}=r?JSON.parse(String(r)):{};return {action:n,inputs:{...a,...o}}}Z.getFormInput=la;var Ft=e=>{let t=cookie.parse(xt(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var Ht=e=>t=>{let r=new Headers;return r.append("Set-Cookie",cookie.stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function it(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var ke="2026.4.0";function Ce(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Ca=/(^|}\s)query[\s({]/im,ha=/(^|}\s)mutation[\s({]/im;function ct(e,t){if(!Ca.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function ut(e,t){if(!ha.test(e))throw new Error(`[h2:error:${t}] Can only execute mutations`)}var de=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+=`
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 J=void 0;var at="public",oa="private",kt="no-store",uo={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function Ve(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):uo[r]&&t.push(`${uo[r]}=${e[r]}`);}),t.join(", ")}function Vt(){return {mode:kt}}function Nt(e){if(e?.mode&&e?.mode!==at&&e?.mode!==oa)throw Error("'mode' must be either 'public' or 'private'")}function le(e){return Nt(e),{mode:at,maxAge:1,staleWhileRevalidate:9,...e}}function Mt(e){return Nt(e),{mode:at,maxAge:3600,staleWhileRevalidate:82800,...e}}function Ae(e){return Nt(e),{mode:at,maxAge:1,staleWhileRevalidate:86399,...e}}function Ft(e){return e}function te(e){return String(e).includes("__proto__")?JSON.parse(e,na):JSON.parse(e)}function na(e,t){if(e!=="__proto__")return t}function st(e,t){return e&&t?{...e,...t}:e||Ae()}function Ht(e){return Ve(st(e))}async function aa(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function sa(e,t,r,o){if(!e)return;let n=st(o),a=Ht(st(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=Ht(st(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 ia(e,t){e&&await e.delete(t);}function ca(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 ua(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=ca(t,r),a=o>n;return a}var it={get:aa,set:sa,delete:ia,generateDefaultCacheControlHeader:Ht,isStale:ua};function Ne(e){return `https://shopify.dev/?${e}`}function da(e){return e||Ae()}async function po(e,t){if(!e)return;let r=Ne(t),o=new Request(r),n=await it.get(e,o);if(!n)return;let a=await n.text();try{return [te(a),n]}catch{return [a,n]}}async function lo(e,t,r,o){if(!e)return;let n=Ne(t),a=new Request(n),s=new Response(JSON.stringify(r));await it.set(e,a,s,da(o));}function yo(e,t){return it.isStale(new Request(Ne(e)),t)}function fo(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 $t=new Set;async function ct(e,t,{strategy:r=le(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let i=fo([...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()||[])}});},g=void 0;if(!o||!r||r.mode===kt){let f=await t({addDebugData:y});return f}let p=f=>lo(o,i,{value:f,debugInfo:void 0},r),l=await po(o,i);if(l&&typeof l[0]!="string"){let[{value:f,debugInfo:R},h]=l;let S=yo(i,h)?"STALE":"HIT";if(!$t.has(i)&&S==="STALE"){$t.add(i);let C=Promise.resolve().then(async()=>{let I=Date.now();try{let v=await t({addDebugData:y});n(v)&&(await p(v),g?.({result:v,cacheStatus:"PUT",overrideStartTime:I}));}catch(v){v.message&&(v.message="SWR in sub-request failed: "+v.message),console.error(v);}finally{$t.delete(i);}});a?.(C);}return f}let P=await t({addDebugData:y});if(n(P)){let f=Promise.resolve().then(async()=>{await p(P);});a?.(f);}return P}var la=["set-cookie","server-timing"];function mo(e,t){return [e,{status:t.status,statusText:t.statusText,headers:[...t.headers].filter(([r])=>!la.includes(r.toLowerCase()))}]}function go([e,t]){return [e,new Response(e,t)]}async function ut(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=le()),ct(n,async()=>{if(i){let m=null,p=await graphqlClient.createGraphQLClient({url:e,customFetchApi:async(f,R)=>(m=await fetch(f,R),u?.(m.headers),m),headers:t.headers}).requestStream(i.query,{variables:i.variables}),l,P;for await(let f of p){let{data:R,errors:h}=f;l=R,P=h?.graphQLErrors??h;}return m?.ok?mo({data:l,errors:P},m):m}let d=await fetch(e,t);if(u?.(d.headers),!d.ok)return d;let y=await d.text().catch(()=>"");try{y&&(y=te(y));}catch{}return mo(y,d)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:c,shouldCacheResult:d=>"ok"in d?!1:a(...go(d))}).then(d=>"ok"in d?[null,d]:go(d))}function ya(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},c)=>ct(n,c,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...ce(o),stackInfo:J?.()}}),fetch:(n,a,s)=>ut(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...ce(o),stackInfo:J?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([c,i])=>({data:c,response:i}))}}var qt=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),d=(Date.now()-n)/1e3;if(d>i+u){this.#e.delete(t.url);return}let m=d>i;return s.set("cache",m?"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 Co="cartFormInput";function re({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:Co,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}re.INPUT_NAME=Co;re.ACTIONS={AttributesUpdateInput:"AttributesUpdateInput",BuyerIdentityUpdate:"BuyerIdentityUpdate",Create:"Create",DiscountCodesUpdate:"DiscountCodesUpdate",GiftCardCodesUpdate:"GiftCardCodesUpdate",GiftCardCodesAdd:"GiftCardCodesAdd",GiftCardCodesRemove:"GiftCardCodesRemove",LinesAdd:"LinesAdd",LinesRemove:"LinesRemove",LinesUpdate:"LinesUpdate",NoteUpdate:"NoteUpdate",SelectedDeliveryOptionsUpdate:"SelectedDeliveryOptionsUpdate",MetafieldsSet:"MetafieldsSet",MetafieldDelete:"MetafieldDelete",DeliveryAddressesAdd:"DeliveryAddressesAdd",DeliveryAddressesUpdate:"DeliveryAddressesUpdate",DeliveryAddressesRemove:"DeliveryAddressesRemove",DeliveryAddressesReplace:"DeliveryAddressesReplace"};function ma(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}}}re.getFormInput=ma;var Gt=e=>{let t=cookie.parse(Ut(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var Bt=e=>t=>{let r=new Headers;return r.append("Set-Cookie",cookie.stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function dt(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var Me="2026.4.1";function Se(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Sa=/(^|}\s)query[\s({]/im,Pa=/(^|}\s)mutation[\s({]/im;function pt(e,t){if(!Sa.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function lt(e,t){if(!Pa.test(e))throw new Error(`[h2:error:${t}] Can only execute mutations`)}var ye=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 Ne({url:e,response:t,errors:r,type:o,query:n,queryVariables:a,ErrorConstructor:s=Error,client:i="storefront"}){let c=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
26
+ `),t}toJSON(){return {name:"Error",message:""}}};function Fe({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?.(d=>d.message).join(`
27
27
  `))||`URL: ${e}
28
- API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{errors:r},clientOperation:`${i}.${o}`,requestId:t.headers.get("x-request-id")});throw new s(u.message,{cause:u.cause})}var va={language:"EN",country:"US"};function ho(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...i}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getStorefrontApiUrl:y,getShopifyDomain:m}=hydrogenReact.createStorefrontClient(i),d=(i.privateStorefrontToken?p:u)({contentType:"json",buyerIp:t?.buyerIp||""});t?.buyerIp&&(d[We]=t.buyerIp),t?.buyerIpSig&&(d[fe]=t.buyerIpSig),d[Re]=t?.requestGroupId||it(),a&&(d[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=a),(d["user-agent"]=`Hydrogen ${ke}`);let l=t?.cookie??"";l&&(d.cookie=l);let P,f;if(!/\b_shopify_(analytics|marketing)=/.test(l)){let C=l.match(/\b_shopify_y=([^;]+)/)?.[1],I=l.match(/\b_shopify_s=([^;]+)/)?.[1];C&&(d[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=C),I&&(d[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=I),P=C??it(),f=I??it(),d[hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER]=P,d[hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]=f;}let R,h=JSON.stringify({"content-type":d["content-type"],"user-agent":d["user-agent"],[St]:d[St],[Pt]:d[Pt],[vt]:d[vt],[Ie]:d[Ie]});async function S({query:C,mutation:I,variables:v,cache:x,headers:U=[],storefrontApiVersion:G,displayName:Ct,stackInfo:ht}){let Qe=U instanceof Headers?Object.fromEntries(U.entries()):Array.isArray(U)?Object.fromEntries(U):U,Q=C??I,A={...v};n&&(!v?.country&&/\$country/.test(Q)&&(A.country=n.country),!v?.language&&/\$language/.test(Q)&&(A.language=n.language));let E=y({storefrontApiVersion:G}),_=JSON.stringify({query:Q,variables:A}),O={method:"POST",headers:{...d,...Qe},body:_},q=[E,O.method,h,O.body],re=Q.includes("@defer")?{query:Q,variables:A}:void 0,[V,B]=await st(E,O,{cacheInstance:I?void 0:r,cache:x||ge(),cacheKey:q,waitUntil:o,shouldCacheResponse:k=>!k?.errors,debugInfo:{requestId:O.headers[Re],displayName:Ct,url:E,stackInfo:ht,graphql:_,purpose:t?.purpose},streamConfig:re,onRawHeaders:k=>{R??={setCookie:k.getSetCookie(),serverTiming:k.get("server-timing")??""};}}),K={url:E,response:B,type:I?"mutation":"query",query:Q,queryVariables:A,errors:void 0};if(!B.ok){let k,Y=V;try{Y??=await B.text(),k=X(Y);}catch{k=[{message:Y??"Could not parse Storefront API response"}];}Ne({...K,errors:k});}let{data:L,errors:$}=V;$=$?Array.isArray($)?$:[$]:void 0;let ve=$?.map(({message:k,...Y})=>new de(k,{...Y,clientOperation:`storefront.${K.type}`,requestId:B.headers.get("x-request-id"),queryVariables:A,query:Q}));return T(L,ve)}return {storefront:{query(C,I){C=Ce(C),ct(C,"storefront.query");let v=Co?.(C);return me(S({...I,query:C,stackInfo:j?.(v)}),{stackOffset:v,logErrors:s})},mutate(C,I){C=Ce(C),ut(C,"storefront.mutate");let v=Co?.(C);return me(S({...I,mutation:C,stackInfo:j?.(v)}),{stackOffset:v,logErrors:s})},cache:r,CacheNone:Ut,CacheLong:kt,CacheShort:ue,CacheCustom:Nt,generateCacheControlHeader:Ue,getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getHeaders:()=>({...d}),getShopifyDomain:m,getApiUrl:y,i18n:n??va,isStorefrontApiUrl(C){return Ot.test(tt(C.url??""))},async forward(C,I){let v=new Headers([..._e(G=>C.headers.get(G),["accept","accept-encoding","accept-language","access-control-request-headers","access-control-request-method","content-type","content-length","cookie","origin","referer","user-agent",Ie,hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER,hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]),..._e(G=>d[G],[We,fe,hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER,Re])]);t?.buyerIp&&v.set("x-forwarded-for",t.buyerIp);let x=I?.storefrontApiVersion??tt(C.url).match(Ot)?.[1],U=await fetch(y({storefrontApiVersion:x}),{method:C.method,body:C.body,headers:v});return new Response(U.body,U)},isMcpUrl(C){return ao.test(tt(C.url??""))},async forwardMcp(C){let I=new Headers([..._e(x=>C.headers.get(x),["accept","accept-encoding","accept-language","content-type","cookie","origin","referer","user-agent"]),..._e(x=>d[x],[We,fe,Ie,Re,hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER])]);t?.buyerIp&&I.set("x-forwarded-for",t.buyerIp);let v=`${m()}/api/mcp`;try{let x=await fetch(v,{method:C.method,body:C.body,headers:I});return new Response(x.body,x)}catch(x){let G=x instanceof Error?x.message:"Internal proxy error";return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32603,message:G},id:null}),{status:502,headers:{"content-type":"application/json"}})}},setCollectedSubrequestHeaders:C=>{if(R)for(let U of R.setCookie)C.headers.append("Set-Cookie",U);let I=_r(R?.serverTiming),v=C.headers.get("content-type")?.startsWith("text/html");Te(C,{...v?{_y:P,_s:f}:void 0,...I}),v&&R&&R.setCookie.length>1&&I?._y&&I?._s&&I?._cmp&&Te(C,{[Ke]:"1"});}}}}var Co=void 0;function T(e,t){return {...e,...t&&{errors:t}}}function Gt({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let[s,{cart:i,errors:c}]=await Promise.all([t?t.isLoggedIn():false,e.query(Ra(o),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(s&&i?.checkoutUrl){let u=new URL(i.checkoutUrl);u.searchParams.set("logged_in","true"),i.checkoutUrl=u.toString();}return i||c?T(i,c):null}}var Ra=(e=Ia)=>`#graphql
28
+ API response error: ${t.status}`,u=new ye(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 Po(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...c}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:d,getStorefrontApiUrl:y,getShopifyDomain:m}=hydrogenReact.createStorefrontClient(c),p=(c.privateStorefrontToken?d:u)({contentType:"json",buyerIp:t?.buyerIp||""});t?.buyerIp&&(p[Ye]=t.buyerIp),t?.buyerIpSig&&(p[Ce]=t.buyerIpSig),p[Ee]=t?.requestGroupId||dt(),a&&(p[hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER]=a),(p["user-agent"]=`Hydrogen ${Me}`);let l=t?.cookie??"";l&&(p.cookie=l);let P,f;if(!/\b_shopify_(analytics|marketing)=/.test(l)){let C=l.match(/\b_shopify_y=([^;]+)/)?.[1],I=l.match(/\b_shopify_s=([^;]+)/)?.[1];C&&(p[hydrogenReact.SHOPIFY_STOREFRONT_Y_HEADER]=C),I&&(p[hydrogenReact.SHOPIFY_STOREFRONT_S_HEADER]=I),P=C??dt(),f=I??dt(),p[hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER]=P,p[hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]=f;}let R,h=JSON.stringify({"content-type":p["content-type"],"user-agent":p["user-agent"],[Rt]:p[Rt],[It]:p[It],[Tt]:p[Tt],[be]:p[be]});async function S({query:C,mutation:I,variables:v,cache:U,headers:V=[],storefrontApiVersion:W,displayName:St,stackInfo:Pt}){let Ke=V instanceof Headers?Object.fromEntries(V.entries()):Array.isArray(V)?Object.fromEntries(V):V,K=C??I,A={...v};n&&(!v?.country&&/\$country/.test(K)&&(A.country=n.country),!v?.language&&/\$language/.test(K)&&(A.language=n.language));let E=y({storefrontApiVersion:W}),k=JSON.stringify({query:K,variables:A}),L={method:"POST",headers:{...p,...Ke},body:k},Q=[E,L.method,h,L.body],ae=K.includes("@defer")?{query:K,variables:A}:void 0,[$,j]=await ut(E,L,{cacheInstance:I?void 0:r,cache:U||Ae(),cacheKey:Q,waitUntil:o,shouldCacheResponse:M=>!M?.errors,debugInfo:{requestId:L.headers[Ee],displayName:St,url:E,stackInfo:Pt,graphql:k,purpose:t?.purpose},streamConfig:ae,onRawHeaders:M=>{R??={setCookie:M.getSetCookie(),serverTiming:M.get("server-timing")??""};}}),z={url:E,response:j,type:I?"mutation":"query",query:K,queryVariables:A,errors:void 0};if(!j.ok){let M,X=$;try{X??=await j.text(),M=te(X);}catch{M=[{message:X??"Could not parse Storefront API response"}];}Fe({...z,errors:M});}let{data:N,errors:q}=$;q=q?Array.isArray(q)?q:[q]:void 0;let Te=q?.map(({message:M,...X})=>new ye(M,{...X,clientOperation:`storefront.${z.type}`,requestId:j.headers.get("x-request-id"),queryVariables:A,query:K}));return T(N,Te)}return {storefront:{query(C,I){C=Se(C),pt(C,"storefront.query");let v=So?.(C);return he(S({...I,query:C,stackInfo:J?.(v)}),{stackOffset:v,logErrors:s})},mutate(C,I){C=Se(C),lt(C,"storefront.mutate");let v=So?.(C);return he(S({...I,mutation:C,stackInfo:J?.(v)}),{stackOffset:v,logErrors:s})},cache:r,CacheNone:Vt,CacheLong:Mt,CacheShort:le,CacheCustom:Ft,generateCacheControlHeader:Ve,getPublicTokenHeaders:u,getPrivateTokenHeaders:d,getHeaders:()=>({...p}),getShopifyDomain:m,getApiUrl:y,i18n:n??Ta,isStorefrontApiUrl(C){return Lt.test(nt(C.url??""))},async forward(C,I){let v=new Headers([...ke(W=>C.headers.get(W),["accept","accept-encoding","accept-language","access-control-request-headers","access-control-request-method","content-type","content-length","cookie","origin","referer","user-agent",be,hydrogenReact.SHOPIFY_UNIQUE_TOKEN_HEADER,hydrogenReact.SHOPIFY_VISIT_TOKEN_HEADER]),...ke(W=>p[W],[Ye,Ce,hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER,Ee])]);t?.buyerIp&&v.set("x-forwarded-for",t.buyerIp);let U=I?.storefrontApiVersion??nt(C.url).match(Lt)?.[1],V=await fetch(y({storefrontApiVersion:U}),{method:C.method,body:C.body,headers:v});return new Response(V.body,V)},isMcpUrl(C){return co.test(nt(C.url??""))},async forwardMcp(C){let I=new Headers([...ke(U=>C.headers.get(U),["accept","accept-encoding","accept-language","content-type","cookie","origin","referer","user-agent"]),...ke(U=>p[U],[Ye,Ce,be,Ee,hydrogenReact.SHOPIFY_STOREFRONT_ID_HEADER])]);t?.buyerIp&&I.set("x-forwarded-for",t.buyerIp);let v=`${m()}/api/mcp`;try{let U=await fetch(v,{method:C.method,body:C.body,headers:I});return new Response(U.body,U)}catch(U){let W=U instanceof Error?U.message:"Internal proxy error";return new Response(JSON.stringify({jsonrpc:"2.0",error:{code:-32603,message:W},id:null}),{status:502,headers:{"content-type":"application/json"}})}},setCollectedSubrequestHeaders:C=>{if(R)for(let V of R.setCookie)C.headers.append("Set-Cookie",V);let I=kr(R?.serverTiming),v=C.headers.get("content-type")?.startsWith("text/html");we(C,{...v?{_y:P,_s:f}:void 0,...I}),v&&R&&R.setCookie.length>1&&I?._y&&I?._s&&I?._cmp&&we(C,{[ze]:"1"});}}}}var So=void 0;function T(e,t){return {...e,...t&&{errors:t}}}function b(e){return e?.visitorConsent!==void 0}function w(e=false){let t=`$country: CountryCode = ZZ
29
+ $language: LanguageCode`;return e?`${t}
30
+ $visitorConsent: VisitorConsent`:t}function D(e=false){return e?"@inContext(country: $country, language: $language, visitorConsent: $visitorConsent)":"@inContext(country: $country, language: $language)"}function Wt({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let s=b(n),[c,{cart:i,errors:u}]=await Promise.all([t?t.isLoggedIn():false,e.query(Ea(o,{includeVisitorConsent:s}),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(c&&i?.checkoutUrl){let d=new URL(i.checkoutUrl);d.searchParams.set("logged_in","true"),i.checkoutUrl=d.toString();}return i||u?T(i,u):null}}var Ea=(e=ba,t={})=>`#graphql
29
31
  query CartQuery(
30
32
  $cartId: ID!
31
33
  $numCartLines: Int = 100
32
- $country: CountryCode = ZZ
33
- $language: LanguageCode
34
- $visitorConsent: VisitorConsent
35
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
34
+ ${w(t.includeVisitorConsent)}
35
+ ) ${D(t.includeVisitorConsent)} {
36
36
  cart(id: $cartId) {
37
37
  ...CartApiQuery
38
38
  }
39
39
  }
40
40
 
41
41
  ${e}
42
- `,Ia=`#graphql
42
+ `,ba=`#graphql
43
43
  fragment CartApiQuery on Cart {
44
44
  updatedAt
45
45
  id
@@ -154,31 +154,29 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
154
154
  width
155
155
  height
156
156
  }
157
- `;var b=`#graphql
157
+ `;var x=`#graphql
158
158
  fragment CartApiError on CartUserError {
159
159
  message
160
160
  field
161
161
  code
162
162
  }
163
- `,w=`#graphql
163
+ `,O=`#graphql
164
164
  fragment CartApiMutation on Cart {
165
165
  id
166
166
  totalQuantity
167
167
  checkoutUrl
168
168
  }
169
- `,D=`#graphql
169
+ `,_=`#graphql
170
170
  fragment CartApiWarning on CartWarning {
171
171
  code
172
172
  message
173
173
  target
174
174
  }
175
- `;function Bt(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...i}=t,{cartCreate:c,errors:u}=await e.storefront.mutate(Ta(e.cartFragment),{variables:{input:{...i,buyerIdentity:{...o,...s}},...a}});return T(c,u)}}var Ta=(e=w)=>`#graphql
175
+ `;function jt(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...c}=t,i=b(r),{cartCreate:u,errors:d}=await e.storefront.mutate(wa(e.cartFragment,{includeVisitorConsent:i}),{variables:{input:{...c,buyerIdentity:{...o,...s}},...a}});return T(u,d)}}var wa=(e=O,t={})=>`#graphql
176
176
  mutation cartCreate(
177
177
  $input: CartInput!
178
- $country: CountryCode = ZZ
179
- $language: LanguageCode
180
- $visitorConsent: VisitorConsent
181
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
178
+ ${w(t.includeVisitorConsent)}
179
+ ) ${D(t.includeVisitorConsent)} {
182
180
  cartCreate(input: $input) {
183
181
  cart {
184
182
  ...CartApiMutation
@@ -193,16 +191,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
193
191
  }
194
192
  }
195
193
  ${e}
196
- ${b}
197
- ${D}
198
- `;function Qt(e){return async(t,r)=>{let{cartLinesAdd:o,errors:n}=await e.storefront.mutate(Ea(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var Ea=(e=w)=>`#graphql
194
+ ${x}
195
+ ${_}
196
+ `;function Kt(e){return async(t,r)=>{let o=b(r),{cartLinesAdd:n,errors:a}=await e.storefront.mutate(Da(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(n,a)}}var Da=(e=O,t={})=>`#graphql
199
197
  mutation cartLinesAdd(
200
198
  $cartId: ID!
201
199
  $lines: [CartLineInput!]!
202
- $country: CountryCode = ZZ
203
- $language: LanguageCode
204
- $visitorConsent: VisitorConsent
205
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
200
+ ${w(t.includeVisitorConsent)}
201
+ ) ${D(t.includeVisitorConsent)} {
206
202
  cartLinesAdd(cartId: $cartId, lines: $lines) {
207
203
  cart {
208
204
  ...CartApiMutation
@@ -216,16 +212,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
216
212
  }
217
213
  }
218
214
  ${e}
219
- ${b}
220
- ${D}
221
- `;var Ao="__h_pending_";function So(e){return Ao+e}function dt(e){return e.startsWith(Ao)}function pt(e,t){if(t.some(r=>dt(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 Wt(e){return async(t,r)=>{pt("updateLines",t);let{cartLinesUpdate:o,errors:n}=await e.storefront.mutate(ba(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var ba=(e=w)=>`#graphql
215
+ ${x}
216
+ ${_}
217
+ `;var vo="__h_pending_";function Ro(e){return vo+e}function yt(e){return e.startsWith(vo)}function ft(e,t){if(t.some(r=>yt(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 Yt(e){return async(t,r)=>{ft("updateLines",t);let o=b(r),{cartLinesUpdate:n,errors:a}=await e.storefront.mutate(xa(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(n,a)}}var xa=(e=O,t={})=>`#graphql
222
218
  mutation cartLinesUpdate(
223
219
  $cartId: ID!
224
220
  $lines: [CartLineUpdateInput!]!
225
- $language: LanguageCode
226
- $country: CountryCode
227
- $visitorConsent: VisitorConsent
228
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
221
+ ${w(t.includeVisitorConsent)}
222
+ ) ${D(t.includeVisitorConsent)} {
229
223
  cartLinesUpdate(cartId: $cartId, lines: $lines) {
230
224
  cart {
231
225
  ...CartApiMutation
@@ -239,16 +233,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
239
233
  }
240
234
  }
241
235
  ${e}
242
- ${b}
243
- ${D}
244
- `;function jt(e){return async(t,r)=>{pt("removeLines",t);let{cartLinesRemove:o,errors:n}=await e.storefront.mutate(wa(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return T(o,n)}}var wa=(e=w)=>`#graphql
236
+ ${x}
237
+ ${_}
238
+ `;function Jt(e){return async(t,r)=>{ft("removeLines",t);let o=b(r),{cartLinesRemove:n,errors:a}=await e.storefront.mutate(Oa(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return T(n,a)}}var Oa=(e=O,t={})=>`#graphql
245
239
  mutation cartLinesRemove(
246
240
  $cartId: ID!
247
241
  $lineIds: [ID!]!
248
- $language: LanguageCode
249
- $country: CountryCode
250
- $visitorConsent: VisitorConsent
251
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
242
+ ${w(t.includeVisitorConsent)}
243
+ ) ${D(t.includeVisitorConsent)} {
252
244
  cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {
253
245
  cart {
254
246
  ...CartApiMutation
@@ -262,16 +254,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
262
254
  }
263
255
  }
264
256
  ${e}
265
- ${b}
266
- ${D}
267
- `;function Kt(e){return async(t,r)=>{let o=t.filter((s,i,c)=>c.indexOf(s)===i),{cartDiscountCodesUpdate:n,errors:a}=await e.storefront.mutate(Da(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return T(n,a)}}var Da=(e=w)=>`#graphql
257
+ ${x}
258
+ ${_}
259
+ `;function zt(e){return async(t,r)=>{let o=t.filter((c,i,u)=>u.indexOf(c)===i),n=b(r),{cartDiscountCodesUpdate:a,errors:s}=await e.storefront.mutate(_a(e.cartFragment,{includeVisitorConsent:n}),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return T(a,s)}}var _a=(e=O,t={})=>`#graphql
268
260
  mutation cartDiscountCodesUpdate(
269
261
  $cartId: ID!
270
262
  $discountCodes: [String!]!
271
- $language: LanguageCode
272
- $country: CountryCode
273
- $visitorConsent: VisitorConsent
274
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
263
+ ${w(t.includeVisitorConsent)}
264
+ ) ${D(t.includeVisitorConsent)} {
275
265
  cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {
276
266
  ... @defer {
277
267
  cart {
@@ -287,16 +277,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
287
277
  }
288
278
  }
289
279
  ${e}
290
- ${b}
291
- ${D}
292
- `;function Yt(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(xa(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return T(n,a)}}var xa=(e=w)=>`#graphql
280
+ ${x}
281
+ ${_}
282
+ `;function Xt(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,n=b(r),{cartBuyerIdentityUpdate:a,errors:s}=await e.storefront.mutate(Ua(e.cartFragment,{includeVisitorConsent:n}),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return T(a,s)}}var Ua=(e=O,t={})=>`#graphql
293
283
  mutation cartBuyerIdentityUpdate(
294
284
  $cartId: ID!
295
285
  $buyerIdentity: CartBuyerIdentityInput!
296
- $language: LanguageCode
297
- $country: CountryCode
298
- $visitorConsent: VisitorConsent
299
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
286
+ ${w(t.includeVisitorConsent)}
287
+ ) ${D(t.includeVisitorConsent)} {
300
288
  cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {
301
289
  cart {
302
290
  ...CartApiMutation
@@ -310,16 +298,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
310
298
  }
311
299
  }
312
300
  ${e}
313
- ${b}
314
- ${D}
315
- `;function Jt(e){return async(t,r)=>{let{cartNoteUpdate:o,errors:n}=await e.storefront.mutate(Oa(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return T(o,n)}}var Oa=(e=w)=>`#graphql
301
+ ${x}
302
+ ${_}
303
+ `;function Zt(e){return async(t,r)=>{let o=b(r),{cartNoteUpdate:n,errors:a}=await e.storefront.mutate(La(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),note:t,...r}});return T(n,a)}}var La=(e=O,t={})=>`#graphql
316
304
  mutation cartNoteUpdate(
317
305
  $cartId: ID!
318
306
  $note: String!
319
- $language: LanguageCode
320
- $country: CountryCode
321
- $visitorConsent: VisitorConsent
322
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
307
+ ${w(t.includeVisitorConsent)}
308
+ ) ${D(t.includeVisitorConsent)} {
323
309
  cartNoteUpdate(cartId: $cartId, note: $note) {
324
310
  cart {
325
311
  ...CartApiMutation
@@ -333,16 +319,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
333
319
  }
334
320
  }
335
321
  ${e}
336
- ${b}
337
- ${D}
338
- `;function zt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:o,errors:n}=await e.storefront.mutate(_a(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return T(o,n)}}var _a=(e=w)=>`#graphql
322
+ ${x}
323
+ ${_}
324
+ `;function er(e){return async(t,r)=>{let o=b(r),{cartSelectedDeliveryOptionsUpdate:n,errors:a}=await e.storefront.mutate(ka(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return T(n,a)}}var ka=(e=O,t={})=>`#graphql
339
325
  mutation cartSelectedDeliveryOptionsUpdate(
340
326
  $cartId: ID!
341
327
  $selectedDeliveryOptions: [CartSelectedDeliveryOptionInput!]!
342
- $language: LanguageCode
343
- $country: CountryCode
344
- $visitorConsent: VisitorConsent
345
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
328
+ ${w(t.includeVisitorConsent)}
329
+ ) ${D(t.includeVisitorConsent)} {
346
330
  cartSelectedDeliveryOptionsUpdate(cartId: $cartId, selectedDeliveryOptions: $selectedDeliveryOptions) {
347
331
  cart {
348
332
  ...CartApiMutation
@@ -356,16 +340,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
356
340
  }
357
341
  }
358
342
  ${e}
359
- ${b}
360
- ${D}
361
- `;function Xt(e){return async(t,r)=>{let{cartAttributesUpdate:o,errors:n}=await e.storefront.mutate(Ua(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t,...r}});return T(o,n)}}var Ua=(e=w)=>`#graphql
343
+ ${x}
344
+ ${_}
345
+ `;function tr(e){return async(t,r)=>{let o=b(r),{cartAttributesUpdate:n,errors:a}=await e.storefront.mutate(Va(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t,...r}});return T(n,a)}}var Va=(e=O,t={})=>`#graphql
362
346
  mutation cartAttributesUpdate(
363
347
  $cartId: ID!
364
348
  $attributes: [AttributeInput!]!
365
- $language: LanguageCode
366
- $country: CountryCode
367
- $visitorConsent: VisitorConsent
368
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
349
+ ${w(t.includeVisitorConsent)}
350
+ ) ${D(t.includeVisitorConsent)} {
369
351
  cartAttributesUpdate(cartId: $cartId, attributes: $attributes) {
370
352
  cart {
371
353
  ...CartApiMutation
@@ -379,15 +361,13 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
379
361
  }
380
362
  }
381
363
  ${e}
382
- ${b}
383
- ${D}
384
- `;function Zt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(i=>({...i,ownerId:o})),{cartMetafieldsSet:a,errors:s}=await e.storefront.mutate(La(),{variables:{metafields:n,...r}});return T({cart:{id:o},...a},s)}}var La=()=>`#graphql
364
+ ${x}
365
+ ${_}
366
+ `;function rr(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(i=>({...i,ownerId:o})),a=b(r),{cartMetafieldsSet:s,errors:c}=await e.storefront.mutate(Na({includeVisitorConsent:a}),{variables:{metafields:n,...r}});return T({cart:{id:o},...s},c)}}var Na=(e={})=>`#graphql
385
367
  mutation cartMetafieldsSet(
386
368
  $metafields: [CartMetafieldsSetInput!]!
387
- $language: LanguageCode
388
- $country: CountryCode
389
- $visitorConsent: VisitorConsent
390
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
369
+ ${w(e.includeVisitorConsent)}
370
+ ) ${D(e.includeVisitorConsent)} {
391
371
  cartMetafieldsSet(metafields: $metafields) {
392
372
  userErrors {
393
373
  code
@@ -397,13 +377,11 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
397
377
  }
398
378
  }
399
379
  }
400
- `;function er(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),{cartMetafieldDelete:n,errors:a}=await e.storefront.mutate(ka(),{variables:{input:{ownerId:o,key:t},...r}});return T({cart:{id:o},...n},a)}}var ka=()=>`#graphql
380
+ `;function or(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=b(r),{cartMetafieldDelete:a,errors:s}=await e.storefront.mutate(Ma({includeVisitorConsent:n}),{variables:{input:{ownerId:o,key:t},...r}});return T({cart:{id:o},...a},s)}}var Ma=(e={})=>`#graphql
401
381
  mutation cartMetafieldDelete(
402
382
  $input: CartMetafieldDeleteInput!
403
- $language: LanguageCode
404
- $country: CountryCode
405
- $visitorConsent: VisitorConsent
406
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
383
+ ${w(e.includeVisitorConsent)}
384
+ ) ${D(e.includeVisitorConsent)} {
407
385
  cartMetafieldDelete(input: $input) {
408
386
  userErrors {
409
387
  code
@@ -412,14 +390,12 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
412
390
  }
413
391
  }
414
392
  }
415
- `;function tr(e){return async(t,r)=>{let{cartGiftCardCodesUpdate:o,errors:n}=await e.storefront.mutate(Na(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var Na=(e=w)=>`#graphql
393
+ `;function nr(e){return async(t,r)=>{let o=b(r),{cartGiftCardCodesUpdate:n,errors:a}=await e.storefront.mutate(Fa(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(n,a)}}var Fa=(e=O,t={})=>`#graphql
416
394
  mutation cartGiftCardCodesUpdate(
417
395
  $cartId: ID!
418
396
  $giftCardCodes: [String!]!
419
- $language: LanguageCode
420
- $country: CountryCode
421
- $visitorConsent: VisitorConsent
422
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
397
+ ${w(t.includeVisitorConsent)}
398
+ ) ${D(t.includeVisitorConsent)} {
423
399
  cartGiftCardCodesUpdate(cartId: $cartId, giftCardCodes: $giftCardCodes) {
424
400
  cart {
425
401
  ...CartApiMutation
@@ -433,9 +409,9 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
433
409
  }
434
410
  }
435
411
  ${e}
436
- ${b}
437
- ${D}
438
- `;function rr(e){return async(t,r)=>{let{cartGiftCardCodesAdd:o,errors:n}=await e.storefront.mutate(Ma(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var Ma=(e=w)=>`#graphql
412
+ ${x}
413
+ ${_}
414
+ `;function ar(e){return async(t,r)=>{let{cartGiftCardCodesAdd:o,errors:n}=await e.storefront.mutate(Ha(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var Ha=(e=O)=>`#graphql
439
415
  mutation cartGiftCardCodesAdd(
440
416
  $cartId: ID!
441
417
  $giftCardCodes: [String!]!
@@ -455,16 +431,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
455
431
  }
456
432
  }
457
433
  ${e}
458
- ${b}
459
- ${D}
460
- `;function or(e){return async(t,r)=>{let{cartGiftCardCodesRemove:o,errors:n}=await e.storefront.mutate(Va(e.cartFragment),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return T(o,n)}}var Va=(e=w)=>`#graphql
434
+ ${x}
435
+ ${_}
436
+ `;function sr(e){return async(t,r)=>{let o=b(r),{cartGiftCardCodesRemove:n,errors:a}=await e.storefront.mutate($a(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return T(n,a)}}var $a=(e=O,t={})=>`#graphql
461
437
  mutation cartGiftCardCodesRemove(
462
438
  $cartId: ID!
463
439
  $appliedGiftCardIds: [ID!]!
464
- $language: LanguageCode
465
- $country: CountryCode
466
- $visitorConsent: VisitorConsent
467
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
440
+ ${w(t.includeVisitorConsent)}
441
+ ) ${D(t.includeVisitorConsent)} {
468
442
  cartGiftCardCodesRemove(cartId: $cartId, appliedGiftCardIds: $appliedGiftCardIds) {
469
443
  cart {
470
444
  ...CartApiMutation
@@ -478,16 +452,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
478
452
  }
479
453
  }
480
454
  ${e}
481
- ${b}
482
- ${D}
483
- `;function Po(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 T(o,n)}}var $a=(e=w)=>`#graphql
455
+ ${x}
456
+ ${_}
457
+ `;function Io(e){return async(t,r)=>{let o=b(r),{cartDeliveryAddressesAdd:n,errors:a}=await e.storefront.mutate(qa(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(n,a)}}var qa=(e=O,t={})=>`#graphql
484
458
  mutation cartDeliveryAddressesAdd(
485
459
  $cartId: ID!
486
460
  $addresses: [CartSelectableAddressInput!]!,
487
- $country: CountryCode = ZZ
488
- $language: LanguageCode
489
- $visitorConsent: VisitorConsent
490
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
461
+ ${w(t.includeVisitorConsent)}
462
+ ) ${D(t.includeVisitorConsent)} {
491
463
  cartDeliveryAddressesAdd(addresses: $addresses, cartId: $cartId) {
492
464
  cart {
493
465
  ...CartApiMutation
@@ -501,16 +473,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
501
473
  }
502
474
  }
503
475
  ${e}
504
- ${b}
505
- ${D}
506
- `;function vo(e){return async(t,r)=>{let{cartDeliveryAddressesRemove:o,errors:n}=await e.storefront.mutate(Fa(e.cartFragment),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return T(o,n)}}var Fa=(e=w)=>`#graphql
476
+ ${x}
477
+ ${_}
478
+ `;function To(e){return async(t,r)=>{let o=b(r),{cartDeliveryAddressesRemove:n,errors:a}=await e.storefront.mutate(Ga(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return T(n,a)}}var Ga=(e=O,t={})=>`#graphql
507
479
  mutation cartDeliveryAddressesRemove(
508
480
  $cartId: ID!
509
481
  $addressIds: [ID!]!,
510
- $country: CountryCode = ZZ
511
- $language: LanguageCode
512
- $visitorConsent: VisitorConsent
513
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
482
+ ${w(t.includeVisitorConsent)}
483
+ ) ${D(t.includeVisitorConsent)} {
514
484
  cartDeliveryAddressesRemove(addressIds: $addressIds, cartId: $cartId) {
515
485
  cart {
516
486
  ...CartApiMutation
@@ -524,16 +494,14 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
524
494
  }
525
495
  }
526
496
  ${e}
527
- ${b}
528
- ${D}
529
- `;function Ro(e){return async(t,r)=>{let{cartDeliveryAddressesUpdate:o,errors:n}=await e.storefront.mutate(Ha(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Ha=(e=w)=>`#graphql
497
+ ${x}
498
+ ${_}
499
+ `;function Eo(e){return async(t,r)=>{let o=b(r),{cartDeliveryAddressesUpdate:n,errors:a}=await e.storefront.mutate(Ba(e.cartFragment,{includeVisitorConsent:o}),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(n,a)}}var Ba=(e=O,t={})=>`#graphql
530
500
  mutation cartDeliveryAddressesUpdate(
531
501
  $cartId: ID!
532
502
  $addresses: [CartSelectableAddressUpdateInput!]!,
533
- $country: CountryCode = ZZ
534
- $language: LanguageCode
535
- $visitorConsent: VisitorConsent
536
- ) @inContext(country: $country, language: $language, visitorConsent: $visitorConsent) {
503
+ ${w(t.includeVisitorConsent)}
504
+ ) ${D(t.includeVisitorConsent)} {
537
505
  cartDeliveryAddressesUpdate(addresses: $addresses, cartId: $cartId) {
538
506
  cart {
539
507
  ...CartApiMutation
@@ -547,9 +515,9 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
547
515
  }
548
516
  }
549
517
  ${e}
550
- ${b}
551
- ${D}
552
- `;function Io(e){return async(t,r)=>{let{cartDeliveryAddressesReplace:o,errors:n}=await e.storefront.mutate(qa(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var qa=(e=w)=>`#graphql
518
+ ${x}
519
+ ${_}
520
+ `;function bo(e){return async(t,r)=>{let{cartDeliveryAddressesReplace:o,errors:n}=await e.storefront.mutate(Qa(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Qa=(e=O)=>`#graphql
553
521
  mutation cartDeliveryAddressesReplace(
554
522
  $cartId: ID!
555
523
  $addresses: [CartSelectableAddressInput!]!,
@@ -569,9 +537,9 @@ API response error: ${t.status}`,u=new de(c,{query:n,queryVariables:a,cause:{err
569
537
  }
570
538
  }
571
539
  ${e}
572
- ${b}
573
- ${D}
574
- `;function nr(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:i}=e,c=t(),u=()=>c||t(),p={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},y=Bt(p),m=async function(...d){d[0].buyerIdentity={...i,...d[0].buyerIdentity};let l=await y(...d);return c=l?.cart?.id,l},g={get:Gt({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:m,addLines:async(d,l)=>{let P=d.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId,parent:f.parent}));return c||l?.cartId?await Qt(p)(P,l):await m({lines:P,buyerIdentity:i},l)},updateLines:Wt(p),removeLines:jt(p),updateDiscountCodes:async(d,l)=>c||l?.cartId?await Kt(p)(d,l):await m({discountCodes:d},l),updateGiftCardCodes:async(d,l)=>c||l?.cartId?await tr(p)(d,l):await m({giftCardCodes:d},l),addGiftCardCodes:rr(p),removeGiftCardCodes:or(p),updateBuyerIdentity:async(d,l)=>c||l?.cartId?await Yt(p)(d,l):await m({buyerIdentity:d},l),updateNote:async(d,l)=>c||l?.cartId?await Jt(p)(d,l):await m({note:d},l),updateSelectedDeliveryOption:zt(p),updateAttributes:async(d,l)=>c||l?.cartId?await Xt(p)(d,l):await m({attributes:d},l),setMetafields:async(d,l)=>c||l?.cartId?await Zt(p)(d,l):await m({metafields:d},l),deleteMetafield:er(p),addDeliveryAddresses:Po(p),removeDeliveryAddresses:vo(p),updateDeliveryAddresses:Ro(p),replaceDeliveryAddresses:Io(p)};return "customMethods"in e?{...g,...e.customMethods??{}}:g}function Ba(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=Z.getFormInput(a);if(s.action===Z.ACTIONS.LinesAdd)for(let i of s.inputs.lines){if(!i.selectedVariant){console.error("[h2:error:useOptimisticCart] No selected variant was passed in the cart action. Make sure to pass the selected variant if you want to use an optimistic cart");continue}let c=o.find(u=>u.merchandise.id===i.selectedVariant?.id);n=true,c?(c.quantity=(c.quantity||1)+(i.quantity||1),c.isOptimistic=true):o.unshift({id:So(i.selectedVariant.id),merchandise:i.selectedVariant,isOptimistic:true,quantity:i.quantity||1});}else if(s.action===Z.ACTIONS.LinesRemove)for(let i of s.inputs.lineIds){let c=o.findIndex(u=>u.id===i);if(c!==-1){if(dt(o[c].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}o.splice(c,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${i}' but it doesn't exist in the cart`);}else if(s.action===Z.ACTIONS.LinesUpdate)for(let i of s.inputs.lines){let c=o.findIndex(u=>i.id===u.id);if(c>-1){if(dt(o[c].id)){console.error("[h2:error:useOptimisticCart] Tried to update an optimistic line that has not been added to the cart yet");continue}o[c].quantity=i.quantity,o[c].quantity===0&&o.splice(c,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to update line '${i.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 Qa="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function Wa({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||Qa)}var Me=reactRouter.createContext(),ar=reactRouter.createContext(),sr=reactRouter.createContext(),ir=reactRouter.createContext(),cr=reactRouter.createContext(),ur=reactRouter.createContext(),ja={storefront:Me,cart:ar,customerAccount:sr,env:ir,session:cr,waitUntil:ur};var lt="2026-04",Ae=`Shopify Hydrogen ${ke}`,To="30243aa5-17c1-465a-8493-944bcc4e88aa",N="customerAccount",Se="buyer";var H=class extends Response{constructor(t,r,o){super(`Bad request: ${t}`,{status:400,headers:o});}};function $e(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 Ka({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(N),i=s?.refreshToken,c=s?.idToken;if(!i)throw new H("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",i),a.append("client_id",t);let u={"content-type":"application/x-www-form-urlencoded","User-Agent":Ae,Origin:o};new Date().getTime();let y=r,m=await fetch(y,{method:"POST",headers:u,body:a});if(!m.ok){let P=await m.text();throw new Response(P,{status:m.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:g,expires_in:d,refresh_token:l}=await m.json();if(!g||g.length===0)throw new H("Unauthorized","Invalid access token received.");e.set(N,{accessToken:g,expiresAt:new Date(new Date().getTime()+(d-120)*1e3).getTime()+"",refreshToken:l,idToken:c});}function Pe(e){e.unset(N),e.unset(Se);}async function Eo({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=Ka({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(i){throw Pe(r),i&&i.status!==401?i:new H("Unauthorized","Login before querying the Customer Account API.")}}function bo(){let e=Ya();return Do(e)}async function wo(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=Ja(t);return Do(r)}function Ya(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function Do(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Ja(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function xo(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function Oo(e,t,r,o,n){let a=t;if(!e)throw new H("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",To),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 i={"content-type":"application/x-www-form-urlencoded","User-Agent":Ae,Origin:o};new Date().getTime();let u=r,p=await fetch(u,{method:"POST",headers:i,body:s});let y=await p.json();if(y.error)throw new H(y.error_description);return y.access_token}function _o(e){return za(e).payload.nonce}function za(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 yt(){return Za(Xa())}function Xa(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function Za(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function ft(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(Lo(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function Lo(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function dr({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=Uo(e,t),a=r?Uo(e,r):n;return Lo(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 Uo(e,t){return es(t)?new URL(t):new URL(t,new URL(e).origin)}function es(e){try{return new URL(e),!0}catch{return false}}function ko(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 ts(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 $e(n)}function lr({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=lt,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:i,logErrors:c=true,loginPath:u="/account/login",authorizePath:p="/account/authorize",defaultRedirectPath:y="/account",language:m,useCustomAuthDomain:g}){if(o!==lt&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${lt}.`),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 d=new URL(n.url),l=d.protocol==="http:"?d.origin.replace("http","https"):d.origin,P=dr({requestUrl:l,defaultUrl:p,redirectUrl:s}),f=A=>void 0,R=i||(()=>(f(d.hostname),ts(n,u))),h=ko(o,r),S=rs(h,t),C=h("GRAPHQL"),I={};async function v({query:A,type:E,variables:_={}}){let O=await G();if(!O)throw R();new Date().getTime();let V=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":Ae,Origin:l,Authorization:O},body:JSON.stringify({query:A,variables:_})});let B=await V.text(),K={url:C,response:V,type:E,query:A,queryVariables:_,errors:void 0,client:"customer"};if(!V.ok){if(V.status===401)throw Pe(e),R();let L;try{L=X(B);}catch{L=[{message:B}];}Ne({...K,errors:L});}try{let L=X(B),{errors:$}=L,ve=$?.map(({message:k,...Y})=>new de(k,{...Y,clientOperation:`customerAccount.${K.type}`,requestId:V.headers.get("x-request-id"),queryVariables:_,query:A}));return {...L,...$&&{errors:ve}}}catch{Ne({...K,errors:[{message:B}]});}}async function x(){if(!r)return false;let A=e.get(N),E=A?.accessToken,_=A?.expiresAt;if(!E||!_)return false;let O=j?.();try{await Eo({locks:I,expiresAt:_,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:h("TOKEN_EXCHANGE"),httpsOrigin:l,debugInfo:{waitUntil:a,stackInfo:O,...ae(n)}});}catch{return false}return true}async function U(){if(!await x())throw R()}async function G(){if(await x())return e.get(N)?.accessToken}async function Ct(A,E){return f(d.hostname),S(),A=Ce(A),ut(A,"customer.mutate"),me(v({query:A,type:"mutation",...E}),{logErrors:c})}async function ht(A,E){return f(d.hostname),S(),A=Ce(A),ct(A,"customer.query"),me(v({query:A,type:"query",...E}),{logErrors:c})}function Qe(A){e.set(Se,{...e.get(Se),...A});}async function Q(){let A=await G();if(A)return {...e.get(Se),customerAccessToken:A}}return {i18n:{language:m??"EN"},login:async A=>{f(d.hostname),S();let E=new URL(h("AUTH")),_=xo(),O=yt();E.searchParams.set("client_id",t),E.searchParams.set("scope","openid email"),E.searchParams.append("response_type","code"),E.searchParams.append("redirect_uri",P),E.searchParams.set("scope",h("LOGIN_SCOPE")),E.searchParams.append("state",_),E.searchParams.append("nonce",O);let q=os({contextLanguage:m??null,localeOverride:A?.locale??null,uiLocalesOverride:A?.uiLocales??null});q!=null&&E.searchParams.append("locale",q),A?.countryCode&&E.searchParams.append("region_country",A.countryCode),A?.acrValues&&E.searchParams.append("acr_values",A.acrValues),A?.loginHint&&(E.searchParams.append("login_hint",A.loginHint),A?.loginHintMode&&E.searchParams.append("login_hint_mode",A.loginHintMode));let re=bo(),V=await wo(re);return e.set(N,{...e.get(N),codeVerifier:re,state:_,nonce:O,redirectPath:ft(n.url)||W(n,"Referer")||y}),E.searchParams.append("code_challenge",V),E.searchParams.append("code_challenge_method","S256"),$e(E.toString())},logout:async A=>{f(d.hostname),S();let E=e.get(N)?.idToken,_=dr({requestUrl:l,defaultUrl:l,redirectUrl:A?.postLogoutRedirectUri}),O=E?new URL(`${h("LOGOUT")}?${new URLSearchParams([["id_token_hint",E],["post_logout_redirect_uri",_]]).toString()}`).toString():_;Pe(e);let q=A?.headers instanceof Headers?A?.headers:new Headers(A?.headers);return A?.keepSession||(e.destroy?q.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),$e(O,{headers:q})},isLoggedIn:x,handleAuthStatus:U,getAccessToken:G,getApiUrl:()=>C,mutate:Ct,query:ht,authorize:async()=>{f(d.hostname),S();let A=d.searchParams.get("code"),E=d.searchParams.get("state");if(!A||!E)throw Pe(e),new H("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(N)?.state!==E)throw Pe(e),new H("Unauthorized","The session state does not match the state parameter. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");let _=t,O=new URLSearchParams;O.append("grant_type","authorization_code"),O.append("client_id",_),O.append("redirect_uri",P),O.append("code",A);let q=e.get(N)?.codeVerifier;if(!q)throw new H("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");O.append("code_verifier",q);let re={"content-type":"application/x-www-form-urlencoded","User-Agent":Ae,Origin:l};new Date().getTime();let K=h("TOKEN_EXCHANGE"),L=await fetch(K,{method:"POST",headers:re,body:O});if(!L.ok)throw new Response(await L.text(),{status:L.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:$,expires_in:ve,id_token:k,refresh_token:Y}=await L.json(),At=e.get(N)?.nonce,vr=await _o(k);if(At!==vr)throw new H("Unauthorized",`Returned nonce does not match: ${At} !== ${vr}`);let Rr=$;r||(Rr=await Oo($,t,h("TOKEN_EXCHANGE"),l,{...ae(n)}));let cn=e.get(N)?.redirectPath;return e.set(N,{accessToken:Rr,expiresAt:new Date(new Date().getTime()+(ve-120)*1e3).getTime()+"",refreshToken:Y,idToken:k}),$e(cn||y)},setBuyer:Qe,getBuyer:Q,UNSTABLE_setBuyer:A=>{z("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),Qe(A);},UNSTABLE_getBuyer:()=>(z("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),Q())}}function rs(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 os(e){return e.localeOverride!=null?pr(e.localeOverride):e.uiLocalesOverride!=null?pr(e.uiLocalesOverride):e.contextLanguage!=null?pr(e.contextLanguage):null}function pr(e){let r=e.toLowerCase().replaceAll("_","-").split("-"),o=r[0],n=r[1];return n?`${o}-${n.toUpperCase()}`:o}function as(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:i,logErrors:c,storefront:u={},customerAccount:p,cart:y={},buyerIdentity:m}=e;i||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),p?.unstableB2b&&z("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:g}=ho({cache:n,waitUntil:a,i18n:s,logErrors:c,storefrontHeaders:u.headers||no(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=lr({session:i,request:o,waitUntil:a,logErrors:c,customerApiVersion:p?.apiVersion,authUrl:p?.authUrl,customAuthStatusHandler:p?.customAuthStatusHandler,useCustomAuthDomain:p?.useCustomAuthDomain,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),l=nr({getCartId:y.getId||Ft(o.headers),setCartId:y.setId||Ht(),cartQueryFragment:y.queryFragment,cartMutateFragment:y.mutateFragment,customMethods:y.customMethods,buyerIdentity:m,storefront:g,customerAccount:d}),P=new reactRouter.RouterContextProvider;P.set(Me,g),P.set(ar,l),P.set(sr,d),P.set(ir,r),P.set(cr,i),a&&P.set(ur,a);let f={storefront:g,cart:l,customerAccount:d,env:r,session:i,waitUntil:a,...t||{}};return new Proxy(P,{get(h,S,C){if(S in h){let I=h[S];return typeof I=="function"?I.bind(h):I}return S in f?f[S]:Reflect.get(h,S,C)},has(h,S){return S in h||S in f},ownKeys(h){return [...Reflect.ownKeys(h),...Object.keys(f)]},getOwnPropertyDescriptor(h,S){if(S in h)return Reflect.getOwnPropertyDescriptor(h,S);if(S in f)return {enumerable:true,configurable:true,writable:false,value:f[S]}}})}function is({build:e,mode:t,poweredByHeader:r=true,getLoadContext:o,collectTrackingInformation:n=true}){let a=reactRouter.createRequestHandler(e,t),s=r?i=>i.headers.append("powered-by","Shopify, Hydrogen"):void 0;return async i=>{let c=i.method;if((c==="GET"||c==="HEAD")&&i.body)return new Response(`${c} requests cannot have a body`,{status:400});let u=new URL(i.url);if(u.pathname.includes("//"))return new Response(null,{status:301,headers:{location:u.pathname.replace(/\/+/g,"/")}});let p=await o?.(i),y=p?.storefront||p?.get?.(Me);if(!y)throw new Error("[h2:createRequestHandler] Storefront instance is required in the load context. Make sure to use createHydrogenContext() or provide a storefront instance via getLoadContext.");if(y.isStorefrontApiUrl(i)){let d=await y.forward(i);return s?.(d),d}if(y.isMcpUrl(i)){let d=await y.forwardMcp(i);return s?.(d),d}let m=await a(i,p);n&&y.setCollectedSubrequestHeaders(m);let g=i.headers.get("sec-fetch-dest");return (g&&g==="document"||i.headers.get("accept")?.includes("text/html"))&&Te(m,{[je]:"1"}),s?.(m),m}}var No=react.createContext(void 0),Mo=No.Provider,yr=()=>react.useContext(No);function ls(e){let t=yt(),r=ys(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>react.createElement(Mo,{value:t},n)}}function ys(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 c={baseUri:["'self'"],defaultSrc:["'self'",n,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:a,connectSrc:s},u=Object.assign({},c,o);for(let p in c){let y=o[p];p&&y&&(u[p]=fs(y,c[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]),ps__default.default({directives:u})}function fs(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 Cs=react.forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=yr();return r?jsxRuntime.jsx(hs,{src:o,options:n}):jsxRuntime.jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function hs({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 Ss(e){return e;}function vs(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 Rs({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 ws({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:c,hasNextPage:u,hasPreviousPage:p,nextPageUrl:y,nodes:m,previousPageUrl:g,startCursor:d}=Ds(e,r),l=react.useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:c,hasPreviousPage:p,hasNextPage:u,startCursor:d},nodes:m}}}),[c,u,p,d,m,r,s.state]),P=react.useMemo(()=>react.forwardRef(function(h,S){return u?react.createElement(reactRouter.Link,{preventScrollReset:true,...h,to:y,state:l,replace:true,ref:S,onClick:()=>n(true)}):null}),[u,y,l]),f=react.useMemo(()=>react.forwardRef(function(h,S){return p?react.createElement(reactRouter.Link,{preventScrollReset:true,...h,to:g,state:l,replace:true,ref:S,onClick:()=>n(true)}):null}),[p,g,l]);return t({state:l,hasNextPage:u,hasPreviousPage:p,isLoading:o,nextPageUrl:y,nodes:m,previousPageUrl:g,NextLink:P,PreviousLink:f})}function mt(e,t){let r=new URLSearchParams(e);return Object.keys(t?.pagination||{}).forEach(n=>{let a=n===""?"":`${n}_`,s=`${a}cursor`,i=`${a}direction`;r.delete(s),r.delete(i);}),r.toString()}function Ge(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||Ge("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Ge("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Ge("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Ge("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Ge("pageInfo.hasPreviousPage");let r=reactRouter.useNavigation(),o=reactRouter.useNavigate(),{state:n,search:a,pathname:s}=reactRouter.useLocation(),i=t?`${t}_cursor`:"cursor",c=t?`${t}_direction`:"direction",y=new URLSearchParams(a).get(c)==="previous",m=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]),g=react.useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,R=n?.pagination?.[t]?.pageInfo,h=!f||R?.startCursor===void 0?e.pageInfo.startCursor:R.startCursor,S=!f||R?.endCursor===void 0?e.pageInfo.endCursor:R.endCursor,C=!f||R?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:R.hasPreviousPage,I=!f||R?.hasNextPage===void 0?e.pageInfo.hasNextPage:R.hasNextPage;return n?.pagination?.[t]?.nodes&&(y?(h=e.pageInfo.startCursor,C=e.pageInfo.hasPreviousPage):(S=e.pageInfo.endCursor,I=e.pageInfo.hasNextPage)),{startCursor:h,endCursor:S,hasPreviousPage:C,hasNextPage:I}},[y,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),d=react.useRef({params:mt(a,n),pathname:s});react.useEffect(()=>{window.__hydrogenHydrated=true;},[]),react.useEffect(()=>{let f=mt(a,n),R=d.current.params;(s!==d.current.pathname||f!==R)&&!(r.state==="idle"&&!r.location)&&(d.current={pathname:s,params:mt(a,n)},o(`${s}?${mt(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(c,"previous"),g.startCursor&&f.set(i,g.startCursor),`?${f.toString()}`},[a,g.startCursor]),P=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(c,"next"),g.endCursor&&f.set(i,g.endCursor),`?${f.toString()}`},[a,g.endCursor]);return {...g,previousPageUrl:l,nextPageUrl:P,nodes:m}}function xs(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",i=n.get(a)??void 0;return (n.get(s)==="previous"?"previous":"next")==="previous"?{last:r,startCursor:i??null}:{first:r,endCursor:i??null}}function Ls(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,i=o.find(c=>c.selectedOptions?c.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(i)return {...i,isOptimistic:true}}return e}function Fs({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let i=t;i[0]?.values&&(z("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),i[0]&&!i[0].optionValues&&(i=t.map(d=>({...d,optionValues:d.values?.map(l=>({name:l}))||[]}))));let c=r instanceof Array?r:hydrogenReact.flattenConnection(r),{searchParams:u,path:p,alreadyOnProductPage:y}=qs(e,o,n),m=i.filter(d=>d?.optionValues?.length===1),g=a?a?.selectedOptions?.reduce((d,l)=>(d[l.name]=l.value,d),{}):{};return react.createElement(react.Fragment,null,...react.useMemo(()=>i.map(d=>{let l,P=[];for(let f of d.optionValues){let R=new URLSearchParams(y?u:void 0);R.set(d.name,f.name),m.forEach(v=>{v.optionValues[0].name&&R.set(v.name,v.optionValues[0].name);});let h=c.find(v=>v?.selectedOptions?.every(x=>(R.get(x?.name)||g?.[x?.name])===x?.value)),S=u.get(d.name);!S&&a&&(S=g?.[d.name]||null);let C=S?S===f.name:false;C&&(l=f.name);let I="?"+R.toString();P.push({value:f.name,optionValue:f,isAvailable:h?h.availableForSale:true,to:p+I,search:I,isActive:C,variant:h});}return s({option:{name:d.name,value:l,values:P}})}),[i,c,s]))}var Hs=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 qs(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),i=s&&s.length>0;t=t.startsWith("/")?t.substring(1):t;let c=i?`${s[0]}${t}/${e}`:`/${t}/${e}`;return {searchParams:new URLSearchParams(r||a.state!=="loading"?n:a.location.search),alreadyOnProductPage:c===o,path:c}},[o,n,r,e,t,a])}function Gs(){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.
540
+ ${x}
541
+ ${_}
542
+ `;function ir(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:c}=e,i=t(),u=()=>i||t(),d={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},y=jt(d),m=async function(...p){p[0].buyerIdentity={...c,...p[0].buyerIdentity};let l=await y(...p);return i=l?.cart?.id,l},g={get:Wt({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:m,addLines:async(p,l)=>{let P=p.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId,parent:f.parent}));return i||l?.cartId?await Kt(d)(P,l):await m({lines:P,buyerIdentity:c},l)},updateLines:Yt(d),removeLines:Jt(d),updateDiscountCodes:async(p,l)=>i||l?.cartId?await zt(d)(p,l):await m({discountCodes:p},l),updateGiftCardCodes:async(p,l)=>i||l?.cartId?await nr(d)(p,l):await m({giftCardCodes:p},l),addGiftCardCodes:ar(d),removeGiftCardCodes:sr(d),updateBuyerIdentity:async(p,l)=>i||l?.cartId?await Xt(d)(p,l):await m({buyerIdentity:p},l),updateNote:async(p,l)=>i||l?.cartId?await Zt(d)(p,l):await m({note:p},l),updateSelectedDeliveryOption:er(d),updateAttributes:async(p,l)=>i||l?.cartId?await tr(d)(p,l):await m({attributes:p},l),setMetafields:async(p,l)=>i||l?.cartId?await rr(d)(p,l):await m({metafields:p},l),deleteMetafield:or(d),addDeliveryAddresses:Io(d),removeDeliveryAddresses:To(d),updateDeliveryAddresses:Eo(d),replaceDeliveryAddresses:bo(d)};return "customMethods"in e?{...g,...e.customMethods??{}}:g}function ja(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=re.getFormInput(a);if(s.action===re.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:Ro(c.selectedVariant.id),merchandise:c.selectedVariant,isOptimistic:true,quantity:c.quantity||1});}else if(s.action===re.ACTIONS.LinesRemove)for(let c of s.inputs.lineIds){let i=o.findIndex(u=>u.id===c);if(i!==-1){if(yt(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===re.ACTIONS.LinesUpdate)for(let c of s.inputs.lines){let i=o.findIndex(u=>c.id===u.id);if(i>-1){if(yt(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 Ka="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function Ya({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||Ka)}var He=reactRouter.createContext(),cr=reactRouter.createContext(),ur=reactRouter.createContext(),dr=reactRouter.createContext(),pr=reactRouter.createContext(),lr=reactRouter.createContext(),Ja={storefront:He,cart:cr,customerAccount:ur,env:dr,session:pr,waitUntil:lr};var mt="2026-04",ve=`Shopify Hydrogen ${Me}`,wo="30243aa5-17c1-465a-8493-944bcc4e88aa",F="customerAccount",Re="buyer";var B=class extends Response{constructor(t,r,o){super(`Bad request: ${t}`,{status:400,headers:o});}};function qe(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 za({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(F),c=s?.refreshToken,i=s?.idToken;if(!c)throw new B("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":ve,Origin:o};new Date().getTime();let y=r,m=await fetch(y,{method:"POST",headers:u,body:a});if(!m.ok){let P=await m.text();throw new Response(P,{status:m.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:g,expires_in:p,refresh_token:l}=await m.json();if(!g||g.length===0)throw new B("Unauthorized","Invalid access token received.");e.set(F,{accessToken:g,expiresAt:new Date(new Date().getTime()+(p-120)*1e3).getTime()+"",refreshToken:l,idToken:i});}function Ie(e){e.unset(F),e.unset(Re);}async function Do({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=za({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(c){throw Ie(r),c&&c.status!==401?c:new B("Unauthorized","Login before querying the Customer Account API.")}}function xo(){let e=Xa();return _o(e)}async function Oo(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=Za(t);return _o(r)}function Xa(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function _o(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Za(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function Uo(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function Lo(e,t,r,o,n){let a=t;if(!e)throw new B("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",wo),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":ve,Origin:o};new Date().getTime();let u=r,d=await fetch(u,{method:"POST",headers:c,body:s});let y=await d.json();if(y.error)throw new B(y.error_description);return y.access_token}function ko(e){return es(e).payload.nonce}function es(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 gt(){return rs(ts())}function ts(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function rs(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function Ct(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(No(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function No(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function yr({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=Vo(e,t),a=r?Vo(e,r):n;return No(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 Vo(e,t){return os(t)?new URL(t):new URL(t,new URL(e).origin)}function os(e){try{return new URL(e),!0}catch{return false}}function Mo(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 ns(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 qe(n)}function mr({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=mt,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:c,logErrors:i=true,loginPath:u="/account/login",authorizePath:d="/account/authorize",defaultRedirectPath:y="/account",language:m,useCustomAuthDomain:g}){if(o!==mt&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${mt}.`),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 p=new URL(n.url),l=p.protocol==="http:"?p.origin.replace("http","https"):p.origin,P=yr({requestUrl:l,defaultUrl:d,redirectUrl:s}),f=A=>void 0,R=c||(()=>(f(p.hostname),ns(n,u))),h=Mo(o,r),S=as(h,t),C=h("GRAPHQL"),I={};async function v({query:A,type:E,variables:k={}}){let L=await W();if(!L)throw R();new Date().getTime();let $=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":ve,Origin:l,Authorization:L},body:JSON.stringify({query:A,variables:k})});let j=await $.text(),z={url:C,response:$,type:E,query:A,queryVariables:k,errors:void 0,client:"customer"};if(!$.ok){if($.status===401)throw Ie(e),R();let N;try{N=te(j);}catch{N=[{message:j}];}Fe({...z,errors:N});}try{let N=te(j),{errors:q}=N,Te=q?.map(({message:M,...X})=>new ye(M,{...X,clientOperation:`customerAccount.${z.type}`,requestId:$.headers.get("x-request-id"),queryVariables:k,query:A}));return {...N,...q&&{errors:Te}}}catch{Fe({...z,errors:[{message:j}]});}}async function U(){if(!r)return false;let A=e.get(F),E=A?.accessToken,k=A?.expiresAt;if(!E||!k)return false;let L=J?.();try{await Do({locks:I,expiresAt:k,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:h("TOKEN_EXCHANGE"),httpsOrigin:l,debugInfo:{waitUntil:a,stackInfo:L,...ce(n)}});}catch{return false}return true}async function V(){if(!await U())throw R()}async function W(){if(await U())return e.get(F)?.accessToken}async function St(A,E){return f(p.hostname),S(),A=Se(A),lt(A,"customer.mutate"),he(v({query:A,type:"mutation",...E}),{logErrors:i})}async function Pt(A,E){return f(p.hostname),S(),A=Se(A),pt(A,"customer.query"),he(v({query:A,type:"query",...E}),{logErrors:i})}function Ke(A){e.set(Re,{...e.get(Re),...A});}async function K(){let A=await W();if(A)return {...e.get(Re),customerAccessToken:A}}return {i18n:{language:m??"EN"},login:async A=>{f(p.hostname),S();let E=new URL(h("AUTH")),k=Uo(),L=gt();E.searchParams.set("client_id",t),E.searchParams.set("scope","openid email"),E.searchParams.append("response_type","code"),E.searchParams.append("redirect_uri",P),E.searchParams.set("scope",h("LOGIN_SCOPE")),E.searchParams.append("state",k),E.searchParams.append("nonce",L);let Q=ss({contextLanguage:m??null,localeOverride:A?.locale??null,uiLocalesOverride:A?.uiLocales??null});Q!=null&&E.searchParams.append("locale",Q),A?.countryCode&&E.searchParams.append("region_country",A.countryCode),A?.acrValues&&E.searchParams.append("acr_values",A.acrValues),A?.loginHint&&(E.searchParams.append("login_hint",A.loginHint),A?.loginHintMode&&E.searchParams.append("login_hint_mode",A.loginHintMode));let ae=xo(),$=await Oo(ae);return e.set(F,{...e.get(F),codeVerifier:ae,state:k,nonce:L,redirectPath:Ct(n.url)||Y(n,"Referer")||y}),E.searchParams.append("code_challenge",$),E.searchParams.append("code_challenge_method","S256"),qe(E.toString())},logout:async A=>{f(p.hostname),S();let E=e.get(F)?.idToken,k=yr({requestUrl:l,defaultUrl:l,redirectUrl:A?.postLogoutRedirectUri}),L=E?new URL(`${h("LOGOUT")}?${new URLSearchParams([["id_token_hint",E],["post_logout_redirect_uri",k]]).toString()}`).toString():k;Ie(e);let Q=A?.headers instanceof Headers?A?.headers:new Headers(A?.headers);return A?.keepSession||(e.destroy?Q.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),qe(L,{headers:Q})},isLoggedIn:U,handleAuthStatus:V,getAccessToken:W,getApiUrl:()=>C,mutate:St,query:Pt,authorize:async()=>{f(p.hostname),S();let A=p.searchParams.get("code"),E=p.searchParams.get("state");if(!A||!E)throw Ie(e),new B("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(F)?.state!==E)throw Ie(e),new B("Unauthorized","The session state does not match the state parameter. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");let k=t,L=new URLSearchParams;L.append("grant_type","authorization_code"),L.append("client_id",k),L.append("redirect_uri",P),L.append("code",A);let Q=e.get(F)?.codeVerifier;if(!Q)throw new B("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");L.append("code_verifier",Q);let ae={"content-type":"application/x-www-form-urlencoded","User-Agent":ve,Origin:l};new Date().getTime();let z=h("TOKEN_EXCHANGE"),N=await fetch(z,{method:"POST",headers:ae,body:L});if(!N.ok)throw new Response(await N.text(),{status:N.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:q,expires_in:Te,id_token:M,refresh_token:X}=await N.json(),vt=e.get(F)?.nonce,Tr=await ko(M);if(vt!==Tr)throw new B("Unauthorized",`Returned nonce does not match: ${vt} !== ${Tr}`);let Er=q;r||(Er=await Lo(q,t,h("TOKEN_EXCHANGE"),l,{...ce(n)}));let pn=e.get(F)?.redirectPath;return e.set(F,{accessToken:Er,expiresAt:new Date(new Date().getTime()+(Te-120)*1e3).getTime()+"",refreshToken:X,idToken:M}),qe(pn||y)},setBuyer:Ke,getBuyer:K,UNSTABLE_setBuyer:A=>{ee("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),Ke(A);},UNSTABLE_getBuyer:()=>(ee("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),K())}}function as(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 ss(e){return e.localeOverride!=null?fr(e.localeOverride):e.uiLocalesOverride!=null?fr(e.uiLocalesOverride):e.contextLanguage!=null?fr(e.contextLanguage):null}function fr(e){let r=e.toLowerCase().replaceAll("_","-").split("-"),o=r[0],n=r[1];return n?`${o}-${n.toUpperCase()}`:o}function cs(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:c,logErrors:i,storefront:u={},customerAccount:d,cart:y={},buyerIdentity:m}=e;c||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),d?.unstableB2b&&ee("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:g}=Po({cache:n,waitUntil:a,i18n:s,logErrors:i,storefrontHeaders:u.headers||io(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}),p=mr({session:c,request:o,waitUntil:a,logErrors:i,customerApiVersion:d?.apiVersion,authUrl:d?.authUrl,customAuthStatusHandler:d?.customAuthStatusHandler,useCustomAuthDomain:d?.useCustomAuthDomain,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),l=ir({getCartId:y.getId||Gt(o.headers),setCartId:y.setId||Bt(),cartQueryFragment:y.queryFragment,cartMutateFragment:y.mutateFragment,customMethods:y.customMethods,buyerIdentity:m,storefront:g,customerAccount:p}),P=new reactRouter.RouterContextProvider;P.set(He,g),P.set(cr,l),P.set(ur,p),P.set(dr,r),P.set(pr,c),a&&P.set(lr,a);let f={storefront:g,cart:l,customerAccount:p,env:r,session:c,waitUntil:a,...t||{}};return new Proxy(P,{get(h,S,C){if(S in h){let I=h[S];return typeof I=="function"?I.bind(h):I}return S in f?f[S]:Reflect.get(h,S,C)},has(h,S){return S in h||S in f},ownKeys(h){return [...Reflect.ownKeys(h),...Object.keys(f)]},getOwnPropertyDescriptor(h,S){if(S in h)return Reflect.getOwnPropertyDescriptor(h,S);if(S in f)return {enumerable:true,configurable:true,writable:false,value:f[S]}}})}function ds({build:e,mode:t,poweredByHeader:r=true,getLoadContext:o,collectTrackingInformation:n=true}){let a=reactRouter.createRequestHandler(e,t),s=r?c=>c.headers.append("powered-by","Shopify, Hydrogen"):void 0;return async c=>{let i=c.method;if((i==="GET"||i==="HEAD")&&c.body)return new Response(`${i} requests cannot have a body`,{status:400});let u=new URL(c.url);if(u.pathname.includes("//"))return new Response(null,{status:301,headers:{location:u.pathname.replace(/\/+/g,"/")}});let d=await o?.(c),y=d?.storefront||d?.get?.(He);if(!y)throw new Error("[h2:createRequestHandler] Storefront instance is required in the load context. Make sure to use createHydrogenContext() or provide a storefront instance via getLoadContext.");if(y.isStorefrontApiUrl(c)){let p=await y.forward(c);return s?.(p),p}if(y.isMcpUrl(c)){let p=await y.forwardMcp(c);return s?.(p),p}let m=await a(c,d);n&&y.setCollectedSubrequestHeaders(m);let g=c.headers.get("sec-fetch-dest");return (g&&g==="document"||c.headers.get("accept")?.includes("text/html"))&&we(m,{[Je]:"1"}),s?.(m),m}}var Fo=react.createContext(void 0),Ho=Fo.Provider,gr=()=>react.useContext(Fo);function ms(e){let t=gt(),r=gs(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>react.createElement(Ho,{value:t},n)}}function gs(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 d in i){let y=o[d];d&&y&&(u[d]=Cs(y,i[d]));}return u.scriptSrc instanceof Array?u.scriptSrc=[...u.scriptSrc.filter(d=>!d.startsWith("'nonce")),n]:u.defaultSrc instanceof Array&&(u.defaultSrc=[...u.defaultSrc.filter(d=>!d.startsWith("'nonce")),n]),fs__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 Ss=react.forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=gr();return r?jsxRuntime.jsx(Ps,{src:o,options:n}):jsxRuntime.jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function Ps({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 Ts(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 Es({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 Os({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:d,nextPageUrl:y,nodes:m,previousPageUrl:g,startCursor:p}=_s(e,r),l=react.useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:i,hasPreviousPage:d,hasNextPage:u,startCursor:p},nodes:m}}}),[i,u,d,p,m,r,s.state]),P=react.useMemo(()=>react.forwardRef(function(h,S){return u?react.createElement(reactRouter.Link,{preventScrollReset:true,...h,to:y,state:l,replace:true,ref:S,onClick:()=>n(true)}):null}),[u,y,l]),f=react.useMemo(()=>react.forwardRef(function(h,S){return d?react.createElement(reactRouter.Link,{preventScrollReset:true,...h,to:g,state:l,replace:true,ref:S,onClick:()=>n(true)}):null}),[d,g,l]);return t({state:l,hasNextPage:u,hasPreviousPage:d,isLoading:o,nextPageUrl:y,nodes:m,previousPageUrl:g,NextLink:P,PreviousLink:f})}function ht(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 We(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 _s(e,t=""){e.pageInfo||We("pageInfo"),typeof e.pageInfo.startCursor>"u"&&We("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&We("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&We("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&We("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",m=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]),g=react.useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,R=n?.pagination?.[t]?.pageInfo,h=!f||R?.startCursor===void 0?e.pageInfo.startCursor:R.startCursor,S=!f||R?.endCursor===void 0?e.pageInfo.endCursor:R.endCursor,C=!f||R?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:R.hasPreviousPage,I=!f||R?.hasNextPage===void 0?e.pageInfo.hasNextPage:R.hasNextPage;return n?.pagination?.[t]?.nodes&&(y?(h=e.pageInfo.startCursor,C=e.pageInfo.hasPreviousPage):(S=e.pageInfo.endCursor,I=e.pageInfo.hasNextPage)),{startCursor:h,endCursor:S,hasPreviousPage:C,hasNextPage:I}},[y,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),p=react.useRef({params:ht(a,n),pathname:s});react.useEffect(()=>{window.__hydrogenHydrated=true;},[]),react.useEffect(()=>{let f=ht(a,n),R=p.current.params;(s!==p.current.pathname||f!==R)&&!(r.state==="idle"&&!r.location)&&(p.current={pathname:s,params:ht(a,n)},o(`${s}?${ht(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"),g.startCursor&&f.set(c,g.startCursor),`?${f.toString()}`},[a,g.startCursor]),P=react.useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"next"),g.endCursor&&f.set(c,g.endCursor),`?${f.toString()}`},[a,g.endCursor]);return {...g,previousPageUrl:l,nextPageUrl:P,nodes:m}}function Us(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 Ns(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 Gs({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let c=t;c[0]?.values&&(ee("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),c[0]&&!c[0].optionValues&&(c=t.map(p=>({...p,optionValues:p.values?.map(l=>({name:l}))||[]}))));let i=r instanceof Array?r:hydrogenReact.flattenConnection(r),{searchParams:u,path:d,alreadyOnProductPage:y}=Qs(e,o,n),m=c.filter(p=>p?.optionValues?.length===1),g=a?a?.selectedOptions?.reduce((p,l)=>(p[l.name]=l.value,p),{}):{};return react.createElement(react.Fragment,null,...react.useMemo(()=>c.map(p=>{let l,P=[];for(let f of p.optionValues){let R=new URLSearchParams(y?u:void 0);R.set(p.name,f.name),m.forEach(v=>{v.optionValues[0].name&&R.set(v.name,v.optionValues[0].name);});let h=i.find(v=>v?.selectedOptions?.every(U=>(R.get(U?.name)||g?.[U?.name])===U?.value)),S=u.get(p.name);!S&&a&&(S=g?.[p.name]||null);let C=S?S===f.name:false;C&&(l=f.name);let I="?"+R.toString();P.push({value:f.name,optionValue:f,isAvailable:h?h.availableForSale:true,to:d+I,search:I,isActive:C,variant:h});}return s({option:{name:p.name,value:l,values:P}})}),[c,i,s]))}var Bs=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 Qs(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 Ws(){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.
575
543
  Reason: Requires major CLI infrastructure modernization.
576
544
  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.
577
545
  Reason: React Router plugin incompatibility with Hydrogen CLI build pipeline.
@@ -581,12 +549,12 @@ Alternative: Route-level code splitting via v8_splitRouteModules is enabled.`);i
581
549
  Reason: Hydrogen CLI bypasses React Router buildEnd hook execution.
582
550
  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.
583
551
  Reason: Conflicts with Hydrogen CSP nonce-based authentication.
584
- 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 js=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 i="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",c=String.raw;return new Response(c`
552
+ Impact: Would break Content Security Policy and cause script execution failures.`)}}}var Ys=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 Js=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(),d=await n.getAccessToken();u&&(s["customer-account"]={name:"Customer Account API",value:u,authHeader:"Authorization",accessToken:d,apiUrl:n.getApiUrl(),icon:"CA"});}let c="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",i=String.raw;return new Response(i`
585
553
  <!DOCTYPE html>
586
554
  <html lang="en">
587
555
  <head>
588
556
  <title>GraphiQL</title>
589
- <link rel="icon" type="image/x-icon" href="${i}" />
557
+ <link rel="icon" type="image/x-icon" href="${c}" />
590
558
  <meta charset="utf-8" />
591
559
  <style>
592
560
  body {
@@ -900,7 +868,7 @@ Impact: Would break Content Security Policy and cause script execution failures.
900
868
  </div>
901
869
  </body>
902
870
  </html>
903
- `,{status:200,headers:{"content-type":"text/html"}})};async function Ks(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:i,searchParams:c}=s,u=c.has("_data");c.delete("redirect"),c.delete("return_to"),c.delete("_data");let p=(n?s.toString().replace(s.origin,""):i).toLowerCase();if(s.pathname==="/admin"&&!o)return Cr(`${t.getShopifyDomain()}/admin`,u,c,n);try{let{urlRedirects:y}=await t.query(Ys,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),m=y?.edges?.[0]?.node?.target;if(m)return Cr(m,u,c,n);let g=ft(r.url);if(g)return Cr(g,u,c,n)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,y);}return a}var gr="https://example.com";function Cr(e,t,r,o){let n=new URL(e,gr);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(gr,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(gr,"")}})}var Ys=`#graphql
871
+ `,{status:200,headers:{"content-type":"text/html"}})};async function zs(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 d=(n?s.toString().replace(s.origin,""):c).toLowerCase();if(s.pathname==="/admin"&&!o)return Sr(`${t.getShopifyDomain()}/admin`,u,i,n);try{let{urlRedirects:y}=await t.query(Xs,{variables:{query:"path:"+d.replace(/\/+$/,"")}}),m=y?.edges?.[0]?.node?.target;if(m)return Sr(m,u,i,n);let g=Ct(r.url);if(g)return Sr(g,u,i,n)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${d}`,y);}return a}var Ar="https://example.com";function Sr(e,t,r,o){let n=new URL(e,Ar);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(Ar,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(Ar,"")}})}var Xs=`#graphql
904
872
  query redirects($query: String) {
905
873
  urlRedirects(first: 1, query: $query) {
906
874
  edges {
@@ -910,24 +878,24 @@ Impact: Would break Content Security Policy and cause script execution failures.
910
878
  }
911
879
  }
912
880
  }
913
- `;var Js={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},zs=/[&><\u2028\u2029]/g;function Xo(e){return e.replace(zs,t=>Js[t])}var se="Error in SEO input: ",ee={title:{validate:e=>{if(typeof e!="string")throw new Error(se.concat("`title` should be a string"));if(typeof e=="string"&&e.length>70)throw new Error(se.concat("`title` should not be longer than 70 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(se.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(se.concat("`description` should not be longer than 160 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(se.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(se.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(se.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(se.concat("`handle` should start with `@`"));return e}}};function Zo(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=te(ee.title,e.title),n=Ar(e?.titleTemplate,o);if(!n)break;t.push(M("title",{title:n}),M("meta",{property:"og:title",content:n}),M("meta",{name:"twitter:title",content:n}));break}case "description":{let o=te(ee.description,e.description);if(!o)break;t.push(M("meta",{name:"description",content:o}),M("meta",{property:"og:description",content:o}),M("meta",{name:"twitter:description",content:o}));break}case "url":{let o=te(ee.url,e.url);if(!o)break;let a=o.split("?")[0].replace(/\/$/,"");t.push(M("link",{rel:"canonical",href:a}),M("meta",{property:"og:url",content:a}));break}case "handle":{let o=te(ee.handle,e.handle);if(!o)break;t.push(M("meta",{name:"twitter:site",content:o}),M("meta",{name:"twitter:creator",content:o}));break}case "media":{let o,n=ie(e.media);for(let a of n)if(typeof a=="string"&&t.push(M("meta",{name:"og:image",content:a})),a&&typeof a=="object"){let s=a.type||"image",i=a?{url:a?.url,secure_url:a?.url,type:Sr(a.url),width:a?.width,height:a?.height,alt:a?.altText}:{};for(let c of Object.keys(i))i[c]&&(o=i[c],t.push(M("meta",{property:`og:${s}:${c}`,content:o},i.url)));}break}case "jsonLd":{let o=ie(e.jsonLd),n=0;for(let a of o){if(typeof a!="object")continue;let s=M("script",{type:"application/ld+json",children:JSON.stringify(a,(i,c)=>typeof c=="string"?Xo(c):c)},`json-ld-${a?.["@type"]||a?.name||n++}`);t.push(s);}break}case "alternates":{let o=ie(e.alternates);for(let n of o){if(!n)continue;let{language:a,url:s,default:i}=n,c=a?`${a}${i?"-default":""}`:void 0;t.push(M("link",{rel:"alternate",hrefLang:c,href:s}));}break}case "robots":{if(!e.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:a,noArchive:s,noFollow:i,noImageIndex:c,noIndex:u,noSnippet:p,noTranslate:y,unavailableAfter:m}=e.robots,g=[s&&"noarchive",c&&"noimageindex",p&&"nosnippet",y&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,a&&`max-video-preview:${a}`,m&&`unavailable_after:${m}`],d=(u?"noindex":"index")+","+(i?"nofollow":"follow");for(let l of g)l&&(d+=`,${l}`);t.push(M("meta",{name:"robots",content:d}));break}}return t.flat().sort((r,o)=>r.key.localeCompare(o.key))}function M(e,t,r){let o={tag:e,props:{},key:""};return e==="title"?(o.children=t.title,o.key=hr(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=hr(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=hr(o,r),o)}function hr(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 Ar(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function Sr(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";default:return "image/jpeg"}}function ie(e){return Array.isArray(e)?e:[e]}function te(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}function Xs(...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:ie(o.jsonLd).concat(a)}:{...o,...n,jsonLd:[a]}:{...o,...n}},{})||{};for(let o of Object.keys(r))switch(o){case "title":{let n=te(ee.title,r.title),a=Ar(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=te(ee.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=te(ee.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=te(ee.handle,r.handle);if(!n)break;t.push({property:"twitter:site",content:n},{property:"twitter:creator",content:n});break}case "media":{let n,a=ie(r.media);for(let s of a)if(typeof s=="string"&&t.push({property:"og:image",content:s}),s&&typeof s=="object"){let i=s.type||"image",c=s?{url:s?.url,secure_url:s?.url,type:Sr(s.url),width:s?.width,height:s?.height,alt:s?.altText}:{};for(let u of Object.keys(c))c[u]&&(n=c[u],t.push({property:`og:${i}:${u}`,content:n}));}break}case "jsonLd":{let n=ie(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=ie(r.alternates);for(let a of n){if(!a)continue;let{language:s,url:i,default:c}=a,u=s?`${s}${c?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:u,href:i});}break}case "robots":{if(!r.robots)break;let{maxImagePreview:n,maxSnippet:a,maxVideoPreview:s,noArchive:i,noFollow:c,noImageIndex:u,noIndex:p,noSnippet:y,noTranslate:m,unavailableAfter:g}=r.robots,d=[i&&"noarchive",u&&"noimageindex",y&&"nosnippet",m&&"notranslate",n&&`max-image-preview:${n}`,a&&`max-snippet:${a}`,s&&`max-video-preview:${s}`,g&&`unavailable_after:${g}`],l=(p?"noindex":"index")+","+(c?"nofollow":"follow");for(let P of d)P&&(l+=`,${P}`);t.push({name:"robots",content:l});break}}return t}var ii=react.lazy(()=>Promise.resolve().then(()=>(on(),rn)));function ci({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:i,...c}=s,u={...c,...r},p=i?.seo,y=c?.data?.seo;return !p&&!y?[]:p?gt(p,u):[y]}).reduce((s,i)=>{Object.keys(i).forEach(u=>!i[u]&&delete i[u]);let{jsonLd:c}=i;return c?s?.jsonLd?Array.isArray(c)?{...s,...i,jsonLd:[...s.jsonLd,...c]}:{...s,...i,jsonLd:[...s.jsonLd,c]}:{...s,...i,jsonLd:[c]}:{...s,...i}},{}),[t,r]),{html:n,loggerMarkup:a}=react.useMemo(()=>{let s=Zo(o),i=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)),c=react.createElement(react.Suspense,{fallback:null},react.createElement(ii,{headTags:s}));return {html:i,loggerMarkup:c}},[o]);return react.createElement(react.Fragment,null,n,e&&a)}function gt(e,...t){if(e instanceof Function)return gt(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,gt(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=gt(a,...t);}),r):e}function di(e){return jsxRuntime.jsx(hydrogenReact.ShopPayButton,{channel:"hydrogen",...e})}var li=`<?xml version="1.0" encoding="UTF-8"?>
881
+ `;var Zs={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},ei=/[&><\u2028\u2029]/g;function tn(e){return e.replace(ei,t=>Zs[t])}var ue="Error in SEO input: ",oe={title:{validate:e=>{if(typeof e!="string")throw new Error(ue.concat("`title` should be a string"));if(typeof e=="string"&&e.length>70)throw new Error(ue.concat("`title` should not be longer than 70 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(ue.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(ue.concat("`description` should not be longer than 160 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(ue.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(ue.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(ue.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(ue.concat("`handle` should start with `@`"));return e}}};function rn(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=ne(oe.title,e.title),n=vr(e?.titleTemplate,o);if(!n)break;t.push(H("title",{title:n}),H("meta",{property:"og:title",content:n}),H("meta",{name:"twitter:title",content:n}));break}case "description":{let o=ne(oe.description,e.description);if(!o)break;t.push(H("meta",{name:"description",content:o}),H("meta",{property:"og:description",content:o}),H("meta",{name:"twitter:description",content:o}));break}case "url":{let o=ne(oe.url,e.url);if(!o)break;let a=o.split("?")[0].replace(/\/$/,"");t.push(H("link",{rel:"canonical",href:a}),H("meta",{property:"og:url",content:a}));break}case "handle":{let o=ne(oe.handle,e.handle);if(!o)break;t.push(H("meta",{name:"twitter:site",content:o}),H("meta",{name:"twitter:creator",content:o}));break}case "media":{let o,n=de(e.media);for(let a of n)if(typeof a=="string"&&t.push(H("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:Rr(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(H("meta",{property:`og:${s}:${i}`,content:o},c.url)));}break}case "jsonLd":{let o=de(e.jsonLd),n=0;for(let a of o){if(typeof a!="object")continue;let s=H("script",{type:"application/ld+json",children:JSON.stringify(a,(c,i)=>typeof i=="string"?tn(i):i)},`json-ld-${a?.["@type"]||a?.name||n++}`);t.push(s);}break}case "alternates":{let o=de(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(H("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:d,noTranslate:y,unavailableAfter:m}=e.robots,g=[s&&"noarchive",i&&"noimageindex",d&&"nosnippet",y&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,a&&`max-video-preview:${a}`,m&&`unavailable_after:${m}`],p=(u?"noindex":"index")+","+(c?"nofollow":"follow");for(let l of g)l&&(p+=`,${l}`);t.push(H("meta",{name:"robots",content:p}));break}}return t.flat().sort((r,o)=>r.key.localeCompare(o.key))}function H(e,t,r){let o={tag:e,props:{},key:""};return e==="title"?(o.children=t.title,o.key=Pr(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=Pr(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=Pr(o,r),o)}function Pr(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 vr(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function Rr(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";default:return "image/jpeg"}}function de(e){return Array.isArray(e)?e:[e]}function ne(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}function ti(...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:de(o.jsonLd).concat(a)}:{...o,...n,jsonLd:[a]}:{...o,...n}},{})||{};for(let o of Object.keys(r))switch(o){case "title":{let n=ne(oe.title,r.title),a=vr(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=ne(oe.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=ne(oe.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=ne(oe.handle,r.handle);if(!n)break;t.push({property:"twitter:site",content:n},{property:"twitter:creator",content:n});break}case "media":{let n,a=de(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:Rr(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=de(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=de(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:d,noSnippet:y,noTranslate:m,unavailableAfter:g}=r.robots,p=[c&&"noarchive",u&&"noimageindex",y&&"nosnippet",m&&"notranslate",n&&`max-image-preview:${n}`,a&&`max-snippet:${a}`,s&&`max-video-preview:${s}`,g&&`unavailable_after:${g}`],l=(d?"noindex":"index")+","+(i?"nofollow":"follow");for(let P of p)P&&(l+=`,${P}`);t.push({name:"robots",content:l});break}}return t}var di=react.lazy(()=>Promise.resolve().then(()=>(sn(),an)));function pi({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},d=c?.seo,y=i?.data?.seo;return !d&&!y?[]:d?At(d,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=rn(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(di,{headTags:s}));return {html:c,loggerMarkup:i}},[o]);return react.createElement(react.Fragment,null,n,e&&a)}function At(e,...t){if(e instanceof Function)return At(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,At(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=At(a,...t);}),r):e}function yi(e){return jsxRuntime.jsx(hydrogenReact.ShopPayButton,{channel:"hydrogen",...e})}var mi=`<?xml version="1.0" encoding="UTF-8"?>
914
882
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
915
- `,yi=`
916
- </sitemapindex>`,an=`<?xml version="1.0" encoding="UTF-8"?>
917
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">`,sn="</urlset>";async function fi(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(Ti);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,i=li+o.map(c=>{if(!a[c])throw new Error(`[h2:sitemap:error] No data found for type ${c}. Check types passed to \`getSitemapIndex\``);return gi(c,a[c].pagesCount.count,s)}).join(`
918
- `)+n.map(c=>" <sitemap><loc>"+(s+(c.startsWith("/")?c:"/"+c))+"</loc></sitemap>").join(`
919
- `)+yi;return new Response(i,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function mi(e){let{storefront:t,request:r,params:o,getLink:n,locales:a=[],getChangeFreq:s,noItemsFallback:i="/"}=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 c=o.type,u=Ei[c];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,m="";return p?.sitemap?.resources?.items?.length?m=an+p.sitemap.resources.items.map(g=>Ci({getChangeFreq:s,url:n({type:g.type??c,baseUrl:y,handle:g.handle}),type:c,getLink:n,updatedAt:g.updatedAt,handle:g.handle,metaobjectType:g.type,locales:a,baseUrl:y})).join(`
920
- `)+sn:m=an+`
921
- <url><loc>${y+i}</loc></url>
922
- `+sn,new Response(m,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function gi(e,t,r){let o="";for(let n=1;n<=t;n++)o+=` <sitemap><loc>${r}/sitemap/${e}/${n}.xml</loc></sitemap>
923
- `;return o}function Ci({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:i,metaobjectType:c}){return `<url>
883
+ `,gi=`
884
+ </sitemapindex>`,un=`<?xml version="1.0" encoding="UTF-8"?>
885
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">`,dn="</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(wi);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=mi+o.map(i=>{if(!a[i])throw new Error(`[h2:sitemap:error] No data found for type ${i}. Check types passed to \`getSitemapIndex\``);return Ai(i,a[i].pagesCount.count,s)}).join(`
886
+ `)+n.map(i=>" <sitemap><loc>"+(s+(i.startsWith("/")?i:"/"+i))+"</loc></sitemap>").join(`
887
+ `)+gi;return new Response(c,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function hi(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=Di[i];if(!u)throw new Response("Not found",{status:404});let d=await t.query(u,{variables:{page:parseInt(o.page,10)}});if(!d)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,m="";return d?.sitemap?.resources?.items?.length?m=un+d.sitemap.resources.items.map(g=>Si({getChangeFreq:s,url:n({type:g.type??i,baseUrl:y,handle:g.handle}),type:i,getLink:n,updatedAt:g.updatedAt,handle:g.handle,metaobjectType:g.type,locales:a,baseUrl:y})).join(`
888
+ `)+dn:m=un+`
889
+ <url><loc>${y+c}</loc></url>
890
+ `+dn,new Response(m,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function Ai(e,t,r){let o="";for(let n=1;n<=t;n++)o+=` <sitemap><loc>${r}/sitemap/${e}/${n}.xml</loc></sitemap>
891
+ `;return o}function Si({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:c,metaobjectType:i}){return `<url>
924
892
  <loc>${e}</loc>
925
893
  <lastmod>${t}</lastmod>
926
- <changefreq>${i?i({type:c??o,handle:s}):"weekly"}</changefreq>
927
- ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
894
+ <changefreq>${c?c({type:i??o,handle:s}):"weekly"}</changefreq>
895
+ ${r.map(u=>Pi(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
928
896
  `)}
929
897
  </url>
930
- `.trim()}function hi(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var Ai=`#graphql
898
+ `.trim()}function Pi(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var vi=`#graphql
931
899
  query SitemapProducts($page: Int!) {
932
900
  sitemap(type: PRODUCT) {
933
901
  resources(page: $page) {
@@ -938,7 +906,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
938
906
  }
939
907
  }
940
908
  }
941
- `,Si=`#graphql
909
+ `,Ri=`#graphql
942
910
  query SitemapCollections($page: Int!) {
943
911
  sitemap(type: COLLECTION) {
944
912
  resources(page: $page) {
@@ -949,7 +917,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
949
917
  }
950
918
  }
951
919
  }
952
- `,Pi=`#graphql
920
+ `,Ii=`#graphql
953
921
  query SitemapArticles($page: Int!) {
954
922
  sitemap(type: ARTICLE) {
955
923
  resources(page: $page) {
@@ -960,7 +928,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
960
928
  }
961
929
  }
962
930
  }
963
- `,vi=`#graphql
931
+ `,Ti=`#graphql
964
932
  query SitemapPages($page: Int!) {
965
933
  sitemap(type: PAGE) {
966
934
  resources(page: $page) {
@@ -971,7 +939,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
971
939
  }
972
940
  }
973
941
  }
974
- `,Ri=`#graphql
942
+ `,Ei=`#graphql
975
943
  query SitemapBlogs($page: Int!) {
976
944
  sitemap(type: BLOG) {
977
945
  resources(page: $page) {
@@ -982,7 +950,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
982
950
  }
983
951
  }
984
952
  }
985
- `,Ii=`#graphql
953
+ `,bi=`#graphql
986
954
  query SitemapMetaobjects($page: Int!) {
987
955
  sitemap(type: METAOBJECT) {
988
956
  resources(page: $page) {
@@ -996,7 +964,7 @@ ${r.map(u=>hi(n({type:c??o,baseUrl:a,handle:s,locale:u}),u)).join(`
996
964
  }
997
965
  }
998
966
  }
999
- `,Ti=`#graphql
967
+ `,wi=`#graphql
1000
968
  query SitemapIndex {
1001
969
  products: sitemap(type: PRODUCT) {
1002
970
  pagesCount {
@@ -1029,7 +997,7 @@ query SitemapIndex {
1029
997
  }
1030
998
  }
1031
999
  }
1032
- `,Ei={products:Ai,articles:Pi,collections:Si,pages:vi,blogs:Ri,metaObjects:Ii};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
1000
+ `,Di={products:vi,articles:Ii,collections:Ri,pages:Ti,blogs:Ei,metaObjects:bi};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
1033
1001
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartCreate
1034
1002
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd
1035
1003
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesUpdate
@@ -1047,5 +1015,5 @@ query SitemapIndex {
1047
1015
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesRemove
1048
1016
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesUpdate
1049
1017
  //! @see: https://shopify.dev/docs/api/storefront/2026-04/mutations/cartDeliveryAddressesReplace
1050
- 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=Xn;exports.AnalyticsEvent=F;exports.CacheCustom=Nt;exports.CacheLong=kt;exports.CacheNone=Ut;exports.CacheShort=ue;exports.CartForm=Z;exports.InMemoryCache=$t;exports.NonceProvider=Mo;exports.OptimisticInput=Rs;exports.Pagination=ws;exports.RichText=Ws;exports.Script=Cs;exports.Seo=ci;exports.ShopPayButton=di;exports.VariantSelector=Fs;exports.cartAttributesUpdateDefault=Xt;exports.cartBuyerIdentityUpdateDefault=Yt;exports.cartCreateDefault=Bt;exports.cartDiscountCodesUpdateDefault=Kt;exports.cartGetDefault=Gt;exports.cartGetIdDefault=Ft;exports.cartGiftCardCodesAddDefault=rr;exports.cartGiftCardCodesRemoveDefault=or;exports.cartGiftCardCodesUpdateDefault=tr;exports.cartLinesAddDefault=Qt;exports.cartLinesRemoveDefault=jt;exports.cartLinesUpdateDefault=Wt;exports.cartMetafieldDeleteDefault=er;exports.cartMetafieldsSetDefault=Zt;exports.cartNoteUpdateDefault=Jt;exports.cartSelectedDeliveryOptionsUpdateDefault=zt;exports.cartSetIdDefault=Ht;exports.changelogHandler=Wa;exports.createCartHandler=nr;exports.createContentSecurityPolicy=ls;exports.createCustomerAccountClient=lr;exports.createHydrogenContext=as;exports.createRequestHandler=is;exports.createStorefrontClient=ho;exports.createWithCache=da;exports.formatAPIResult=T;exports.generateCacheControlHeader=Ue;exports.getPaginationVariables=xs;exports.getSelectedProductOptions=Hs;exports.getSeoMeta=Xs;exports.getShopAnalytics=Jn;exports.getSitemap=mi;exports.getSitemapIndex=fi;exports.graphiqlLoader=js;exports.hydrogenContext=ja;exports.hydrogenPreset=Gs;exports.hydrogenRoutes=Ss;exports.storefrontRedirect=Ks;exports.useAnalytics=J;exports.useCustomerPrivacy=Tt;exports.useNonce=yr;exports.useOptimisticCart=Ba;exports.useOptimisticData=vs;exports.useOptimisticVariant=Ls;//# sourceMappingURL=index.cjs.map
1018
+ 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=ta;exports.AnalyticsEvent=G;exports.CacheCustom=Ft;exports.CacheLong=Mt;exports.CacheNone=Vt;exports.CacheShort=le;exports.CartForm=re;exports.InMemoryCache=qt;exports.NonceProvider=Ho;exports.OptimisticInput=Es;exports.Pagination=Os;exports.RichText=Ys;exports.Script=Ss;exports.Seo=pi;exports.ShopPayButton=yi;exports.VariantSelector=Gs;exports.cartAttributesUpdateDefault=tr;exports.cartBuyerIdentityUpdateDefault=Xt;exports.cartCreateDefault=jt;exports.cartDiscountCodesUpdateDefault=zt;exports.cartGetDefault=Wt;exports.cartGetIdDefault=Gt;exports.cartGiftCardCodesAddDefault=ar;exports.cartGiftCardCodesRemoveDefault=sr;exports.cartGiftCardCodesUpdateDefault=nr;exports.cartLinesAddDefault=Kt;exports.cartLinesRemoveDefault=Jt;exports.cartLinesUpdateDefault=Yt;exports.cartMetafieldDeleteDefault=or;exports.cartMetafieldsSetDefault=rr;exports.cartNoteUpdateDefault=Zt;exports.cartSelectedDeliveryOptionsUpdateDefault=er;exports.cartSetIdDefault=Bt;exports.changelogHandler=Ya;exports.createCartHandler=ir;exports.createContentSecurityPolicy=ms;exports.createCustomerAccountClient=mr;exports.createHydrogenContext=cs;exports.createRequestHandler=ds;exports.createStorefrontClient=Po;exports.createWithCache=ya;exports.formatAPIResult=T;exports.generateCacheControlHeader=Ve;exports.getPaginationVariables=Us;exports.getSelectedProductOptions=Bs;exports.getSeoMeta=ti;exports.getShopAnalytics=Zn;exports.getSitemap=hi;exports.getSitemapIndex=Ci;exports.graphiqlLoader=Js;exports.hydrogenContext=Ja;exports.hydrogenPreset=Ws;exports.hydrogenRoutes=Rs;exports.storefrontRedirect=zs;exports.useAnalytics=Z;exports.useCustomerPrivacy=wt;exports.useNonce=gr;exports.useOptimisticCart=ja;exports.useOptimisticData=Ts;exports.useOptimisticVariant=Ns;//# sourceMappingURL=index.cjs.map
1051
1019
  //# sourceMappingURL=index.cjs.map