{"version":3,"file":"CartDrawer.DZWbAMbF.mjs","names":["sf","API_VERSION","useState","useCallback","getCartId","GET_CART_QUERY","EVENT_OPEN","EVENT_CLOSE","EVENT_UPDATE","CART_LINES_REMOVE_QUERY","CART_LINES_UPDATE_QUERY","PREVIEW_CART","fmt","useMemo","c","Row","_Fragment","_jsxs","CART_ID_KEY","CART_FIELDS","useState","useCallback","useMemo","_Fragment","_jsxs"],"sources":["https:/framerusercontent.com/modules/LjA5dpL2eFRachpe0dy7/9mRTV1SCFGCjZpuPRjP0/CartPage.js","https:/framerusercontent.com/modules/zx3Ot7DjsHdicS8UjnCh/EH8ZzqapH2DFtsvwf9er/CartDrawer.js"],"sourcesContent":["// Cart Page (Shopify) — full-screen cart overlay backed by the Storefront Cart\n// API. Opens on `fec:cartpage-open` (fired by the Cart Drawer's \"View Cart\").\n// Edit quantities / remove lines, see the order-summary totals, then continue\n// to Shopify's HOSTED checkout via cart.checkoutUrl.\n// Connection: storeDomain + storefrontToken (direct Storefront API; see README).\n//\n// FULL-SCREEN OVERLAY (not a Framer page). Uses the same portal + fixed +\n// event mechanism CartDrawer uses, so it completely escapes Framer's\n// layout/breakpoints/canvas — no page creation, no positioning bugs, no 404.\n// The drawer's \"View Cart\" button fires fec:cartpage-open; this overlay\n// listens and takes over the screen with the full cart (line-item table,\n// totals, Proceed to Checkout). Reuses the same Storefront Cart API plumbing,\n// cart id, and fec:cart-update contract so the header badge / drawer stay in\n// sync.\n//\n// Event contract:\n//   - listens fec:cartpage-open  → show overlay, fetch cart\n//   - listens fec:cartpage-close → hide overlay\n//   - listens fec:cart-update    → re-fetch while open\n//   - emits  fec:cart-update     on qty / remove change\n//\n// Checkout is HOSTED by Shopify: \"Proceed to Checkout\" emits a cancelable\n// fec:checkout-open (a manually-inserted CheckoutPage overlay can intercept\n// it), then falls back to redirecting to cart.checkoutUrl.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useCallback,useEffect,useMemo,useState}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const CART_ID_KEY=\"fec:shopify-cart-id\";const EVENT_UPDATE=\"fec:cart-update\";const EVENT_OPEN=\"fec:cartpage-open\";const EVENT_CLOSE=\"fec:cartpage-close\";const getCartId=()=>{if(typeof window===\"undefined\")return\"\";try{return window.localStorage.getItem(CART_ID_KEY)||\"\";}catch{return\"\";}};// Call the Shopify Storefront API DIRECTLY with the PUBLIC Storefront access\n// token (Shopify's intended client-side use). No proxy worker, no third-party\n// transmission of credentials. The GraphQL queries are embedded below.\nconst API_VERSION=\"2025-01\";const CART_FIELDS=/* GraphQL */`\n  id checkoutUrl totalQuantity\n  cost { subtotalAmount { amount currencyCode } totalAmount { amount currencyCode } }\n  discountCodes { code applicable }\n  lines(first: 100) { edges { node { id quantity merchandise { ... on ProductVariant { id title sku image { url } price { amount currencyCode } selectedOptions { name value } product { id title handle } } } } } }\n`;const GET_CART_QUERY=/* GraphQL */`\n  query GetCart($id: ID!) { cart(id: $id) { ${CART_FIELDS} } }\n`;const CART_LINES_UPDATE_QUERY=/* GraphQL */`\n  mutation CartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n    cartLinesUpdate(cartId: $cartId, lines: $lines) { cart { ${CART_FIELDS} } userErrors { field message } }\n  }\n`;const CART_LINES_REMOVE_QUERY=/* GraphQL */`\n  mutation CartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {\n    cartLinesRemove(cartId: $cartId, lineIds: $lineIds) { cart { ${CART_FIELDS} } userErrors { field message } }\n  }\n`;const CART_DISCOUNT_CODES_UPDATE_QUERY=/* GraphQL */`\n  mutation CartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!]) {\n    cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) { cart { ${CART_FIELDS} } userErrors { field message } }\n  }\n`;async function sf(host,token,query,variables){const store=(host||\"\").trim().replace(/^https?:\\/\\//i,\"\").replace(/\\/.*$/,\"\");const res=await fetch(`https://${store}/api/${API_VERSION}/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":(token||\"\").trim()},body:JSON.stringify({query,variables})});if(!res.ok)throw new Error(`HTTP ${res.status}`);const json=await res.json();if(json.errors?.length)throw new Error(json.errors[0]?.message||\"Storefront error\");if(!json.data)throw new Error(\"Empty response\");return json.data;}const fmt=m=>{if(!m)return\"\";const n=Number(m.amount);if(!Number.isFinite(n))return\"\";try{return new Intl.NumberFormat(undefined,{style:\"currency\",currency:m.currencyCode||\"USD\"}).format(n);}catch{return`${m.currencyCode} ${n}`;}};// Canvas preview cart so designers see the full overlay with \"Preview open\".\nconst PREVIEW_CART={id:\"preview\",checkoutUrl:\"\",totalQuantity:3,discountCodes:[{code:\"WELCOME10\",applicable:true}],cost:{subtotalAmount:{amount:\"279.99\",currencyCode:\"USD\"},totalAmount:{amount:\"251.99\",currencyCode:\"USD\"}},lines:{edges:[{node:{id:\"preview1\",quantity:1,merchandise:{id:\"v1\",title:\"Camel / M\",sku:\"TRENCH-01\",image:{url:\"\"},price:{amount:\"189.99\",currencyCode:\"USD\"},product:{title:\"Double-Breasted Trench Coat\"},selectedOptions:[{name:\"Color\",value:\"Camel\"},{name:\"Size\",value:\"M\"}]}}},{node:{id:\"preview2\",quantity:2,merchandise:{id:\"v2\",title:\"Default Title\",sku:\"SCARF-09\",image:{url:\"\"},price:{amount:\"45.00\",currencyCode:\"USD\"},product:{title:\"Merino Wool Scarf\"},selectedOptions:[{name:\"Title\",value:\"Default Title\"}]}}}]}};/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function CartPage({labelGroup:{productLabel=\"Product\",priceLabel=\"Price\",quantityLabel=\"Quantity\",subtotalLabel=\"Subtotal\",discountLabel=\"Discount\",shippingLabel=\"Shipping\",freeShippingLabel=\"Free shipping\",totalLabel=\"Total\"}={},storefrontToken=\"\",storeDomain=\"\",maxWidth=1200,backgroundColor=\"#FFFFFF\",panelColor=\"#F7F7F7\",textColor=\"#0a0a0a\",mutedTextColor=\"#6b7280\",dividerColor=\"#e5e7eb\",accentColor=\"#3E3E41\",accentTextColor=\"#FFFFFF\",title=\"Shopping Cart\",emptyText=\"Your cart is currently empty.\",showTitle=true,showColumnHeader=true,showCoupon=true,couponTitle=\"Have a coupon?\",totalsTitle=\"Cart Totals\",checkoutLabel=\"Proceed to Checkout\",continueShoppingLabel=\"Continue Shopping\",fallbackOpen=false}){const[open,setOpen]=useState(false);const[cart,setCart]=useState(null);const[loading,setLoading]=useState(false);const[updatingId,setUpdatingId]=useState(null);const[couponInput,setCouponInput]=useState(\"\");const[couponBusy,setCouponBusy]=useState(false);const[couponMsg,setCouponMsg]=useState(null);const[portalRoot,setPortalRoot]=useState(null);// True ONLY in Framer's editor canvas (not in preview / export / published\n// pages). RenderTarget is the authoritative API for this — the older\n// `!storefrontToken || !storeDomain` heuristic mis-identified the editor\n// canvas when credentials were set, so the \"Preview in Canvas\" toggle never\n// actually triggered the inline render.\nconst isOnCanvas=RenderTarget.current()===RenderTarget.canvas;const isCanvas=isOnCanvas||!storefrontToken||!storeDomain;const isOpen=isCanvas?fallbackOpen:open;// Canvas preview path — when the designer flips \"Preview in Canvas\" on,\n// render the panel INLINE (no portal, no position:fixed). The live overlay\n// mechanism (portal to body + fixed) gets hidden behind Framer's right-side\n// property panel in the editor, so canvas preview bypasses it entirely. Live\n// runtime is unaffected.\nconst inlinePreview=isOnCanvas&&fallbackOpen;const loadCart=useCallback(async()=>{const id=getCartId();if(!id||!storefrontToken||!storeDomain){setCart(null);return;}setLoading(true);try{const d=await sf(storeDomain,storefrontToken,GET_CART_QUERY,{id});setCart(d?.cart??null);}catch{setCart(null);}finally{setLoading(false);}},[storefrontToken,storeDomain]);// Explicit portal root appended directly to document.body — same reasoning\n// as CartDrawer: Framer's published page wraps the React tree in a\n// transformed Frame, so a fixed overlay must mount as a true body sibling\n// to escape every Framer ancestor.\nuseEffect(()=>{if(typeof document===\"undefined\")return;const div=document.createElement(\"div\");div.setAttribute(\"data-fec-cartpage-root\",\"\");div.style.position=\"fixed\";div.style.top=\"0\";div.style.left=\"0\";div.style.width=\"0\";div.style.height=\"0\";div.style.zIndex=\"999999\";document.body.appendChild(div);setPortalRoot(div);return()=>{try{document.body.removeChild(div);}catch{// Already detached — safe to ignore.\n}};},[]);// Open / close via the event contract. onOpen fetches a fresh cart so the\n// overlay always reflects the latest server state.\nuseEffect(()=>{const onOpen=()=>{setOpen(true);void loadCart();};const onClose=()=>setOpen(false);const onUpdate=()=>{if(open)void loadCart();};window.addEventListener(EVENT_OPEN,onOpen);window.addEventListener(EVENT_CLOSE,onClose);window.addEventListener(EVENT_UPDATE,onUpdate);return()=>{window.removeEventListener(EVENT_OPEN,onOpen);window.removeEventListener(EVENT_CLOSE,onClose);window.removeEventListener(EVENT_UPDATE,onUpdate);};},[loadCart,open]);useEffect(()=>{if(!open)return;const onKey=e=>{if(e.key===\"Escape\")setOpen(false);};window.addEventListener(\"keydown\",onKey);return()=>window.removeEventListener(\"keydown\",onKey);},[open]);useEffect(()=>{if(typeof document===\"undefined\")return;if(open){const prev=document.body.style.overflow;document.body.style.overflow=\"hidden\";return()=>{document.body.style.overflow=prev;};}},[open]);// Full-screen overlay + the responsive grid, injected with !important so\n// Framer's published-page Frame defaults can't override it (same approach\n// as CartDrawer). 100dvh so mobile Safari's URL bar doesn't clip the bottom.\nconst safeMaxWidth=Number.isFinite(maxWidth)&&maxWidth>0?maxWidth:1200;useEffect(()=>{if(typeof document===\"undefined\")return;const style=document.createElement(\"style\");style.setAttribute(\"data-fec-cartpage-styles\",\"\");// The fixed full-screen positioning (panel + backdrop) is skipped for\n// the canvas inline preview — those rules pin the panel to\n// position:fixed which we don't want when rendering in-flow. The layout\n// rules (inner width, responsive grid/row) are ALWAYS injected so the\n// line-item table still lays out correctly on the canvas.\nconst overlayCss=inlinePreview?\"\":`\n            [data-fec-cartpage-panel] {\n                position: fixed !important;\n                inset: 0 !important;\n                width: 100vw !important;\n                height: 100vh !important;\n                height: 100dvh !important;\n                z-index: 1000000 !important;\n                overflow-y: auto !important;\n                -webkit-overflow-scrolling: touch !important;\n            }\n            [data-fec-cartpage-backdrop] {\n                position: fixed !important;\n                inset: 0 !important;\n                width: 100vw !important;\n                height: 100vh !important;\n                height: 100dvh !important;\n                z-index: 999998 !important;\n            }\n        `;style.textContent=`\n            ${overlayCss}\n            [data-fec-cart-page-inner] {\n                width: 100% !important;\n                max-width: ${safeMaxWidth}px !important;\n                margin: 0 auto !important;\n            }\n            [data-fec-cart-page-grid] {\n                display: grid !important;\n                grid-template-columns: minmax(0, 1fr) 360px !important;\n                gap: 40px !important;\n                align-items: start !important;\n            }\n            [data-fec-cart-page-row] {\n                display: grid !important;\n                grid-template-columns: 88px minmax(0, 1fr) 90px 116px 90px !important;\n                gap: 16px !important;\n                align-items: center !important;\n            }\n            @media (max-width: 860px) {\n                [data-fec-cart-page-grid] {\n                    grid-template-columns: minmax(0, 1fr) !important;\n                    gap: 28px !important;\n                }\n            }\n            @media (max-width: 600px) {\n                [data-fec-cart-page-thead] { display: none !important; }\n                [data-fec-cart-page-row] {\n                    grid-template-columns: 80px minmax(0, 1fr) !important;\n                    gap: 14px !important;\n                    align-items: start !important;\n                }\n                [data-fec-cart-page-cell-price] { display: none !important; }\n                [data-fec-cart-page-cell-total] {\n                    grid-column: 2 !important;\n                    text-align: left !important;\n                }\n            }\n        `;document.head.appendChild(style);return()=>{try{document.head.removeChild(style);}catch{// Already detached — safe to ignore.\n}};},[safeMaxWidth,inlinePreview]);const updateItem=useCallback(async(lineId,qty)=>{const id=getCartId();if(!id||!storefrontToken||!storeDomain)return;setUpdatingId(lineId);try{if(qty<=0){await sf(storeDomain,storefrontToken,CART_LINES_REMOVE_QUERY,{cartId:id,lineIds:[lineId]});}else{await sf(storeDomain,storefrontToken,CART_LINES_UPDATE_QUERY,{cartId:id,lines:[{id:lineId,quantity:qty}]});}await loadCart();window.dispatchEvent(new CustomEvent(EVENT_UPDATE));}catch{// Network/op error — swallow; the cart stays as-is.\n}finally{setUpdatingId(null);}},[storefrontToken,storeDomain,loadCart]);// Coupons (Storefront Cart API). Shopify REPLACES the full discount-code\n// set on every call, so apply = (existing applicable codes) + new one, and\n// remove = (existing applicable codes) − the removed one. After the call we\n// re-read the cart so the totals/discount row refresh.\nconst applyCoupon=useCallback(async()=>{const code=couponInput.trim();const id=getCartId();if(!id||!storefrontToken||!storeDomain||!code||couponBusy)return;setCouponBusy(true);setCouponMsg(null);try{const existing=(cart?.discountCodes??[]).filter(c=>c.applicable).map(c=>c.code);const next=Array.from(new Set([...existing,code]));const d=await sf(storeDomain,storefrontToken,CART_DISCOUNT_CODES_UPDATE_QUERY,{cartId:id,discountCodes:next});const result=d?.cartDiscountCodesUpdate;const codes=result?.cart?.discountCodes??[];const justEntered=codes.find(c=>c.code.toLowerCase()===code.toLowerCase());const userErr=result?.userErrors?.[0]?.message;if(!result?.cart||userErr||justEntered&&!justEntered.applicable){setCouponMsg({type:\"error\",text:userErr||\"Coupon could not be applied.\"});}else{setCouponInput(\"\");setCouponMsg({type:\"success\",text:`Coupon \"${code}\" applied.`});}await loadCart();window.dispatchEvent(new CustomEvent(EVENT_UPDATE));}catch{setCouponMsg({type:\"error\",text:\"Coupon could not be applied.\"});}finally{setCouponBusy(false);}},[storefrontToken,storeDomain,couponInput,couponBusy,cart,loadCart]);const removeCoupon=useCallback(async code=>{const id=getCartId();if(!id||!storefrontToken||!storeDomain||couponBusy)return;setCouponBusy(true);setCouponMsg(null);try{const next=(cart?.discountCodes??[]).filter(c=>c.applicable&&c.code!==code).map(c=>c.code);await sf(storeDomain,storefrontToken,CART_DISCOUNT_CODES_UPDATE_QUERY,{cartId:id,discountCodes:next});await loadCart();window.dispatchEvent(new CustomEvent(EVENT_UPDATE));}catch{// Swallow — the coupon chip stays until the next successful load.\n}finally{setCouponBusy(false);}},[storefrontToken,storeDomain,couponBusy,cart,loadCart]);// Checkout opens the on-site CheckoutPage overlay (Woo-style): contact +\n// shipping form, then it hands off to Shopify's HOSTED checkout for payment.\n// Close this cart overlay first.\nconst goToCheckout=()=>{if(isCanvas||typeof window===\"undefined\")return;setOpen(false);// Open the on-site CheckoutPage if present; otherwise fall back to\n// Shopify's hosted checkout so the button ALWAYS works.\nconst ev=new CustomEvent(\"fec:checkout-open\",{cancelable:true});const handled=!window.dispatchEvent(ev);if(!handled&&cart?.checkoutUrl)window.location.href=cart.checkoutUrl;};// No separate shop page in the overlay model — \"Continue Shopping\" simply\n// closes the cart and returns the visitor to where they were.\nconst closeOverlay=()=>setOpen(false);// Derive cart data unconditionally (BEFORE any early return) so React's\n// hook order stays stable across renders.\nconst displayCart=cart||(isCanvas?PREVIEW_CART:null);const lines=displayCart?displayCart.lines.edges.map(e=>e.node):[];const subtotal=displayCart?.cost.subtotalAmount??null;const total=displayCart?.cost.totalAmount??subtotal;const appliedCodes=(displayCart?.discountCodes??[]).filter(c=>c.applicable);// *Value = the formatted money shown on the right of each totals row. The\n// row CAPTIONS on the left are the subtotal/discount/shipping/totalLabel\n// props so they can be reworded or translated from Framer's panel.\nconst subtotalValue=fmt(subtotal);// Shipping: Shopify only computes it once it knows a delivery address, so\n// the row shows a designer-set message UNTIL it is known, then the real\n// amount. Derived as total − subtotal, because cost.totalAmount folds\n// shipping and tax in as soon as the address is attached — it is NOT\n// reliably \"pre-shipping\" as this comment previously claimed. Without this\n// the page rendered Subtotal 200 / Shipping <text> / Total 579, leaving the\n// difference unexplained on screen.\n// Guarded to > 0.0001 so floating-point noise can't render a \"shipping\" row\n// for a cart that has none; a NEGATIVE difference is a discount and is\n// handled by the discount row below, which is why this is not just abs().\nconst shippingValue=useMemo(()=>{const extra=subtotal&&total?Number(total.amount)-Number(subtotal.amount):0;return extra>1e-4&&subtotal?fmt({amount:String(extra),currencyCode:subtotal.currencyCode}):freeShippingLabel;},[subtotal,total,freeShippingLabel]);const totalValue=fmt(total);// Discount = subtotal − total (when a discount has been applied).\nconst discountAmount=subtotal&&total?Number(subtotal.amount)-Number(total.amount):0;const discountValue=discountAmount>1e-4&&subtotal?`−${fmt({amount:String(discountAmount),currencyCode:subtotal.currencyCode})}`:null;const colHeaderCell={fontSize:12,fontWeight:700,textTransform:\"uppercase\",letterSpacing:\"0.04em\",color:mutedTextColor};// Canvas placeholder — designers see a hint unless they flip \"Preview\n// open\" (mirrors CartDrawer). All hooks above already ran, so returning\n// here doesn't break the Rules of Hooks.\nif(isCanvas&&!fallbackOpen){return /*#__PURE__*/_jsx(\"div\",{style:{padding:\"12px 16px\",fontFamily:\"Inter, system-ui, sans-serif\",color:mutedTextColor,fontSize:12,textAlign:\"center\",border:`1px dashed ${dividerColor}`,borderRadius:8,background:\"#F9FAFB\"},children:'Cart Page \\xb7 toggle \"Preview in Canvas\" in props to see the page'});}// Invisible anchor kept in the normal React tree so Framer's publish\n// bundler never tree-shakes the module; the visible overlay is portalled to\n// a true body sibling so position:fixed escapes Framer's transformed page\n// wrapper.\nconst anchor=/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",\"data-fec-cartpage-anchor\":\"\",style:{width:0,height:0,overflow:\"hidden\",position:\"absolute\",top:0,left:0,pointerEvents:\"none\"}});const body=loading&&!cart&&!isCanvas?/*#__PURE__*/_jsx(\"div\",{style:{padding:96,textAlign:\"center\",color:mutedTextColor,fontSize:14},children:\"Loading…\"}):lines.length===0?/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"96px 24px\",textAlign:\"center\",color:mutedTextColor},children:[/*#__PURE__*/_jsxs(\"svg\",{width:56,height:56,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:1.4,strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{margin:\"0 auto 18px\",display:\"block\",opacity:.5},children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"9\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"20\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:16,marginBottom:20},children:emptyText}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:closeOverlay,style:{padding:\"13px 28px\",background:accentColor,color:accentTextColor,border:\"none\",borderRadius:4,fontSize:14,fontWeight:600,cursor:\"pointer\",fontFamily:\"inherit\",letterSpacing:\"0.02em\"},children:continueShoppingLabel})]}):/*#__PURE__*/_jsxs(\"div\",{\"data-fec-cart-page-grid\":\"\",children:[/*#__PURE__*/_jsxs(\"div\",{children:[showColumnHeader&&/*#__PURE__*/_jsxs(\"div\",{\"data-fec-cart-page-row\":\"\",\"data-fec-cart-page-thead\":\"\",style:{padding:\"0 0 14px\",borderBottom:`2px solid ${dividerColor}`},children:[/*#__PURE__*/_jsx(\"span\",{style:colHeaderCell,children:productLabel}),/*#__PURE__*/_jsx(\"span\",{style:colHeaderCell}),/*#__PURE__*/_jsx(\"span\",{style:{...colHeaderCell,textAlign:\"right\"},children:priceLabel}),/*#__PURE__*/_jsx(\"span\",{style:{...colHeaderCell,textAlign:\"center\"},children:quantityLabel}),/*#__PURE__*/_jsx(\"span\",{style:{...colHeaderCell,textAlign:\"right\"},children:totalLabel})]}),lines.map(line=>{const m=line.merchandise;const img=m.image?.url;const opts=m.selectedOptions.filter(o=>!(o.name===\"Title\"&&o.value===\"Default Title\")).map(o=>o.value).join(\" \\xb7 \");const isUpdating=updatingId===line.id;const unitPrice=fmt(m.price);const lineTotal=fmt({amount:String(Number(m.price.amount)*line.quantity),currencyCode:m.price.currencyCode});return /*#__PURE__*/_jsxs(\"div\",{\"data-fec-cart-page-row\":\"\",style:{padding:\"22px 0\",borderBottom:`1px solid ${dividerColor}`,opacity:isUpdating?.5:1,transition:\"opacity 0.15s ease\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:88,height:88,background:\"#F3F4F6\",borderRadius:6,overflow:\"hidden\",flexShrink:0},children:img&&/*#__PURE__*/_jsx(\"img\",{src:img,alt:m.product.title,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}})}),/*#__PURE__*/_jsxs(\"div\",{style:{minWidth:0},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:15,fontWeight:600,lineHeight:1.35},children:m.product.title}),m.sku&&/*#__PURE__*/_jsxs(\"div\",{style:{fontSize:12,color:mutedTextColor,marginTop:4},children:[\"SKU: \",m.sku]}),opts&&/*#__PURE__*/_jsx(\"div\",{style:{fontSize:12,color:mutedTextColor,marginTop:4},children:opts}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,0),disabled:isUpdating,style:{background:\"transparent\",border:\"none\",color:mutedTextColor,fontSize:12,cursor:\"pointer\",textDecoration:\"underline\",padding:0,marginTop:8,fontFamily:\"inherit\"},children:\"Remove\"})]}),/*#__PURE__*/_jsx(\"div\",{\"data-fec-cart-page-cell-price\":\"\",style:{fontSize:14,fontWeight:600,textAlign:\"right\"},children:unitPrice}),/*#__PURE__*/_jsx(\"div\",{style:{display:\"flex\",justifyContent:\"center\"},children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"inline-flex\",alignItems:\"center\",border:`1px solid ${dividerColor}`,borderRadius:999,overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,line.quantity-1),disabled:isUpdating,\"aria-label\":\"Decrease quantity\",style:{width:32,height:32,background:\"transparent\",border:\"none\",cursor:isUpdating?\"wait\":\"pointer\",color:textColor,fontSize:16},children:\"−\"}),/*#__PURE__*/_jsx(\"span\",{style:{minWidth:30,textAlign:\"center\",fontSize:13,fontWeight:600},children:line.quantity}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,line.quantity+1),disabled:isUpdating,\"aria-label\":\"Increase quantity\",style:{width:32,height:32,background:\"transparent\",border:\"none\",cursor:isUpdating?\"wait\":\"pointer\",color:textColor,fontSize:16},children:\"+\"})]})}),/*#__PURE__*/_jsx(\"div\",{\"data-fec-cart-page-cell-total\":\"\",style:{fontSize:14,fontWeight:700,textAlign:\"right\"},children:lineTotal})]},line.id);}),/*#__PURE__*/_jsxs(\"button\",{type:\"button\",onClick:closeOverlay,style:{marginTop:24,padding:\"12px 22px\",background:\"transparent\",color:textColor,border:`1px solid ${dividerColor}`,borderRadius:4,fontSize:13,fontWeight:600,cursor:\"pointer\",fontFamily:\"inherit\",letterSpacing:\"0.02em\"},children:[\"← \",continueShoppingLabel]})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:24},children:[showCoupon&&/*#__PURE__*/_jsxs(\"div\",{style:{background:panelColor,borderRadius:8,padding:\"24px 22px\"},children:[/*#__PURE__*/_jsx(\"h3\",{style:{margin:\"0 0 16px\",fontSize:16,fontWeight:700},children:couponTitle}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",gap:8},children:[/*#__PURE__*/_jsx(\"input\",{type:\"text\",value:couponInput,onChange:e=>setCouponInput(e.target.value),onKeyDown:e=>{if(e.key===\"Enter\")void applyCoupon();},placeholder:\"Coupon code\",disabled:couponBusy,style:{flex:1,minWidth:0,padding:\"11px 14px\",border:`1px solid ${dividerColor}`,borderRadius:4,fontSize:14,fontFamily:\"inherit\",color:textColor,background:backgroundColor,boxSizing:\"border-box\"}}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>void applyCoupon(),disabled:couponBusy||!couponInput.trim(),style:{padding:\"11px 18px\",background:accentColor,color:accentTextColor,border:\"none\",borderRadius:4,fontSize:13,fontWeight:600,cursor:couponBusy||!couponInput.trim()?\"default\":\"pointer\",opacity:couponBusy||!couponInput.trim()?.6:1,fontFamily:\"inherit\",whiteSpace:\"nowrap\"},children:\"Apply\"})]}),couponMsg&&/*#__PURE__*/_jsx(\"div\",{style:{marginTop:10,fontSize:12,color:couponMsg.type===\"error\"?\"#dc2626\":\"#16a34a\"},children:couponMsg.text}),appliedCodes.length>0&&/*#__PURE__*/_jsx(\"div\",{style:{marginTop:14,display:\"flex\",flexWrap:\"wrap\",gap:8},children:appliedCodes.map(c=>/*#__PURE__*/_jsxs(\"span\",{style:{display:\"inline-flex\",alignItems:\"center\",gap:6,padding:\"5px 10px\",background:backgroundColor,border:`1px solid ${dividerColor}`,borderRadius:999,fontSize:12,fontWeight:600,textTransform:\"uppercase\"},children:[c.code,/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>void removeCoupon(c.code),disabled:couponBusy,\"aria-label\":`Remove coupon ${c.code}`,style:{background:\"transparent\",border:\"none\",cursor:\"pointer\",color:mutedTextColor,fontSize:14,lineHeight:1,padding:0},children:\"\\xd7\"})]},c.code))})]}),/*#__PURE__*/_jsxs(\"div\",{style:{background:panelColor,borderRadius:8,padding:\"24px 22px\"},children:[/*#__PURE__*/_jsx(\"h3\",{style:{margin:\"0 0 18px\",fontSize:16,fontWeight:700},children:totalsTitle}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:12},children:[/*#__PURE__*/_jsx(Row,{label:subtotalLabel,value:subtotalValue,color:textColor,muted:mutedTextColor}),discountValue&&/*#__PURE__*/_jsx(Row,{label:discountLabel,value:discountValue,color:\"#16a34a\",muted:mutedTextColor}),/*#__PURE__*/_jsx(Row,{label:shippingLabel,value:shippingValue,color:textColor,muted:mutedTextColor}),/*#__PURE__*/_jsx(\"div\",{style:{height:1,background:dividerColor,margin:\"4px 0\"}}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",alignItems:\"baseline\",fontSize:19,fontWeight:700},children:[/*#__PURE__*/_jsx(\"span\",{children:totalLabel}),/*#__PURE__*/_jsx(\"span\",{children:totalValue})]})]}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:goToCheckout,style:{marginTop:22,width:\"100%\",padding:\"15px 16px\",background:accentColor,color:accentTextColor,border:\"none\",borderRadius:4,fontSize:14,fontWeight:700,cursor:\"pointer\",fontFamily:\"inherit\",letterSpacing:\"0.02em\"},children:checkoutLabel})]})]})]});// The panel JSX is built once and reused by both the live portal overlay\n// and the canvas inline preview — the only difference is the wrapper + CSS\n// positioning around it. Inline preview renders it as a normal in-flow block\n// (full width, centered, capped at maxWidth) so it sits at the component's\n// own spot on the canvas; the live path keeps the fixed full-screen overlay.\nconst panel=/*#__PURE__*/_jsxs(\"div\",{role:\"dialog\",\"aria-modal\":\"true\",\"data-fec-cartpage-panel\":inlinePreview?undefined:\"\",style:{background:backgroundColor,color:textColor,fontFamily:inlinePreview?\"Inter, system-ui, sans-serif\":undefined,...inlinePreview?{width:\"100%\",maxWidth:safeMaxWidth,margin:\"0 auto\"}:{opacity:isOpen?1:0,transform:isOpen?\"translateY(0)\":\"translateY(16px)\",transition:\"opacity 0.25s ease, transform 0.3s cubic-bezier(0.32,0.72,0,1)\"}},children:[/*#__PURE__*/_jsxs(\"div\",{style:{position:\"sticky\",top:0,zIndex:2,background:backgroundColor,borderBottom:`1px solid ${dividerColor}`,padding:\"18px 24px\",display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\"},children:[/*#__PURE__*/_jsx(\"h2\",{style:{margin:0,fontSize:22,fontWeight:700,letterSpacing:\"-0.01em\",visibility:showTitle?\"visible\":\"hidden\"},children:title}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>setOpen(false),\"aria-label\":\"Close cart\",style:{background:\"transparent\",border:\"none\",cursor:\"pointer\",padding:8,margin:-8,color:textColor,display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:8},children:/*#__PURE__*/_jsxs(\"svg\",{width:22,height:22,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:2.4,strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"line\",{x1:\"18\",y1:\"6\",x2:\"6\",y2:\"18\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"6\",y1:\"6\",x2:\"18\",y2:\"18\"})]})})]}),/*#__PURE__*/_jsx(\"div\",{style:{padding:\"40px 24px 64px\"},children:/*#__PURE__*/_jsx(\"div\",{\"data-fec-cart-page-inner\":\"\",children:body})})]});// Canvas inline preview — return the panel as a normal in-flow block at the\n// component's own spot on the page. The designer can see and style it\n// without Framer's right-side property panel covering the fixed overlay.\n// Live runtime is unaffected (this branch only fires in the editor canvas).\nif(inlinePreview){return panel;}const overlay=/*#__PURE__*/_jsxs(\"div\",{style:{position:\"fixed\",inset:0,zIndex:9999,pointerEvents:isOpen?\"auto\":\"none\",fontFamily:\"Inter, system-ui, sans-serif\"},children:[/*#__PURE__*/_jsx(\"div\",{\"data-fec-cartpage-backdrop\":\"\",onClick:()=>setOpen(false),style:{background:\"rgba(0,0,0,0.45)\",opacity:isOpen?1:0,transition:\"opacity 0.25s ease\"}}),panel]});const portaled=portalRoot?/*#__PURE__*/createPortal(overlay,portalRoot):null;return /*#__PURE__*/_jsxs(_Fragment,{children:[anchor,portaled]});}function Row({label,value,color,muted}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",alignItems:\"baseline\",fontSize:14},children:[/*#__PURE__*/_jsx(\"span\",{style:{color:muted},children:label}),/*#__PURE__*/_jsx(\"span\",{style:{color,fontWeight:600},children:value})]});}addPropertyControls(CartPage,{storefrontToken:{type:ControlType.String,title:\"Storefront Token\",hidden:()=>true,defaultValue:\"\"},storeDomain:{type:ControlType.String,title:\"Store Domain\",hidden:()=>true,defaultValue:\"\",placeholder:\"your-store.myshopify.com\"},maxWidth:{type:ControlType.Number,title:\"Content width\",defaultValue:1200,min:600,max:1600,unit:\"px\"},showTitle:{type:ControlType.Boolean,title:\"Title\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},title:{type:ControlType.String,title:\"Title text\",defaultValue:\"Shopping Cart\",hidden:p=>!p.showTitle},showColumnHeader:{type:ControlType.Boolean,title:\"Col header\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},emptyText:{type:ControlType.String,title:\"Empty text\",defaultValue:\"Your cart is currently empty.\"},showCoupon:{type:ControlType.Boolean,title:\"Coupon box\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},couponTitle:{type:ControlType.String,title:\"Coupon title\",defaultValue:\"Have a coupon?\",hidden:p=>!p.showCoupon},totalsTitle:{type:ControlType.String,title:\"Totals title\",defaultValue:\"Cart Totals\"},checkoutLabel:{type:ControlType.String,title:\"Checkout label\",defaultValue:\"Proceed to Checkout\"},continueShoppingLabel:{type:ControlType.String,title:\"Continue label\",defaultValue:\"Continue Shopping\"},// Captions for the line-item column header + totals rows. Exposed so the\n// page can be reworded or translated without unlinking the component.\n// Mirrors CartDrawer. `totalLabel` drives both the Total column header and\n// the grand-total row — same word, so they translate together.\nbackgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"},panelColor:{type:ControlType.Color,title:\"Panel BG\",defaultValue:\"#F7F7F7\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#0a0a0a\"},mutedTextColor:{type:ControlType.Color,title:\"Muted text\",defaultValue:\"#6b7280\"},dividerColor:{type:ControlType.Color,title:\"Divider\",defaultValue:\"#e5e7eb\"},accentColor:{type:ControlType.Color,title:\"Button BG\",defaultValue:\"#3E3E41\"},accentTextColor:{type:ControlType.Color,title:\"Button text\",defaultValue:\"#FFFFFF\"},fallbackOpen:{type:ControlType.Boolean,title:\"Preview in Canvas\",description:\"Show the cart page here on the canvas so you can style it. Has no effect on the live site.\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},// All wording on the drawer/page in ONE collapsible section.\n// These controls were never shipped un-grouped, so moving them here\n// cannot reset anyone's customised text. Controls that ARE already\n// released (title, empty state, checkout button, colours) stay\n// top-level for exactly that reason.\nlabelGroup:{type:ControlType.Object,title:\"Labels\",controls:{productLabel:{type:ControlType.String,title:\"Product label\",defaultValue:\"Product\",hidden:p=>!p.showColumnHeader},priceLabel:{type:ControlType.String,title:\"Price label\",defaultValue:\"Price\",hidden:p=>!p.showColumnHeader},quantityLabel:{type:ControlType.String,title:\"Quantity label\",defaultValue:\"Quantity\",hidden:p=>!p.showColumnHeader},subtotalLabel:{type:ControlType.String,title:\"Subtotal label\",defaultValue:\"Subtotal\"},discountLabel:{type:ControlType.String,title:\"Discount label\",defaultValue:\"Discount\",description:\"Only shown when a discount code is applied.\"},shippingLabel:{type:ControlType.String,title:\"Shipping label\",defaultValue:\"Shipping\"},freeShippingLabel:{type:ControlType.String,title:\"Shipping value\",defaultValue:\"Free shipping\",description:\"Value on the shipping row. Real shipping is calculated at checkout.\"},totalLabel:{type:ControlType.String,title:\"Total label\",defaultValue:\"Total\"}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CartPage\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\",\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CartPage.map","// Cart Drawer (Shopify) — Modave-style slide-in cart backed by the Storefront\n// Cart API. Opens on the `fec:cart-open` event (fired by Add to Cart / Cart\n// Icon), reads the cart by id (localStorage), lets the shopper change\n// quantities / remove lines, shows a free-shipping progress bar + subtotal\n// breakdown, and sends them to Shopify's HOSTED checkout via cart.checkoutUrl.\n// \"View Cart\" fires `fec:cartpage-open` to open the Cart Page overlay.\n// Connection: storeDomain + storefrontToken (see README). Calls the Shopify\n// Storefront GraphQL API DIRECTLY with the PUBLIC Storefront access token\n// (Shopify's intended client-side use) — no proxy worker, no third-party\n// transmission of credentials.\n//\n// Event contract (must match AddToCart + CartIcon siblings):\n//   - listens fec:cart-open   → slide drawer in, fetch cart\n//   - listens fec:cart-close  → slide drawer out\n//   - listens fec:cart-update → re-fetch cart while open\n//   - emits   fec:cart-update on item qty change / remove\n//   - emits   fec:cartpage-open from \"View Cart\"\n//\n// Checkout is HOSTED by Shopify: the footer \"Checkout\" button emits a\n// cancelable fec:checkout-open (a manually-inserted CheckoutPage overlay can\n// intercept it), then falls back to redirecting to cart.checkoutUrl.\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import{useCallback,useEffect,useMemo,useState}from\"react\";import{createPortal}from\"react-dom\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";const CART_ID_KEY=\"fec:shopify-cart-id\";const EVENT_OPEN=\"fec:cart-open\";const EVENT_CLOSE=\"fec:cart-close\";// Opens the full-screen Cart Page overlay (CartPage component). \"View Cart\"\n// dispatches this instead of navigating to a real /cart route — the overlay\n// escapes Framer's layout entirely, so there's no page-creation / 404 surface.\n// Must match CartPage's open event.\nconst EVENT_CARTPAGE_OPEN=\"fec:cartpage-open\";const EVENT_UPDATE=\"fec:cart-update\";const getCartId=()=>{if(typeof window===\"undefined\")return\"\";try{return window.localStorage.getItem(CART_ID_KEY)||\"\";}catch{return\"\";}};const setCartId=id=>{if(typeof window===\"undefined\")return;try{window.localStorage.setItem(CART_ID_KEY,id);}catch{// localStorage unavailable — safe to ignore.\n}};// Call the Shopify Storefront API DIRECTLY with the PUBLIC Storefront access\n// token (Shopify's intended client-side use). No proxy worker, no third-party\n// transmission of credentials.\nconst API_VERSION=\"2025-01\";async function sf(host,token,query,variables){const store=(host||\"\").trim().replace(/^https?:\\/\\//i,\"\").replace(/\\/.*$/,\"\");const res=await fetch(`https://${store}/api/${API_VERSION}/graphql.json`,{method:\"POST\",headers:{\"Content-Type\":\"application/json\",\"X-Shopify-Storefront-Access-Token\":(token||\"\").trim()},body:JSON.stringify({query,variables})});if(!res.ok)throw new Error(`HTTP ${res.status}`);const json=await res.json();if(json.errors?.length)throw new Error(json.errors[0]?.message||\"Storefront error\");if(!json.data)throw new Error(\"Empty response\");return json.data;}// Shared cart selection set, expanded inline into every cart query/mutation\n// below so each embedded GraphQL string is complete and self-contained.\nconst CART_FIELDS=/* GraphQL */`\n  id\n  checkoutUrl\n  totalQuantity\n  cost {\n    subtotalAmount { amount currencyCode }\n    totalAmount { amount currencyCode }\n  }\n  discountCodes { code applicable }\n  lines(first: 100) {\n    edges {\n      node {\n        id\n        quantity\n        merchandise {\n          ... on ProductVariant {\n            id\n            title\n            sku\n            image { url }\n            price { amount currencyCode }\n            selectedOptions { name value }\n            product { id title handle }\n          }\n        }\n      }\n    }\n  }\n`;const GET_CART_QUERY=/* GraphQL */`\n  query GetCart($id: ID!) {\n    cart(id: $id) { ${CART_FIELDS} }\n  }\n`;const CART_LINES_UPDATE_QUERY=/* GraphQL */`\n  mutation CartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!) {\n    cartLinesUpdate(cartId: $cartId, lines: $lines) {\n      cart { ${CART_FIELDS} }\n      userErrors { field message }\n    }\n  }\n`;const CART_LINES_REMOVE_QUERY=/* GraphQL */`\n  mutation CartLinesRemove($cartId: ID!, $lineIds: [ID!]!) {\n    cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {\n      cart { ${CART_FIELDS} }\n      userErrors { field message }\n    }\n  }\n`;const CART_LINES_ADD_QUERY=/* GraphQL */`\n  mutation CartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!) {\n    cartLinesAdd(cartId: $cartId, lines: $lines) {\n      cart { ${CART_FIELDS} }\n      userErrors { field message }\n    }\n  }\n`;const CART_CREATE_QUERY=/* GraphQL */`\n  mutation CartCreate($lines: [CartLineInput!]!) {\n    cartCreate(input: { lines: $lines }) {\n      cart { ${CART_FIELDS} }\n      userErrors { field message }\n    }\n  }\n`;const PRODUCT_RECOMMENDATIONS_QUERY=/* GraphQL */`\n  query Recs($productId: ID!) {\n    productRecommendations(productId: $productId) {\n      id\n      title\n      handle\n      featuredImage { url }\n      priceRange { minVariantPrice { amount currencyCode } }\n      variants(first: 1) { edges { node { id availableForSale } } }\n    }\n  }\n`;const fmt=m=>{if(!m)return\"\";const n=Number(m.amount);if(!Number.isFinite(n))return\"\";try{return new Intl.NumberFormat(undefined,{style:\"currency\",currency:m.currencyCode||\"USD\"}).format(n);}catch{return`${m.currencyCode} ${n}`;}};// Canvas preview cart so designers see the full overlay with \"Preview open\".\nconst PREVIEW_CART={id:\"preview\",checkoutUrl:\"\",totalQuantity:2,discountCodes:[{code:\"WELCOME10\",applicable:true}],cost:{subtotalAmount:{amount:\"379.98\",currencyCode:\"USD\"},totalAmount:{amount:\"341.98\",currencyCode:\"USD\"}},lines:{edges:[{node:{id:\"preview1\",quantity:2,merchandise:{id:\"v1\",title:\"Premium / 8\",image:{url:\"\"},price:{amount:\"189.99\",currencyCode:\"USD\"},product:{title:\"Double-Breasted Trench Coat\"},selectedOptions:[{name:\"Material\",value:\"Premium\"},{name:\"Size\",value:\"8\"}]}}}]}};/**\n * @framerDisableUnlink\n * @framerSupportedLayoutWidth any\n * @framerSupportedLayoutHeight any\n */export default function CartDrawer({labelGroup:{subtotalLabel=\"Subtotal\",discountLabel=\"Discount\",shippingLabel=\"Shipping\",freeShippingLabel=\"Free shipping\",totalLabel=\"Total\",actionNoteLabel=\"Note\",actionShippingLabel=\"Shipping\",actionCouponLabel=\"Coupon\"}={},storefrontToken=\"\",storeDomain=\"\",position=\"right\",width=540,backgroundColor=\"#FFFFFF\",textColor=\"#0a0a0a\",mutedTextColor=\"#6b7280\",dividerColor=\"#e5e7eb\",accentColor=\"#3E3E41\",accentTextColor=\"#FFFFFF\",secondaryButtonBg=\"#FFFFFF\",secondaryButtonText=\"#0a0a0a\",progressColor=\"#22c55e\",title=\"Shopping Cart\",emptyText=\"Your cart is empty\",showFreeShippingBar=false,freeShippingThreshold=200,freeShippingProgressLabel=\"Add {amount} more to unlock free shipping\",freeShippingAchievedLabel=\"Congratulations! You've got free shipping!\",showActionRow=true,showViewCart=true,viewCartLabel=\"View Cart\",checkoutLabel=\"Checkout\",showUpsells=true,upsellTitle=\"You may also add\",fallbackOpen=false}){const[open,setOpen]=useState(false);const[cart,setCart]=useState(null);const[loading,setLoading]=useState(false);const[updatingId,setUpdatingId]=useState(null);const[portalRoot,setPortalRoot]=useState(null);// \"You may also add\" upsell recommendations + the rec currently being added.\nconst[recs,setRecs]=useState([]);const[addingRecId,setAddingRecId]=useState(null);// True ONLY in Framer's editor canvas (not in preview / export / published\n// pages). RenderTarget is the authoritative API for this — the older\n// `!storefrontToken || !storeDomain` heuristic mis-identified the editor\n// canvas when credentials were set, so the \"Preview in Canvas\" toggle never\n// actually triggered the inline render.\nconst isOnCanvas=RenderTarget.current()===RenderTarget.canvas;const isCanvas=isOnCanvas||!storefrontToken||!storeDomain;const isOpen=isCanvas?fallbackOpen:open;// Canvas preview path — when the designer flips \"Preview in Canvas\" on,\n// render the panel INLINE (no portal, no position:fixed, no slide). The\n// live overlay mechanism (portal to body + fixed) gets hidden behind\n// Framer's right-side property panel in the editor, so canvas preview\n// bypasses it entirely. Live runtime is unaffected.\nconst inlinePreview=isOnCanvas&&fallbackOpen;// Explicit portal root attached as a direct child of document.body. Framer's\n// published page wraps the React tree inside a transformed Frame, so a plain\n// createPortal(node, document.body) sometimes resolves to that wrapper\n// instead of body proper, trapping the drawer under transform: matrix(...).\n// Manually appending the container guarantees the drawer mounts as a true\n// body sibling — escaping every Framer ancestor so position: fixed works.\nuseEffect(()=>{if(typeof document===\"undefined\")return;const div=document.createElement(\"div\");div.setAttribute(\"data-fec-cart-drawer-root\",\"\");div.style.position=\"fixed\";div.style.top=\"0\";div.style.left=\"0\";div.style.width=\"0\";div.style.height=\"0\";div.style.zIndex=\"999999\";document.body.appendChild(div);setPortalRoot(div);return()=>{try{document.body.removeChild(div);}catch{// Already detached — safe to ignore.\n}};},[]);// Inject CSS rules with !important so nothing Framer applies can stretch the\n// drawer panel to viewport width. React inline styles get overridden in\n// published Framer pages by the platform's default Frame styling (which\n// forces width: 100% on component-instance children); a high-specificity\n// stylesheet rule with !important is the only reliable override.\nconst safeWidth=Number.isFinite(width)&&width>0?Math.min(width,720):540;useEffect(()=>{if(typeof document===\"undefined\")return;// Skip the !important overlay CSS when rendering inline on the canvas\n// — that rule pins the panel to position:fixed which we don't want for\n// the in-place designer preview.\nif(inlinePreview)return;const style=document.createElement(\"style\");style.setAttribute(\"data-fec-cart-drawer-styles\",\"\");// 100dvh = dynamic viewport height (visible area only) so the footer\n// isn't pushed off-screen behind mobile Safari's URL bar. 100vh kept as\n// a fallback for older browsers.\nstyle.textContent=`\n            [data-fec-cart-drawer-panel] {\n                position: fixed !important;\n                top: 0 !important;\n                bottom: 0 !important;\n                ${position}: 0 !important;\n                width: ${safeWidth}px !important;\n                max-width: 100vw !important;\n                height: 100vh !important;\n                height: 100dvh !important;\n                z-index: 1000000 !important;\n            }\n            [data-fec-cart-drawer-backdrop] {\n                position: fixed !important;\n                top: 0 !important;\n                left: 0 !important;\n                right: 0 !important;\n                bottom: 0 !important;\n                width: 100vw !important;\n                height: 100vh !important;\n                height: 100dvh !important;\n                z-index: 999998 !important;\n            }\n        `;document.head.appendChild(style);return()=>{try{document.head.removeChild(style);}catch{// Already detached — safe to ignore.\n}};},[safeWidth,position,inlinePreview]);const loadCart=useCallback(async()=>{const id=getCartId();if(!id||!storefrontToken||!storeDomain){setCart(null);return;}setLoading(true);try{const d=await sf(storeDomain,storefrontToken,GET_CART_QUERY,{id});setCart(d?.cart??null);}catch{setCart(null);}finally{setLoading(false);}},[storefrontToken,storeDomain]);const updateItem=useCallback(async(lineId,qty)=>{const id=getCartId();if(!id||!storefrontToken||!storeDomain)return;setUpdatingId(lineId);try{if(qty<=0){await sf(storeDomain,storefrontToken,CART_LINES_REMOVE_QUERY,{cartId:id,lineIds:[lineId]});}else{await sf(storeDomain,storefrontToken,CART_LINES_UPDATE_QUERY,{cartId:id,lines:[{id:lineId,quantity:qty}]});}await loadCart();window.dispatchEvent(new CustomEvent(EVENT_UPDATE));}catch{// Network error — leave the cart as-is.\n}finally{setUpdatingId(null);}},[storefrontToken,storeDomain,loadCart]);// Product ids currently in the cart — used to (a) seed the recommendations\n// fetch off the FIRST line's product and (b) filter already-in-cart recs.\nconst cartProductIds=useMemo(()=>{const ids=new Set;for(const edge of cart?.lines.edges??[]){const pid=edge.node.merchandise.product?.id;if(pid)ids.add(pid);}return ids;},[cart]);const firstProductId=cart?.lines.edges[0]?.node.merchandise.product?.id;// Fetch \"You may also add\" recommendations off the first cart product. Keyed\n// on firstProductId (+ creds) so it only refetches when that product changes\n// — NOT on every cart object mutation, which would loop. Drops any rec\n// already in the cart and caps to 4.\nuseEffect(()=>{if(!firstProductId||!storefrontToken||!storeDomain){setRecs([]);return;}let cancelled=false;void(async()=>{try{const d=await sf(storeDomain,storefrontToken,PRODUCT_RECOMMENDATIONS_QUERY,{productId:firstProductId});if(cancelled)return;const list=d?.productRecommendations??[];setRecs(list.filter(p=>!cartProductIds.has(p.id)).slice(0,4));}catch{if(!cancelled)setRecs([]);}})();return()=>{cancelled=true;};// cartProductIds intentionally omitted from deps: it changes on every\n// cart update and would re-trigger the fetch in a loop. The filter still\n// reads the latest set via closure at fetch time, and quick re-reads\n// after an add refresh the list anyway.\n// eslint-disable-next-line react-hooks/exhaustive-deps\n},[firstProductId,storefrontToken,storeDomain]);// Add a recommended product to the cart (same path the drawer uses): create\n// a cart if none exists, else cartLinesAdd, then notify siblings + re-read.\nconst addRec=useCallback(async rec=>{const node=rec.variants.edges[0]?.node;if(!node||!node.availableForSale)return;if(!storefrontToken||!storeDomain)return;setAddingRecId(rec.id);try{const cartId=getCartId();if(cartId){await sf(storeDomain,storefrontToken,CART_LINES_ADD_QUERY,{cartId,lines:[{merchandiseId:node.id,quantity:1}]});}else{const created=await sf(storeDomain,storefrontToken,CART_CREATE_QUERY,{lines:[{merchandiseId:node.id,quantity:1}]});const newId=created?.cartCreate?.cart?.id;if(newId)setCartId(newId);}await loadCart();window.dispatchEvent(new CustomEvent(EVENT_UPDATE));}catch{// Network error — leave the cart as-is.\n}finally{setAddingRecId(null);}},[storefrontToken,storeDomain,loadCart]);useEffect(()=>{const onOpen=()=>{setOpen(true);void loadCart();};const onClose=()=>setOpen(false);const onUpdate=()=>{if(open)void loadCart();};window.addEventListener(EVENT_OPEN,onOpen);window.addEventListener(EVENT_CLOSE,onClose);window.addEventListener(EVENT_UPDATE,onUpdate);return()=>{window.removeEventListener(EVENT_OPEN,onOpen);window.removeEventListener(EVENT_CLOSE,onClose);window.removeEventListener(EVENT_UPDATE,onUpdate);};},[loadCart,open]);useEffect(()=>{if(!open)return;const onKey=e=>{if(e.key===\"Escape\")setOpen(false);};window.addEventListener(\"keydown\",onKey);return()=>window.removeEventListener(\"keydown\",onKey);},[open]);useEffect(()=>{if(typeof document===\"undefined\")return;if(open){const prev=document.body.style.overflow;document.body.style.overflow=\"hidden\";return()=>{document.body.style.overflow=prev;};}},[open]);// Derive cart data + free-shipping progress unconditionally (BEFORE any\n// early return) so React's hook order stays stable across renders.\nconst displayCart=cart||(isCanvas?PREVIEW_CART:null);const lines=displayCart?displayCart.lines.edges.map(e=>e.node):[];const subtotal=displayCart?.cost.subtotalAmount??null;const total=displayCart?.cost.totalAmount??subtotal;const currencyCode=subtotal?.currencyCode||\"USD\";const cartTotal=Number(subtotal?.amount??0);const threshold=Number.isFinite(freeShippingThreshold)&&freeShippingThreshold>0?freeShippingThreshold:0;const hasFreeShipping=threshold>0&&cartTotal>=threshold;const freeShippingProgress=useMemo(()=>{if(threshold<=0)return 0;const ratio=cartTotal/threshold;return Math.min(1,Math.max(0,ratio));},[cartTotal,threshold]);const remainingForFreeShipping=Math.max(0,threshold-cartTotal);const remainingFormatted=fmt({amount:String(remainingForFreeShipping),currencyCode});// Canvas placeholder — designers see a hint instead of the full overlay.\nif(isCanvas&&!fallbackOpen){return /*#__PURE__*/_jsx(\"div\",{style:{padding:\"12px 16px\",fontFamily:\"Inter, system-ui, sans-serif\",color:mutedTextColor,fontSize:12,textAlign:\"center\",border:`1px dashed ${dividerColor}`,borderRadius:8,background:\"#F9FAFB\"},children:'Cart Drawer \\xb7 toggle \"Preview in Canvas\" in props to see drawer'});}// The closed-state path always renders the invisible anchor div in the\n// normal React tree (so Framer's publish bundler keeps the component;\n// returning null gets the chunk tree-shaken). The visible drawer overlay is\n// rendered separately via createPortal at document.body level so it ESCAPES\n// Framer's transformed page wrapper and behaves like a true viewport-fixed\n// overlay.\nconst anchor=/*#__PURE__*/_jsx(\"div\",{\"aria-hidden\":\"true\",\"data-fec-cart-drawer-anchor\":\"\",style:{width:0,height:0,overflow:\"hidden\",position:\"absolute\",top:0,left:0,pointerEvents:\"none\"}});// Checkout opens the on-site CheckoutPage overlay (Woo-style): it collects\n// contact + shipping, then hands off to Shopify's HOSTED checkout for\n// payment via cart.checkoutUrl. Close the drawer first.\nconst proceedToCheckout=()=>{if(isCanvas||typeof window===\"undefined\")return;setOpen(false);// Open the on-site CheckoutPage overlay if it's on the page; if nothing\n// handles the event, fall back to Shopify's hosted checkout so the\n// button ALWAYS works.\nconst ev=new CustomEvent(\"fec:checkout-open\",{cancelable:true});const handled=!window.dispatchEvent(ev);if(!handled&&cart?.checkoutUrl)window.location.href=cart.checkoutUrl;};// View Cart closes the drawer and opens the full-screen Cart Page OVERLAY\n// (CartPage component listening for fec:cartpage-open). No navigation, no\n// /cart route — the overlay is a portal/fixed layer like this drawer.\nconst goToCartPage=()=>{if(isCanvas||typeof window===\"undefined\")return;setOpen(false);window.dispatchEvent(new CustomEvent(EVENT_CARTPAGE_OPEN));};// *Value = the formatted money shown on the right of each totals row. The\n// row CAPTIONS on the left are the subtotal/discount/shipping/totalLabel\n// props so they can be reworded or translated from Framer's panel.\nconst subtotalValue=fmt(subtotal);// Shipping: Shopify only computes it once it knows a delivery address, so\n// the row shows a designer-set message UNTIL it is known, then the real\n// amount. Derived as total − subtotal, because cost.totalAmount folds\n// shipping and tax in as soon as the address is attached — it is NOT\n// reliably \"pre-shipping\" as this comment previously claimed. Without this\n// the page rendered Subtotal 200 / Shipping <text> / Total 579, leaving the\n// difference unexplained on screen.\n// Guarded to > 0.0001 so floating-point noise can't render a \"shipping\" row\n// for a cart that has none; a NEGATIVE difference is a discount and is\n// handled by the discount row below, which is why this is not just abs().\nconst shippingExtra=subtotal&&total?Number(total.amount)-Number(subtotal.amount):0;const shippingValue=shippingExtra>1e-4&&subtotal?fmt({amount:String(shippingExtra),currencyCode:subtotal.currencyCode}):freeShippingLabel;const totalValue=fmt(total);// Discount = subtotal − total (when a coupon has been applied). Matches the\n// CartPage discount-row pattern: green color, leading minus, same money fmt.\nconst discountAmount=subtotal&&total?Number(subtotal.amount)-Number(total.amount):0;const discountValue=discountAmount>1e-4&&subtotal?`−${fmt({amount:String(discountAmount),currencyCode:subtotal.currencyCode})}`:null;// The panel JSX is built once and reused by both the live portal overlay\n// and the canvas inline preview — the only difference is the wrapper + CSS\n// positioning around it.\nconst panel=/*#__PURE__*/_jsxs(\"div\",{role:\"dialog\",\"aria-modal\":\"true\",\"data-fec-cart-drawer-panel\":inlinePreview?undefined:\"\",style:{background:backgroundColor,color:textColor,boxShadow:position===\"right\"?\"-10px 0 30px rgba(0,0,0,0.15)\":\"10px 0 30px rgba(0,0,0,0.15)\",display:\"flex\",flexDirection:\"column\",...inlinePreview?{width:safeWidth,maxWidth:\"100%\",minHeight:700}:{transform:isOpen?\"translateX(0)\":position===\"right\"?\"translateX(100%)\":\"translateX(-100%)\",transition:\"transform 0.3s cubic-bezier(0.32, 0.72, 0, 1)\"}},children:[/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"20px 24px 16px\",display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\"},children:[/*#__PURE__*/_jsxs(\"h3\",{style:{margin:0,fontSize:20,fontWeight:700,letterSpacing:\"-0.01em\"},children:[title,displayCart?.totalQuantity?` (${displayCart.totalQuantity})`:\"\"]}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>setOpen(false),\"aria-label\":\"Close cart\",style:{background:\"transparent\",border:\"none\",cursor:\"pointer\",padding:8,margin:-8,color:textColor,display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",borderRadius:8},children:/*#__PURE__*/_jsxs(\"svg\",{width:20,height:20,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:2.4,strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"line\",{x1:\"18\",y1:\"6\",x2:\"6\",y2:\"18\"}),/*#__PURE__*/_jsx(\"line\",{x1:\"6\",y1:\"6\",x2:\"18\",y2:\"18\"})]})})]}),showFreeShippingBar&&threshold>0&&/*#__PURE__*/_jsxs(\"div\",{style:{padding:\"0 24px 16px\"},children:[/*#__PURE__*/_jsxs(\"div\",{style:{position:\"relative\",width:\"100%\",height:6,background:\"#e5e7eb\",borderRadius:999,overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:0,top:0,bottom:0,width:`${freeShippingProgress*100}%`,background:progressColor,borderRadius:999,transition:\"width 0.4s cubic-bezier(0.32, 0.72, 0, 1)\"}}),/*#__PURE__*/_jsx(\"div\",{style:{position:\"absolute\",left:`calc(${freeShippingProgress*100}% - 16px)`,top:-6,width:32,height:18,background:progressColor,borderRadius:999,display:\"inline-flex\",alignItems:\"center\",justifyContent:\"center\",color:\"#fff\",transition:\"left 0.4s cubic-bezier(0.32, 0.72, 0, 1)\"},\"aria-hidden\":\"true\",children:/*#__PURE__*/_jsxs(\"svg\",{width:14,height:14,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:2,strokeLinecap:\"round\",strokeLinejoin:\"round\",children:[/*#__PURE__*/_jsx(\"rect\",{x:\"1\",y:\"3\",width:\"15\",height:\"13\"}),/*#__PURE__*/_jsx(\"polygon\",{points:\"16 8 20 8 23 11 23 16 16 16 16 8\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"5.5\",cy:\"18.5\",r:\"2.5\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"18.5\",cy:\"18.5\",r:\"2.5\"})]})})]}),/*#__PURE__*/_jsx(\"div\",{style:{marginTop:10,fontSize:13,fontWeight:500,color:hasFreeShipping?progressColor:mutedTextColor,textAlign:\"center\"},children:hasFreeShipping?freeShippingAchievedLabel:freeShippingProgressLabel.replace(\"{amount}\",remainingFormatted)})]}),/*#__PURE__*/_jsx(\"div\",{style:{flex:1,overflowY:\"auto\",borderTop:`1px solid ${dividerColor}`},children:loading&&!cart?/*#__PURE__*/_jsx(\"div\",{style:{padding:32,textAlign:\"center\",color:mutedTextColor,fontSize:13},children:\"Loading…\"}):lines.length===0?/*#__PURE__*/_jsxs(\"div\",{style:{padding:56,textAlign:\"center\",color:mutedTextColor},children:[/*#__PURE__*/_jsxs(\"svg\",{width:48,height:48,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:1.5,strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{margin:\"0 auto 16px\",display:\"block\",opacity:.5},children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"9\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"20\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"path\",{d:\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\"})]}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:14},children:emptyText})]}):lines.map(line=>{const m=line.merchandise;const img=m.image?.url;const opts=m.selectedOptions.filter(o=>!(o.name===\"Title\"&&o.value===\"Default Title\")).map(o=>o.value).join(\" \\xb7 \");const isUpdating=updatingId===line.id;const unitPrice=fmt(m.price);return /*#__PURE__*/_jsxs(\"div\",{style:{padding:\"20px 24px\",display:\"flex\",gap:14,alignItems:\"flex-start\",opacity:isUpdating?.5:1,transition:\"opacity 0.15s ease\",borderBottom:`1px solid ${dividerColor}`},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:72,height:72,background:\"#F3F4F6\",borderRadius:6,flexShrink:0,overflow:\"hidden\"},children:img&&/*#__PURE__*/_jsx(\"img\",{src:img,alt:m.product.title,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}})}),/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0,display:\"flex\",flexDirection:\"column\",gap:8},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",alignItems:\"flex-start\",gap:12},children:[/*#__PURE__*/_jsxs(\"div\",{style:{flex:1,minWidth:0},children:[/*#__PURE__*/_jsx(\"div\",{style:{fontSize:14,fontWeight:600,lineHeight:1.3},children:m.product.title}),opts&&/*#__PURE__*/_jsx(\"div\",{style:{fontSize:12,color:mutedTextColor,marginTop:2},children:opts})]}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,0),disabled:isUpdating,style:{background:\"transparent\",border:\"none\",color:mutedTextColor,fontSize:12,cursor:\"pointer\",textDecoration:\"underline\",padding:0,flexShrink:0},children:\"Remove\"})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",alignItems:\"center\",justifyContent:\"space-between\",gap:10},children:[/*#__PURE__*/_jsxs(\"div\",{style:{display:\"inline-flex\",alignItems:\"center\",border:`1px solid ${dividerColor}`,borderRadius:999,overflow:\"hidden\"},children:[/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,line.quantity-1),disabled:isUpdating,\"aria-label\":\"Decrease quantity\",style:{width:30,height:30,background:\"transparent\",border:\"none\",cursor:isUpdating?\"wait\":\"pointer\",color:textColor,fontSize:16},children:\"−\"}),/*#__PURE__*/_jsx(\"span\",{style:{minWidth:28,textAlign:\"center\",fontSize:13,fontWeight:600},children:line.quantity}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>updateItem(line.id,line.quantity+1),disabled:isUpdating,\"aria-label\":\"Increase quantity\",style:{width:30,height:30,background:\"transparent\",border:\"none\",cursor:isUpdating?\"wait\":\"pointer\",color:textColor,fontSize:16},children:\"+\"})]}),unitPrice&&/*#__PURE__*/_jsxs(\"div\",{style:{fontSize:13,fontWeight:600,color:textColor},children:[line.quantity,\" \\xd7 \",unitPrice]})]})]})]},line.id);})}),showUpsells&&recs.length>0&&lines.length>0&&/*#__PURE__*/_jsxs(\"div\",{style:{borderTop:`1px solid ${dividerColor}`,padding:\"16px 24px\"},children:[/*#__PURE__*/_jsx(\"style\",{children:`\n                            .fec-upsell-strip::-webkit-scrollbar { display: none; }\n                        `}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:13,fontWeight:600,color:textColor,marginBottom:12},children:upsellTitle}),/*#__PURE__*/_jsx(\"div\",{className:\"fec-upsell-strip\",style:{display:\"flex\",gap:12,overflowX:\"auto\",scrollbarWidth:\"none\",msOverflowStyle:\"none\",paddingBottom:2},children:recs.map(rec=>{const node=rec.variants.edges[0]?.node;const available=!!node?.availableForSale;const isAdding=addingRecId===rec.id;const recImg=rec.featuredImage?.url;const recPrice=fmt(rec.priceRange.minVariantPrice);return /*#__PURE__*/_jsxs(\"div\",{style:{width:132,flexShrink:0,display:\"flex\",flexDirection:\"column\",gap:6},children:[/*#__PURE__*/_jsx(\"div\",{style:{width:64,height:64,background:\"#F3F4F6\",borderRadius:6,overflow:\"hidden\",flexShrink:0},children:recImg&&/*#__PURE__*/_jsx(\"img\",{src:recImg,alt:rec.title,style:{width:\"100%\",height:\"100%\",objectFit:\"cover\"}})}),/*#__PURE__*/_jsx(\"div\",{style:{fontSize:12,fontWeight:500,lineHeight:1.3,color:textColor,display:\"-webkit-box\",WebkitLineClamp:2,WebkitBoxOrient:\"vertical\",overflow:\"hidden\"},children:rec.title}),recPrice&&/*#__PURE__*/_jsx(\"div\",{style:{fontSize:12,fontWeight:600,color:mutedTextColor},children:recPrice}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:()=>addRec(rec),disabled:!available||isAdding,style:{marginTop:\"auto\",padding:\"6px 10px\",background:available?accentColor:\"#E5E7EB\",color:available?accentTextColor:mutedTextColor,border:\"none\",borderRadius:4,fontSize:12,fontWeight:600,cursor:!available||isAdding?\"default\":\"pointer\",fontFamily:\"inherit\"},children:isAdding?\"Adding…\":available?\"+ Add\":\"Sold out\"})]},rec.id);})})]}),lines.length>0&&subtotal&&/*#__PURE__*/_jsxs(\"div\",{style:{borderTop:`1px solid ${dividerColor}`,padding:\"16px 24px 20px\",display:\"flex\",flexDirection:\"column\",gap:14},children:[showActionRow&&/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-around\",paddingBottom:8,borderBottom:`1px solid ${dividerColor}`},children:[/*#__PURE__*/_jsx(ActionIcon,{icon:\"note\",label:actionNoteLabel}),/*#__PURE__*/_jsx(ActionIcon,{icon:\"shipping\",label:actionShippingLabel}),/*#__PURE__*/_jsx(ActionIcon,{icon:\"coupon\",label:actionCouponLabel})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",flexDirection:\"column\",gap:6},children:[/*#__PURE__*/_jsx(Row,{label:subtotalLabel,value:subtotalValue,color:textColor,muted:mutedTextColor}),discountValue&&/*#__PURE__*/_jsx(Row,{label:discountLabel,value:discountValue,color:\"#16a34a\",muted:mutedTextColor}),/*#__PURE__*/_jsx(Row,{label:shippingLabel,value:shippingValue,color:textColor,muted:mutedTextColor}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",alignItems:\"baseline\",fontSize:18,fontWeight:700,paddingTop:6},children:[/*#__PURE__*/_jsx(\"span\",{children:totalLabel}),/*#__PURE__*/_jsx(\"span\",{children:totalValue})]})]}),/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",gap:10,marginTop:4},children:[showViewCart&&/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:goToCartPage,style:{flex:1,padding:\"13px 16px\",background:secondaryButtonBg,color:secondaryButtonText,border:`1px solid ${secondaryButtonText}`,borderRadius:4,fontSize:14,fontWeight:600,cursor:\"pointer\",fontFamily:\"inherit\",letterSpacing:\"0.02em\"},children:viewCartLabel}),/*#__PURE__*/_jsx(\"button\",{type:\"button\",onClick:proceedToCheckout,style:{flex:1,padding:\"13px 16px\",background:accentColor,color:accentTextColor,border:\"none\",borderRadius:4,fontSize:14,fontWeight:600,cursor:\"pointer\",fontFamily:\"inherit\",letterSpacing:\"0.02em\"},children:checkoutLabel})]})]})]});// Canvas inline preview — return the panel as a normal in-flow block at the\n// component's own spot on the page. The designer can see and style it\n// without Framer's right-side property panel covering the fixed overlay.\n// Live runtime is unaffected (this branch only fires in the editor canvas).\nif(inlinePreview){return panel;}const overlay=/*#__PURE__*/_jsxs(\"div\",{style:{position:\"fixed\",inset:0,zIndex:9999,pointerEvents:isOpen?\"auto\":\"none\",fontFamily:\"Inter, system-ui, sans-serif\"},children:[/*#__PURE__*/_jsx(\"div\",{\"data-fec-cart-drawer-backdrop\":\"\",onClick:()=>setOpen(false),style:{background:\"rgba(0,0,0,0.5)\",opacity:isOpen?1:0,transition:\"opacity 0.25s ease\"}}),panel]});// Portal the overlay to a div we manually appended to document.body (see the\n// useEffect above). Targeting our own root container instead of\n// document.body directly is the only reliable way to ensure the overlay sits\n// ABOVE Framer's #main wrapper.\nconst portaledOverlay=portalRoot?/*#__PURE__*/createPortal(overlay,portalRoot):null;return /*#__PURE__*/_jsxs(_Fragment,{children:[anchor,portaledOverlay]});}function Row({label,value,color,muted}){return /*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",alignItems:\"baseline\",fontSize:14},children:[/*#__PURE__*/_jsx(\"span\",{style:{color:muted},children:label}),/*#__PURE__*/_jsx(\"span\",{style:{color,fontWeight:600},children:value})]});}// `icon` selects the glyph, `label` is the caption underneath. These are kept\n// SEPARATE on purpose: the caption is a user-editable prop, so keying the icon\n// off the label text (as this did originally) would drop to the fallback glyph\n// the moment anyone reworded or translated it.\nfunction ActionIcon({icon:iconName,label}){const icon=iconName===\"note\"?/*#__PURE__*/_jsx(\"path\",{d:\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z M14 2v6h6 M16 13H8 M16 17H8 M10 9H8\"}):iconName===\"shipping\"?/*#__PURE__*/_jsx(\"path\",{d:\"M1 3h15v13H1z M16 8h4l3 3v5h-7V8 M5.5 21a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z M18.5 21a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5z\"}):/*#__PURE__*/_jsx(\"path\",{d:\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z M7 7h.01\"});return /*#__PURE__*/_jsxs(\"button\",{type:\"button\",style:{background:\"transparent\",border:\"none\",cursor:\"pointer\",display:\"inline-flex\",flexDirection:\"column\",alignItems:\"center\",gap:4,padding:6,color:\"#0a0a0a\",fontFamily:\"inherit\",fontSize:11,fontWeight:500},\"aria-label\":label,children:[/*#__PURE__*/_jsx(\"svg\",{width:20,height:20,viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:1.6,strokeLinecap:\"round\",strokeLinejoin:\"round\",children:icon}),label]});}addPropertyControls(CartDrawer,{storefrontToken:{type:ControlType.String,title:\"Storefront Token\",hidden:()=>true,defaultValue:\"\"},storeDomain:{type:ControlType.String,title:\"Store Domain\",hidden:()=>true,defaultValue:\"\",placeholder:\"your-store.myshopify.com\"},position:{type:ControlType.Enum,title:\"Side\",defaultValue:\"right\",options:[\"right\",\"left\"],optionTitles:[\"Right\",\"Left\"]},width:{type:ControlType.Number,title:\"Width\",defaultValue:540,min:320,max:720,unit:\"px\"},title:{type:ControlType.String,title:\"Title\",defaultValue:\"Shopping Cart\"},emptyText:{type:ControlType.String,title:\"Empty text\",defaultValue:\"Your cart is empty\"},// OFF by default. This bar is a MARKETING MESSAGE driven purely by the\n// threshold below — it has no connection to the store's real shipping\n// rules, which only Shopify's checkout knows. Left on by default it fired\n// \"You've got free shipping!\" on any cart over the default threshold and\n// the shopper was then charged at checkout. A promise the storefront cannot\n// keep is worse than no bar, so the designer opts in after setting a\n// threshold that matches their actual free-shipping rule.\nshowFreeShippingBar:{type:ControlType.Boolean,title:\"Free Ship Bar\",defaultValue:false,description:\"A marketing message you control — it is NOT connected to your store's shipping rules. Only turn it on if the threshold below matches a real free-shipping rule in Shopify, or shoppers will be told they have free shipping and then charged at checkout.\",enabledTitle:\"Show\",disabledTitle:\"Hide\"},freeShippingThreshold:{type:ControlType.Number,title:\"Free Ship At\",defaultValue:200,min:0,max:1e5,hidden:props=>!props.showFreeShippingBar},freeShippingProgressLabel:{type:ControlType.String,title:\"Progress text\",defaultValue:\"Add {amount} more to unlock free shipping\",description:\"Use {amount} as the placeholder for remaining money.\",hidden:props=>!props.showFreeShippingBar},freeShippingAchievedLabel:{type:ControlType.String,title:\"Achieved text\",defaultValue:\"Congratulations! You've got free shipping!\",hidden:props=>!props.showFreeShippingBar},showActionRow:{type:ControlType.Boolean,title:\"Action Row\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},// Captions under the Note / Shipping / Coupon icons. The icons themselves\n// are fixed — only the text is editable, so translating is safe.\nshowViewCart:{type:ControlType.Boolean,title:\"View Cart Btn\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},viewCartLabel:{type:ControlType.String,title:\"View Cart label\",defaultValue:\"View Cart\",hidden:props=>!props.showViewCart},checkoutLabel:{type:ControlType.String,title:\"Checkout label\",defaultValue:\"Checkout\"},// Captions for the footer totals rows. Exposed so the drawer can be\n// reworded or translated without unlinking the component.\nshowUpsells:{type:ControlType.Boolean,title:\"Upsells\",defaultValue:true,enabledTitle:\"Show\",disabledTitle:\"Hide\"},upsellTitle:{type:ControlType.String,title:\"Upsell title\",defaultValue:\"You may also add\",hidden:props=>!props.showUpsells},backgroundColor:{type:ControlType.Color,title:\"Background\",defaultValue:\"#FFFFFF\"},textColor:{type:ControlType.Color,title:\"Text\",defaultValue:\"#0a0a0a\"},mutedTextColor:{type:ControlType.Color,title:\"Muted text\",defaultValue:\"#6b7280\"},dividerColor:{type:ControlType.Color,title:\"Divider\",defaultValue:\"#e5e7eb\"},accentColor:{type:ControlType.Color,title:\"Checkout BG\",defaultValue:\"#3E3E41\"},accentTextColor:{type:ControlType.Color,title:\"Checkout text\",defaultValue:\"#FFFFFF\"},secondaryButtonBg:{type:ControlType.Color,title:\"View Cart BG\",defaultValue:\"#FFFFFF\"},secondaryButtonText:{type:ControlType.Color,title:\"View Cart text\",defaultValue:\"#0a0a0a\"},progressColor:{type:ControlType.Color,title:\"Progress\",defaultValue:\"#22c55e\"},fallbackOpen:{type:ControlType.Boolean,title:\"Preview in Canvas\",description:\"Show the drawer here on the canvas so you can style it. Has no effect on the live site.\",defaultValue:false,enabledTitle:\"Show\",disabledTitle:\"Hide\"},// All wording on the drawer/page in ONE collapsible section.\n// These controls were never shipped un-grouped, so moving them here\n// cannot reset anyone's customised text. Controls that ARE already\n// released (title, empty state, checkout button, colours) stay\n// top-level for exactly that reason.\nlabelGroup:{type:ControlType.Object,title:\"Labels\",controls:{subtotalLabel:{type:ControlType.String,title:\"Subtotal label\",defaultValue:\"Subtotal\"},discountLabel:{type:ControlType.String,title:\"Discount label\",defaultValue:\"Discount\",description:\"Only shown when a discount code is applied.\"},shippingLabel:{type:ControlType.String,title:\"Shipping label\",defaultValue:\"Shipping\"},freeShippingLabel:{type:ControlType.String,title:\"Shipping value\",defaultValue:\"Free shipping\",description:\"Value on the shipping row. Real shipping is calculated at checkout.\"},totalLabel:{type:ControlType.String,title:\"Total label\",defaultValue:\"Total\"},actionNoteLabel:{type:ControlType.String,title:\"Note label\",defaultValue:\"Note\",hidden:props=>!props.showActionRow},actionShippingLabel:{type:ControlType.String,title:\"Ship icon label\",defaultValue:\"Shipping\",hidden:props=>!props.showActionRow},actionCouponLabel:{type:ControlType.String,title:\"Coupon label\",defaultValue:\"Coupon\",hidden:props=>!props.showActionRow}}}});\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CartDrawer\",\"slots\":[],\"annotations\":{\"framerDisableUnlink\":\"* @framerSupportedLayoutWidth any\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"any\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./CartDrawer.map"],"mappings":"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"}