@shopify/hydrogen 2026.1.3 → 2026.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import {createContext,forwardRef,lazy,useContext,useMemo,useEffect,useRef,useState,createElement,Fragment as Fragment$1,Suspense}from'react';import {createContext as createContext$1,useRevalidator,useFetcher,useFetchers,RouterContextProvider,createRequestHandler,useNavigation,useLocation,useNavigate,Link,useMatches}from'react-router';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useLoadScript,useShopifyCookies,getTrackingValues,createStorefrontClient,SHOPIFY_STOREFRONT_ID_HEADER,SHOPIFY_STOREFRONT_Y_HEADER,SHOPIFY_STOREFRONT_S_HEADER,SHOPIFY_UNIQUE_TOKEN_HEADER,SHOPIFY_VISIT_TOKEN_HEADER,flattenConnection,RichText,ShopPayButton,parseGid,sendShopifyAnalytics,AnalyticsEventName,AnalyticsPageType,getClientBrowserParameters}from'@shopify/hydrogen-react';export{AnalyticsEventName,AnalyticsPageType,ExternalVideo,IMAGE_FRAGMENT,Image,MediaFile,ModelViewer,Money,ShopifySalesChannel,Video,customerAccountApiCustomScalars,decodeEncodedVariant,flattenConnection,getAdjacentAndFirstAvailableVariants,getClientBrowserParameters,getProductOptions,getShopifyCookies,getTrackingValues,isOptionValueCombinationInEncodedVariant,mapSelectedProductOptionToObject,parseGid,parseMetafield,sendShopifyAnalytics,storefrontApiCustomScalars,useLoadScript,useMoney,useSelectedOptionInUrlParam,useShopifyCookies}from'@shopify/hydrogen-react';import {useLoadScript as useLoadScript$1}from'@shopify/hydrogen-react/load-script';import {createGraphQLClient}from'@shopify/graphql-client';import {parse,stringify}from'worktop/cookie';import ja from'content-security-policy-builder';function le(e){let{type:t,data:r={},customData:o}=e,n=useLocation(),{publish:a,cart:s,prevCart:c,shop:i,customData:u}=Y(),p=n.pathname+n.search,y={...r,customData:{...u,...o},cart:s,prevCart:c,shop:i};return useEffect(()=>{i?.shopId&&(y={...y,url:window.location.href},a(t,y));},[a,p,i?.shopId]),null}function Cr(e){return jsx(le,{...e,type:"page_viewed"})}function hr(e){return jsx(le,{...e,type:"product_viewed"})}function Ar(e){return jsx(le,{...e,type:"collection_viewed"})}function Sr(e){return jsx(le,{...e,type:"cart_viewed"})}function Pr(e){return jsx(le,{...e,type:"search_viewed"})}function vr(e){return jsx(le,{...e})}var F={PAGE_VIEWED:"page_viewed",PRODUCT_VIEWED:"product_viewed",COLLECTION_VIEWED:"collection_viewed",CART_VIEWED:"cart_viewed",SEARCH_VIEWED:"search_viewed",CART_UPDATED:"cart_updated",PRODUCT_ADD_TO_CART:"product_added_to_cart",PRODUCT_REMOVED_FROM_CART:"product_removed_from_cart",CUSTOM_EVENT:"custom_"};var qe="Custom-Storefront-Request-Group-ID",Ge="X-Shopify-Storefront-Access-Token",ft="X-SDK-Variant",mt="X-SDK-Variant-Source",gt="X-SDK-Version",Ct="X-Shopify-Client-IP",Re="X-Shopify-Client-IP-Sig",Be="_sfapi_proxy",Qe="_server_tracking";function jo(e){return Object.entries(e).map(([t,r])=>r?`${t};desc=${r}`:void 0).filter(Boolean).join(", ")}function Ie(e,t){let r=typeof t=="string"?t:jo(t);r&&e.headers.append("Server-Timing",r);}var Ko=["_y","_s","_cmp"];function Rr(e){let t={};if(!e)return t;let r=new RegExp(`\\b(${Ko.join("|")});desc="?([^",]+)"?`,"g"),o;for(;(o=r.exec(e))!==null;)t[o[1]]=o[2];return t}function Ir(e){if(typeof window>"u")return false;try{return !!window.performance.getEntriesByType("navigation")[0]?.serverTiming?.some(r=>r.name===e)}catch{return false}}function Tr(){return Ir(Be)}function Er(){return Ir(Qe)}var en="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js",tn="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function At(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function St(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,checkoutDomain:n,storefrontAccessToken:a,country:s,locale:c,sameDomainForStorefrontApi:i}=e,u=useMemo(()=>i??Tr(),[i]),p=useMemo(()=>u&&!Er(),[u]),y=useShopifyCookies({fetchTrackingValues:p,storefrontAccessToken:a,ignoreDeprecatedCookies:true}),g=useMemo(getTrackingValues,[y]),{revalidate:m}=useRevalidator();useLoadScript$1(t?tn:en,{attributes:{id:"customer-privacy-api"}});let{observing:d,setLoaded:l,apisLoaded:P}=on({withPrivacyBanner:t}),f=useMemo(()=>{n||At("checkoutDomain"),a||At("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=nn(n);return {checkoutRootDomain:u&&typeof window<"u"?window.location.host:n,storefrontRootDomain:h?"."+h:void 0,storefrontAccessToken:a,country:s,locale:c}},[At,n,a,s,c]);useEffect(()=>{let h=A=>{let C=getTrackingValues();if((g.visitToken!==C.visitToken||g.uniqueToken!==C.uniqueToken)&&m().catch(()=>{console.warn("[h2:warn:useCustomerPrivacy] Revalidation failed after consent change.");}),r){let R=re();if(R?.shouldShowBanner()){let I=R.currentVisitorConsent();if(I&&I.marketing===""&&I.analytics===""&&I.preferences==="")return}r(A.detail);}};return document.addEventListener("visitorConsentCollected",h),()=>{document.removeEventListener("visitorConsentCollected",h);}},[r]),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=Dr({privacyBanner:C,config:f}),l.privacyBanner());}});},[t,f,Dr,l.privacyBanner]),useEffect(()=>{if(d.current.customerPrivacy)return;d.current.customerPrivacy=true;let h=null,A=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return A},set(C){typeof C=="object"&&C!==null&&Object.keys(C).length===0&&(A=C,Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return h},set(R){if(typeof R=="object"&&R!==null&&"setTrackingConsent"in R){let I=R;h={...I,setTrackingConsent:wr({customerPrivacy:I,config:f})},A={...A,customerPrivacy:h},l.customerPrivacy();}}}));}});},[f,wr,l.customerPrivacy]),useEffect(()=>{if(!P||!y)return;let h=re();if(h&&!h.cachedConsent){let A=getTrackingValues();A.consent&&(h.cachedConsent=A.consent);}if(t){let A=Te();A&&A.loadBanner(f);}rn(),o?.();},[P,y]);let v={customerPrivacy:re()};return t&&(v.privacyBanner=Te()),v}var br=false;function rn(){if(br)return;br=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function on({withPrivacyBanner:e}){let t=useRef({customerPrivacy:false,privacyBanner:false}),[r,o]=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 nn(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 wr({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 Dr({privacyBanner:e,config:t}){let r=e.loadBanner,o=e.showPreferences;function n(s){if(typeof s=="object"){r({...t,...s});return}r(t);}function a(s){if(typeof s=="object"){o({...t,...s});return}o(t);}return {loadBanner:n,showPreferences:a}}function re(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Te(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var Or="2026.1.3";function pn(){let e=re();if(!e)throw new Error("Shopify Customer Privacy API not available. Must be used within a useEffect. Make sure to load the Shopify Customer Privacy API with useCustomerPrivacy() or <AnalyticsProvider>.");return e}function _r({consent:e,onReady:t,domain:r}){let{subscribe:o,register:n,canTrack:a}=Y(),[s,c]=useState(false),[i,u]=useState(false),[p,y]=useState(""),g=useRef(false),{checkoutDomain:m,storefrontAccessToken:d,language:l}=e,{ready:P}=n("Internal_Shopify_Analytics");St({...e,locale:l,checkoutDomain:m||"mock.shop",storefrontAccessToken:d||"abcdefghijklmnopqrstuvwxyz123456",onReady:()=>!e.withPrivacyBanner&&u(true),onVisitorConsentCollected:v=>{try{y(JSON.stringify(v));}catch{}u(true);}});let f=useMemo(()=>i?a():true,[i,a,p]);return useShopifyCookies({hasUserConsent:f,domain:r,checkoutDomain:m,fetchTrackingValues:false,ignoreDeprecatedCookies:!i}),useEffect(()=>{g.current||(g.current=true,o(F.PAGE_VIEWED,yn),o(F.PRODUCT_VIEWED,fn),o(F.COLLECTION_VIEWED,mn),o(F.SEARCH_VIEWED,gn),o(F.PRODUCT_ADD_TO_CART,Cn),c(true));},[o]),useEffect(()=>{s&&i&&(P(),t());},[s,i,t]),null}function Ke(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function we(e){let t=pn(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){Ke("shopId");return}if(!e?.shop?.acceptedLanguage){Ke("acceptedLanguage");return}if(!e?.shop?.currency){Ke("currency");return}if(!e?.shop?.hydrogenSubchannelId){Ke("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:Or,...e.shop,hasUserConsent:r,...getClientBrowserParameters(),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function ln(e,t){if(t===null)return;let r=we(e);return r?{...r,cartId:t.id}:void 0}var oe={};function yn(e){let t=we(e);t&&(sendShopifyAnalytics({eventName:AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...oe}}),oe={});}function fn(e){let t=we(e);if(t&&Lr({type:"product",products:e.products})){let r=vt(e.products);oe={pageType:AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...oe,products:vt(e.products)},sendShopifyAnalytics({eventName:AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function mn(e){let t=we(e);t&&(oe={pageType:AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...oe,collectionHandle:e.collection.handle,collectionId:e.collection.id},sendShopifyAnalytics({eventName:AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function gn(e){let t=we(e);t&&(oe={pageType:AnalyticsPageType.search},t={...t,...oe,searchString:e.searchTerm},sendShopifyAnalytics({eventName:AnalyticsEventName.SEARCH_VIEW,payload:t}));}function Cn(e){let{cart:t,currentLine:r}=e,o=ln(e,t);!o||!r?.id||hn({matchedLine:r,eventPayload:o});}function hn({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};Lr({type:"cart",products:[r]})&&sendShopifyAnalytics({eventName:AnalyticsEventName.ADD_TO_CART,payload:{...t,products:vt([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 Lr({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 vt(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 Nr(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 Mr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:c}=Y(),i=useRef(null);return useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){Nr("id");return}if(!u.updatedAt){Nr("updatedAt");return}}t(({cart:p,prevCart:y})=>u?.updatedAt!==p?.updatedAt?{cart:u,prevCart:p}:{cart:p,prevCart:y});}),()=>{}},[t,e]),useEffect(()=>{if(!s||!s?.updatedAt||s?.updatedAt===c?.updatedAt)return;let u;try{u=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{u=null;}if(s.id===u?.id&&s.updatedAt===u?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:s,prevCart:c,shop:o,customData:n};if(s.updatedAt===i.current)return;i.current=s.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let y=c?.lines?flattenConnection(c?.lines):[],g=s.lines?flattenConnection(s.lines):[];y?.forEach(m=>{let d=g.filter(l=>m.id===l.id);if(d?.length===1){let l=d[0];m.quantity<l.quantity?r("product_added_to_cart",{...p,prevLine:m,currentLine:l}):m.quantity>l.quantity&&r("product_removed_from_cart",{...p,prevLine:m,currentLine:l});}else r("product_removed_from_cart",{...p,prevLine:m});}),g?.forEach(m=>{let d=y.filter(l=>m.id===l.id);(!d||d.length===0)&&r("product_added_to_cart",{...p,currentLine:m});});},[s,c,r,o,n,a]),null}var In="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function Vr({shop:e}){let t=useRef(false),{subscribe:r,register:o}=Y(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=useLoadScript(In,{attributes:{id:"perfkit","data-application":"hydrogen","data-shop-id":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 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 $r=new Set,B=e=>{$r.has(e)||(console.warn(e),$r.add(e));},Fr=new Set,It=e=>{Fr.has(e)||(console.error(new Error(e)),Fr.add(e));};var Dn={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},Wr=createContext(Dn),ze=new Map,Oe={};function jr(){return Object.values(Oe).every(Boolean)}function Hr(e,t){ze.has(e)||ze.set(e,new Map),ze.get(e)?.set(t.toString(),t);}var Je=new Map;function qr(e,t){if(!jr()){Je.set(e,t);return}Kr(e,t);}function Kr(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 Gr(e){return Oe.hasOwnProperty(e)||(Oe[e]=false),{ready:()=>{Oe[e]=true,jr()&&Je.size>0&&(Je.forEach((t,r)=>{Kr(r,t);}),Je.clear());}}}function Br(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return false}function Qr(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 On({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let{shop:c}=xn(a),[i,u]=useState(!!e),[p,y]=useState(false),[g,m]=useState({cart:null,prevCart:null}),[d,l]=useState(e?()=>e:()=>Br);if(c)if(/\/68817551382$/.test(c.shopId))B("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let f=Qr("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");It(f);}if(!o.storefrontAccessToken){let f=Qr("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");It(f);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let P=useMemo(()=>({canTrack:d,...g,customData:n,publish:d()?qr:()=>{},shop:c,subscribe:Hr,register:Gr,customerPrivacy:re(),privacyBanner:Te()}),[i,d,g,g.cart?.updatedAt,g.prevCart,qr,Hr,n,c,Gr,JSON.stringify(Oe),re,Te]);return jsxs(Wr.Provider,{value:P,children:[r,!!c&&jsx(Cr,{}),!!c&&!!t&&jsx(Mr,{cart:t,setCarts:m}),!!c&&jsx(_r,{consent:o,onReady:()=>{u(true),l(e?()=>e:()=>Br),y(true);},domain:s}),!!c&&p&&jsx(Vr,{shop:c})]})}function Y(){let e=useContext(Wr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function xn(e){let[t,r]=useState(null);return useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function _n({storefront:e,publicStorefrontId:t="0"}){return e.query(Ln,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var Ln=`#graphql
1
+ import {createContext,forwardRef,lazy,useContext,useMemo,useEffect,useRef,useState,createElement,Fragment as Fragment$1,Suspense}from'react';import {createContext as createContext$1,useRevalidator,useFetcher,useFetchers,RouterContextProvider,createRequestHandler,useNavigation,useLocation,useNavigate,Link,useMatches}from'react-router';import {jsx,jsxs,Fragment}from'react/jsx-runtime';import {useLoadScript,useShopifyCookies,getTrackingValues,createStorefrontClient,SHOPIFY_STOREFRONT_ID_HEADER,SHOPIFY_STOREFRONT_Y_HEADER,SHOPIFY_STOREFRONT_S_HEADER,SHOPIFY_UNIQUE_TOKEN_HEADER,SHOPIFY_VISIT_TOKEN_HEADER,flattenConnection,RichText,ShopPayButton,parseGid,sendShopifyAnalytics,AnalyticsEventName,AnalyticsPageType,getClientBrowserParameters}from'@shopify/hydrogen-react';export{AnalyticsEventName,AnalyticsPageType,ExternalVideo,IMAGE_FRAGMENT,Image,MediaFile,ModelViewer,Money,ShopifySalesChannel,Video,customerAccountApiCustomScalars,decodeEncodedVariant,flattenConnection,getAdjacentAndFirstAvailableVariants,getClientBrowserParameters,getProductOptions,getShopifyCookies,getTrackingValues,isOptionValueCombinationInEncodedVariant,mapSelectedProductOptionToObject,parseGid,parseMetafield,sendShopifyAnalytics,storefrontApiCustomScalars,useLoadScript,useMoney,useSelectedOptionInUrlParam,useShopifyCookies}from'@shopify/hydrogen-react';import {useLoadScript as useLoadScript$1}from'@shopify/hydrogen-react/load-script';import {createGraphQLClient}from'@shopify/graphql-client';import {parse,stringify}from'worktop/cookie';import Ja from'content-security-policy-builder';function le(e){let{type:t,data:r={},customData:o}=e,n=useLocation(),{publish:a,cart:s,prevCart:c,shop:i,customData:u}=z(),p=n.pathname+n.search,y={...r,customData:{...u,...o},cart:s,prevCart:c,shop:i};return useEffect(()=>{i?.shopId&&(y={...y,url:window.location.href},a(t,y));},[a,p,i?.shopId]),null}function Pr(e){return jsx(le,{...e,type:"page_viewed"})}function Sr(e){return jsx(le,{...e,type:"product_viewed"})}function vr(e){return jsx(le,{...e,type:"collection_viewed"})}function Rr(e){return jsx(le,{...e,type:"cart_viewed"})}function Ir(e){return jsx(le,{...e,type:"search_viewed"})}function Tr(e){return 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",Ct="X-SDK-Variant",ht="X-SDK-Variant-Source",At="X-SDK-Version",Ge="X-Shopify-Client-IP",fe="X-Shopify-Client-IP-Sig",Be="_sfapi_proxy",Qe="_server_tracking";function Jo(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:Jo(t);r&&e.headers.append("Server-Timing",r);}var zo=["_y","_s","_cmp"];function Er(e){let t={};if(!e)return t;let r=new RegExp(`\\b(${zo.join("|")});desc="?([^",]+)"?`,"g"),o;for(;(o=r.exec(e))!==null;)t[o[1]]=o[2];return t}function br(e){if(typeof window>"u")return false;try{return !!window.performance.getEntriesByType("navigation")[0]?.serverTiming?.some(r=>r.name===e)}catch{return false}}function wr(){return br(Be)}function Dr(){return br(Qe)}var on="https://cdn.shopify.com/shopifycloud/consent-tracking-api/v0.2/consent-tracking-api.js",nn="https://cdn.shopify.com/shopifycloud/privacy-banner/storefront-banner.js";function St(e){console.error(`[h2:error:useCustomerPrivacy] Unable to setup Customer Privacy API: Missing consent.${e} configuration.`);}function vt(e){let{withPrivacyBanner:t=false,onVisitorConsentCollected:r,onReady:o,checkoutDomain:n,storefrontAccessToken:a,country:s,locale:c,sameDomainForStorefrontApi:i}=e,u=useMemo(()=>i??wr(),[i]),p=useMemo(()=>u&&!Dr(),[u]),y=useShopifyCookies({fetchTrackingValues:p,storefrontAccessToken:a,ignoreDeprecatedCookies:true}),m=useMemo(getTrackingValues,[y]),{revalidate:g}=useRevalidator();useLoadScript$1(t?nn:on,{attributes:{id:"customer-privacy-api"}});let{observing:d,setLoaded:l,apisLoaded:S}=sn({withPrivacyBanner:t}),f=useMemo(()=>{n||St("checkoutDomain"),a||St("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=cn(n);return {checkoutRootDomain:u&&typeof window<"u"?window.location.host:n,storefrontRootDomain:h?"."+h:void 0,storefrontAccessToken:a,country:s,locale:c}},[St,n,a,s,c]);useEffect(()=>{let h=P=>{let C=getTrackingValues();if((m.visitToken!==C.visitToken||m.uniqueToken!==C.uniqueToken)&&g().catch(()=>{console.warn("[h2:warn:useCustomerPrivacy] Revalidation failed after consent change.");}),r){let R=oe();if(R?.shouldShowBanner()){let I=R.currentVisitorConsent();if(I&&I.marketing===""&&I.analytics===""&&I.preferences==="")return}r(P.detail);}};return document.addEventListener("visitorConsentCollected",h),()=>{document.removeEventListener("visitorConsentCollected",h);}},[r]),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=_r({privacyBanner:C,config:f}),l.privacyBanner());}});},[t,f,_r,l.privacyBanner]),useEffect(()=>{if(d.current.customerPrivacy)return;d.current.customerPrivacy=true;let h=null,P=window.Shopify||void 0;Object.defineProperty(window,"Shopify",{configurable:true,get(){return P},set(C){typeof C=="object"&&C!==null&&Object.keys(C).length===0&&(P=C,Object.defineProperty(window.Shopify,"customerPrivacy",{configurable:true,get(){return h},set(R){if(typeof R=="object"&&R!==null&&"setTrackingConsent"in R){let I=R;h={...I,setTrackingConsent:xr({customerPrivacy:I,config:f})},P={...P,customerPrivacy:h},l.customerPrivacy();}}}));}});},[f,xr,l.customerPrivacy]),useEffect(()=>{if(!S||!y)return;let h=oe();if(h&&!h.cachedConsent){let P=getTrackingValues();P.consent&&(h.cachedConsent=P.consent);}if(t){let P=Ee();P&&P.loadBanner(f);}an(),o?.();},[S,y]);let v={customerPrivacy:oe()};return t&&(v.privacyBanner=Ee()),v}var Or=false;function an(){if(Or)return;Or=true;let e=new CustomEvent("shopifyCustomerPrivacyApiLoaded");document.dispatchEvent(e);}function sn({withPrivacyBanner:e}){let t=useRef({customerPrivacy:false,privacyBanner:false}),[r,o]=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 cn(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 xr({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 oe(){try{return window.Shopify&&window.Shopify.customerPrivacy?window.Shopify?.customerPrivacy:null}catch{return null}}function Ee(){try{return window&&window?.privacyBanner?window.privacyBanner:null}catch{return null}}var Lr="2026.1.4";function fn(){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 kr({consent:e,onReady:t,domain:r}){let{subscribe:o,register:n,canTrack:a}=z(),[s,c]=useState(false),[i,u]=useState(false),[p,y]=useState(""),m=useRef(false),{checkoutDomain:g,storefrontAccessToken:d,language:l}=e,{ready:S}=n("Internal_Shopify_Analytics");vt({...e,locale:l,checkoutDomain:g||"mock.shop",storefrontAccessToken:d||"abcdefghijklmnopqrstuvwxyz123456",onReady:()=>!e.withPrivacyBanner&&u(true),onVisitorConsentCollected:v=>{try{y(JSON.stringify(v));}catch{}u(true);}});let f=useMemo(()=>i?a():true,[i,a,p]);return useShopifyCookies({hasUserConsent:f,domain:r,checkoutDomain:g,fetchTrackingValues:false,ignoreDeprecatedCookies:!i}),useEffect(()=>{m.current||(m.current=true,o(F.PAGE_VIEWED,gn),o(F.PRODUCT_VIEWED,Cn),o(F.COLLECTION_VIEWED,hn),o(F.SEARCH_VIEWED,An),o(F.PRODUCT_ADD_TO_CART,Pn),c(true));},[o]),useEffect(()=>{s&&i&&(S(),t());},[s,i,t]),null}function Ke(e){console.error(`[h2:error:ShopifyAnalytics] Unable to send Shopify analytics: Missing shop.${e} configuration.`);}function De(e){let t=fn(),r=t.analyticsProcessingAllowed();if(!e?.shop?.shopId){Ke("shopId");return}if(!e?.shop?.acceptedLanguage){Ke("acceptedLanguage");return}if(!e?.shop?.currency){Ke("currency");return}if(!e?.shop?.hydrogenSubchannelId){Ke("hydrogenSubchannelId");return}return {shopifySalesChannel:"hydrogen",assetVersionId:Lr,...e.shop,hasUserConsent:r,...getClientBrowserParameters(),analyticsAllowed:t.analyticsProcessingAllowed(),marketingAllowed:t.marketingAllowed(),saleOfDataAllowed:t.saleOfDataAllowed(),ccpaEnforced:!t.saleOfDataAllowed(),gdprEnforced:!(t.marketingAllowed()&&t.analyticsProcessingAllowed())}}function mn(e,t){if(t===null)return;let r=De(e);return r?{...r,cartId:t.id}:void 0}var ne={};function gn(e){let t=De(e);t&&(sendShopifyAnalytics({eventName:AnalyticsEventName.PAGE_VIEW_2,payload:{...t,...ne}}),ne={});}function Cn(e){let t=De(e);if(t&&Nr({type:"product",products:e.products})){let r=It(e.products);ne={pageType:AnalyticsPageType.product,resourceId:r[0].productGid},t={...t,...ne,products:It(e.products)},sendShopifyAnalytics({eventName:AnalyticsEventName.PRODUCT_VIEW,payload:t});}}function hn(e){let t=De(e);t&&(ne={pageType:AnalyticsPageType.collection,resourceId:e.collection.id},t={...t,...ne,collectionHandle:e.collection.handle,collectionId:e.collection.id},sendShopifyAnalytics({eventName:AnalyticsEventName.COLLECTION_VIEW,payload:t}));}function An(e){let t=De(e);t&&(ne={pageType:AnalyticsPageType.search},t={...t,...ne,searchString:e.searchTerm},sendShopifyAnalytics({eventName:AnalyticsEventName.SEARCH_VIEW,payload:t}));}function Pn(e){let{cart:t,currentLine:r}=e,o=mn(e,t);!o||!r?.id||Sn({matchedLine:r,eventPayload:o});}function Sn({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};Nr({type:"cart",products:[r]})&&sendShopifyAnalytics({eventName:AnalyticsEventName.ADD_TO_CART,payload:{...t,products:It([r])}});}function ce(e,t,r,o){if(e==="cart"){let n=`${r?"merchandise":"merchandise.product"}.${t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up cart analytics events because the \`cart.lines[].${n}\` value is missing from your GraphQL cart query. In your project, search for where \`fragment CartLine on CartLine\` is defined and make sure \`${n}\` is part of your cart query. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/lib/fragments.ts#L25-L56.`);}else {let n=`${o||t}`;console.error(`[h2:error:ShopifyAnalytics] Can't set up product view analytics events because the \`${n}\` is missing from your \`<Analytics.ProductView>\`. Make sure \`${n}\` is part of your products data prop. Check the Hydrogen Skeleton template for reference: https://github.com/Shopify/hydrogen/blob/main/templates/skeleton/app/routes/products.%24handle.tsx#L159-L165.`);}}function Nr({type:e,products:t}){return !t||t.length===0?(ce(e,"",false,"data.products"),false):(t.forEach(r=>{if(!r.id)return ce(e,"id",false),false;if(!r.title)return ce(e,"title",false),false;if(!r.price)return ce(e,"price.amount",true,"price"),false;if(!r.vendor)return ce(e,"vendor",false),false;if(!r.variantId)return ce(e,"id",true,"variantId"),false;if(!r.variantTitle)return ce(e,"title",true,"variantTitle"),false}),true)}function It(e){return e.map(t=>{let r={productGid:t.id,variantGid:t.variantId,name:t.title,variantName:t.variantTitle,brand:t.vendor,price:t.price,quantity:t.quantity||1,category:t.productType};return t.sku&&(r.sku=t.sku),t.productType&&(r.category=t.productType),r})}function $r(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 Fr({cart:e,setCarts:t}){let{publish:r,shop:o,customData:n,canTrack:a,cart:s,prevCart:c}=z(),i=useRef(null);return useEffect(()=>{if(e)return Promise.resolve(e).then(u=>{if(u&&u.lines){if(!u.id){$r("id");return}if(!u.updatedAt){$r("updatedAt");return}}t(({cart:p,prevCart:y})=>u?.updatedAt!==p?.updatedAt?{cart:u,prevCart:p}:{cart:p,prevCart:y});}),()=>{}},[t,e]),useEffect(()=>{if(!s||!s?.updatedAt||s?.updatedAt===c?.updatedAt)return;let u;try{u=JSON.parse(localStorage.getItem("cartLastUpdatedAt")||"");}catch{u=null;}if(s.id===u?.id&&s.updatedAt===u?.updatedAt)return;let p={eventTimestamp:Date.now(),cart:s,prevCart:c,shop:o,customData:n};if(s.updatedAt===i.current)return;i.current=s.updatedAt,r("cart_updated",p),localStorage.setItem("cartLastUpdatedAt",JSON.stringify({id:s.id,updatedAt:s.updatedAt}));let y=c?.lines?flattenConnection(c?.lines):[],m=s.lines?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,c,r,o,n,a]),null}var bn="https://cdn.shopify.com/shopifycloud/perf-kit/shopify-perf-kit-spa.min.js";function Hr({shop:e}){let t=useRef(false),{subscribe:r,register:o}=z(),{ready:n}=o("Internal_Shopify_Perf_Kit"),a=useLoadScript(bn,{attributes:{id:"perfkit","data-application":"hydrogen","data-shop-id":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 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 qr=new Set,Q=e=>{qr.has(e)||(console.warn(e),qr.add(e));},Gr=new Set,Et=e=>{Gr.has(e)||(console.error(new Error(e)),Gr.add(e));};var _n={canTrack:()=>false,cart:null,customData:{},prevCart:null,publish:()=>{},shop:null,subscribe:()=>{},register:()=>({ready:()=>{}}),customerPrivacy:null,privacyBanner:null},Yr=createContext(_n),Je=new Map,xe={};function Jr(){return Object.values(xe).every(Boolean)}function Br(e,t){Je.has(e)||Je.set(e,new Map),Je.get(e)?.set(t.toString(),t);}var ze=new Map;function Qr(e,t){if(!Jr()){ze.set(e,t);return}zr(e,t);}function zr(e,t){(Je.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 Wr(e){return xe.hasOwnProperty(e)||(xe[e]=false),{ready:()=>{xe[e]=true,Jr()&&ze.size>0&&(ze.forEach((t,r)=>{zr(r,t);}),ze.clear());}}}function jr(){try{return window.Shopify.customerPrivacy.analyticsProcessingAllowed()}catch{}return false}function Kr(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 Ln({canTrack:e,cart:t,children:r,consent:o,customData:n={},shop:a=null,cookieDomain:s}){let{shop:c}=Un(a),[i,u]=useState(!!e),[p,y]=useState(false),[m,g]=useState({cart:null,prevCart:null}),[d,l]=useState(e?()=>e:()=>jr);if(c)if(/\/68817551382$/.test(c.shopId))Q("[h2:error:Analytics.Provider] - Mock shop is used. Analytics will not work properly.");else {if(!o.checkoutDomain){let f=Kr("consent.checkoutDomain","PUBLIC_CHECKOUT_DOMAIN");Et(f);}if(!o.storefrontAccessToken){let f=Kr("consent.storefrontAccessToken","PUBLIC_STOREFRONT_API_TOKEN");Et(f);}o?.country||(o.country="US"),o?.language||(o.language="EN"),o.withPrivacyBanner===void 0&&(o.withPrivacyBanner=false);}let S=useMemo(()=>({canTrack:d,...m,customData:n,publish:d()?Qr:()=>{},shop:c,subscribe:Br,register:Wr,customerPrivacy:oe(),privacyBanner:Ee()}),[i,d,m,m.cart?.updatedAt,m.prevCart,Qr,Br,n,c,Wr,JSON.stringify(xe),oe,Ee]);return jsxs(Yr.Provider,{value:S,children:[r,!!c&&jsx(Pr,{}),!!c&&!!t&&jsx(Fr,{cart:t,setCarts:g}),!!c&&jsx(kr,{consent:o,onReady:()=>{u(true),l(e?()=>e:()=>jr),y(true);},domain:s}),!!c&&p&&jsx(Hr,{shop:c})]})}function z(){let e=useContext(Yr);if(!e)throw new Error("[h2:error:useAnalytics] 'useAnalytics()' must be a descendent of <AnalyticsProvider/>");return e}function Un(e){let[t,r]=useState(null);return useEffect(()=>(Promise.resolve(e).then(r),()=>{}),[r,e]),{shop:t}}async function kn({storefront:e,publicStorefrontId:t="0"}){return e.query(Nn,{cache:e.CacheLong()}).then(({shop:r,localization:o})=>({shopId:r.id,acceptedLanguage:o.language.isoCode,currency:o.country.currency.isoCode,hydrogenSubchannelId:t}))}var Nn=`#graphql
2
2
  query ShopData(
3
3
  $country: CountryCode
4
4
  $language: LanguageCode
@@ -17,15 +17,15 @@ import {createContext,forwardRef,lazy,useContext,useMemo,useEffect,useRef,useSta
17
17
  }
18
18
  }
19
19
  }
20
- `,Un={CartView:Sr,CollectionView:Ar,CustomView:vr,ProductView:hr,Provider:On,SearchView:Pr};function W(e,t){return Tt(e.headers,t)}function Tt(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function ne(e){return {requestId:e?W(e,"request-id"):void 0,purpose:e?W(e,"purpose"):void 0}}function Yr(e){return {requestGroupId:W(e,"request-id"),buyerIp:W(e,"oxygen-buyer-ip"),buyerIpSig:W(e,Re),cookie:W(e,"cookie"),purpose:W(e,"sec-purpose")||W(e,"purpose")}}var Et=/^\/api\/(unstable|2\d{3}-\d{2})\/graphql\.json$/,bt=e=>{try{return new URL(e,"http://e.c").pathname}catch{return "/"}};function wt(e,t){return t.reduce((r,o)=>{let n=e(o);return n&&r.push([o,n]),r},[])}function fe(e,t={}){let r=new Error,o=(n,a="Error")=>{let s=(r.stack??"").split(`
20
+ `,Mn={CartView:Rr,CollectionView:vr,CustomView:Tr,ProductView:Sr,Provider:Ln,SearchView:Ir};function j(e,t){return bt(e.headers,t)}function bt(e,t){let r=e?.get?.(t)??e?.[t];return typeof r=="string"?r:null}function ae(e){return {requestId:e?j(e,"request-id"):void 0,purpose:e?j(e,"purpose"):void 0}}function Xr(e){return {requestGroupId:j(e,"request-id"),buyerIp:j(e,"oxygen-buyer-ip"),buyerIpSig:j(e,fe),cookie:j(e,"cookie"),purpose:j(e,"sec-purpose")||j(e,"purpose")}}var wt=/^\/api\/(unstable|2\d{3}-\d{2})\/graphql\.json$/,Zr=/^\/api\/mcp$/,Xe=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(`
21
21
  `).slice(3+(t.stackOffset??0)).join(`
22
22
  `).replace(/ at loader(\d+) \(/,(c,i)=>c.replace(i,""));return `${a}: ${n}
23
- `+s};return e.then(n=>{if(n?.errors&&Array.isArray(n.errors)){let a=typeof t.logErrors=="function"?t.logErrors:()=>t.logErrors??false;n.errors.forEach(s=>{s&&(s.stack=o(s.message,s.name),a(s)&&console.error(s));});}return n}).catch(n=>{throw n&&(n.stack=o(n.message,n.name)),n})}var j=void 0;var Xe="public",Nn="private",Dt="no-store",zr={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function xe(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):zr[r]&&t.push(`${zr[r]}=${e[r]}`);}),t.join(", ")}function Ot(){return {mode:Dt}}function xt(e){if(e?.mode&&e?.mode!==Xe&&e?.mode!==Nn)throw Error("'mode' must be either 'public' or 'private'")}function ue(e){return xt(e),{mode:Xe,maxAge:1,staleWhileRevalidate:9,...e}}function _t(e){return xt(e),{mode:Xe,maxAge:3600,staleWhileRevalidate:82800,...e}}function me(e){return xt(e),{mode:Xe,maxAge:1,staleWhileRevalidate:86399,...e}}function Lt(e){return e}function z(e){return String(e).includes("__proto__")?JSON.parse(e,Mn):JSON.parse(e)}function Mn(e,t){if(e!=="__proto__")return t}function Ze(e,t){return e&&t?{...e,...t}:e||me()}function Ut(e){return xe(Ze(e))}async function Vn(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function $n(e,t,r,o){if(!e)return;let n=Ze(o),a=Ut(Ze(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=Ut(Ze(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 Fn(e,t){e&&await e.delete(t);}function Hn(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 qn(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=Hn(t,r),a=o>n;return a}var et={get:Vn,set:$n,delete:Fn,generateDefaultCacheControlHeader:Ut,isStale:qn};function _e(e){return `https://shopify.dev/?${e}`}function Gn(e){return e||me()}async function Jr(e,t){if(!e)return;let r=_e(t),o=new Request(r),n=await et.get(e,o);if(!n)return;let a=await n.text();try{return [z(a),n]}catch{return [a,n]}}async function Xr(e,t,r,o){if(!e)return;let n=_e(t),a=new Request(n),s=new Response(JSON.stringify(r));await et.set(e,a,s,Gn(o));}function Zr(e,t){return et.isStale(new Request(_e(e)),t)}function eo(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 kt=new Set;async function tt(e,t,{strategy:r=ue(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let i=eo([...typeof e=="string"?[e]:e]),y=f=>{({displayName:f.displayName,url:f.response?.url,responseInit:{status:f.response?.status||0,statusText:f.response?.statusText||"",headers:Array.from(f.response?.headers.entries()||[])}});},m=void 0;if(!o||!r||r.mode===Dt){let f=await t({addDebugData:y});return f}let d=f=>Xr(o,i,{value:f,debugInfo:void 0},r),l=await Jr(o,i);if(l&&typeof l[0]!="string"){let[{value:f,debugInfo:v},h]=l;let A=Zr(i,h)?"STALE":"HIT";if(!kt.has(i)&&A==="STALE"){kt.add(i);let C=Promise.resolve().then(async()=>{let R=Date.now();try{let I=await t({addDebugData:y});n(I)&&(await d(I),m?.({result:I,cacheStatus:"PUT",overrideStartTime:R}));}catch(I){I.message&&(I.message="SWR in sub-request failed: "+I.message),console.error(I);}finally{kt.delete(i);}});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 Qn=["set-cookie","server-timing"];function to(e,t){return [e,{status:t.status,statusText:t.statusText,headers:[...t.headers].filter(([r])=>!Qn.includes(r.toLowerCase()))}]}function ro([e,t]){return [e,new Response(e,t)]}async function rt(e,t,{cacheInstance:r,cache:o,cacheKey:n=[e,t],shouldCacheResponse:a,waitUntil:s,debugInfo:c,streamConfig:i,onRawHeaders:u}){return !o&&(!t.method||t.method==="GET")&&(o=ue()),tt(n,async()=>{if(i){let g=null,d=await createGraphQLClient({url:e,customFetchApi:async(f,v)=>(g=await fetch(f,v),u?.(g.headers),g),headers:t.headers}).requestStream(i.query,{variables:i.variables}),l,P;for await(let f of d){let{data:v,errors:h}=f;l=v,P=h?.graphQLErrors??h;}return g?.ok?to({data:l,errors:P},g):g}let p=await fetch(e,t);if(u?.(p.headers),!p.ok)return p;let y=await p.text().catch(()=>"");try{y&&(y=z(y));}catch{}return to(y,p)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:c,shouldCacheResult:p=>"ok"in p?!1:a(...ro(p))}).then(p=>"ok"in p?[null,p]:ro(p))}function Wn(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},c)=>tt(n,c,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...ne(o),stackInfo:j?.()}}),fetch:(n,a,s)=>rt(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...ne(o),stackInfo:j?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([c,i])=>({data:c,response:i}))}}var Nt=class{#e;constructor(){this.#e=new Map;}add(t){throw new Error("Method not implemented. Use `put` instead.")}addAll(t){throw new Error("Method not implemented. Use `put` instead.")}matchAll(t,r){throw new Error("Method not implemented. Use `match` instead.")}async put(t,r){if(t.method!=="GET")throw new TypeError("Cannot cache response to non-GET request.");if(r.status===206)throw new TypeError("Cannot cache response to a range request (206 Partial Content).");if(r.headers.get("vary")?.includes("*"))throw new TypeError("Cannot cache response with 'Vary: *' header.");this.#e.set(t.url,{body:new Uint8Array(await r.arrayBuffer()),status:r.status,headers:[...r.headers],timestamp:Date.now()});}async match(t){if(t.method!=="GET")return;let r=this.#e.get(t.url);if(!r)return;let{body:o,timestamp:n,...a}=r,s=new Headers(a.headers),c=s.get("cache-control")||s.get("real-cache-control")||"",i=parseInt(c.match(/max-age=(\d+)/)?.[1]||"0",10),u=parseInt(c.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-n)/1e3;if(p>i+u){this.#e.delete(t.url);return}let g=p>i;return s.set("cache",g?"STALE":"HIT"),s.set("date",new Date(n).toUTCString()),new Response(o,{status:a.status??200,headers:s})}async delete(t){return this.#e.has(t.url)?(this.#e.delete(t.url),true):false}keys(t){let r=[];for(let o of this.#e.keys())(!t||t.url===o)&&r.push(new Request(o));return Promise.resolve(r)}};var oo="cartFormInput";function J({children:e,action:t,inputs:r,route:o,fetcherKey:n}){let a=useFetcher({key:n});return jsxs(a.Form,{action:o||"",method:"post",children:[(t||r)&&jsx("input",{type:"hidden",name:oo,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}J.INPUT_NAME=oo;J.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 Kn(e){let t={};for(let s of e.entries()){let c=s[0],i=e.getAll(c);t[c]=i.length>1?i:s[1],t[c]==="on"?t[c]=true:t[c]==="off"&&(t[c]=false);}let{cartFormInput:r,...o}=t,{action:n,inputs:a}=r?JSON.parse(String(r)):{};return {action:n,inputs:{...a,...o}}}J.getFormInput=Kn;var Mt=e=>{let t=parse(Tt(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var Vt=e=>t=>{let r=new Headers;return r.append("Set-Cookie",stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function ot(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var Le="2026.1.3";function ge(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var Zn=/(^|}\s)query[\s({]/im,ea=/(^|}\s)mutation[\s({]/im;function nt(e,t){if(!Zn.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function at(e,t){if(!ea.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+=`
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 K=void 0;var Ze="public",$n="private",Dt="no-store",eo={maxAge:"max-age",staleWhileRevalidate:"stale-while-revalidate",sMaxAge:"s-maxage",staleIfError:"stale-if-error"};function Le(e){let t=[];return Object.keys(e).forEach(r=>{r==="mode"?t.push(e[r]):eo[r]&&t.push(`${eo[r]}=${e[r]}`);}),t.join(", ")}function Ot(){return {mode:Dt}}function xt(e){if(e?.mode&&e?.mode!==Ze&&e?.mode!==$n)throw Error("'mode' must be either 'public' or 'private'")}function ue(e){return xt(e),{mode:Ze,maxAge:1,staleWhileRevalidate:9,...e}}function _t(e){return xt(e),{mode:Ze,maxAge:3600,staleWhileRevalidate:82800,...e}}function ge(e){return xt(e),{mode:Ze,maxAge:1,staleWhileRevalidate:86399,...e}}function Lt(e){return e}function X(e){return String(e).includes("__proto__")?JSON.parse(e,Fn):JSON.parse(e)}function Fn(e,t){if(e!=="__proto__")return t}function et(e,t){return e&&t?{...e,...t}:e||ge()}function Ut(e){return Le(et(e))}async function Hn(e,t){if(!e)return;let r=await e.match(t);if(!r){return}return r}async function qn(e,t,r,o){if(!e)return;let n=et(o),a=Ut(et(n,{maxAge:(n.maxAge||0)+(n.staleWhileRevalidate||0)})),s=Ut(et(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 Gn(e,t){e&&await e.delete(t);}function Bn(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 Qn(e,t){let r=t.headers.get("cache-put-date");if(!r)return false;let[o,n]=Bn(t,r),a=o>n;return a}var tt={get:Hn,set:qn,delete:Gn,generateDefaultCacheControlHeader:Ut,isStale:Qn};function Ue(e){return `https://shopify.dev/?${e}`}function Wn(e){return e||ge()}async function to(e,t){if(!e)return;let r=Ue(t),o=new Request(r),n=await tt.get(e,o);if(!n)return;let a=await n.text();try{return [X(a),n]}catch{return [a,n]}}async function ro(e,t,r,o){if(!e)return;let n=Ue(t),a=new Request(n),s=new Response(JSON.stringify(r));await tt.set(e,a,s,Wn(o));}function oo(e,t){return tt.isStale(new Request(Ue(e)),t)}function no(e){let t=Array.isArray(e)?e:[e],r="";for(let o of t)o!=null&&(typeof o=="object"?r+=JSON.stringify(o):r+=o.toString());return encodeURIComponent(r)}var kt=new Set;async function rt(e,t,{strategy:r=ue(),cacheInstance:o,shouldCacheResult:n=()=>true,waitUntil:a,debugInfo:s}){let i=no([...typeof e=="string"?[e]:e]),y=f=>{({displayName:f.displayName,url:f.response?.url,responseInit:{status:f.response?.status||0,statusText:f.response?.statusText||"",headers:Array.from(f.response?.headers.entries()||[])}});},g=void 0;if(!o||!r||r.mode===Dt){let f=await t({addDebugData:y});return f}let d=f=>ro(o,i,{value:f,debugInfo:void 0},r),l=await to(o,i);if(l&&typeof l[0]!="string"){let[{value:f,debugInfo:v},h]=l;let P=oo(i,h)?"STALE":"HIT";if(!kt.has(i)&&P==="STALE"){kt.add(i);let C=Promise.resolve().then(async()=>{let R=Date.now();try{let I=await t({addDebugData:y});n(I)&&(await d(I),g?.({result:I,cacheStatus:"PUT",overrideStartTime:R}));}catch(I){I.message&&(I.message="SWR in sub-request failed: "+I.message),console.error(I);}finally{kt.delete(i);}});a?.(C);}return f}let S=await t({addDebugData:y});if(n(S)){let f=Promise.resolve().then(async()=>{await d(S);});a?.(f);}return S}var Kn=["set-cookie","server-timing"];function ao(e,t){return [e,{status:t.status,statusText:t.statusText,headers:[...t.headers].filter(([r])=>!Kn.includes(r.toLowerCase()))}]}function so([e,t]){return [e,new Response(e,t)]}async function ot(e,t,{cacheInstance:r,cache:o,cacheKey:n=[e,t],shouldCacheResponse:a,waitUntil:s,debugInfo:c,streamConfig:i,onRawHeaders:u}){return !o&&(!t.method||t.method==="GET")&&(o=ue()),rt(n,async()=>{if(i){let m=null,d=await createGraphQLClient({url:e,customFetchApi:async(f,v)=>(m=await fetch(f,v),u?.(m.headers),m),headers:t.headers}).requestStream(i.query,{variables:i.variables}),l,S;for await(let f of d){let{data:v,errors:h}=f;l=v,S=h?.graphQLErrors??h;}return m?.ok?ao({data:l,errors:S},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 ao(y,p)},{cacheInstance:r,waitUntil:s,strategy:o??null,debugInfo:c,shouldCacheResult:p=>"ok"in p?!1:a(...so(p))}).then(p=>"ok"in p?[null,p]:so(p))}function Yn(e){let{cache:t,waitUntil:r,request:o}=e;return {run:({cacheKey:n,cacheStrategy:a,shouldCacheResult:s},c)=>rt(n,c,{shouldCacheResult:s,strategy:a,cacheInstance:t,waitUntil:r,debugInfo:{...ae(o),stackInfo:K?.()}}),fetch:(n,a,s)=>ot(n,a??{},{waitUntil:r,cacheKey:[n,a],cacheInstance:t,debugInfo:{url:n,...ae(o),stackInfo:K?.(),displayName:s?.displayName},cache:s.cacheStrategy,...s}).then(([c,i])=>({data:c,response:i}))}}var Nt=class{#e;constructor(){this.#e=new Map;}add(t){throw new Error("Method not implemented. Use `put` instead.")}addAll(t){throw new Error("Method not implemented. Use `put` instead.")}matchAll(t,r){throw new Error("Method not implemented. Use `match` instead.")}async put(t,r){if(t.method!=="GET")throw new TypeError("Cannot cache response to non-GET request.");if(r.status===206)throw new TypeError("Cannot cache response to a range request (206 Partial Content).");if(r.headers.get("vary")?.includes("*"))throw new TypeError("Cannot cache response with 'Vary: *' header.");this.#e.set(t.url,{body:new Uint8Array(await r.arrayBuffer()),status:r.status,headers:[...r.headers],timestamp:Date.now()});}async match(t){if(t.method!=="GET")return;let r=this.#e.get(t.url);if(!r)return;let{body:o,timestamp:n,...a}=r,s=new Headers(a.headers),c=s.get("cache-control")||s.get("real-cache-control")||"",i=parseInt(c.match(/max-age=(\d+)/)?.[1]||"0",10),u=parseInt(c.match(/stale-while-revalidate=(\d+)/)?.[1]||"0",10),p=(Date.now()-n)/1e3;if(p>i+u){this.#e.delete(t.url);return}let m=p>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 io="cartFormInput";function Z({children:e,action:t,inputs:r,route:o,fetcherKey:n}){let a=useFetcher({key:n});return jsxs(a.Form,{action:o||"",method:"post",children:[(t||r)&&jsx("input",{type:"hidden",name:io,value:JSON.stringify({action:t,inputs:r})}),typeof e=="function"?e(a):e]})}Z.INPUT_NAME=io;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 zn(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}}}Z.getFormInput=zn;var Mt=e=>{let t=parse(bt(e,"Cookie")||"");return ()=>t.cart?`gid://shopify/Cart/${t.cart}`:void 0};var Vt=e=>t=>{let r=new Headers;return r.append("Set-Cookie",stringify("cart",t.split("/").pop()||"",{path:"/",...e})),r};function nt(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`weak-${Math.random().toString(16).substring(2)}`}var ke="2026.1.4";function Ce(e){return e.replace(/\s*#.*$/gm,"").replace(/\s+/gm," ").trim()}var ra=/(^|}\s)query[\s({]/im,oa=/(^|}\s)mutation[\s({]/im;function at(e,t){if(!ra.test(e))throw new Error(`[h2:error:${t}] Can only execute queries`)}function st(e,t){if(!oa.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+=`
24
24
  `,this.stack&&(t+=`${this.stack.slice(this.stack.indexOf(`
25
25
  `)+1)}
26
- `),t}toJSON(){return {name:"Error",message:""}}};function Ue({url:e,response:t,errors:r,type:o,query:n,queryVariables:a,ErrorConstructor:s=Error,client:c="storefront"}){let i=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
26
+ `),t}toJSON(){return {name:"Error",message:""}}};function Ne({url:e,response:t,errors:r,type:o,query:n,queryVariables:a,ErrorConstructor:s=Error,client:c="storefront"}){let i=(typeof r=="string"?r:r?.map?.(p=>p.message).join(`
27
27
  `))||`URL: ${e}
28
- API response error: ${t.status}`,u=new de(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 na={language:"EN",country:"US"};function co(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...c}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getStorefrontApiUrl:y,getShopifyDomain:g}=createStorefrontClient(c),d=(c.privateStorefrontToken?p:u)({contentType:"json",buyerIp:t?.buyerIp||""});t?.buyerIp&&(d[Ct]=t.buyerIp),t?.buyerIpSig&&(d[Re]=t.buyerIpSig),d[qe]=t?.requestGroupId||ot(),a&&(d[SHOPIFY_STOREFRONT_ID_HEADER]=a),(d["user-agent"]=`Hydrogen ${Le}`);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],R=l.match(/\b_shopify_s=([^;]+)/)?.[1];C&&(d[SHOPIFY_STOREFRONT_Y_HEADER]=C),R&&(d[SHOPIFY_STOREFRONT_S_HEADER]=R),P=C??ot(),f=R??ot(),d[SHOPIFY_UNIQUE_TOKEN_HEADER]=P,d[SHOPIFY_VISIT_TOKEN_HEADER]=f;}let v,h=JSON.stringify({"content-type":d["content-type"],"user-agent":d["user-agent"],[ft]:d[ft],[mt]:d[mt],[gt]:d[gt],[Ge]:d[Ge]});async function A({query:C,mutation:R,variables:I,cache:N,headers:k=[],storefrontApiVersion:ie,displayName:Fe,stackInfo:He}){let S=k instanceof Headers?Object.fromEntries(k.entries()):Array.isArray(k)?Object.fromEntries(k):k,E=C??R,O={...I};n&&(!I?.country&&/\$country/.test(E)&&(O.country=n.country),!I?.language&&/\$language/.test(E)&&(O.language=n.language));let x=y({storefrontApiVersion:ie}),M=JSON.stringify({query:E,variables:O}),q={method:"POST",headers:{...d,...S},body:M},V=[x,q.method,h,q.body],ee=E.includes("@defer")?{query:E,variables:O}:void 0,[K,_]=await rt(x,q,{cacheInstance:R?void 0:r,cache:N||me(),cacheKey:V,waitUntil:o,shouldCacheResponse:$=>!$?.errors,debugInfo:{requestId:q.headers[qe],displayName:Fe,url:x,stackInfo:He,graphql:M,purpose:t?.purpose},streamConfig:ee,onRawHeaders:$=>{v??={setCookie:$.getSetCookie(),serverTiming:$.get("server-timing")??""};}}),Q={url:x,response:_,type:R?"mutation":"query",query:E,queryVariables:O,errors:void 0};if(!_.ok){let $,te=K;try{te??=await _.text(),$=z(te);}catch{$=[{message:te??"Could not parse Storefront API response"}];}Ue({...Q,errors:$});}let{data:Pe,errors:G}=K;G=G?Array.isArray(G)?G:[G]:void 0;let ve=G?.map(({message:$,...te})=>new de($,{...te,clientOperation:`storefront.${Q.type}`,requestId:_.headers.get("x-request-id"),queryVariables:O,query:E}));return T(Pe,ve)}return {storefront:{query(C,R){C=ge(C),nt(C,"storefront.query");let I=io?.(C);return fe(A({...R,query:C,stackInfo:j?.(I)}),{stackOffset:I,logErrors:s})},mutate(C,R){C=ge(C),at(C,"storefront.mutate");let I=io?.(C);return fe(A({...R,mutation:C,stackInfo:j?.(I)}),{stackOffset:I,logErrors:s})},cache:r,CacheNone:Ot,CacheLong:_t,CacheShort:ue,CacheCustom:Lt,generateCacheControlHeader:xe,getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getHeaders:()=>({...d}),getShopifyDomain:g,getApiUrl:y,i18n:n??na,isStorefrontApiUrl(C){return Et.test(bt(C.url??""))},async forward(C,R){let I=new Headers([...wt(ie=>C.headers.get(ie),["accept","accept-encoding","accept-language","access-control-request-headers","access-control-request-method","content-type","content-length","cookie","origin","referer","user-agent",Ge,SHOPIFY_UNIQUE_TOKEN_HEADER,SHOPIFY_VISIT_TOKEN_HEADER]),...wt(ie=>d[ie],[Ct,Re,SHOPIFY_STOREFRONT_ID_HEADER,qe])]);t?.buyerIp&&I.set("x-forwarded-for",t.buyerIp);let N=R?.storefrontApiVersion??bt(C.url).match(Et)?.[1],k=await fetch(y({storefrontApiVersion:N}),{method:C.method,body:C.body,headers:I});return new Response(k.body,k)},setCollectedSubrequestHeaders:C=>{if(v)for(let k of v.setCookie)C.headers.append("Set-Cookie",k);let R=Rr(v?.serverTiming),I=C.headers.get("content-type")?.startsWith("text/html");Ie(C,{...I?{_y:P,_s:f}:void 0,...R}),I&&v&&v.setCookie.length>1&&R?._y&&R?._s&&R?._cmp&&Ie(C,{[Qe]:"1"});}}}}var io=void 0;function T(e,t){return {...e,...t&&{errors:t}}}function $t({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let[s,{cart:c,errors:i}]=await Promise.all([t?t.isLoggedIn():false,e.query(aa(o),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(s&&c?.checkoutUrl){let u=new URL(c.checkoutUrl);u.searchParams.set("logged_in","true"),c.checkoutUrl=u.toString();}return c||i?T(c,i):null}}var aa=(e=sa)=>`#graphql
28
+ API response error: ${t.status}`,u=new de(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 ia={language:"EN",country:"US"};function lo(e){let {storefrontHeaders:t,cache:r,waitUntil:o,i18n:n,storefrontId:a,logErrors:s=true,...c}=e,{getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getStorefrontApiUrl:y,getShopifyDomain:m}=createStorefrontClient(c),d=(c.privateStorefrontToken?p:u)({contentType:"json",buyerIp:t?.buyerIp||""});t?.buyerIp&&(d[Ge]=t.buyerIp),t?.buyerIpSig&&(d[fe]=t.buyerIpSig),d[Re]=t?.requestGroupId||nt(),a&&(d[SHOPIFY_STOREFRONT_ID_HEADER]=a),(d["user-agent"]=`Hydrogen ${ke}`);let l=t?.cookie??"";l&&(d.cookie=l);let S,f;if(!/\b_shopify_(analytics|marketing)=/.test(l)){let C=l.match(/\b_shopify_y=([^;]+)/)?.[1],R=l.match(/\b_shopify_s=([^;]+)/)?.[1];C&&(d[SHOPIFY_STOREFRONT_Y_HEADER]=C),R&&(d[SHOPIFY_STOREFRONT_S_HEADER]=R),S=C??nt(),f=R??nt(),d[SHOPIFY_UNIQUE_TOKEN_HEADER]=S,d[SHOPIFY_VISIT_TOKEN_HEADER]=f;}let v,h=JSON.stringify({"content-type":d["content-type"],"user-agent":d["user-agent"],[Ct]:d[Ct],[ht]:d[ht],[At]:d[At],[Ie]:d[Ie]});async function P({query:C,mutation:R,variables:I,cache:O,headers:L=[],storefrontApiVersion:G,displayName:ft,stackInfo:mt}){let qe=L instanceof Headers?Object.fromEntries(L.entries()):Array.isArray(L)?Object.fromEntries(L):L,W=C??R,A={...I};n&&(!I?.country&&/\$country/.test(W)&&(A.country=n.country),!I?.language&&/\$language/.test(W)&&(A.language=n.language));let E=y({storefrontApiVersion:G}),_=JSON.stringify({query:W,variables:A}),x={method:"POST",headers:{...d,...qe},body:_},q=[E,x.method,h,x.body],re=W.includes("@defer")?{query:W,variables:A}:void 0,[V,B]=await ot(E,x,{cacheInstance:R?void 0:r,cache:O||ge(),cacheKey:q,waitUntil:o,shouldCacheResponse:k=>!k?.errors,debugInfo:{requestId:x.headers[Re],displayName:ft,url:E,stackInfo:mt,graphql:_,purpose:t?.purpose},streamConfig:re,onRawHeaders:k=>{v??={setCookie:k.getSetCookie(),serverTiming:k.get("server-timing")??""};}}),Y={url:E,response:B,type:R?"mutation":"query",query:W,queryVariables:A,errors:void 0};if(!B.ok){let k,J=V;try{J??=await B.text(),k=X(J);}catch{k=[{message:J??"Could not parse Storefront API response"}];}Ne({...Y,errors:k});}let{data:U,errors:$}=V;$=$?Array.isArray($)?$:[$]:void 0;let ve=$?.map(({message:k,...J})=>new de(k,{...J,clientOperation:`storefront.${Y.type}`,requestId:B.headers.get("x-request-id"),queryVariables:A,query:W}));return T(U,ve)}return {storefront:{query(C,R){C=Ce(C),at(C,"storefront.query");let I=po?.(C);return me(P({...R,query:C,stackInfo:K?.(I)}),{stackOffset:I,logErrors:s})},mutate(C,R){C=Ce(C),st(C,"storefront.mutate");let I=po?.(C);return me(P({...R,mutation:C,stackInfo:K?.(I)}),{stackOffset:I,logErrors:s})},cache:r,CacheNone:Ot,CacheLong:_t,CacheShort:ue,CacheCustom:Lt,generateCacheControlHeader:Le,getPublicTokenHeaders:u,getPrivateTokenHeaders:p,getHeaders:()=>({...d}),getShopifyDomain:m,getApiUrl:y,i18n:n??ia,isStorefrontApiUrl(C){return wt.test(Xe(C.url??""))},async forward(C,R){let I=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,SHOPIFY_UNIQUE_TOKEN_HEADER,SHOPIFY_VISIT_TOKEN_HEADER]),..._e(G=>d[G],[Ge,fe,SHOPIFY_STOREFRONT_ID_HEADER,Re])]);t?.buyerIp&&I.set("x-forwarded-for",t.buyerIp);let O=R?.storefrontApiVersion??Xe(C.url).match(wt)?.[1],L=await fetch(y({storefrontApiVersion:O}),{method:C.method,body:C.body,headers:I});return new Response(L.body,L)},isMcpUrl(C){return Zr.test(Xe(C.url??""))},async forwardMcp(C){let R=new Headers([..._e(O=>C.headers.get(O),["accept","accept-encoding","accept-language","content-type","cookie","origin","referer","user-agent"]),..._e(O=>d[O],[Ge,fe,Ie,Re,SHOPIFY_STOREFRONT_ID_HEADER])]);t?.buyerIp&&R.set("x-forwarded-for",t.buyerIp);let I=`${m()}/api/mcp`;try{let O=await fetch(I,{method:C.method,body:C.body,headers:R});return new Response(O.body,O)}catch(O){let G=O instanceof Error?O.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(v)for(let L of v.setCookie)C.headers.append("Set-Cookie",L);let R=Er(v?.serverTiming),I=C.headers.get("content-type")?.startsWith("text/html");Te(C,{...I?{_y:S,_s:f}:void 0,...R}),I&&v&&v.setCookie.length>1&&R?._y&&R?._s&&R?._cmp&&Te(C,{[Qe]:"1"});}}}}var po=void 0;function T(e,t){return {...e,...t&&{errors:t}}}function Ft({storefront:e,customerAccount:t,getCartId:r,cartFragment:o}){return async n=>{let a=r();if(!a)return null;let[s,{cart:c,errors:i}]=await Promise.all([t?t.isLoggedIn():false,e.query(ca(o),{variables:{cartId:a,...n},cache:e.CacheNone()})]);if(s&&c?.checkoutUrl){let u=new URL(c.checkoutUrl);u.searchParams.set("logged_in","true"),c.checkoutUrl=u.toString();}return c||i?T(c,i):null}}var ca=(e=ua)=>`#graphql
29
29
  query CartQuery(
30
30
  $cartId: ID!
31
31
  $numCartLines: Int = 100
@@ -39,7 +39,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
39
39
  }
40
40
 
41
41
  ${e}
42
- `,sa=`#graphql
42
+ `,ua=`#graphql
43
43
  fragment CartApiQuery on Cart {
44
44
  updatedAt
45
45
  id
@@ -172,7 +172,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
172
172
  message
173
173
  target
174
174
  }
175
- `;function Ft(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...c}=t,{cartCreate:i,errors:u}=await e.storefront.mutate(ia(e.cartFragment),{variables:{input:{...c,buyerIdentity:{...o,...s}},...a}});return T(i,u)}}var ia=(e=w)=>`#graphql
175
+ `;function Ht(e){return async(t,r)=>{let o=e.customerAccount?await e.customerAccount.getBuyer():void 0,{cartId:n,...a}=r||{},{buyerIdentity:s,...c}=t,{cartCreate:i,errors:u}=await e.storefront.mutate(da(e.cartFragment),{variables:{input:{...c,buyerIdentity:{...o,...s}},...a}});return T(i,u)}}var da=(e=w)=>`#graphql
176
176
  mutation cartCreate(
177
177
  $input: CartInput!
178
178
  $country: CountryCode = ZZ
@@ -195,7 +195,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
195
195
  ${e}
196
196
  ${b}
197
197
  ${D}
198
- `;function Ht(e){return async(t,r)=>{let{cartLinesAdd:o,errors:n}=await e.storefront.mutate(ca(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var ca=(e=w)=>`#graphql
198
+ `;function qt(e){return async(t,r)=>{let{cartLinesAdd:o,errors:n}=await e.storefront.mutate(pa(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var pa=(e=w)=>`#graphql
199
199
  mutation cartLinesAdd(
200
200
  $cartId: ID!
201
201
  $lines: [CartLineInput!]!
@@ -218,7 +218,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
218
218
  ${e}
219
219
  ${b}
220
220
  ${D}
221
- `;var uo="__h_pending_";function po(e){return uo+e}function st(e){return e.startsWith(uo)}function it(e,t){if(t.some(r=>st(typeof r=="string"?r:r.id)))throw new Error(`Tried to perform an action on an optimistic line. Make sure to disable your "${e}" CartForm action when the line is optimistic.`)}function qt(e){return async(t,r)=>{it("updateLines",t);let{cartLinesUpdate:o,errors:n}=await e.storefront.mutate(ua(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var ua=(e=w)=>`#graphql
221
+ `;var yo="__h_pending_";function fo(e){return yo+e}function it(e){return e.startsWith(yo)}function ct(e,t){if(t.some(r=>it(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 Gt(e){return async(t,r)=>{ct("updateLines",t);let{cartLinesUpdate:o,errors:n}=await e.storefront.mutate(la(e.cartFragment),{variables:{cartId:e.getCartId(),lines:t,...r}});return T(o,n)}}var la=(e=w)=>`#graphql
222
222
  mutation cartLinesUpdate(
223
223
  $cartId: ID!
224
224
  $lines: [CartLineUpdateInput!]!
@@ -241,7 +241,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
241
241
  ${e}
242
242
  ${b}
243
243
  ${D}
244
- `;function Gt(e){return async(t,r)=>{it("removeLines",t);let{cartLinesRemove:o,errors:n}=await e.storefront.mutate(da(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return T(o,n)}}var da=(e=w)=>`#graphql
244
+ `;function Bt(e){return async(t,r)=>{ct("removeLines",t);let{cartLinesRemove:o,errors:n}=await e.storefront.mutate(ya(e.cartFragment),{variables:{cartId:e.getCartId(),lineIds:t,...r}});return T(o,n)}}var ya=(e=w)=>`#graphql
245
245
  mutation cartLinesRemove(
246
246
  $cartId: ID!
247
247
  $lineIds: [ID!]!
@@ -264,7 +264,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
264
264
  ${e}
265
265
  ${b}
266
266
  ${D}
267
- `;function Bt(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartDiscountCodesUpdate:n,errors:a}=await e.storefront.mutate(pa(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return T(n,a)}}var pa=(e=w)=>`#graphql
267
+ `;function Qt(e){return async(t,r)=>{let o=t.filter((s,c,i)=>i.indexOf(s)===c),{cartDiscountCodesUpdate:n,errors:a}=await e.storefront.mutate(fa(e.cartFragment),{variables:{cartId:e.getCartId(),discountCodes:o,...r}});return T(n,a)}}var fa=(e=w)=>`#graphql
268
268
  mutation cartDiscountCodesUpdate(
269
269
  $cartId: ID!
270
270
  $discountCodes: [String!]!
@@ -289,7 +289,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
289
289
  ${e}
290
290
  ${b}
291
291
  ${D}
292
- `;function Qt(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(la(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return T(n,a)}}var la=(e=w)=>`#graphql
292
+ `;function Wt(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(ma(e.cartFragment),{variables:{cartId:e.getCartId(),buyerIdentity:{...o,...t},...r}});return T(n,a)}}var ma=(e=w)=>`#graphql
293
293
  mutation cartBuyerIdentityUpdate(
294
294
  $cartId: ID!
295
295
  $buyerIdentity: CartBuyerIdentityInput!
@@ -312,7 +312,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
312
312
  ${e}
313
313
  ${b}
314
314
  ${D}
315
- `;function Wt(e){return async(t,r)=>{let{cartNoteUpdate:o,errors:n}=await e.storefront.mutate(ya(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return T(o,n)}}var ya=(e=w)=>`#graphql
315
+ `;function jt(e){return async(t,r)=>{let{cartNoteUpdate:o,errors:n}=await e.storefront.mutate(ga(e.cartFragment),{variables:{cartId:e.getCartId(),note:t,...r}});return T(o,n)}}var ga=(e=w)=>`#graphql
316
316
  mutation cartNoteUpdate(
317
317
  $cartId: ID!
318
318
  $note: String!
@@ -335,7 +335,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
335
335
  ${e}
336
336
  ${b}
337
337
  ${D}
338
- `;function jt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:o,errors:n}=await e.storefront.mutate(fa(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return T(o,n)}}var fa=(e=w)=>`#graphql
338
+ `;function Kt(e){return async(t,r)=>{let{cartSelectedDeliveryOptionsUpdate:o,errors:n}=await e.storefront.mutate(Ca(e.cartFragment),{variables:{cartId:e.getCartId(),selectedDeliveryOptions:t,...r}});return T(o,n)}}var Ca=(e=w)=>`#graphql
339
339
  mutation cartSelectedDeliveryOptionsUpdate(
340
340
  $cartId: ID!
341
341
  $selectedDeliveryOptions: [CartSelectedDeliveryOptionInput!]!
@@ -358,7 +358,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
358
358
  ${e}
359
359
  ${b}
360
360
  ${D}
361
- `;function Kt(e){return async(t,r)=>{let{cartAttributesUpdate:o,errors:n}=await e.storefront.mutate(ma(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t,...r}});return T(o,n)}}var ma=(e=w)=>`#graphql
361
+ `;function Yt(e){return async(t,r)=>{let{cartAttributesUpdate:o,errors:n}=await e.storefront.mutate(ha(e.cartFragment),{variables:{cartId:r?.cartId||e.getCartId(),attributes:t,...r}});return T(o,n)}}var ha=(e=w)=>`#graphql
362
362
  mutation cartAttributesUpdate(
363
363
  $cartId: ID!
364
364
  $attributes: [AttributeInput!]!
@@ -381,7 +381,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
381
381
  ${e}
382
382
  ${b}
383
383
  ${D}
384
- `;function Yt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(c=>({...c,ownerId:o})),{cartMetafieldsSet:a,errors:s}=await e.storefront.mutate(ga(),{variables:{metafields:n,...r}});return T({cart:{id:o},...a},s)}}var ga=()=>`#graphql
384
+ `;function Jt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),n=t.map(c=>({...c,ownerId:o})),{cartMetafieldsSet:a,errors:s}=await e.storefront.mutate(Aa(),{variables:{metafields:n,...r}});return T({cart:{id:o},...a},s)}}var Aa=()=>`#graphql
385
385
  mutation cartMetafieldsSet(
386
386
  $metafields: [CartMetafieldsSetInput!]!
387
387
  $language: LanguageCode
@@ -397,7 +397,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
397
397
  }
398
398
  }
399
399
  }
400
- `;function zt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),{cartMetafieldDelete:n,errors:a}=await e.storefront.mutate(Ca(),{variables:{input:{ownerId:o,key:t},...r}});return T({cart:{id:o},...n},a)}}var Ca=()=>`#graphql
400
+ `;function zt(e){return async(t,r)=>{let o=r?.cartId||e.getCartId(),{cartMetafieldDelete:n,errors:a}=await e.storefront.mutate(Pa(),{variables:{input:{ownerId:o,key:t},...r}});return T({cart:{id:o},...n},a)}}var Pa=()=>`#graphql
401
401
  mutation cartMetafieldDelete(
402
402
  $input: CartMetafieldDeleteInput!
403
403
  $language: LanguageCode
@@ -412,7 +412,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
412
412
  }
413
413
  }
414
414
  }
415
- `;function Jt(e){return async(t,r)=>{let{cartGiftCardCodesUpdate:o,errors:n}=await e.storefront.mutate(ha(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var ha=(e=w)=>`#graphql
415
+ `;function Xt(e){return async(t,r)=>{let{cartGiftCardCodesUpdate:o,errors:n}=await e.storefront.mutate(Sa(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var Sa=(e=w)=>`#graphql
416
416
  mutation cartGiftCardCodesUpdate(
417
417
  $cartId: ID!
418
418
  $giftCardCodes: [String!]!
@@ -435,7 +435,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
435
435
  ${e}
436
436
  ${b}
437
437
  ${D}
438
- `;function Xt(e){return async(t,r)=>{let{cartGiftCardCodesAdd:o,errors:n}=await e.storefront.mutate(Aa(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var Aa=(e=w)=>`#graphql
438
+ `;function Zt(e){return async(t,r)=>{let{cartGiftCardCodesAdd:o,errors:n}=await e.storefront.mutate(va(e.cartFragment),{variables:{cartId:e.getCartId(),giftCardCodes:t,...r}});return T(o,n)}}var va=(e=w)=>`#graphql
439
439
  mutation cartGiftCardCodesAdd(
440
440
  $cartId: ID!
441
441
  $giftCardCodes: [String!]!
@@ -457,7 +457,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
457
457
  ${e}
458
458
  ${b}
459
459
  ${D}
460
- `;function Zt(e){return async(t,r)=>{let{cartGiftCardCodesRemove:o,errors:n}=await e.storefront.mutate(Sa(e.cartFragment),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return T(o,n)}}var Sa=(e=w)=>`#graphql
460
+ `;function er(e){return async(t,r)=>{let{cartGiftCardCodesRemove:o,errors:n}=await e.storefront.mutate(Ra(e.cartFragment),{variables:{cartId:e.getCartId(),appliedGiftCardIds:t,...r}});return T(o,n)}}var Ra=(e=w)=>`#graphql
461
461
  mutation cartGiftCardCodesRemove(
462
462
  $cartId: ID!
463
463
  $appliedGiftCardIds: [ID!]!
@@ -480,7 +480,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
480
480
  ${e}
481
481
  ${b}
482
482
  ${D}
483
- `;function lo(e){return async(t,r)=>{let{cartDeliveryAddressesAdd:o,errors:n}=await e.storefront.mutate(Pa(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Pa=(e=w)=>`#graphql
483
+ `;function mo(e){return async(t,r)=>{let{cartDeliveryAddressesAdd:o,errors:n}=await e.storefront.mutate(Ia(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Ia=(e=w)=>`#graphql
484
484
  mutation cartDeliveryAddressesAdd(
485
485
  $cartId: ID!
486
486
  $addresses: [CartSelectableAddressInput!]!,
@@ -503,7 +503,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
503
503
  ${e}
504
504
  ${b}
505
505
  ${D}
506
- `;function yo(e){return async(t,r)=>{let{cartDeliveryAddressesRemove:o,errors:n}=await e.storefront.mutate(va(e.cartFragment),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return T(o,n)}}var va=(e=w)=>`#graphql
506
+ `;function go(e){return async(t,r)=>{let{cartDeliveryAddressesRemove:o,errors:n}=await e.storefront.mutate(Ta(e.cartFragment),{variables:{cartId:e.getCartId(),addressIds:t,...r}});return T(o,n)}}var Ta=(e=w)=>`#graphql
507
507
  mutation cartDeliveryAddressesRemove(
508
508
  $cartId: ID!
509
509
  $addressIds: [ID!]!,
@@ -526,7 +526,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
526
526
  ${e}
527
527
  ${b}
528
528
  ${D}
529
- `;function fo(e){return async(t,r)=>{let{cartDeliveryAddressesUpdate:o,errors:n}=await e.storefront.mutate(Ra(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Ra=(e=w)=>`#graphql
529
+ `;function Co(e){return async(t,r)=>{let{cartDeliveryAddressesUpdate:o,errors:n}=await e.storefront.mutate(Ea(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Ea=(e=w)=>`#graphql
530
530
  mutation cartDeliveryAddressesUpdate(
531
531
  $cartId: ID!
532
532
  $addresses: [CartSelectableAddressUpdateInput!]!,
@@ -549,7 +549,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
549
549
  ${e}
550
550
  ${b}
551
551
  ${D}
552
- `;function mo(e){return async(t,r)=>{let{cartDeliveryAddressesReplace:o,errors:n}=await e.storefront.mutate(Ia(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var Ia=(e=w)=>`#graphql
552
+ `;function ho(e){return async(t,r)=>{let{cartDeliveryAddressesReplace:o,errors:n}=await e.storefront.mutate(ba(e.cartFragment),{variables:{cartId:e.getCartId(),addresses:t,...r}});return T(o,n)}}var ba=(e=w)=>`#graphql
553
553
  mutation cartDeliveryAddressesReplace(
554
554
  $cartId: ID!
555
555
  $addresses: [CartSelectableAddressInput!]!,
@@ -571,7 +571,7 @@ API response error: ${t.status}`,u=new de(i,{query:n,queryVariables:a,cause:{err
571
571
  ${e}
572
572
  ${b}
573
573
  ${D}
574
- `;function er(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:c}=e,i=t(),u=()=>i||t(),p={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},y=Ft(p),g=async function(...d){d[0].buyerIdentity={...c,...d[0].buyerIdentity};let l=await y(...d);return i=l?.cart?.id,l},m={get:$t({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:g,addLines:async(d,l)=>{let P=d.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId,parent:f.parent}));return i||l?.cartId?await Ht(p)(P,l):await g({lines:P,buyerIdentity:c},l)},updateLines:qt(p),removeLines:Gt(p),updateDiscountCodes:async(d,l)=>i||l?.cartId?await Bt(p)(d,l):await g({discountCodes:d},l),updateGiftCardCodes:async(d,l)=>i||l?.cartId?await Jt(p)(d,l):await g({giftCardCodes:d},l),addGiftCardCodes:Xt(p),removeGiftCardCodes:Zt(p),updateBuyerIdentity:async(d,l)=>i||l?.cartId?await Qt(p)(d,l):await g({buyerIdentity:d},l),updateNote:async(d,l)=>i||l?.cartId?await Wt(p)(d,l):await g({note:d},l),updateSelectedDeliveryOption:jt(p),updateAttributes:async(d,l)=>i||l?.cartId?await Kt(p)(d,l):await g({attributes:d},l),setMetafields:async(d,l)=>i||l?.cartId?await Yt(p)(d,l):await g({metafields:d},l),deleteMetafield:zt(p),addDeliveryAddresses:lo(p),removeDeliveryAddresses:yo(p),updateDeliveryAddresses:fo(p),replaceDeliveryAddresses:mo(p)};return "customMethods"in e?{...m,...e.customMethods??{}}:m}function Ea(e){let t=useFetchers();if(!t||!t.length)return e;let r=e?.lines?structuredClone(e):{lines:{nodes:[]}},o=r.lines.nodes,n=false;for(let{formData:a}of t){if(!a)continue;let s=J.getFormInput(a);if(s.action===J.ACTIONS.LinesAdd)for(let c of s.inputs.lines){if(!c.selectedVariant){console.error("[h2:error:useOptimisticCart] No selected variant was passed in the cart action. Make sure to pass the selected variant if you want to use an optimistic cart");continue}let i=o.find(u=>u.merchandise.id===c.selectedVariant?.id);n=true,i?(i.quantity=(i.quantity||1)+(c.quantity||1),i.isOptimistic=true):o.unshift({id:po(c.selectedVariant.id),merchandise:c.selectedVariant,isOptimistic:true,quantity:c.quantity||1});}else if(s.action===J.ACTIONS.LinesRemove)for(let c of s.inputs.lineIds){let i=o.findIndex(u=>u.id===c);if(i!==-1){if(st(o[i].id)){console.error("[h2:error:useOptimisticCart] Tried to remove an optimistic line that has not been added to the cart yet");continue}o.splice(i,1),n=true;}else console.warn(`[h2:warn:useOptimisticCart] Tried to remove line '${c}' but it doesn't exist in the cart`);}else if(s.action===J.ACTIONS.LinesUpdate)for(let c of s.inputs.lines){let i=o.findIndex(u=>c.id===u.id);if(i>-1){if(st(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 ba="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||ba)}var ke=createContext$1(),tr=createContext$1(),rr=createContext$1(),or=createContext$1(),nr=createContext$1(),ar=createContext$1(),Da={storefront:ke,cart:tr,customerAccount:rr,env:or,session:nr,waitUntil:ar};var ct="2026-01",he=`Shopify Hydrogen ${Le}`,go="30243aa5-17c1-465a-8493-944bcc4e88aa",L="customerAccount",Ae="buyer";var H=class extends Response{constructor(t,r,o){super(`Bad request: ${t}`,{status:400,headers:o});}};function Me(e,t={}){let r=t.headers?new Headers(t.headers):new Headers({});return r.set("location",e),new Response(null,{status:t.status||302,headers:r})}async function Oa({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(L),c=s?.refreshToken,i=s?.idToken;if(!c)throw new 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",c),a.append("client_id",t);let u={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:o};new Date().getTime();let y=r,g=await fetch(y,{method:"POST",headers:u,body:a});if(!g.ok){let P=await g.text();throw new Response(P,{status:g.status,headers:{"Content-Type":"text/html; charset=utf-8"}})}let{access_token:m,expires_in:d,refresh_token:l}=await g.json();if(!m||m.length===0)throw new H("Unauthorized","Invalid access token received.");e.set(L,{accessToken:m,expiresAt:new Date(new Date().getTime()+(d-120)*1e3).getTime()+"",refreshToken:l,idToken:i});}function Se(e){e.unset(L),e.unset(Ae);}async function Co({locks:e,expiresAt:t,session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s}){if(parseInt(t,10)-1e3<new Date().getTime())try{e.refresh||(e.refresh=Oa({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(c){throw Se(r),c&&c.status!==401?c:new H("Unauthorized","Login before querying the Customer Account API.")}}function ho(){let e=xa();return So(e)}async function Ao(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=_a(t);return So(r)}function xa(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function So(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function _a(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function Po(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function vo(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",go),s.append("subject_token",e),s.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),s.append("scopes","https://api.customers.com/auth/customer.graphql");let c={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:o};new Date().getTime();let u=r,p=await fetch(u,{method:"POST",headers:c,body:s});let y=await p.json();if(y.error)throw new H(y.error_description);return y.access_token}function Ro(e){return La(e).payload.nonce}function La(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 ut(){return ka(Ua())}function Ua(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function ka(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function dt(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(To(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function To(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function sr({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=Io(e,t),a=r?Io(e,r):n;return To(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 Io(e,t){return Na(t)?new URL(t):new URL(t,new URL(e).origin)}function Na(e){try{return new URL(e),!0}catch{return false}}function Eo(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 Ma(e,t){if(!e.url)return t;let{hostname:r,pathname:o}=new URL(e.url);let n=o.replace(/\.data$/,"").replace(/\/_root$/,"/").replace(/(.+)\/$/,"$1"),a=t+`?${new URLSearchParams({return_to:n}).toString()}`;return Me(a)}function cr({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=ct,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:c,logErrors:i=true,loginPath:u="/account/login",authorizePath:p="/account/authorize",defaultRedirectPath:y="/account",language:g}){if(o!==ct&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${ct}.`),e||console.warn("[h2:warn:createCustomerAccountClient] session is required to use Customer Account API. Ensure the session object passed in exist."),!n?.url)throw new Error("[h2:error:createCustomerAccountClient] The request object does not contain a URL.");let m=c||(()=>Ma(n,u)),d=new URL(n.url),l=d.protocol==="http:"?d.origin.replace("http","https"):d.origin,P=sr({requestUrl:l,defaultUrl:p,redirectUrl:s}),f=Eo(o,r),v=Va(f,t),h=f("GRAPHQL"),A={};async function C({query:S,type:E,variables:O={}}){let x=await N();if(!x)throw m();new Date().getTime();let V=await fetch(h,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":he,Origin:l,Authorization:x},body:JSON.stringify({query:S,variables:O})});let ee=await V.text(),K={url:h,response:V,type:E,query:S,queryVariables:O,errors:void 0,client:"customer"};if(!V.ok){if(V.status===401)throw Se(e),m();let _;try{_=z(ee);}catch{_=[{message:ee}];}Ue({...K,errors:_});}try{let _=z(ee),{errors:Q}=_,Pe=Q?.map(({message:G,...ve})=>new de(G,{...ve,clientOperation:`customerAccount.${K.type}`,requestId:V.headers.get("x-request-id"),queryVariables:O,query:S}));return {..._,...Q&&{errors:Pe}}}catch{Ue({...K,errors:[{message:ee}]});}}async function R(){if(!r)return false;let S=e.get(L),E=S?.accessToken,O=S?.expiresAt;if(!E||!O)return false;let x=j?.();try{await Co({locks:A,expiresAt:O,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:f("TOKEN_EXCHANGE"),httpsOrigin:l,debugInfo:{waitUntil:a,stackInfo:x,...ne(n)}});}catch{return false}return true}async function I(){if(!await R())throw m()}async function N(){if(await R())return e.get(L)?.accessToken}async function k(S,E){return d.hostname,v(),S=ge(S),at(S,"customer.mutate"),fe(C({query:S,type:"mutation",...E}),{logErrors:i})}async function ie(S,E){return d.hostname,v(),S=ge(S),nt(S,"customer.query"),fe(C({query:S,type:"query",...E}),{logErrors:i})}function Fe(S){e.set(Ae,{...e.get(Ae),...S});}async function He(){let S=await N();if(S)return {...e.get(Ae),customerAccessToken:S}}return {i18n:{language:g??"EN"},login:async S=>{d.hostname,v();let E=new URL(f("AUTH")),O=Po(),x=ut();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",f("LOGIN_SCOPE")),E.searchParams.append("state",O),E.searchParams.append("nonce",x);let M=$a({contextLanguage:g??null,localeOverride:S?.locale??null,uiLocalesOverride:S?.uiLocales??null});M!=null&&E.searchParams.append("locale",M),S?.countryCode&&E.searchParams.append("region_country",S.countryCode),S?.acrValues&&E.searchParams.append("acr_values",S.acrValues),S?.loginHint&&(E.searchParams.append("login_hint",S.loginHint),S?.loginHintMode&&E.searchParams.append("login_hint_mode",S.loginHintMode));let q=ho(),V=await Ao(q);return e.set(L,{...e.get(L),codeVerifier:q,state:O,nonce:x,redirectPath:dt(n.url)||W(n,"Referer")||y}),E.searchParams.append("code_challenge",V),E.searchParams.append("code_challenge_method","S256"),Me(E.toString())},logout:async S=>{d.hostname,v();let E=e.get(L)?.idToken,O=sr({requestUrl:l,defaultUrl:l,redirectUrl:S?.postLogoutRedirectUri}),x=E?new URL(`${f("LOGOUT")}?${new URLSearchParams([["id_token_hint",E],["post_logout_redirect_uri",O]]).toString()}`).toString():O;Se(e);let M=S?.headers instanceof Headers?S?.headers:new Headers(S?.headers);return S?.keepSession||(e.destroy?M.set("Set-Cookie",await e.destroy()):console.warn("[h2:warn:customerAccount] session.destroy is not available on your session implementation. All session data might not be cleared on logout."),e.isPending=false),Me(x,{headers:M})},isLoggedIn:R,handleAuthStatus:I,getAccessToken:N,getApiUrl:()=>h,mutate:k,query:ie,authorize:async()=>{d.hostname,v();let S=d.searchParams.get("code"),E=d.searchParams.get("state");if(!S||!E)throw Se(e),new H("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(L)?.state!==E)throw Se(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 O=t,x=new URLSearchParams;x.append("grant_type","authorization_code"),x.append("client_id",O),x.append("redirect_uri",P),x.append("code",S);let M=e.get(L)?.codeVerifier;if(!M)throw new H("Unauthorized","No code verifier found in the session. Make sure that the session is configured correctly and passed to `createCustomerAccountClient`.");x.append("code_verifier",M);let q={"content-type":"application/x-www-form-urlencoded","User-Agent":he,Origin:l};new Date().getTime();let K=f("TOKEN_EXCHANGE"),_=await fetch(K,{method:"POST",headers:q,body:x});if(!_.ok)throw new Response(await _.text(),{status:_.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:Q,expires_in:Pe,id_token:G,refresh_token:ve}=await _.json(),$=e.get(L)?.nonce,te=await Ro(G);if($!==te)throw new H("Unauthorized",`Returned nonce does not match: ${$} !== ${te}`);let yt=Q;r||(yt=await vo(Q,t,f("TOKEN_EXCHANGE"),l,{...ne(n)}));let Bo=e.get(L)?.redirectPath;return e.set(L,{accessToken:yt,expiresAt:new Date(new Date().getTime()+(Pe-120)*1e3).getTime()+"",refreshToken:ve,idToken:G}),Me(Bo||y)},setBuyer:Fe,getBuyer:He,UNSTABLE_setBuyer:S=>{B("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),Fe(S);},UNSTABLE_getBuyer:()=>(B("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),He())}}function Va(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 $a(e){return e.localeOverride!=null?ir(e.localeOverride):e.uiLocalesOverride!=null?ir(e.uiLocalesOverride):e.contextLanguage!=null?ir(e.contextLanguage):null}function ir(e){let r=e.toLowerCase().replaceAll("_","-").split("-"),o=r[0],n=r[1];return n?`${o}-${n.toUpperCase()}`:o}function Ha(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:c,logErrors:i,storefront:u={},customerAccount:p,cart:y={},buyerIdentity:g}=e;c||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),p?.unstableB2b&&B("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:m}=co({cache:n,waitUntil:a,i18n:s,logErrors:i,storefrontHeaders:u.headers||Yr(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=cr({session:c,request:o,waitUntil:a,logErrors:i,customerApiVersion:p?.apiVersion,authUrl:p?.authUrl,customAuthStatusHandler:p?.customAuthStatusHandler,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),l=er({getCartId:y.getId||Mt(o.headers),setCartId:y.setId||Vt(),cartQueryFragment:y.queryFragment,cartMutateFragment:y.mutateFragment,customMethods:y.customMethods,buyerIdentity:g,storefront:m,customerAccount:d}),P=new RouterContextProvider;P.set(ke,m),P.set(tr,l),P.set(rr,d),P.set(or,r),P.set(nr,c),a&&P.set(ar,a);let f={storefront:m,cart:l,customerAccount:d,env:r,session:c,waitUntil:a,...t||{}};return new Proxy(P,{get(h,A,C){if(A in h){let R=h[A];return typeof R=="function"?R.bind(h):R}return A in f?f[A]:Reflect.get(h,A,C)},has(h,A){return A in h||A in f},ownKeys(h){return [...Reflect.ownKeys(h),...Object.keys(f)]},getOwnPropertyDescriptor(h,A){if(A in h)return Reflect.getOwnPropertyDescriptor(h,A);if(A in f)return {enumerable:true,configurable:true,writable:false,value:f[A]}}})}function Ga({build:e,mode:t,poweredByHeader:r=true,getLoadContext:o,collectTrackingInformation:n=true,proxyStandardRoutes:a=true}){let s=createRequestHandler(e,t),c=r?i=>i.headers.append("powered-by","Shopify, Hydrogen"):void 0;return async i=>{let u=i.method;if((u==="GET"||u==="HEAD")&&i.body)return new Response(`${u} requests cannot have a body`,{status:400});let p=new URL(i.url);if(p.pathname.includes("//"))return new Response(null,{status:301,headers:{location:p.pathname.replace(/\/+/g,"/")}});let y=await o?.(i),g=y?.storefront||y?.get?.(ke);if(a&&(g||B("[h2:createRequestHandler] Storefront instance is required to proxy standard routes."),g?.isStorefrontApiUrl(i))){let d=await g.forward(i);return c?.(d),d}let m=await s(i,y);if(g&&a){n&&g.setCollectedSubrequestHeaders(m);let d=i.headers.get("sec-fetch-dest");(d&&d==="document"||i.headers.get("accept")?.includes("text/html"))&&Ie(m,{[Be]:"1"});}return c?.(m),m}}var bo=createContext(void 0),wo=bo.Provider,ur=()=>useContext(bo);function Ka(e){let t=ut(),r=Ya(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>createElement(wo,{value:t},n)}}function Ya(e,t){let{shop:r,...o}=t??{},n=`'nonce-${e}'`,a=["'self'","'unsafe-inline'","https://cdn.shopify.com"],s=["'self'","https://cdn.shopify.com/","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&s.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&s.push(`https://${r.storeDomain}`);let i={baseUri:["'self'"],defaultSrc:["'self'",n,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:a,connectSrc:s},u=Object.assign({},i,o);for(let p in i){let y=o[p];p&&y&&(u[p]=za(y,i[p]));}return u.scriptSrc instanceof Array?u.scriptSrc=[...u.scriptSrc.filter(p=>!p.startsWith("'nonce")),n]:u.defaultSrc instanceof Array&&(u.defaultSrc=[...u.defaultSrc.filter(p=>!p.startsWith("'nonce")),n]),ja({directives:u})}function za(e,t){let r=typeof t=="string"?[t]:t,o=Array.isArray(e)?e:[String(e)];return Array.isArray(r)?r.every(a=>a==="'none'")?o:[...o,...r]:r}var Za=forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=ur();return r?jsx(es,{src:o,options:n}):jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function es({src:e,options:t}){if(!e)throw new Error("`waitForHydration` with the Script component requires a `src` prop");return useLoadScript(e,{attributes:t}),null}async function ts(e){return e;}function os(e){let t=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 ns({id:e,data:t}){return jsxs(Fragment,{children:[jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function us({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null),namespace:r=""}){let [o,n]=useState(false),a=useNavigation(),s=useLocation();useNavigate();useEffect(()=>{a.state==="idle"&&n(false);},[a.state]);let{endCursor:i,hasNextPage:u,hasPreviousPage:p,nextPageUrl:y,nodes:g,previousPageUrl:m,startCursor:d}=ds(e,r),l=useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:i,hasPreviousPage:p,hasNextPage:u,startCursor:d},nodes:g}}}),[i,u,p,d,g,r,s.state]),P=useMemo(()=>forwardRef(function(h,A){return u?createElement(Link,{preventScrollReset:true,...h,to:y,state:l,replace:true,ref:A,onClick:()=>n(true)}):null}),[u,y,l]),f=useMemo(()=>forwardRef(function(h,A){return p?createElement(Link,{preventScrollReset:true,...h,to:m,state:l,replace:true,ref:A,onClick:()=>n(true)}):null}),[p,m,l]);return t({state:l,hasNextPage:u,hasPreviousPage:p,isLoading:o,nextPageUrl:y,nodes:g,previousPageUrl:m,NextLink:P,PreviousLink:f})}function pt(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 Ve(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||Ve("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Ve("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Ve("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Ve("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Ve("pageInfo.hasPreviousPage");let r=useNavigation(),o=useNavigate(),{state:n,search:a,pathname:s}=useLocation(),c=t?`${t}_cursor`:"cursor",i=t?`${t}_direction`:"direction",y=new URLSearchParams(a).get(i)==="previous",g=useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!n?.pagination?.[t]?.nodes?flattenConnection(e):y?[...flattenConnection(e),...n.pagination[t].nodes||[]]:[...n.pagination[t].nodes||[],...flattenConnection(e)],[n,e,t]),m=useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,v=n?.pagination?.[t]?.pageInfo,h=!f||v?.startCursor===void 0?e.pageInfo.startCursor:v.startCursor,A=!f||v?.endCursor===void 0?e.pageInfo.endCursor:v.endCursor,C=!f||v?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:v.hasPreviousPage,R=!f||v?.hasNextPage===void 0?e.pageInfo.hasNextPage:v.hasNextPage;return n?.pagination?.[t]?.nodes&&(y?(h=e.pageInfo.startCursor,C=e.pageInfo.hasPreviousPage):(A=e.pageInfo.endCursor,R=e.pageInfo.hasNextPage)),{startCursor:h,endCursor:A,hasPreviousPage:C,hasNextPage:R}},[y,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),d=useRef({params:pt(a,n),pathname:s});useEffect(()=>{window.__hydrogenHydrated=true;},[]),useEffect(()=>{let f=pt(a,n),v=d.current.params;(s!==d.current.pathname||f!==v)&&!(r.state==="idle"&&!r.location)&&(d.current={pathname:s,params:pt(a,n)},o(`${s}?${pt(a,n)}`,{replace:true,preventScrollReset:true,state:{nodes:void 0,pageInfo:void 0}}));},[s,a,n]);let l=useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"previous"),m.startCursor&&f.set(c,m.startCursor),`?${f.toString()}`},[a,m.startCursor]),P=useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"next"),m.endCursor&&f.set(c,m.endCursor),`?${f.toString()}`},[a,m.endCursor]);return {...m,previousPageUrl:l,nextPageUrl:P,nodes:g}}function ps(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 ms(e,t){let r=useNavigation(),[o,n]=useState([]);if(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 Ps({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let c=t;c[0]?.values&&(B("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),c[0]&&!c[0].optionValues&&(c=t.map(d=>({...d,optionValues:d.values?.map(l=>({name:l}))||[]}))));let i=r instanceof Array?r:flattenConnection(r),{searchParams:u,path:p,alreadyOnProductPage:y}=Rs(e,o,n),g=c.filter(d=>d?.optionValues?.length===1),m=a?a?.selectedOptions?.reduce((d,l)=>(d[l.name]=l.value,d),{}):{};return createElement(Fragment$1,null,...useMemo(()=>c.map(d=>{let l,P=[];for(let f of d.optionValues){let v=new URLSearchParams(y?u:void 0);v.set(d.name,f.name),g.forEach(I=>{I.optionValues[0].name&&v.set(I.name,I.optionValues[0].name);});let h=i.find(I=>I?.selectedOptions?.every(N=>(v.get(N?.name)||m?.[N?.name])===N?.value)),A=u.get(d.name);!A&&a&&(A=m?.[d.name]||null);let C=A?A===f.name:false;C&&(l=f.name);let R="?"+v.toString();P.push({value:f.name,optionValue:f,isAvailable:h?h.availableForSale:true,to:p+R,search:R,isActive:C,variant:h});}return s({option:{name:d.name,value:l,values:P}})}),[c,i,s]))}var vs=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 Rs(e,t,r){let{pathname:o,search:n}=useLocation(),a=useNavigation();return 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 Is(){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.
574
+ `;function tr(e){let{getCartId:t,setCartId:r,storefront:o,customerAccount:n,cartQueryFragment:a,cartMutateFragment:s,buyerIdentity:c}=e,i=t(),u=()=>i||t(),p={storefront:o,getCartId:u,cartFragment:s,customerAccount:n},y=Ht(p),m=async function(...d){d[0].buyerIdentity={...c,...d[0].buyerIdentity};let l=await y(...d);return i=l?.cart?.id,l},g={get:Ft({storefront:o,customerAccount:n,getCartId:u,cartFragment:a}),getCartId:u,setCartId:r,create:m,addLines:async(d,l)=>{let S=d.map(f=>({attributes:f.attributes,quantity:f.quantity,merchandiseId:f.merchandiseId,sellingPlanId:f.sellingPlanId,parent:f.parent}));return i||l?.cartId?await qt(p)(S,l):await m({lines:S,buyerIdentity:c},l)},updateLines:Gt(p),removeLines:Bt(p),updateDiscountCodes:async(d,l)=>i||l?.cartId?await Qt(p)(d,l):await m({discountCodes:d},l),updateGiftCardCodes:async(d,l)=>i||l?.cartId?await Xt(p)(d,l):await m({giftCardCodes:d},l),addGiftCardCodes:Zt(p),removeGiftCardCodes:er(p),updateBuyerIdentity:async(d,l)=>i||l?.cartId?await Wt(p)(d,l):await m({buyerIdentity:d},l),updateNote:async(d,l)=>i||l?.cartId?await jt(p)(d,l):await m({note:d},l),updateSelectedDeliveryOption:Kt(p),updateAttributes:async(d,l)=>i||l?.cartId?await Yt(p)(d,l):await m({attributes:d},l),setMetafields:async(d,l)=>i||l?.cartId?await Jt(p)(d,l):await m({metafields:d},l),deleteMetafield:zt(p),addDeliveryAddresses:mo(p),removeDeliveryAddresses:go(p),updateDeliveryAddresses:Co(p),replaceDeliveryAddresses:ho(p)};return "customMethods"in e?{...g,...e.customMethods??{}}:g}function Da(e){let t=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 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:fo(c.selectedVariant.id),merchandise:c.selectedVariant,isOptimistic:true,quantity:c.quantity||1});}else if(s.action===Z.ACTIONS.LinesRemove)for(let c of s.inputs.lineIds){let i=o.findIndex(u=>u.id===c);if(i!==-1){if(it(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===Z.ACTIONS.LinesUpdate)for(let c of s.inputs.lines){let i=o.findIndex(u=>c.id===u.id);if(i>-1){if(it(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 Oa="https://raw.githubusercontent.com/Shopify/hydrogen/main/docs/changelog.json";async function xa({request:e,changelogUrl:t}){new URL(e.url).searchParams;return fetch(t||Oa)}var Me=createContext$1(),rr=createContext$1(),or=createContext$1(),nr=createContext$1(),ar=createContext$1(),sr=createContext$1(),_a={storefront:Me,cart:rr,customerAccount:or,env:nr,session:ar,waitUntil:sr};var ut="2026-01",Ae=`Shopify Hydrogen ${ke}`,Ao="30243aa5-17c1-465a-8493-944bcc4e88aa",N="customerAccount",Pe="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 La({session:e,customerAccountId:t,customerAccountTokenExchangeUrl:r,httpsOrigin:o,debugInfo:n}){let a=new URLSearchParams,s=e.get(N),c=s?.refreshToken,i=s?.idToken;if(!c)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",c),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 S=await m.text();throw new Response(S,{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:i});}function Se(e){e.unset(N),e.unset(Pe);}async function Po({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=La({session:r,customerAccountId:o,customerAccountTokenExchangeUrl:n,httpsOrigin:a,debugInfo:s})),await e.refresh,delete e.refresh;}catch(c){throw Se(r),c&&c.status!==401?c:new H("Unauthorized","Login before querying the Customer Account API.")}}function So(){let e=Ua();return Ro(e)}async function vo(e){let t=await crypto.subtle.digest({name:"SHA-256"},new TextEncoder().encode(e)),r=ka(t);return Ro(r)}function Ua(){let e=new Uint8Array(32);return crypto.getRandomValues(e),String.fromCharCode.apply(null,Array.from(e))}function Ro(e){return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function ka(e){let t=new Uint8Array(e),r=Array.from(t);return String.fromCharCode(...r)}function Io(){let e=Date.now().toString(),t=Math.random().toString(36).substring(2);return e+t}async function To(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",Ao),s.append("subject_token",e),s.append("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),s.append("scopes","https://api.customers.com/auth/customer.graphql");let c={"content-type":"application/x-www-form-urlencoded","User-Agent":Ae,Origin:o};new Date().getTime();let u=r,p=await fetch(u,{method:"POST",headers:c,body:s});let y=await p.json();if(y.error)throw new H(y.error_description);return y.access_token}function Eo(e){return Na(e).payload.nonce}function Na(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 dt(){return Va(Ma())}function Ma(){try{return crypto.getRandomValues(new Uint8Array(16))}catch{return new Uint8Array(16).map(()=>Math.random()*255|0)}}function Va(e){return Array.from(e,function(t){return ("0"+(t&255).toString(16)).slice(-2)}).join("")}function pt(e){if(!e)return;let{pathname:t,search:r}=new URL(e),o=t+r,n=new URLSearchParams(r),a=n.get("return_to")||n.get("redirect");if(a){if(wo(e,a))return a;console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}`);}}function wo(e,t){try{return new URL(e).origin===new URL(t,e).origin}catch{return false}}function ir({requestUrl:e,defaultUrl:t,redirectUrl:r}){let o=e,n=bo(e,t),a=r?bo(e,r):n;return wo(e,a.toString())?a.toString():(console.warn(`Cross-domain redirects are not supported. Tried to redirect from ${o} to ${a}. Default url ${n} is used instead.`),n.toString())}function bo(e,t){return $a(t)?new URL(t):new URL(t,new URL(e).origin)}function $a(e){try{return new URL(e),!0}catch{return false}}function Do(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 Fa(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 ur({session:e,customerAccountId:t,shopId:r,customerApiVersion:o=ut,request:n,waitUntil:a,authUrl:s,customAuthStatusHandler:c,logErrors:i=true,loginPath:u="/account/login",authorizePath:p="/account/authorize",defaultRedirectPath:y="/account",language:m,useCustomAuthDomain:g}){if(o!==ut&&console.warn(`[h2:warn:createCustomerAccountClient] You are using Customer Account API version ${o} when this version of Hydrogen was built for ${ut}.`),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,S=ir({requestUrl:l,defaultUrl:p,redirectUrl:s}),f=A=>void 0,v=c||(()=>(f(d.hostname),Fa(n,u))),h=Do(o,r),P=Ha(h,t),C=h("GRAPHQL"),R={};async function I({query:A,type:E,variables:_={}}){let x=await G();if(!x)throw v();new Date().getTime();let V=await fetch(C,{method:"POST",headers:{"Content-Type":"application/json","User-Agent":Ae,Origin:l,Authorization:x},body:JSON.stringify({query:A,variables:_})});let B=await V.text(),Y={url:C,response:V,type:E,query:A,queryVariables:_,errors:void 0,client:"customer"};if(!V.ok){if(V.status===401)throw Se(e),v();let U;try{U=X(B);}catch{U=[{message:B}];}Ne({...Y,errors:U});}try{let U=X(B),{errors:$}=U,ve=$?.map(({message:k,...J})=>new de(k,{...J,clientOperation:`customerAccount.${Y.type}`,requestId:V.headers.get("x-request-id"),queryVariables:_,query:A}));return {...U,...$&&{errors:ve}}}catch{Ne({...Y,errors:[{message:B}]});}}async function O(){if(!r)return false;let A=e.get(N),E=A?.accessToken,_=A?.expiresAt;if(!E||!_)return false;let x=K?.();try{await Po({locks:R,expiresAt:_,session:e,customerAccountId:t,customerAccountTokenExchangeUrl:h("TOKEN_EXCHANGE"),httpsOrigin:l,debugInfo:{waitUntil:a,stackInfo:x,...ae(n)}});}catch{return false}return true}async function L(){if(!await O())throw v()}async function G(){if(await O())return e.get(N)?.accessToken}async function ft(A,E){return f(d.hostname),P(),A=Ce(A),st(A,"customer.mutate"),me(I({query:A,type:"mutation",...E}),{logErrors:i})}async function mt(A,E){return f(d.hostname),P(),A=Ce(A),at(A,"customer.query"),me(I({query:A,type:"query",...E}),{logErrors:i})}function qe(A){e.set(Pe,{...e.get(Pe),...A});}async function W(){let A=await G();if(A)return {...e.get(Pe),customerAccessToken:A}}return {i18n:{language:m??"EN"},login:async A=>{f(d.hostname),P();let E=new URL(h("AUTH")),_=Io(),x=dt();E.searchParams.set("client_id",t),E.searchParams.set("scope","openid email"),E.searchParams.append("response_type","code"),E.searchParams.append("redirect_uri",S),E.searchParams.set("scope",h("LOGIN_SCOPE")),E.searchParams.append("state",_),E.searchParams.append("nonce",x);let q=qa({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=So(),V=await vo(re);return e.set(N,{...e.get(N),codeVerifier:re,state:_,nonce:x,redirectPath:pt(n.url)||j(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),P();let E=e.get(N)?.idToken,_=ir({requestUrl:l,defaultUrl:l,redirectUrl:A?.postLogoutRedirectUri}),x=E?new URL(`${h("LOGOUT")}?${new URLSearchParams([["id_token_hint",E],["post_logout_redirect_uri",_]]).toString()}`).toString():_;Se(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(x,{headers:q})},isLoggedIn:O,handleAuthStatus:L,getAccessToken:G,getApiUrl:()=>C,mutate:ft,query:mt,authorize:async()=>{f(d.hostname),P();let A=d.searchParams.get("code"),E=d.searchParams.get("state");if(!A||!E)throw Se(e),new H("Unauthorized","No code or state parameter found in the redirect URL.");if(e.get(N)?.state!==E)throw Se(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,x=new URLSearchParams;x.append("grant_type","authorization_code"),x.append("client_id",_),x.append("redirect_uri",S),x.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`.");x.append("code_verifier",q);let re={"content-type":"application/x-www-form-urlencoded","User-Agent":Ae,Origin:l};new Date().getTime();let Y=h("TOKEN_EXCHANGE"),U=await fetch(Y,{method:"POST",headers:re,body:x});if(!U.ok)throw new Response(await U.text(),{status:U.status,headers:{"Content-Type":"text/html; charset=utf-8"}});let{access_token:$,expires_in:ve,id_token:k,refresh_token:J}=await U.json(),gt=e.get(N)?.nonce,hr=await Eo(k);if(gt!==hr)throw new H("Unauthorized",`Returned nonce does not match: ${gt} !== ${hr}`);let Ar=$;r||(Ar=await To($,t,h("TOKEN_EXCHANGE"),l,{...ae(n)}));let jo=e.get(N)?.redirectPath;return e.set(N,{accessToken:Ar,expiresAt:new Date(new Date().getTime()+(ve-120)*1e3).getTime()+"",refreshToken:J,idToken:k}),$e(jo||y)},setBuyer:qe,getBuyer:W,UNSTABLE_setBuyer:A=>{Q("[h2:warn:customerAccount] `customerAccount.UNSTABLE_setBuyer` is deprecated. Please use `customerAccount.setBuyer`."),qe(A);},UNSTABLE_getBuyer:()=>(Q("[h2:warn:customerAccount] `customerAccount.UNSTABLE_getBuyer` is deprecated. Please use `customerAccount.getBuyer`."),W())}}function Ha(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 qa(e){return e.localeOverride!=null?cr(e.localeOverride):e.uiLocalesOverride!=null?cr(e.uiLocalesOverride):e.contextLanguage!=null?cr(e.contextLanguage):null}function cr(e){let r=e.toLowerCase().replaceAll("_","-").split("-"),o=r[0],n=r[1];return n?`${o}-${n.toUpperCase()}`:o}function Ba(e,t){let{env:r,request:o,cache:n,waitUntil:a,i18n:s,session:c,logErrors:i,storefront:u={},customerAccount:p,cart:y={},buyerIdentity:m}=e;c||console.warn("[h2:warn:createHydrogenContext] A session object is required to create hydrogen context."),p?.unstableB2b&&Q("[h2:warn:createHydrogenContext] `customerAccount.unstableB2b` is now stable. Please remove the `unstableB2b` option.");let{storefront:g}=lo({cache:n,waitUntil:a,i18n:s,logErrors:i,storefrontHeaders:u.headers||Xr(o),storefrontApiVersion:u.apiVersion,storefrontId:r.PUBLIC_STOREFRONT_ID,storeDomain:r.PUBLIC_STORE_DOMAIN,privateStorefrontToken:r.PRIVATE_STOREFRONT_API_TOKEN,publicStorefrontToken:r.PUBLIC_STOREFRONT_API_TOKEN}),d=ur({session:c,request:o,waitUntil:a,logErrors:i,customerApiVersion:p?.apiVersion,authUrl:p?.authUrl,customAuthStatusHandler:p?.customAuthStatusHandler,useCustomAuthDomain:p?.useCustomAuthDomain,language:s?.language,customerAccountId:r.PUBLIC_CUSTOMER_ACCOUNT_API_CLIENT_ID,shopId:r.SHOP_ID}),l=tr({getCartId:y.getId||Mt(o.headers),setCartId:y.setId||Vt(),cartQueryFragment:y.queryFragment,cartMutateFragment:y.mutateFragment,customMethods:y.customMethods,buyerIdentity:m,storefront:g,customerAccount:d}),S=new RouterContextProvider;S.set(Me,g),S.set(rr,l),S.set(or,d),S.set(nr,r),S.set(ar,c),a&&S.set(sr,a);let f={storefront:g,cart:l,customerAccount:d,env:r,session:c,waitUntil:a,...t||{}};return new Proxy(S,{get(h,P,C){if(P in h){let R=h[P];return typeof R=="function"?R.bind(h):R}return P in f?f[P]:Reflect.get(h,P,C)},has(h,P){return P in h||P in f},ownKeys(h){return [...Reflect.ownKeys(h),...Object.keys(f)]},getOwnPropertyDescriptor(h,P){if(P in h)return Reflect.getOwnPropertyDescriptor(h,P);if(P in f)return {enumerable:true,configurable:true,writable:false,value:f[P]}}})}function Wa({build:e,mode:t,poweredByHeader:r=true,getLoadContext:o,collectTrackingInformation:n=true,proxyStandardRoutes:a=true}){let s=createRequestHandler(e,t),c=r?i=>i.headers.append("powered-by","Shopify, Hydrogen"):void 0;return async i=>{let u=i.method;if((u==="GET"||u==="HEAD")&&i.body)return new Response(`${u} requests cannot have a body`,{status:400});let p=new URL(i.url);if(p.pathname.includes("//"))return new Response(null,{status:301,headers:{location:p.pathname.replace(/\/+/g,"/")}});let y=await o?.(i),m=y?.storefront||y?.get?.(Me);if(a){if(m||Q("[h2:createRequestHandler] Storefront instance is required to proxy standard routes."),m?.isStorefrontApiUrl(i)){let d=await m.forward(i);return c?.(d),d}if(m?.isMcpUrl(i)){let d=await m.forwardMcp(i);return c?.(d),d}}let g=await s(i,y);if(m&&a){n&&m.setCollectedSubrequestHeaders(g);let d=i.headers.get("sec-fetch-dest");(d&&d==="document"||i.headers.get("accept")?.includes("text/html"))&&Te(g,{[Be]:"1"});}return c?.(g),g}}var Oo=createContext(void 0),xo=Oo.Provider,dr=()=>useContext(Oo);function za(e){let t=dt(),r=Xa(t,e);return {nonce:t,header:r,NonceProvider:({children:n})=>createElement(xo,{value:t},n)}}function Xa(e,t){let{shop:r,...o}=t??{},n=`'nonce-${e}'`,a=["'self'","'unsafe-inline'","https://cdn.shopify.com"],s=["'self'","https://cdn.shopify.com/","https://monorail-edge.shopifysvc.com"];r&&r.checkoutDomain&&s.push(`https://${r.checkoutDomain}`),r&&r.storeDomain&&s.push(`https://${r.storeDomain}`);let i={baseUri:["'self'"],defaultSrc:["'self'",n,"https://cdn.shopify.com","https://shopify.com"],frameAncestors:["'none'"],styleSrc:a,connectSrc:s},u=Object.assign({},i,o);for(let p in i){let y=o[p];p&&y&&(u[p]=Za(y,i[p]));}return u.scriptSrc instanceof Array?u.scriptSrc=[...u.scriptSrc.filter(p=>!p.startsWith("'nonce")),n]:u.defaultSrc instanceof Array&&(u.defaultSrc=[...u.defaultSrc.filter(p=>!p.startsWith("'nonce")),n]),Ja({directives:u})}function Za(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 rs=forwardRef((e,t)=>{let{waitForHydration:r,src:o,...n}=e,a=dr();return r?jsx(os,{src:o,options:n}):jsx("script",{suppressHydrationWarning:true,...n,src:o,nonce:a,ref:t})});function os({src:e,options:t}){if(!e)throw new Error("`waitForHydration` with the Script component requires a `src` prop");return useLoadScript(e,{attributes:t}),null}async function ns(e){return e;}function ss(e){let t=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 is({id:e,data:t}){return jsxs(Fragment,{children:[jsx("input",{type:"hidden",name:"optimistic-identifier",value:e}),jsx("input",{type:"hidden",name:"optimistic-data",value:JSON.stringify(t)})]})}function ls({connection:e,children:t=()=>(console.warn("<Pagination> requires children to work properly"),null),namespace:r=""}){let [o,n]=useState(false),a=useNavigation(),s=useLocation();useNavigate();useEffect(()=>{a.state==="idle"&&n(false);},[a.state]);let{endCursor:i,hasNextPage:u,hasPreviousPage:p,nextPageUrl:y,nodes:m,previousPageUrl:g,startCursor:d}=ys(e,r),l=useMemo(()=>({...s.state,pagination:{...s.state?.pagination||{},[r]:{pageInfo:{endCursor:i,hasPreviousPage:p,hasNextPage:u,startCursor:d},nodes:m}}}),[i,u,p,d,m,r,s.state]),S=useMemo(()=>forwardRef(function(h,P){return u?createElement(Link,{preventScrollReset:true,...h,to:y,state:l,replace:true,ref:P,onClick:()=>n(true)}):null}),[u,y,l]),f=useMemo(()=>forwardRef(function(h,P){return p?createElement(Link,{preventScrollReset:true,...h,to:g,state:l,replace:true,ref:P,onClick:()=>n(true)}):null}),[p,g,l]);return t({state:l,hasNextPage:u,hasPreviousPage:p,isLoading:o,nextPageUrl:y,nodes:m,previousPageUrl:g,NextLink:S,PreviousLink:f})}function lt(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 Fe(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 ys(e,t=""){e.pageInfo||Fe("pageInfo"),typeof e.pageInfo.startCursor>"u"&&Fe("pageInfo.startCursor"),typeof e.pageInfo.endCursor>"u"&&Fe("pageInfo.endCursor"),typeof e.pageInfo.hasNextPage>"u"&&Fe("pageInfo.hasNextPage"),typeof e.pageInfo.hasPreviousPage>"u"&&Fe("pageInfo.hasPreviousPage");let r=useNavigation(),o=useNavigate(),{state:n,search:a,pathname:s}=useLocation(),c=t?`${t}_cursor`:"cursor",i=t?`${t}_direction`:"direction",y=new URLSearchParams(a).get(i)==="previous",m=useMemo(()=>!globalThis?.window?.__hydrogenHydrated||!n?.pagination?.[t]?.nodes?flattenConnection(e):y?[...flattenConnection(e),...n.pagination[t].nodes||[]]:[...n.pagination[t].nodes||[],...flattenConnection(e)],[n,e,t]),g=useMemo(()=>{let f=globalThis?.window?.__hydrogenHydrated,v=n?.pagination?.[t]?.pageInfo,h=!f||v?.startCursor===void 0?e.pageInfo.startCursor:v.startCursor,P=!f||v?.endCursor===void 0?e.pageInfo.endCursor:v.endCursor,C=!f||v?.hasPreviousPage===void 0?e.pageInfo.hasPreviousPage:v.hasPreviousPage,R=!f||v?.hasNextPage===void 0?e.pageInfo.hasNextPage:v.hasNextPage;return n?.pagination?.[t]?.nodes&&(y?(h=e.pageInfo.startCursor,C=e.pageInfo.hasPreviousPage):(P=e.pageInfo.endCursor,R=e.pageInfo.hasNextPage)),{startCursor:h,endCursor:P,hasPreviousPage:C,hasNextPage:R}},[y,n,t,e.pageInfo.hasNextPage,e.pageInfo.hasPreviousPage,e.pageInfo.startCursor,e.pageInfo.endCursor]),d=useRef({params:lt(a,n),pathname:s});useEffect(()=>{window.__hydrogenHydrated=true;},[]),useEffect(()=>{let f=lt(a,n),v=d.current.params;(s!==d.current.pathname||f!==v)&&!(r.state==="idle"&&!r.location)&&(d.current={pathname:s,params:lt(a,n)},o(`${s}?${lt(a,n)}`,{replace:true,preventScrollReset:true,state:{nodes:void 0,pageInfo:void 0}}));},[s,a,n]);let l=useMemo(()=>{let f=new URLSearchParams(a);return f.set(i,"previous"),g.startCursor&&f.set(c,g.startCursor),`?${f.toString()}`},[a,g.startCursor]),S=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:S,nodes:m}}function fs(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 hs(e,t){let r=useNavigation(),[o,n]=useState([]);if(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 Is({handle:e,options:t=[],variants:r=[],productPath:o="products",waitForNavigation:n=false,selectedVariant:a,children:s}){let c=t;c[0]?.values&&(Q("[h2:warn:VariantSelector] product.options.values is deprecated. Use product.options.optionValues instead."),c[0]&&!c[0].optionValues&&(c=t.map(d=>({...d,optionValues:d.values?.map(l=>({name:l}))||[]}))));let i=r instanceof Array?r:flattenConnection(r),{searchParams:u,path:p,alreadyOnProductPage:y}=Es(e,o,n),m=c.filter(d=>d?.optionValues?.length===1),g=a?a?.selectedOptions?.reduce((d,l)=>(d[l.name]=l.value,d),{}):{};return createElement(Fragment$1,null,...useMemo(()=>c.map(d=>{let l,S=[];for(let f of d.optionValues){let v=new URLSearchParams(y?u:void 0);v.set(d.name,f.name),m.forEach(I=>{I.optionValues[0].name&&v.set(I.name,I.optionValues[0].name);});let h=i.find(I=>I?.selectedOptions?.every(O=>(v.get(O?.name)||g?.[O?.name])===O?.value)),P=u.get(d.name);!P&&a&&(P=g?.[d.name]||null);let C=P?P===f.name:false;C&&(l=f.name);let R="?"+v.toString();S.push({value:f.name,optionValue:f,isAvailable:h?h.availableForSale:true,to:p+R,search:R,isActive:C,variant:h});}return s({option:{name:d.name,value:l,values:S}})}),[c,i,s]))}var Ts=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 Es(e,t,r){let{pathname:o,search:n}=useLocation(),a=useNavigation();return 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 bs(){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
575
  Reason: Requires major CLI infrastructure modernization.
576
576
  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
577
  Reason: React Router plugin incompatibility with Hydrogen CLI build pipeline.
@@ -581,7 +581,7 @@ Alternative: Route-level code splitting via v8_splitRouteModules is enabled.`);i
581
581
  Reason: Hydrogen CLI bypasses React Router buildEnd hook execution.
582
582
  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
583
  Reason: Conflicts with Hydrogen CSP nonce-based authentication.
584
- Impact: Would break Content Security Policy and cause script execution failures.`)}}}var bs=function(e){return jsx(RichText,{...e,components:{link:({node:t})=>jsx(Link,{to:t.url,title:t.title,target:t.target,prefetch:"intent",children:t.children}),...e.components}})};var ws=async function({request:t,context:r}){let o=r.storefront,n=r.customerAccount,a=new URL(t.url);if(!o)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let s={};if(o){let u="X-Shopify-Storefront-Access-Token";s.storefront={name:"Storefront API",authHeader:u,accessToken:o.getPublicTokenHeaders()[u],apiUrl:o.getApiUrl(),icon:"SF"};}if(n){let u=await(await fetch(a.origin+"/graphiql/customer-account.schema.json")).json(),p=await n.getAccessToken();u&&(s["customer-account"]={name:"Customer Account API",value:u,authHeader:"Authorization",accessToken:p,apiUrl:n.getApiUrl(),icon:"CA"});}let c="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",i=String.raw;return new Response(i`
584
+ Impact: Would break Content Security Policy and cause script execution failures.`)}}}var Os=function(e){return jsx(RichText,{...e,components:{link:({node:t})=>jsx(Link,{to:t.url,title:t.title,target:t.target,prefetch:"intent",children:t.children}),...e.components}})};var xs=async function({request:t,context:r}){let o=r.storefront,n=r.customerAccount,a=new URL(t.url);if(!o)throw new Error("GraphiQL: Hydrogen's storefront client must be injected in the loader context.");let s={};if(o){let u="X-Shopify-Storefront-Access-Token";s.storefront={name:"Storefront API",authHeader:u,accessToken:o.getPublicTokenHeaders()[u],apiUrl:o.getApiUrl(),icon:"SF"};}if(n){let u=await(await fetch(a.origin+"/graphiql/customer-account.schema.json")).json(),p=await n.getAccessToken();u&&(s["customer-account"]={name:"Customer Account API",value:u,authHeader:"Authorization",accessToken:p,apiUrl:n.getApiUrl(),icon:"CA"});}let c="https://avatars.githubusercontent.com/u/12972006?s=48&v=4",i=String.raw;return new Response(i`
585
585
  <!DOCTYPE html>
586
586
  <html lang="en">
587
587
  <head>
@@ -900,7 +900,7 @@ Impact: Would break Content Security Policy and cause script execution failures.
900
900
  </div>
901
901
  </body>
902
902
  </html>
903
- `,{status:200,headers:{"content-type":"text/html"}})};async function Ds(e){let{storefront:t,request:r,noAdminRedirect:o,matchQueryParams:n,response:a=new Response("Not Found",{status:404})}=e,s=new URL(r.url),{pathname:c,searchParams:i}=s,u=i.has("_data");i.delete("redirect"),i.delete("return_to"),i.delete("_data");let p=(n?s.toString().replace(s.origin,""):c).toLowerCase();if(s.pathname==="/admin"&&!o)return yr(`${t.getShopifyDomain()}/admin`,u,i,n);try{let{urlRedirects:y}=await t.query(Os,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),g=y?.edges?.[0]?.node?.target;if(g)return yr(g,u,i,n);let m=dt(r.url);if(m)return yr(m,u,i,n)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,y);}return a}var lr="https://example.com";function yr(e,t,r,o){let n=new URL(e,lr);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(lr,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(lr,"")}})}var Os=`#graphql
903
+ `,{status:200,headers:{"content-type":"text/html"}})};async function _s(e){let{storefront:t,request:r,noAdminRedirect:o,matchQueryParams:n,response:a=new Response("Not Found",{status:404})}=e,s=new URL(r.url),{pathname:c,searchParams:i}=s,u=i.has("_data");i.delete("redirect"),i.delete("return_to"),i.delete("_data");let p=(n?s.toString().replace(s.origin,""):c).toLowerCase();if(s.pathname==="/admin"&&!o)return fr(`${t.getShopifyDomain()}/admin`,u,i,n);try{let{urlRedirects:y}=await t.query(Ls,{variables:{query:"path:"+p.replace(/\/+$/,"")}}),m=y?.edges?.[0]?.node?.target;if(m)return fr(m,u,i,n);let g=pt(r.url);if(g)return fr(g,u,i,n)}catch(y){console.error(`Failed to fetch redirects from Storefront API for route ${p}`,y);}return a}var yr="https://example.com";function fr(e,t,r,o){let n=new URL(e,yr);if(!o)for(let[a,s]of r)n.searchParams.append(a,s);return t?new Response(null,{status:200,headers:{"X-Remix-Redirect":n.toString().replace(yr,""),"X-Remix-Status":"301"}}):new Response(null,{status:301,headers:{location:n.toString().replace(yr,"")}})}var Ls=`#graphql
904
904
  query redirects($query: String) {
905
905
  urlRedirects(first: 1, query: $query) {
906
906
  edges {
@@ -910,24 +910,24 @@ Impact: Would break Content Security Policy and cause script execution failures.
910
910
  }
911
911
  }
912
912
  }
913
- `;var xs={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},_s=/[&><\u2028\u2029]/g;function $o(e){return e.replace(_s,t=>xs[t])}var ae="Error in SEO input: ",X={title:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`title` should be a string"));if(typeof e=="string"&&e.length>70)throw new Error(ae.concat("`title` should not be longer than 70 characters"));return e}},description:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`description` should be a string"));if(typeof e=="string"&&e.length>155)throw new Error(ae.concat("`description` should not be longer than 160 characters"));return e}},url:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`url` should be a string"));if(typeof e=="string"&&!e.startsWith("http"))throw new Error(ae.concat("`url` should be a valid URL"));return e}},handle:{validate:e=>{if(typeof e!="string")throw new Error(ae.concat("`handle` should be a string"));if(typeof e=="string"&&!e.startsWith("@"))throw new Error(ae.concat("`handle` should start with `@`"));return e}}};function Fo(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=Z(X.title,e.title),n=mr(e?.titleTemplate,o);if(!n)break;t.push(U("title",{title:n}),U("meta",{property:"og:title",content:n}),U("meta",{name:"twitter:title",content:n}));break}case "description":{let o=Z(X.description,e.description);if(!o)break;t.push(U("meta",{name:"description",content:o}),U("meta",{property:"og:description",content:o}),U("meta",{name:"twitter:description",content:o}));break}case "url":{let o=Z(X.url,e.url);if(!o)break;let a=o.split("?")[0].replace(/\/$/,"");t.push(U("link",{rel:"canonical",href:a}),U("meta",{property:"og:url",content:a}));break}case "handle":{let o=Z(X.handle,e.handle);if(!o)break;t.push(U("meta",{name:"twitter:site",content:o}),U("meta",{name:"twitter:creator",content:o}));break}case "media":{let o,n=se(e.media);for(let a of n)if(typeof a=="string"&&t.push(U("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:gr(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(U("meta",{property:`og:${s}:${i}`,content:o},c.url)));}break}case "jsonLd":{let o=se(e.jsonLd),n=0;for(let a of o){if(typeof a!="object")continue;let s=U("script",{type:"application/ld+json",children:JSON.stringify(a,(c,i)=>typeof i=="string"?$o(i):i)},`json-ld-${a?.["@type"]||a?.name||n++}`);t.push(s);}break}case "alternates":{let o=se(e.alternates);for(let n of o){if(!n)continue;let{language:a,url:s,default:c}=n,i=a?`${a}${c?"-default":""}`:void 0;t.push(U("link",{rel:"alternate",hrefLang:i,href:s}));}break}case "robots":{if(!e.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:a,noArchive:s,noFollow:c,noImageIndex:i,noIndex:u,noSnippet:p,noTranslate:y,unavailableAfter:g}=e.robots,m=[s&&"noarchive",i&&"noimageindex",p&&"nosnippet",y&&"notranslate",o&&`max-image-preview:${o}`,n&&`max-snippet:${n}`,a&&`max-video-preview:${a}`,g&&`unavailable_after:${g}`],d=(u?"noindex":"index")+","+(c?"nofollow":"follow");for(let l of m)l&&(d+=`,${l}`);t.push(U("meta",{name:"robots",content:d}));break}}return t.flat().sort((r,o)=>r.key.localeCompare(o.key))}function U(e,t,r){let o={tag:e,props:{},key:""};return e==="title"?(o.children=t.title,o.key=fr(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=fr(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=fr(o,r),o)}function fr(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 mr(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function gr(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 se(e){return Array.isArray(e)?e:[e]}function Z(e,t){try{return e.validate(t)}catch(r){return console.warn(r.message),t}}function Ls(...e){let t=[],r=e.reduce((o,n)=>{if(!n)return o;Object.keys(n).forEach(s=>!n[s]&&delete n[s]);let{jsonLd:a}=n;return a?o?.jsonLd?{...o,...n,jsonLd:se(o.jsonLd).concat(a)}:{...o,...n,jsonLd:[a]}:{...o,...n}},{})||{};for(let o of Object.keys(r))switch(o){case "title":{let n=Z(X.title,r.title),a=mr(r?.titleTemplate,n);if(!a)break;t.push({title:a},{property:"og:title",content:a},{property:"twitter:title",content:a});break}case "description":{let n=Z(X.description,r.description);if(!n)break;t.push({name:"description",content:n},{property:"og:description",content:n},{property:"twitter:description",content:n});break}case "url":{let n=Z(X.url,r.url);if(!n)break;let s=n.split("?")[0].replace(/\/$/,"");t.push({tagName:"link",rel:"canonical",href:s},{property:"og:url",content:s});break}case "handle":{let n=Z(X.handle,r.handle);if(!n)break;t.push({property:"twitter:site",content:n},{property:"twitter:creator",content:n});break}case "media":{let n,a=se(r.media);for(let s of a)if(typeof s=="string"&&t.push({property:"og:image",content:s}),s&&typeof s=="object"){let c=s.type||"image",i=s?{url:s?.url,secure_url:s?.url,type:gr(s.url),width:s?.width,height:s?.height,alt:s?.altText}:{};for(let u of Object.keys(i))i[u]&&(n=i[u],t.push({property:`og:${c}:${u}`,content:n}));}break}case "jsonLd":{let n=se(r.jsonLd);for(let s of n)typeof s!="object"||Object.keys(s).length===0||t.push({"script:ld+json":s});break}case "alternates":{let n=se(r.alternates);for(let a of n){if(!a)continue;let{language:s,url:c,default:i}=a,u=s?`${s}${i?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:u,href:c});}break}case "robots":{if(!r.robots)break;let{maxImagePreview:n,maxSnippet:a,maxVideoPreview:s,noArchive:c,noFollow:i,noImageIndex:u,noIndex:p,noSnippet:y,noTranslate:g,unavailableAfter:m}=r.robots,d=[c&&"noarchive",u&&"noimageindex",y&&"nosnippet",g&&"notranslate",n&&`max-image-preview:${n}`,a&&`max-snippet:${a}`,s&&`max-video-preview:${s}`,m&&`unavailable_after:${m}`],l=(p?"noindex":"index")+","+(i?"nofollow":"follow");for(let P of d)P&&(l+=`,${P}`);t.push({name:"robots",content:l});break}}return t}var $s=lazy(()=>import('./log-seo-tags-TY72EQWZ.js'));function Fs({debug:e}){let t=useMatches(),r=useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/utilities/getseometa");let o=useMemo(()=>t.flatMap(s=>{let{handle:c,...i}=s,u={...i,...r},p=c?.seo,y=i?.data?.seo;return !p&&!y?[]:p?lt(p,u):[y]}).reduce((s,c)=>{Object.keys(c).forEach(u=>!c[u]&&delete c[u]);let{jsonLd:i}=c;return i?s?.jsonLd?Array.isArray(i)?{...s,...c,jsonLd:[...s.jsonLd,...i]}:{...s,...c,jsonLd:[...s.jsonLd,i]}:{...s,...c,jsonLd:[i]}:{...s,...c}},{}),[t,r]),{html:n,loggerMarkup:a}=useMemo(()=>{let s=Fo(o),c=s.map(u=>u.tag==="script"?createElement(u.tag,{...u.props,key:u.key,dangerouslySetInnerHTML:{__html:u.children}}):createElement(u.tag,{...u.props,key:u.key},u.children)),i=createElement(Suspense,{fallback:null},createElement($s,{headTags:s}));return {html:c,loggerMarkup:i}},[o]);return createElement(Fragment$1,null,n,e&&a)}function lt(e,...t){if(e instanceof Function)return lt(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,lt(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=lt(a,...t);}),r):e}function qs(e){return jsx(ShopPayButton,{channel:"hydrogen",...e})}var Bs=`<?xml version="1.0" encoding="UTF-8"?>
913
+ `;var Us={"&":"\\u0026",">":"\\u003e","<":"\\u003c","\u2028":"\\u2028","\u2029":"\\u2029"},ks=/[&><\u2028\u2029]/g;function qo(e){return e.replace(ks,t=>Us[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 Go(e){let t=[];for(let r of Object.keys(e))switch(r){case "title":{let o=te(ee.title,e.title),n=gr(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",c=a?{url:a?.url,secure_url:a?.url,type:Cr(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(M("meta",{property:`og:${s}:${i}`,content:o},c.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,(c,i)=>typeof i=="string"?qo(i):i)},`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:c}=n,i=a?`${a}${c?"-default":""}`:void 0;t.push(M("link",{rel:"alternate",hrefLang:i,href:s}));}break}case "robots":{if(!e.robots)break;let{maxImagePreview:o,maxSnippet:n,maxVideoPreview:a,noArchive:s,noFollow:c,noImageIndex:i,noIndex:u,noSnippet:p,noTranslate:y,unavailableAfter:m}=e.robots,g=[s&&"noarchive",i&&"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")+","+(c?"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=mr(o),o):e==="script"?(o.children=typeof t.children=="string"?t.children:"",o.key=mr(o,r),delete t.children,o.props=t,o):(o.props=t,Object.keys(o.props).forEach(n=>!o.props[n]&&delete o.props[n]),o.key=mr(o,r),o)}function mr(e,t){let{tag:r,props:o}=e;if(r==="title")return "0-title";if(r==="meta"){let n=o.content===t&&typeof o.property=="string"&&!o.property.endsWith("secure_url")&&"0";return [r,...[t,n],o.property||o.name].filter(s=>s).join("-")}return r==="link"?[r,o.rel,o.hrefLang||o.media].filter(a=>a).join("-").replace(/\s+/g,"-"):r==="script"?`${r}-${t}`:`${r}-${o.type}`}function gr(e,t){if(t)return e?typeof e=="function"?e(t):e.replace("%s",t??""):t}function Cr(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 Ns(...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=gr(r?.titleTemplate,n);if(!a)break;t.push({title:a},{property:"og:title",content:a},{property:"twitter:title",content:a});break}case "description":{let n=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 c=s.type||"image",i=s?{url:s?.url,secure_url:s?.url,type:Cr(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=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:c,default:i}=a,u=s?`${s}${i?"-default":""}`:void 0;t.push({tagName:"link",rel:"alternate",hrefLang:u,href:c});}break}case "robots":{if(!r.robots)break;let{maxImagePreview:n,maxSnippet:a,maxVideoPreview:s,noArchive:c,noFollow:i,noImageIndex:u,noIndex:p,noSnippet:y,noTranslate:m,unavailableAfter:g}=r.robots,d=[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=(p?"noindex":"index")+","+(i?"nofollow":"follow");for(let S of d)S&&(l+=`,${S}`);t.push({name:"robots",content:l});break}}return t}var qs=lazy(()=>import('./log-seo-tags-TY72EQWZ.js'));function Gs({debug:e}){let t=useMatches(),r=useLocation();console.warn("[h2:warn:Seo] The `<Seo/>` component is deprecated. Use `getSeoMeta` instead.\nSee: https://shopify.dev/docs/api/hydrogen/utilities/getseometa");let o=useMemo(()=>t.flatMap(s=>{let{handle:c,...i}=s,u={...i,...r},p=c?.seo,y=i?.data?.seo;return !p&&!y?[]:p?yt(p,u):[y]}).reduce((s,c)=>{Object.keys(c).forEach(u=>!c[u]&&delete c[u]);let{jsonLd:i}=c;return i?s?.jsonLd?Array.isArray(i)?{...s,...c,jsonLd:[...s.jsonLd,...i]}:{...s,...c,jsonLd:[...s.jsonLd,i]}:{...s,...c,jsonLd:[i]}:{...s,...c}},{}),[t,r]),{html:n,loggerMarkup:a}=useMemo(()=>{let s=Go(o),c=s.map(u=>u.tag==="script"?createElement(u.tag,{...u.props,key:u.key,dangerouslySetInnerHTML:{__html:u.children}}):createElement(u.tag,{...u.props,key:u.key},u.children)),i=createElement(Suspense,{fallback:null},createElement(qs,{headTags:s}));return {html:c,loggerMarkup:i}},[o]);return createElement(Fragment$1,null,n,e&&a)}function yt(e,...t){if(e instanceof Function)return yt(e(...t),...t);let r={};return Array.isArray(e)?(r=e.reduce((o,n)=>[...o,yt(n)],[]),r):e instanceof Object?(Object.entries(e).forEach(([n,a])=>{r[n]=yt(a,...t);}),r):e}function Qs(e){return jsx(ShopPayButton,{channel:"hydrogen",...e})}var js=`<?xml version="1.0" encoding="UTF-8"?>
914
914
  <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
915
- `,Qs=`
916
- </sitemapindex>`,qo=`<?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">`,Go="</urlset>";async function Ws(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(oi);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=Bs+o.map(i=>{if(!a[i])throw new Error(`[h2:sitemap:error] No data found for type ${i}. Check types passed to \`getSitemapIndex\``);return Ks(i,a[i].pagesCount.count,s)}).join(`
915
+ `,Ks=`
916
+ </sitemapindex>`,Qo=`<?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">`,Wo="</urlset>";async function Ys(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(si);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=js+o.map(i=>{if(!a[i])throw new Error(`[h2:sitemap:error] No data found for type ${i}. Check types passed to \`getSitemapIndex\``);return zs(i,a[i].pagesCount.count,s)}).join(`
918
918
  `)+n.map(i=>" <sitemap><loc>"+(s+(i.startsWith("/")?i:"/"+i))+"</loc></sitemap>").join(`
919
- `)+Qs;return new Response(c,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function js(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=ni[i];if(!u)throw new Response("Not found",{status:404});let p=await t.query(u,{variables:{page:parseInt(o.page,10)}});if(!p)throw console.warn("[h2:sitemap:warning] Sitemap is available in API version 2024-10 and later"),new Response("Sitemap not found.",{status:404});let y=new URL(r.url).origin,g="";return p?.sitemap?.resources?.items?.length?g=qo+p.sitemap.resources.items.map(m=>Ys({getChangeFreq:s,url:n({type:m.type??i,baseUrl:y,handle:m.handle}),type:i,getLink:n,updatedAt:m.updatedAt,handle:m.handle,metaobjectType:m.type,locales:a,baseUrl:y})).join(`
920
- `)+Go:g=qo+`
919
+ `)+Ks;return new Response(c,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}async function Js(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=ii[i];if(!u)throw new Response("Not found",{status:404});let p=await t.query(u,{variables:{page:parseInt(o.page,10)}});if(!p)throw console.warn("[h2:sitemap:warning] Sitemap is available in API version 2024-10 and later"),new Response("Sitemap not found.",{status:404});let y=new URL(r.url).origin,m="";return p?.sitemap?.resources?.items?.length?m=Qo+p.sitemap.resources.items.map(g=>Xs({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(`
920
+ `)+Wo:m=Qo+`
921
921
  <url><loc>${y+c}</loc></url>
922
- `+Go,new Response(g,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function Ks(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 Ys({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:c,metaobjectType:i}){return `<url>
922
+ `+Wo,new Response(m,{headers:{"Content-Type":"application/xml","Cache-Control":`max-age=${3600*24}`}})}function zs(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 Xs({url:e,updatedAt:t,locales:r,type:o,getLink:n,baseUrl:a,handle:s,getChangeFreq:c,metaobjectType:i}){return `<url>
924
924
  <loc>${e}</loc>
925
925
  <lastmod>${t}</lastmod>
926
926
  <changefreq>${c?c({type:i??o,handle:s}):"weekly"}</changefreq>
927
- ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
927
+ ${r.map(u=>Zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
928
928
  `)}
929
929
  </url>
930
- `.trim()}function zs(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var Js=`#graphql
930
+ `.trim()}function Zs(e,t){return ` <xhtml:link rel="alternate" hreflang="${t}" href="${e}" />`}var ei=`#graphql
931
931
  query SitemapProducts($page: Int!) {
932
932
  sitemap(type: PRODUCT) {
933
933
  resources(page: $page) {
@@ -938,7 +938,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
938
938
  }
939
939
  }
940
940
  }
941
- `,Xs=`#graphql
941
+ `,ti=`#graphql
942
942
  query SitemapCollections($page: Int!) {
943
943
  sitemap(type: COLLECTION) {
944
944
  resources(page: $page) {
@@ -949,7 +949,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
949
949
  }
950
950
  }
951
951
  }
952
- `,Zs=`#graphql
952
+ `,ri=`#graphql
953
953
  query SitemapArticles($page: Int!) {
954
954
  sitemap(type: ARTICLE) {
955
955
  resources(page: $page) {
@@ -960,7 +960,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
960
960
  }
961
961
  }
962
962
  }
963
- `,ei=`#graphql
963
+ `,oi=`#graphql
964
964
  query SitemapPages($page: Int!) {
965
965
  sitemap(type: PAGE) {
966
966
  resources(page: $page) {
@@ -971,7 +971,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
971
971
  }
972
972
  }
973
973
  }
974
- `,ti=`#graphql
974
+ `,ni=`#graphql
975
975
  query SitemapBlogs($page: Int!) {
976
976
  sitemap(type: BLOG) {
977
977
  resources(page: $page) {
@@ -982,7 +982,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
982
982
  }
983
983
  }
984
984
  }
985
- `,ri=`#graphql
985
+ `,ai=`#graphql
986
986
  query SitemapMetaobjects($page: Int!) {
987
987
  sitemap(type: METAOBJECT) {
988
988
  resources(page: $page) {
@@ -996,7 +996,7 @@ ${r.map(u=>zs(n({type:i??o,baseUrl:a,handle:s,locale:u}),u)).join(`
996
996
  }
997
997
  }
998
998
  }
999
- `,oi=`#graphql
999
+ `,si=`#graphql
1000
1000
  query SitemapIndex {
1001
1001
  products: sitemap(type: PRODUCT) {
1002
1002
  pagesCount {
@@ -1029,7 +1029,7 @@ query SitemapIndex {
1029
1029
  }
1030
1030
  }
1031
1031
  }
1032
- `,ni={products:Js,articles:Zs,collections:Xs,pages:ei,blogs:ti,metaObjects:ri};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
1032
+ `,ii={products:ei,articles:ri,collections:ti,pages:oi,blogs:ni,metaObjects:ai};//! @see https://shopify.dev/docs/api/storefront/latest/queries/cart
1033
1033
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartCreate
1034
1034
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesAdd
1035
1035
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartLinesUpdate
@@ -1047,5 +1047,5 @@ query SitemapIndex {
1047
1047
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesRemove
1048
1048
  //! @see: https://shopify.dev/docs/api/storefront/latest/mutations/cartDeliveryAddressesUpdate
1049
1049
  //! @see: https://shopify.dev/docs/api/storefront/2026-01/mutations/cartDeliveryAddressesReplace
1050
- export{Un as Analytics,F as AnalyticsEvent,Lt as CacheCustom,_t as CacheLong,Ot as CacheNone,ue as CacheShort,J as CartForm,Nt as InMemoryCache,wo as NonceProvider,ns as OptimisticInput,us as Pagination,bs as RichText,Za as Script,Fs as Seo,qs as ShopPayButton,Ps as VariantSelector,Kt as cartAttributesUpdateDefault,Qt as cartBuyerIdentityUpdateDefault,Ft as cartCreateDefault,Bt as cartDiscountCodesUpdateDefault,$t as cartGetDefault,Mt as cartGetIdDefault,Xt as cartGiftCardCodesAddDefault,Zt as cartGiftCardCodesRemoveDefault,Jt as cartGiftCardCodesUpdateDefault,Ht as cartLinesAddDefault,Gt as cartLinesRemoveDefault,qt as cartLinesUpdateDefault,zt as cartMetafieldDeleteDefault,Yt as cartMetafieldsSetDefault,Wt as cartNoteUpdateDefault,jt as cartSelectedDeliveryOptionsUpdateDefault,Vt as cartSetIdDefault,wa as changelogHandler,er as createCartHandler,Ka as createContentSecurityPolicy,cr as createCustomerAccountClient,Ha as createHydrogenContext,Ga as createRequestHandler,co as createStorefrontClient,Wn as createWithCache,T as formatAPIResult,xe as generateCacheControlHeader,ps as getPaginationVariables,vs as getSelectedProductOptions,Ls as getSeoMeta,_n as getShopAnalytics,js as getSitemap,Ws as getSitemapIndex,ws as graphiqlLoader,Da as hydrogenContext,Is as hydrogenPreset,ts as hydrogenRoutes,Ds as storefrontRedirect,Y as useAnalytics,St as useCustomerPrivacy,ur as useNonce,Ea as useOptimisticCart,os as useOptimisticData,ms as useOptimisticVariant};//# sourceMappingURL=index.js.map
1050
+ export{Mn as Analytics,F as AnalyticsEvent,Lt as CacheCustom,_t as CacheLong,Ot as CacheNone,ue as CacheShort,Z as CartForm,Nt as InMemoryCache,xo as NonceProvider,is as OptimisticInput,ls as Pagination,Os as RichText,rs as Script,Gs as Seo,Qs as ShopPayButton,Is as VariantSelector,Yt as cartAttributesUpdateDefault,Wt as cartBuyerIdentityUpdateDefault,Ht as cartCreateDefault,Qt as cartDiscountCodesUpdateDefault,Ft as cartGetDefault,Mt as cartGetIdDefault,Zt as cartGiftCardCodesAddDefault,er as cartGiftCardCodesRemoveDefault,Xt as cartGiftCardCodesUpdateDefault,qt as cartLinesAddDefault,Bt as cartLinesRemoveDefault,Gt as cartLinesUpdateDefault,zt as cartMetafieldDeleteDefault,Jt as cartMetafieldsSetDefault,jt as cartNoteUpdateDefault,Kt as cartSelectedDeliveryOptionsUpdateDefault,Vt as cartSetIdDefault,xa as changelogHandler,tr as createCartHandler,za as createContentSecurityPolicy,ur as createCustomerAccountClient,Ba as createHydrogenContext,Wa as createRequestHandler,lo as createStorefrontClient,Yn as createWithCache,T as formatAPIResult,Le as generateCacheControlHeader,fs as getPaginationVariables,Ts as getSelectedProductOptions,Ns as getSeoMeta,kn as getShopAnalytics,Js as getSitemap,Ys as getSitemapIndex,xs as graphiqlLoader,_a as hydrogenContext,bs as hydrogenPreset,ns as hydrogenRoutes,_s as storefrontRedirect,z as useAnalytics,vt as useCustomerPrivacy,dr as useNonce,Da as useOptimisticCart,ss as useOptimisticData,hs as useOptimisticVariant};//# sourceMappingURL=index.js.map
1051
1051
  //# sourceMappingURL=index.js.map