{"version":3,"file":"Input.laleHOIL.mjs","names":["useQuery","_Fragment","React","_Fragment","useQuery","useQueryClient","useMutation","useRef","useId"],"sources":["https:/framerusercontent.com/modules/ULfRcpFPm40RheG8xy3S/7uhk78YusjwKoxsL88fS/Shared_config.js","https:/framerusercontent.com/modules/DW1wzS65glja20YJJb0w/UbXPw9UzjrdH0JywQuKA/Use_inventory.js","https:/framerusercontent.com/modules/rBCLWR4S69MLTQ5ZpxAH/2r4ruxRQRUOEBlTMh5zc/Inventory_state.js","https:/framerusercontent.com/modules/jSzgfFOp8vV7JiKIMM1a/dm2Ulq3gIc0MD3heuKhx/Shared_button_props.js","https:/framerusercontent.com/modules/z7s7d2NhYNciN7G09hdf/Am5BTAlgzE3rws6PH1Qt/Loader.js","https:/framerusercontent.com/modules/J14wQOiI0O01kyXMgenS/ODFPbfbc3Lw68NQPcyta/Loading_spinner.js","https:/framerusercontent.com/modules/a6C1Qq7kxeKULOsvIpdv/JrJAMAbNq3ZT9ZgMxjF1/Preset_button.js","https:/framerusercontent.com/modules/KkMHEXBTzNGLCAGsRLrm/C2sk9cjUnc3YE4Ebu9Zq/Custom_button_wrapper.js","https:/framerusercontent.com/modules/qGSs7SULtHSo8Msf1WUy/vraFd5f3jmKFoHJ9xWa7/Cart.js","https:/framerusercontent.com/modules/OnWAqZZNYQ9JhDoMpqGD/ky0aqyH28XdVmVjx9fGI/Cart_local_storage.js","https:/framerusercontent.com/modules/HRm4FfVJHrd62RjWhV4c/oRoeCFqCvXR70fR2WyFm/Cart_service.js","https:/framerusercontent.com/modules/jbhiiko3EChfrqb1oYnj/stKWa6B0oRhXrQRbcVZH/Track_ecommerce_event.js","https:/framerusercontent.com/modules/qNwuWLbXbcYKugmCfVBu/H8b4jnVoGy51hm9ymgpX/Use_cart.js","https:/framerusercontent.com/modules/pKQXtSIFOkUZHJ1ZIH57/BbG3ohT1NiayzpXX4zfz/Env.js","https:/framerusercontent.com/modules/b3e85pFcNFtqTX3XSv9e/qKtWiBdeQaC8qFS656m9/Backend_client.js","https:/framerusercontent.com/modules/JhvDT64z5Z8fFnafHobq/kgkJowwYWeW0rVOBXnh9/Licence_service.js","https:/framerusercontent.com/modules/CgNesoEVhclZxcf3DGoV/KiFqdjKmxFukmUMhyMDX/Plus.js","https:/framerusercontent.com/modules/rg6FA2ZzLed1GXAPqbZS/mzbz3S2bGl9kzIhDyRAM/Minus.js","https:/framerusercontent.com/modules/8tTWwqu9i87Vk9zESDn0/wFbi1XHqJACWlU9Zlwrv/Input.js"],"sourcesContent":["export const OPEN_CART_EVENT=\"framership-open-cart\";export const CLOSE_CART_EVENT=\"framership-close-cart\";export const CLOSE_QUICK_VIEW_EVENT=\"frameship-close-quick-view\";\nexport const __FramerMetadata__ = {\"exports\":{\"OPEN_CART_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CLOSE_QUICK_VIEW_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CLOSE_CART_EVENT\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Shared_config.map","import{useQuery}from\"https://framerusercontent.com/modules/EsOvuK0xi7z7RIQRkokm/8aYKGIHO4l4IQs8Fyj8V/Tanstack_query.js\";import{getShopifyConfig}from\"https://framerusercontent.com/modules/TgekT24FCXsp3m1M9KnX/EmTtwh9ht2RFHFqCjQuM/Get_shopify_config.js\";import{isOnFramerCanvasFn}from\"https://framerusercontent.com/modules/0cFx6PDS8kp3yxNfnoIw/3wFcPS10LYSFljb1q710/Framer_utils.js\";import{useMarketStore}from\"https://framerusercontent.com/modules/NBp7ctFhtxfP8UPi4nze/1Na5UwTmSmXnVE3ENc2v/Market_store.js\";import{requestProductInventory}from\"https://framerusercontent.com/modules/OIbspRCoz1lUD31SHijS/bzGdRjqA87L10iGhxGb2/Shopify_inventory_batcher.js\";import{getShopifyInventoryQueryKey,SHOPIFY_INVENTORY_STALE_TIME,toLegacyInventoryResponse}from\"https://framerusercontent.com/modules/6LuZie9RwIDGFEc0gNxM/OzDLLzwqWkxvJOJ3SwyK/Shopify_inventory.js\";export const useInventory=productId=>{const country=useMarketStore(state=>state.getMarket()?.countryCode);const config=getShopifyConfig();const context={shop:config?.shop??\"\",apiVersion:config?.apiVersion??\"unspecified\",country};const query=useQuery({queryKey:getShopifyInventoryQueryKey(context,productId),queryFn:()=>requestProductInventory(context,productId),enabled:!isOnFramerCanvasFn()&&Boolean(productId&&config?.shop&&config.storefrontToken),staleTime:SHOPIFY_INVENTORY_STALE_TIME});return{data:query.data?toLegacyInventoryResponse(query.data):undefined,isLoading:query.isLoading,error:query.error};};\nexport const __FramerMetadata__ = {\"exports\":{\"useInventory\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Use_inventory.map","export function findInventoryVariant(variants,selectedVariantId){if(!selectedVariantId)return undefined;return variants.find(variant=>variant.node.id.endsWith(`/${selectedVariantId}`))?.node;}export function deriveInventoryState(variant){if(!variant){return{isAvailableForSale:false,isNotTrackedLike:false,inventoryCount:null,isPurchaseDisabled:true,maxPurchasableQuantity:0,inventoryLabelState:\"outOfStock\"};}const quantityAvailable=variant.quantityAvailable;const hasTrackedPositiveInventory=typeof quantityAvailable===\"number\"&&quantityAvailable>0;const isNotTrackedInventory=quantityAvailable===null||quantityAvailable===-1;const isContinueSellingInventory=variant.availableForSale&&typeof quantityAvailable===\"number\"&&quantityAvailable<=0;const isNotTrackedLike=isNotTrackedInventory||isContinueSellingInventory;if(!variant.availableForSale){return{isAvailableForSale:false,isNotTrackedLike:false,inventoryCount:hasTrackedPositiveInventory?quantityAvailable:null,isPurchaseDisabled:true,maxPurchasableQuantity:0,inventoryLabelState:\"outOfStock\"};}if(hasTrackedPositiveInventory){return{isAvailableForSale:true,isNotTrackedLike:false,inventoryCount:quantityAvailable,isPurchaseDisabled:false,maxPurchasableQuantity:quantityAvailable,inventoryLabelState:\"inStock\"};}return{isAvailableForSale:true,isNotTrackedLike,inventoryCount:null,isPurchaseDisabled:false,maxPurchasableQuantity:Infinity,inventoryLabelState:\"notTrackedStock\"};}\nexport const __FramerMetadata__ = {\"exports\":{\"findInventoryVariant\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"deriveInventoryState\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InventoryVariantNode\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InventoryVariantEdge\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InventoryLabelState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"DerivedInventoryState\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Inventory_state.map","import{ControlType}from\"framer\";import{SHARED_COLORS,SHARED_STYLES}from\"https://framerusercontent.com/modules/Nrs4jz2AAEOfEZRQEQij/7Ao2SBt1Ssf683HHXgzl/Shared_styles.js\";import{useInventory}from\"https://framerusercontent.com/modules/DW1wzS65glja20YJJb0w/UbXPw9UzjrdH0JywQuKA/Use_inventory.js\";import{isOnFramerCanvasFn,useIsInFramerPreview}from\"https://framerusercontent.com/modules/0cFx6PDS8kp3yxNfnoIw/3wFcPS10LYSFljb1q710/Framer_utils.js\";import{deriveInventoryState,findInventoryVariant}from\"https://framerusercontent.com/modules/rBCLWR4S69MLTQ5ZpxAH/2r4ruxRQRUOEBlTMh5zc/Inventory_state.js\";// ------------------------------------------------------------ //\n// DEFAULT VALUES\n// ------------------------------------------------------------ //\nexport const PresetPrimaryButtonStyleDefaultValues={presetButtonStyle:{alignItems:\"center\",justifyContent:\"center\",gap:8,padding:SHARED_STYLES.buttonPadding,border:{borderWidth:0,borderStyle:\"solid\",borderColor:SHARED_COLORS.foregroundMuted},borderRadius:SHARED_STYLES.borderRadius,textColor:SHARED_COLORS.background,backgroundColor:SHARED_COLORS.foreground,shadow:undefined,hover:{textColor:SHARED_COLORS.backgroundHover,backgroundColor:SHARED_COLORS.foregroundHover,shadow:undefined,border:{borderWidth:0,borderStyle:\"solid\",borderColor:SHARED_COLORS.foregroundMuted}},tapScale:.98}};export const PresetSecondaryButtonStyleDefaultValues={presetButtonStyle:{...PresetPrimaryButtonStyleDefaultValues.presetButtonStyle,backgroundColor:SHARED_COLORS.background,textColor:SHARED_COLORS.foreground,hover:{...PresetPrimaryButtonStyleDefaultValues.presetButtonStyle.hover,backgroundColor:SHARED_COLORS.backgroundHover,textColor:SHARED_COLORS.foreground}}};export const OUT_OF_STOCK_STYLE_DEFAULT_VALUES={text:\"Out of Stock\",textColor:SHARED_COLORS.background,backgroundColor:SHARED_COLORS.foregroundMuted,border:{borderWidth:0,borderStyle:\"solid\",borderColor:SHARED_COLORS.foregroundMuted},opacity:.7};export const PresetPrimaryButtonDisabledStyleDefaultValues={disabledStyle:{alignItems:\"center\",justifyContent:\"center\",gap:8,padding:SHARED_STYLES.buttonPadding,border:{borderWidth:0,borderStyle:\"solid\",borderColor:SHARED_COLORS.foregroundMuted},borderRadius:SHARED_STYLES.borderRadius,textColor:SHARED_COLORS.foregroundMuted,backgroundColor:SHARED_COLORS.backgroundMuted,shadow:undefined,tapScale:1}};// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\nexport const PresetPrimaryButtonStyleControls={presetButtonStyle:{title:\"🎨 Styling\",type:ControlType.Object,controls:{alignItems:{title:\"Align\",type:ControlType.Enum,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.alignItems,options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-bottom\",\"align-middle\",\"align-top\"],displaySegmentedControl:true},justifyContent:{title:\"Distribute\",type:ControlType.Enum,options:[\"center\",\"start\",\"end\",\"space-between\"],optionTitles:[\"Center\",\"Start\",\"End\",\"Space Between\"],defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.justifyContent},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.gap,unit:\"px\"},padding:{// @ts-expect-error - Padding is not a valid control type in this Framer npm version\ntype:ControlType.Padding,title:\"Padding\",defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.padding},border:{// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:(PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.border).borderWidth,borderStyle:(PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.border).borderStyle,borderColor:(PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.border).borderColor}},borderRadius:{// @ts-expect-error - BorderRadius is not a valid control type in this Framer npm version\ntype:ControlType.BorderRadius,title:\"Border Radius\",defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.borderRadius},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.backgroundColor},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.shadow},hover:{title:\"Hover\",type:ControlType.Object,controls:{textColor:{title:\"Text\",type:ControlType.Color,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.hover?.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.hover?.backgroundColor},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.hover?.shadow},border:{title:\"Border\",// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.hover?.border}},buttonTitle:\"Style\"},tapScale:{title:\"Tap Scale\",type:ControlType.Number,defaultValue:PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.tapScale,min:0,max:1,step:.01},font:{title:\"Font\",type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\",defaultValue:{// @ts-expect-error - fontSize is a string in this Framer npm version\nfontSize:\"16px\",variant:\"Regular\",lineHeight:\"1em\"},hidden:props=>props.buttonType===\"custom\"}},hidden:props=>props.buttonType===\"custom\"}};export const PresetPrimaryButtonDisabledStyleControls={disabledStyle:{title:\"🎨 Disabled Styling\",type:ControlType.Object,controls:{alignItems:{title:\"Align\",type:ControlType.Enum,defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.alignItems,options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-bottom\",\"align-middle\",\"align-top\"],displaySegmentedControl:true},justifyContent:{title:\"Distribute\",type:ControlType.Enum,options:[\"center\",\"start\",\"end\",\"space-between\"],optionTitles:[\"Center\",\"Start\",\"End\",\"Space Between\"],defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.justifyContent},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.gap,unit:\"px\"},padding:{// @ts-expect-error - Padding is not a valid control type in this Framer npm version\ntype:ControlType.Padding,title:\"Padding\",defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.padding},border:{// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:(PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.border).borderWidth,borderStyle:(PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.border).borderStyle,borderColor:(PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.border).borderColor}},borderRadius:{// @ts-expect-error - BorderRadius is not a valid control type in this Framer npm version\ntype:ControlType.BorderRadius,title:\"Border Radius\",defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.borderRadius},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.backgroundColor},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.shadow},tapScale:{title:\"Tap Scale\",type:ControlType.Number,defaultValue:PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle?.tapScale,min:0,max:1,step:.01},font:{title:\"Font\",type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\",hidden:props=>props.buttonType===\"custom\"}},hidden:props=>props.buttonType===\"custom\"}};export const PresetSecondaryButtonStyleControls={presetButtonStyle:{title:\"🎨 Styling\",type:ControlType.Object,controls:{alignItems:{title:\"Align\",type:ControlType.Enum,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.alignItems,options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-bottom\",\"align-middle\",\"align-top\"],displaySegmentedControl:true},justifyContent:{title:\"Distribute\",type:ControlType.Enum,options:[\"center\",\"start\",\"end\",\"space-between\"],optionTitles:[\"Center\",\"Start\",\"End\",\"Space Between\"],defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.justifyContent},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.gap,unit:\"px\"},padding:{// @ts-expect-error - Padding is not a valid control type in this Framer npm version\ntype:ControlType.Padding,title:\"Padding\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.padding},border:{// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderWidth,borderStyle:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderStyle,borderColor:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderColor}},borderRadius:{// @ts-expect-error - BorderRadius is not a valid control type in this Framer npm version\ntype:ControlType.BorderRadius,title:\"Border Radius\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.borderRadius},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.backgroundColor},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.shadow},hover:{title:\"Hover\",type:ControlType.Object,controls:{textColor:{title:\"Text\",type:ControlType.Color,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.backgroundColor},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.shadow},border:{title:\"Border\",// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.border}},buttonTitle:\"Style\"},tapScale:{title:\"Tap Scale\",type:ControlType.Number,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.tapScale,min:0,max:1,step:.01},font:{title:\"Font\",type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\",hidden:props=>props.buttonType===\"custom\"}},hidden:props=>props.buttonType===\"custom\"}};export const PresetButtonContentControls={showDefaultIcon:{title:\"Default Icon\",type:ControlType.Boolean,defaultValue:true,hidden:()=>true,// hidden: (props: any) => props.buttonType === \"custom\", // shown only on add to cart button\nenabledTitle:\"Show\",disabledTitle:\"Hide\"},text:{title:\"Text\",type:ControlType.String,defaultValue:\"Button\",hidden:props=>props.buttonType===\"custom\"},leftIcon:{title:\"Left Icon\",type:ControlType.ComponentInstance,hidden:props=>props.buttonType===\"custom\"},rightIcon:{title:\"Right Icon\",type:ControlType.ComponentInstance,hidden:props=>props.buttonType===\"custom\"}};export const CustomButtonControls={buttonType:{title:\"Button Type\",type:ControlType.Enum,options:[\"preset\",\"custom\"],optionTitles:[\"Preset\",\"Custom\"],displaySegmentedControl:true,defaultValue:\"preset\"},customButton:{title:\"Button\",type:ControlType.ComponentInstance,hidden:props=>props.buttonType===\"preset\"},customButtonDisabled:{title:\"Button Disabled\",type:ControlType.ComponentInstance,hidden:props=>props.buttonType===\"preset\"},customButtonSize:{title:\"Button Size\",type:ControlType.Object,controls:{width:{type:ControlType.Enum,title:\"Width\",options:[\"default\",\"fill\"],optionTitles:[\"Default\",\"Fill\"],defaultValue:\"default\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"},height:{type:ControlType.Enum,title:\"Height\",options:[\"default\",\"fill\"],optionTitles:[\"Default\",\"Fill\"],defaultValue:\"default\",displaySegmentedControl:true,segmentedControlDirection:\"vertical\"}},hidden:props=>props.buttonType===\"preset\"}};export const OutOfStockStyleControls={outOfStockStyle:{title:\"Out of Stock Style\",type:ControlType.Object,controls:{text:{title:\"Text\",type:ControlType.String,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.text},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.backgroundColor},border:{title:\"Border\",// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.border},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.shadow},opacity:{title:\"Opacity\",type:ControlType.Number,defaultValue:OUT_OF_STOCK_STYLE_DEFAULT_VALUES.opacity,min:0,max:1,step:.01}},hidden:props=>props.buttonType===\"custom\"}};export const MarketButtonStylingActiveControls={stylingActive:{title:\"🎨 Styling Selected\",type:ControlType.Object,controls:{alignItems:{title:\"Align\",type:ControlType.Enum,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.alignItems,options:[\"start\",\"center\",\"end\"],optionTitles:[\"Start\",\"Center\",\"End\"],optionIcons:[\"align-bottom\",\"align-middle\",\"align-top\"],displaySegmentedControl:true},justifyContent:{title:\"Distribute\",type:ControlType.Enum,options:[\"center\",\"start\",\"end\",\"space-between\"],optionTitles:[\"Center\",\"Start\",\"End\",\"Space Between\"],defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.justifyContent},gap:{type:ControlType.Number,title:\"Gap\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.gap,unit:\"px\"},padding:{// @ts-expect-error - Padding is not a valid control type in this Framer npm version\ntype:ControlType.Padding,title:\"Padding\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.padding},border:{// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderWidth,borderStyle:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderStyle,borderColor:(PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.border).borderColor}},borderRadius:{// @ts-expect-error - BorderRadius is not a valid control type in this Framer npm version\ntype:ControlType.BorderRadius,title:\"Border Radius\",defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.borderRadius},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:SHARED_COLORS.background},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:SHARED_COLORS.primary},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.shadow},hover:{title:\"Hover\",type:ControlType.Object,controls:{textColor:{title:\"Text\",type:ControlType.Color,defaultValue:SHARED_COLORS.background},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:SHARED_COLORS.primary},shadow:{title:\"Shadow\",// @ts-expect-error - BoxShadow is not a valid control type in this Framer npm version\ntype:ControlType.BoxShadow,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.shadow},border:{title:\"Border\",// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.hover?.border}},buttonTitle:\"Style\"},tapScale:{title:\"Tap Scale\",type:ControlType.Number,defaultValue:PresetSecondaryButtonStyleDefaultValues.presetButtonStyle?.tapScale,min:0,max:1,step:.01},font:{title:\"Font\",type:ControlType.Font,defaultFontType:\"sans-serif\",controls:\"extended\",hidden:props=>props.buttonType===\"custom\"}},hidden:props=>props.buttonType===\"custom\"||!props.showWhenActive,description:\"Styling when the market is currently selected\"}};// ------------------------------------------------------------ //\n// UTILITY FUNCTION FOR OVERRIDING DEFAULTS\n// ------------------------------------------------------------ //\n/**\n * Deep clones property controls and overrides default values, hidden properties, and titles at specified paths\n * @param baseControls - The base property controls to clone\n * @param overrides - Object with dot-notation paths to override (e.g., 'presetButtonStyle.backgroundColor', 'controlName.hidden', 'controlName.title')\n * @returns New property controls with overridden defaults, hidden properties, and titles\n */export function overrideControlDefaults(baseControls,overrides){// Deep clone the controls (preserving functions)\nconst deepClone=obj=>{if(obj===null||typeof obj!==\"object\")return obj;if(typeof obj===\"function\")return obj;if(Array.isArray(obj))return obj.map(deepClone);const cloned={};for(const key in obj){if(obj.hasOwnProperty(key)){cloned[key]=deepClone(obj[key]);}}return cloned;};const clonedControls=deepClone(baseControls);// Apply overrides\nObject.entries(overrides).forEach(([path,value])=>{const pathParts=path.split(\".\");let current=clonedControls;let controlLevel=null;let lastControlKey=null;// Navigate to the target control\nfor(let i=0;i<pathParts.length;i++){const part=pathParts[i];if(i===pathParts.length-1){// We've reached the final property\nif(part===\"defaultValue\"&&controlLevel&&lastControlKey){// Override defaultValue on a control (e.g., \"text.defaultValue\")\nconst control=controlLevel[lastControlKey];if(control&&typeof control===\"object\"&&control.defaultValue!==undefined){control.defaultValue=value;}}else if(part===\"hidden\"){// Override the hidden property of a control\nif(current[part]&&typeof current[part]===\"object\"&&current[part].controls){// This is an object control with nested controls - set hidden on the object control itself\ncurrent[part].hidden=value;}else if(controlLevel&&lastControlKey){// This is a property of a parent control (e.g., \"inputStyle.hidden\")\n// controlLevel should be the parent level containing the object control\nconst control=controlLevel[lastControlKey];if(control){control.hidden=value;}}else if(current[part]&&typeof current[part]===\"object\"){// Direct control\ncurrent[part].hidden=value;}}else if(part===\"title\"){// Override the title property of a control\nif(current[part]&&typeof current[part]===\"object\"&&current[part].controls){// This is an object control with nested controls - set title on the object control itself\ncurrent[part].title=value;}else if(controlLevel&&lastControlKey){// This is a property of a parent control (e.g., \"inputStyle.title\")\n// controlLevel should be the parent level containing the object control\nconst control=controlLevel[lastControlKey];if(control){control.title=value;}}else if(current[part]&&typeof current[part]===\"object\"){// Direct control\ncurrent[part].title=value;}}else if(current[part]&&typeof current[part]===\"object\"){// If it's a control with controls (nested), we shouldn't override it directly\nif(current[part].controls){console.warn(`Cannot override ${path} - it's a parent control with nested controls`);}else if(current[part].defaultValue!==undefined){// This is a direct control - update its defaultValue\ncurrent[part].defaultValue=value;}else if(controlLevel&&lastControlKey){// This might be a property within a control's defaultValue object\n// (e.g., \"border.borderWidth\" where border is the control)\nconst control=controlLevel[lastControlKey];if(control?.defaultValue&&typeof control.defaultValue===\"object\"){control.defaultValue[part]=value;}}}else if(controlLevel&&lastControlKey){// Property doesn't exist in current, but we have a control to modify\nconst control=controlLevel[lastControlKey];if(control?.defaultValue&&typeof control.defaultValue===\"object\"){control.defaultValue[part]=value;}}}else{// Navigate deeper\nif(current[part]?.controls){// This is a parent control with nested controls\n// Set controlLevel to current level so we can access this control later for properties like 'hidden'\ncontrolLevel=current;lastControlKey=part;current=current[part].controls;}else if(current[part]&&typeof current[part]===\"object\"){// This might be a control or a defaultValue object\nif(current[part].defaultValue!==undefined){// This is a control - check if we're trying to access its defaultValue properties\ncontrolLevel=current;lastControlKey=part;// If defaultValue is an object, navigate into it; otherwise stay at control level\nif(typeof current[part].defaultValue===\"object\"&&current[part].defaultValue!==null){current=current[part].defaultValue;}else{// defaultValue is a primitive - we need to set it directly later\ncurrent=current[part];}}else{// This is a direct control (like ComponentInstance) - set up for property access\ncontrolLevel=current;lastControlKey=part;current=current[part];}}else{console.warn(`Path ${path} not found in controls`);return;}}}});return clonedControls;}// ------------------------------------------------------------ //\n// CUSTOM HOOKS\n// ------------------------------------------------------------ //\nexport function useInventoryDisabled(shopifyDataId,selectedVariantId,disableWhenOutOfStock){const isOnFramerCanvas=isOnFramerCanvasFn();const isInFramerPreview=useIsInFramerPreview();const{data:inventoryData,isLoading,error}=useInventory(shopifyDataId);if(isOnFramerCanvas||isInFramerPreview)return{isDisabled:false};if(isLoading||error)return{isDisabled:false};const variants=inventoryData?.data?.product?.variants?.edges;if(!variants)return{isDisabled:false};const selectedVariant=findInventoryVariant(variants,selectedVariantId);if(!selectedVariant)return{isDisabled:false};const inventoryState=deriveInventoryState(selectedVariant);const isDisabled=disableWhenOutOfStock&&inventoryState.isPurchaseDisabled;return{isDisabled};}\nexport const __FramerMetadata__ = {\"exports\":{\"MarketButtonStylingActiveProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetPrimaryButtonStyleControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"MarketButtonStylingActiveControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetPrimaryButtonDisabledStyleControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetSecondaryButtonStyleControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetButtonDisabledStyleControlsProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetButtonStyleControlsProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CustomButtonControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OUT_OF_STOCK_STYLE_DEFAULT_VALUES\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useInventoryDisabled\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetButtonContentControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OutOfStockStyleControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"overrideControlDefaults\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetSecondaryButtonStyleDefaultValues\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CustomButtonProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetPrimaryButtonStyleDefaultValues\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OutOfStockStyleProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetPrimaryButtonDisabledStyleDefaultValues\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"PresetButtonContentControlsProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx}from\"react/jsx-runtime\";export default function LoaderSvg({style}){return /*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"24\",height:\"24\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",className:\"lucide lucide-loader-circle-icon lucide-loader-circle\",style:{...style},children:/*#__PURE__*/_jsx(\"path\",{d:\"M21 12a9 9 0 1 1-6.219-8.56\"})});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LoaderSvg\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Loader.map","import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";import LoaderSvg from\"https://framerusercontent.com/modules/z7s7d2NhYNciN7G09hdf/Am5BTAlgzE3rws6PH1Qt/Loader.js\";export default function LoadingSpinner({style}){return /*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(\"style\",{children:`\n          @keyframes loading-spinner {\n            from {\n              transform: rotate(0deg);\n            }\n            to {\n              transform: rotate(360deg);\n            }\n          }\n        `}),/*#__PURE__*/_jsx(LoaderSvg,{style:{animation:\"loading-spinner 1s linear infinite\",...style}})]});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"LoadingSpinner\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Loading_spinner.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{motion}from\"framer-motion\";import{PresetPrimaryButtonStyleDefaultValues,PresetPrimaryButtonDisabledStyleDefaultValues}from\"https://framerusercontent.com/modules/jSzgfFOp8vV7JiKIMM1a/dm2Ulq3gIc0MD3heuKhx/Shared_button_props.js\";import LoadingSpinner from\"https://framerusercontent.com/modules/J14wQOiI0O01kyXMgenS/ODFPbfbc3Lw68NQPcyta/Loading_spinner.js\";// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\nexport default function PresetButton(props){const{leftIcon,rightIcon,font,text,onClick,presetButtonStyle,disabledStyle,style,disabled,isLoading,...restProps}=props;// Deep merge the presetButtonStyle with defaults\nconst mergedPresetButtonStyle={...PresetPrimaryButtonStyleDefaultValues.presetButtonStyle,...presetButtonStyle||{},hover:{...PresetPrimaryButtonStyleDefaultValues.presetButtonStyle?.hover,...presetButtonStyle?.hover||{}}};// When no disabled styling is passed, keep the preset look and only fade + cursor (handled below).\nconst useFadedPresetWhenDisabled=disabledStyle===undefined;// Deep merge the disabledStyle with defaults (only when disabled styling exists)\nconst mergedDisabledStyle={...PresetPrimaryButtonDisabledStyleDefaultValues.disabledStyle,...disabledStyle||{}};const activeStyle=disabled?useFadedPresetWhenDisabled?mergedPresetButtonStyle:mergedDisabledStyle:mergedPresetButtonStyle;const handleClick=e=>{onClick(e);};return /*#__PURE__*/_jsxs(motion.button,{onClick:handleClick,style:{width:\"100%\",height:\"100%\",display:\"flex\",cursor:disabled?\"not-allowed\":\"pointer\",opacity:disabled&&useFadedPresetWhenDisabled?.5:undefined,alignItems:activeStyle?.alignItems,justifyContent:activeStyle?.justifyContent,gap:activeStyle?.gap,padding:activeStyle?.padding,whiteSpace:\"nowrap\",overflow:\"hidden\",border:typeof activeStyle?.border===\"string\"?activeStyle.border:activeStyle?.border?`${activeStyle.border.borderWidth||0}px ${activeStyle.border.borderStyle||\"solid\"} ${activeStyle.border.borderColor||\"transparent\"}`:undefined,borderRadius:activeStyle?.borderRadius,backgroundColor:activeStyle?.backgroundColor,color:activeStyle?.textColor,boxShadow:activeStyle?.shadow,...disabled&&disabledStyle?.font?disabledStyle.font:font,...style},animate:{backgroundColor:activeStyle?.backgroundColor,color:activeStyle?.textColor,boxShadow:activeStyle?.shadow,opacity:disabled&&useFadedPresetWhenDisabled?.5:1,border:typeof activeStyle?.border===\"string\"?activeStyle.border:activeStyle?.border?`${activeStyle.border.borderWidth||0}px ${activeStyle.border.borderStyle||\"solid\"} ${activeStyle.border.borderColor||\"transparent\"}`:undefined},whileHover:disabled?undefined:{backgroundColor:mergedPresetButtonStyle?.hover?.backgroundColor,color:mergedPresetButtonStyle?.hover?.textColor,boxShadow:mergedPresetButtonStyle?.hover?.shadow,border:typeof mergedPresetButtonStyle?.hover?.border===\"string\"?mergedPresetButtonStyle.hover.border:mergedPresetButtonStyle?.hover?.border?`${mergedPresetButtonStyle.hover.border.borderWidth||0}px ${mergedPresetButtonStyle.hover.border.borderStyle||\"solid\"} ${mergedPresetButtonStyle.hover.border.borderColor||\"transparent\"}`:undefined,transition:{duration:.3,ease:\"easeOut\"}},whileTap:{scale:activeStyle?.tapScale,transition:{duration:.1,ease:\"easeOut\"}},disabled:disabled||isLoading,...restProps,children:[isLoading&&/*#__PURE__*/_jsx(LoadingSpinner,{style:{width:restProps.loadingSpinnerSize||24,height:restProps.loadingSpinnerSize||24}}),leftIcon&&!isLoading&&/*#__PURE__*/_jsx(\"span\",{children:leftIcon}),text&&!isLoading&&/*#__PURE__*/_jsx(\"span\",{style:{overflow:\"hidden\",textOverflow:\"ellipsis\"},children:text}),rightIcon&&!isLoading&&/*#__PURE__*/_jsx(\"span\",{children:rightIcon})]});}\nexport const __FramerMetadata__ = {\"exports\":{\"PresetButtonProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"PresetButton\",\"slots\":[\"leftIcon\",\"rightIcon\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx,Fragment as _Fragment}from\"react/jsx-runtime\";import React from\"react\";// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\nfunction renderWithSize(children,customButtonSize){return React.Children.map(children,child=>{return /*#__PURE__*/React.cloneElement(child,{style:{...child.props.style,width:customButtonSize?.width===\"fill\"?\"100%\":child.props.width,height:customButtonSize?.height===\"fill\"?\"100%\":child.props.height}});});}export default function CustomButtonWrapper(props){const useDisabledSlot=props.disabled&&props.disabledButton!=null;return /*#__PURE__*/_jsx(\"div\",{onClick:props.disabled?undefined:props.onClick,style:{overflow:\"visible\",width:props.customButtonSize?.width===\"default\"?\"fit-content\":\"100%\",height:props.customButtonSize?.height===\"default\"?\"fit-content\":\"100%\",display:\"flex\",cursor:props.disabled?\"not-allowed\":\"pointer\",opacity:useDisabledSlot?1:props.disabled?.5:1},children:/*#__PURE__*/_jsx(_Fragment,{children:useDisabledSlot?renderWithSize(props.disabledButton,props.customButtonSize):renderWithSize(props.children,props.customButtonSize)})});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CustomButtonWrapper\",\"slots\":[\"disabledButton\",\"children\"],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Custom_button_wrapper.map","import{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";export default function CartSvg({style}){return /*#__PURE__*/_jsxs(\"svg\",{width:\"16\",height:\"16\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"2\",strokeLinecap:\"round\",strokeLinejoin:\"round\",style:{...style},children:[/*#__PURE__*/_jsx(\"circle\",{cx:\"8\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"circle\",{cx:\"19\",cy:\"21\",r:\"1\"}),/*#__PURE__*/_jsx(\"path\",{d:\"m2.05 2.05h2l2.66 12.42a2 2 0 0 0 2 1.58h9.78a2 2 0 0 0 1.95-1.57l1.65-7.43H5.12\"})]});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"CartSvg\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Cart.map","const CART_ID_KEY=\"frameship_cart_id\";/**\n * Get cart ID from local storage\n */export const getCartIdFromStorage=()=>{try{return localStorage.getItem(CART_ID_KEY);}catch(error){console.error(\"Error getting cart ID from localStorage:\",error);return null;}};/**\n * Save cart ID to local storage\n */export const saveCartIdToStorage=cartId=>{try{localStorage.setItem(CART_ID_KEY,cartId);}catch(error){console.error(\"Error saving cart ID to localStorage:\",error);}};/**\n * Remove cart ID from local storage\n */export const removeCartIdFromStorage=()=>{try{localStorage.removeItem(CART_ID_KEY);}catch(error){console.error(\"Error removing cart ID from localStorage:\",error);}};/**\n * Check if cart ID exists in local storage\n */export const hasCartIdInStorage=()=>{return getCartIdFromStorage()!==null;};\nexport const __FramerMetadata__ = {\"exports\":{\"removeCartIdFromStorage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"hasCartIdInStorage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"saveCartIdToStorage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getCartIdFromStorage\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Cart_local_storage.map","import{shopifyClient}from\"https://framerusercontent.com/modules/c5gtsBimYk7u4sSXwOlt/FT8ohIrQkGjZoPqb6Add/Shopify_client.js\";import{getCartIdFromStorage,saveCartIdToStorage}from\"https://framerusercontent.com/modules/OnWAqZZNYQ9JhDoMpqGD/ky0aqyH28XdVmVjx9fGI/Cart_local_storage.js\";const SELLING_PLAN_ALLOCATION_FRAGMENT=`\n              sellingPlanAllocation {\n                sellingPlan {\n                  id\n                  name\n                  options {\n                    name\n                    value\n                  }\n                }\n                priceAdjustments {\n                  price { amount currencyCode }\n                  compareAtPrice { amount currencyCode }\n                  perDeliveryPrice { amount currencyCode }\n                }\n              }\n`;const injectSellingPlanFragment=(query,includeSellingPlans)=>{const fragment=includeSellingPlans?SELLING_PLAN_ALLOCATION_FRAGMENT:\"\";return query.split(\"SELLING_PLAN_ALLOCATION_PLACEHOLDER\").join(fragment);};export const getShopifyCart=async(country,includeSellingPlans)=>{const existingCartId=getCartIdFromStorage();const getCartQuery=`#graphql\n          query getCart($cartId: ID!, $country: CountryCode)\n          @inContext(country: $country) {\n            cart(id: $cartId) {\n              id\n              createdAt\n              updatedAt\n              checkoutUrl\n              lines(first: 100) {\n                edges {\n                  node {\n                    id\n                    quantity\n                    attributes {\n                      key\n                      value\n                    }\n                    merchandise {\n                      ... on ProductVariant {\n                        id\n                        title\n                        product {\n                          id\n                          title\n                          handle\n                        }\n                        image {\n                          url\n                          altText\n                        }\n                        price {\n                          amount\n                          currencyCode\n                        }\n                      }\n                    }\n                    SELLING_PLAN_ALLOCATION_PLACEHOLDER\n                  discountAllocations {\n                    discountedAmount {\n                      amount\n                      currencyCode\n                    }\n                    discountApplication {\n                      allocationMethod\n                      targetSelection\n                      targetType\n                    }\n                  }\n                  }\n                }\n                pageInfo {\n                  hasNextPage\n                  hasPreviousPage\n                }\n              }\n              cost {\n                totalAmount {\n                  amount\n                  currencyCode\n                }\n                subtotalAmount {\n                  amount\n                  currencyCode\n                }\n                totalTaxAmount {\n                  amount\n                  currencyCode\n                }\n              }\n              discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n                code\n                applicable\n              }\n            }\n          }\n  `;const queryWithSellingPlans=injectSellingPlanFragment(getCartQuery,includeSellingPlans);const result=await shopifyClient({query:queryWithSellingPlans,variables:{cartId:existingCartId,...country&&{country}}});return result;};export const createShopifyCart=async(country,includeSellingPlans,lines)=>{const cartCreateQuery=`#graphql\n  mutation cartCreate($input: CartInput, $country: CountryCode)\n  @inContext(country: $country) {\n    cartCreate(input: $input) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n    }\n  }\n  `;const queryWithSellingPlans=injectSellingPlanFragment(cartCreateQuery,includeSellingPlans);const lineInputs=lines?.map(line=>{const lineInput={merchandiseId:line.merchandiseId,quantity:line.quantity};if(line.sellingPlanId){lineInput.sellingPlanId=line.sellingPlanId;}if(line.attributes&&line.attributes.length>0){lineInput.attributes=line.attributes;}return lineInput;})??[];const result=await shopifyClient({query:queryWithSellingPlans,variables:{...lineInputs.length>0&&{input:{lines:lineInputs}},...country&&{country}}});if(result.data?.cartCreate?.cart?.id){saveCartIdToStorage(result.data.cartCreate.cart.id);}return result;};export const addToShopifyCart=async({cartId,variantId,quantity=1,country,sellingPlanId,attributes,includeSellingPlans})=>{const addToCartMutation=`#graphql\n  mutation cartLinesAdd($cartId: ID!, $lines: [CartLineInput!]!, $country: CountryCode)\n  @inContext(country: $country) {\n    cartLinesAdd(cartId: $cartId, lines: $lines) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n    }\n  }\n  `;const mutationWithSellingPlans=injectSellingPlanFragment(addToCartMutation,includeSellingPlans);const lineInput={merchandiseId:variantId,quantity};if(sellingPlanId){lineInput.sellingPlanId=sellingPlanId;}if(attributes&&attributes.length>0){lineInput.attributes=attributes;}const result=await shopifyClient({query:mutationWithSellingPlans,variables:{cartId,lines:[lineInput],...country&&{country}}});return result;};export const updateQuantityShopifyCart=async({cartId,lineId,quantity,country,includeSellingPlans})=>{const updateQuantityMutation=`#graphql\n  mutation cartLinesUpdate($cartId: ID!, $lines: [CartLineUpdateInput!]!, $country: CountryCode)\n  @inContext(country: $country) {\n    cartLinesUpdate(cartId: $cartId, lines: $lines) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n    }\n  }\n`;const mutationWithSellingPlans=injectSellingPlanFragment(updateQuantityMutation,includeSellingPlans);const result=await shopifyClient({query:mutationWithSellingPlans,variables:{cartId,lines:[{id:lineId,quantity}],...country&&{country}}});return result;};export const removeLineShopifyCart=async({cartId,lineId,country,includeSellingPlans})=>{const removeLineMutation=`#graphql\n  mutation cartLinesRemove($cartId: ID!, $lineIds: [ID!]!, $country: CountryCode)\n  @inContext(country: $country) {\n    cartLinesRemove(cartId: $cartId, lineIds: $lineIds) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n    }\n  }\n`;const mutationWithSellingPlans=injectSellingPlanFragment(removeLineMutation,includeSellingPlans);const result=await shopifyClient({query:mutationWithSellingPlans,variables:{cartId,lineIds:[lineId],...country&&{country}}});return result;};export const updateDiscountCodesShopifyCart=async({cartId,discountCodes,country,includeSellingPlans})=>{const updateDiscountCodesMutation=`#graphql\n  mutation cartDiscountCodesUpdate($cartId: ID!, $discountCodes: [String!], $country: CountryCode)\n  @inContext(country: $country) {\n    cartDiscountCodesUpdate(cartId: $cartId, discountCodes: $discountCodes) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n      userErrors {\n        field\n        message\n      }\n    }\n  }\n`;const mutationWithSellingPlans=injectSellingPlanFragment(updateDiscountCodesMutation,includeSellingPlans);return shopifyClient({query:mutationWithSellingPlans,variables:{cartId,discountCodes,...country&&{country}}});};/**\n * Update cart buyer identity to change market/currency\n * This is required to change an existing cart's currency\n */export const updateCartBuyerIdentity=async({cartId,countryCode,includeSellingPlans})=>{const updateBuyerIdentityMutation=`#graphql\n  mutation cartBuyerIdentityUpdate($cartId: ID!, $buyerIdentity: CartBuyerIdentityInput!) {\n    cartBuyerIdentityUpdate(cartId: $cartId, buyerIdentity: $buyerIdentity) {\n      cart {\n        id\n        createdAt\n        updatedAt\n        checkoutUrl\n        lines(first: 100) {\n          edges {\n            node {\n              id\n              quantity\n              attributes {\n                key\n                value\n              }\n              merchandise {\n                ... on ProductVariant {\n                  id\n                  title\n                  product {\n                    id\n                    title\n                    handle\n                  }\n                  image {\n                    url\n                    altText\n                  }\n                  price {\n                    amount\n                    currencyCode\n                  }\n                }\n              }\n              SELLING_PLAN_ALLOCATION_PLACEHOLDER\n            discountAllocations {\n              discountedAmount {\n                amount\n                currencyCode\n              }\n              discountApplication {\n                allocationMethod\n                targetSelection\n                targetType\n              }\n            }\n            }\n          }\n          pageInfo {\n            hasNextPage\n            hasPreviousPage\n          }\n        }\n        cost {\n          totalAmount {\n            amount\n            currencyCode\n          }\n          subtotalAmount {\n            amount\n            currencyCode\n          }\n          totalTaxAmount {\n            amount\n            currencyCode\n          }\n        }\n        discountAllocations {\n          discountedAmount {\n            amount\n            currencyCode\n          }\n          discountApplication {\n            allocationMethod\n            targetSelection\n            targetType\n          }\n        }\n        discountCodes {\n          code\n          applicable\n        }\n      }\n    }\n  }\n  `;const mutationWithSellingPlans=injectSellingPlanFragment(updateBuyerIdentityMutation,includeSellingPlans);const result=await shopifyClient({query:mutationWithSellingPlans,variables:{cartId,buyerIdentity:{countryCode}}});return result;};\nexport const __FramerMetadata__ = {\"exports\":{\"CartDiscountApplication\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"removeLineShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateQuantityShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartResponse\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartDiscountAllocation\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartAttribute\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartItem\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"OptimisticVariantData\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateDiscountCodesShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"addToShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"updateCartBuyerIdentity\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartUserError\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CreateCartLineInput\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"CartData\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createShopifyCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{isOnFramerCanvasFn}from\"https://framerusercontent.com/modules/0cFx6PDS8kp3yxNfnoIw/3wFcPS10LYSFljb1q710/Framer_utils.js\";import{useProductSelectionStore}from\"https://framerusercontent.com/modules/8l7kldZFdo4Q33wHQBGB/VPMbST1NNGa3YZbZdw3a/Product_selection_store.js\";export function trackEcommerceEvent(event,payload){if(typeof window===\"undefined\")return;if(isOnFramerCanvasFn())return;if(!payload.items.length)return;const dataLayerWindow=window;dataLayerWindow.dataLayer=dataLayerWindow.dataLayer??[];dataLayerWindow.dataLayer.push({ecommerce:null});dataLayerWindow.dataLayer.push({event,ecommerce:{currency:payload.currency,value:roundMoney(payload.value),items:payload.items.map(serializeItem)}});}export function trackAddToCartFromOptimistic(variantId,quantity,variantData){const item=itemFromOptimisticVariant(variantId,quantity,variantData);trackEcommerceEvent(\"add_to_cart\",{currency:variantData?.price.currencyCode||\"USD\",value:itemValue(item),items:[item]});}export function trackRemoveFromCartLine(line){const item=itemFromCartLine(line);trackEcommerceEvent(\"remove_from_cart\",{currency:getCartLineCurrency(line),value:itemValue(item),items:[item]});}export function trackBeginCheckoutFromCart(cart){const items=cart.lines.edges.map(edge=>itemFromCartLine(edge.node));if(!items.length)return;const currency=cart.cost.totalAmount.currencyCode||getCartLineCurrency(cart.lines.edges[0].node);const value=Number(cart.cost.totalAmount.amount);trackEcommerceEvent(\"begin_checkout\",{currency,value:Number.isFinite(value)?value:items.reduce((sum,item)=>sum+itemValue(item),0),items});}export function trackViewItemFromShopifyData(shopifyData){const variant=getSelectedShopifyVariant(shopifyData);if(!variant)return;const item=itemFromShopifyVariant(shopifyData,variant,1);trackEcommerceEvent(\"view_item\",{currency:variant.price.currencyCode||\"USD\",value:itemValue(item),items:[item]});}function itemFromOptimisticVariant(variantId,quantity,variantData){return{item_id:toNumericId(variantId),item_name:variantData?.productTitle||\"Product\",...variantTitleFields(variantData?.title),price:toPrice(variantData?.price.amount),quantity};}function itemFromCartLine(line){return{item_id:toNumericId(line.merchandise.id),item_name:line.merchandise.product.title,...variantTitleFields(line.merchandise.title),price:toPrice(getCartLineAmount(line)),quantity:line.quantity};}function itemFromShopifyVariant(shopifyData,variant,quantity){return{item_id:toNumericId(variant.id),item_name:shopifyData.title,...variantTitleFields(variant.title),...variant.sku?{item_sku:variant.sku}:{},price:toPrice(variant.price.amount),quantity};}function getSelectedShopifyVariant(shopifyData){if(!shopifyData.variants.length)return undefined;const selectedVariantId=useProductSelectionStore.getState().getSelectedVariant(shopifyData.id,shopifyData.variants);return shopifyData.variants.find(variant=>variant.id===selectedVariantId)??shopifyData.variants[0];}function getCartLineAmount(line){return line.sellingPlanAllocation?.priceAdjustments[0]?.price.amount??line.merchandise.price.amount;}function getCartLineCurrency(line){return line.sellingPlanAllocation?.priceAdjustments[0]?.price.currencyCode??line.merchandise.price.currencyCode??\"USD\";}function variantTitleFields(title){const trimmed=title?.trim();if(!trimmed||trimmed.toLowerCase()===\"default title\"){return{};}return{item_variant:trimmed};}function toNumericId(id){if(!id)return\"\";const gidMatch=id.match(/^gid:\\/\\/shopify\\/[^/]+\\/(.+)$/);return gidMatch?.[1]??id;}function toPrice(amount){const value=Number(amount);return Number.isFinite(value)?value:0;}function itemValue(item){return item.price*item.quantity;}function roundMoney(value){return Math.round(value*100)/100;}function serializeItem(item){return{item_id:item.item_id,item_name:item.item_name,...item.item_variant?{item_variant:item.item_variant}:{},...item.item_sku?{item_sku:item.item_sku}:{},price:roundMoney(item.price),quantity:item.quantity};}\nexport const __FramerMetadata__ = {\"exports\":{\"trackViewItemFromShopifyData\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"EcommerceItem\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackEcommerceEvent\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackRemoveFromCartLine\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackAddToCartFromOptimistic\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"trackBeginCheckoutFromCart\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"EcommercePayload\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"EcommerceEventName\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Track_ecommerce_event.map","import{useQuery,useMutation,useQueryClient}from\"https://framerusercontent.com/modules/EsOvuK0xi7z7RIQRkokm/8aYKGIHO4l4IQs8Fyj8V/Tanstack_query.js\";import{useEffect,useRef}from\"react\";import{getCartIdFromStorage,removeCartIdFromStorage}from\"https://framerusercontent.com/modules/OnWAqZZNYQ9JhDoMpqGD/ky0aqyH28XdVmVjx9fGI/Cart_local_storage.js\";import{useMarketStore}from\"https://framerusercontent.com/modules/NBp7ctFhtxfP8UPi4nze/1Na5UwTmSmXnVE3ENc2v/Market_store.js\";import{addToShopifyCart,createShopifyCart,getShopifyCart,removeLineShopifyCart,updateQuantityShopifyCart,updateDiscountCodesShopifyCart,updateCartBuyerIdentity}from\"https://framerusercontent.com/modules/HRm4FfVJHrd62RjWhV4c/oRoeCFqCvXR70fR2WyFm/Cart_service.js\";import{isOnFramerCanvasFn}from\"https://framerusercontent.com/modules/0cFx6PDS8kp3yxNfnoIw/3wFcPS10LYSFljb1q710/Framer_utils.js\";import{getIncludeSellingPlansFlag,getDeferCartCreationFlag}from\"https://framerusercontent.com/modules/TgekT24FCXsp3m1M9KnX/EmTtwh9ht2RFHFqCjQuM/Get_shopify_config.js\";import{trackAddToCartFromOptimistic,trackRemoveFromCartLine}from\"https://framerusercontent.com/modules/jbhiiko3EChfrqb1oYnj/stKWa6B0oRhXrQRbcVZH/Track_ecommerce_event.js\";//\nexport const CART_QUERY_KEYS={all:[\"cart\"],byId:cartId=>[\"cart\",cartId]};// Track the latest desired quantity per cart line to avoid stale responses overriding optimistic state\nconst lastDesiredQuantityByLine=new Map;// Track pending removals to prevent stale responses from \"reviving\" removed items\nconst pendingRemovals=new Set;const pendingAdds=new Map;let addCounter=0;let pendingCartCreate=null;const createCartOnce=async(country,includeSellingPlans,firstLine)=>{if(pendingCartCreate){return{response:await pendingCartCreate,wasStarter:false};}pendingCartCreate=createShopifyCart(country,includeSellingPlans,firstLine?[firstLine]:undefined);try{const response=await pendingCartCreate;return{response,wasStarter:true};}finally{pendingCartCreate=null;}};export const useCreateCart=()=>{const isOnFramerCanvas=isOnFramerCanvasFn();const{getMarket}=useMarketStore();const currentMarket=getMarket();const country=currentMarket?.countryCode;const includeSellingPlans=getIncludeSellingPlansFlag();const deferCartCreation=getDeferCartCreationFlag();const{data,isLoading,error}=useQuery({queryKey:[\"cart\",country],queryFn:async()=>{// Skip API calls when on Framer canvas\nif(isOnFramerCanvas){return{data:null};}// Check if we already have a cart ID in local storage\nconst existingCartId=getCartIdFromStorage();if(existingCartId){const result=await getShopifyCart(country,includeSellingPlans);// If cart doesn't exist (likely expired), create a new one\nif(result.data?.cart===null){removeCartIdFromStorage();if(deferCartCreation){return{data:{cart:null},errors:[]};}const createResult=await createShopifyCart(country,includeSellingPlans);return createResult;}return result;}if(deferCartCreation){return{data:{cart:null},errors:[]};}// No cart ID in storage, create a new cart\nconst result=await createShopifyCart(country,includeSellingPlans);// Log if the cart creation failed\nif(!result.data?.cartCreate?.cart?.id){console.error(\"[useCreateCart] Failed to create cart. Response:\",result);}return result;},enabled:!isOnFramerCanvas,staleTime:5*60*1e3});// Return early values when on Framer canvas\nif(isOnFramerCanvas){return{data:null,isLoading:false,error:null};}return{data,isLoading,error};};export const useAddToCart=()=>{const queryClient=useQueryClient();const{getMarket}=useMarketStore();const currentMarket=getMarket();const country=currentMarket?.countryCode;const includeSellingPlans=getIncludeSellingPlansFlag();const mutation=useMutation({mutationFn:async({cartId,variantId,quantity=1,sellingPlanId,attributes})=>{return addToShopifyCart({cartId,variantId,quantity,country,sellingPlanId,attributes,includeSellingPlans});},onMutate:async({variantId,quantity=1,sellingPlanId,attributes,variantData})=>{const cartQueryKey=[\"cart\",country];const attributesKey=JSON.stringify(attributes||[]);// Track this add operation\nconst counter=++addCounter;const addKey=`${variantId}-${sellingPlanId||\"none\"}-${attributesKey}`;pendingAdds.set(addKey,{counter,variantId,quantity,sellingPlanId,attributesKey});await queryClient.cancelQueries({queryKey:cartQueryKey});const previousCart=queryClient.getQueryData(cartQueryKey);const cart=getCartFromResponse(previousCart);if(!cart||!variantData)return{previousCart,addKey,counter};// Check if variant+sellingPlan combo already exists (Shopify merges quantities)\nconst existingLine=findExistingLine(cart,variantId,sellingPlanId,attributes);let updatedCart;if(existingLine){// Merge quantities\nconst updatedLines=cart.lines.edges.map(edge=>{if(edge.node.id!==existingLine.id)return edge;return{...edge,node:{...edge.node,quantity:edge.node.quantity+quantity}};});updatedCart=recalculateCartTotals({...cart,lines:{...cart.lines,edges:updatedLines}});}else{// Create optimistic line with temp ID - add to BEGINNING so it stays in place when server responds\nconst tempId=`temp-${variantId}-${counter}`;const newLine={id:tempId,quantity,attributes,merchandise:{id:variantId,title:variantData.title,product:{id:variantData.productId,title:variantData.productTitle,handle:variantData.productHandle},image:variantData.image,price:variantData.price},discountAllocations:[]};const updatedLines=[{node:newLine},...cart.lines.edges];updatedCart=recalculateCartTotals({...cart,lines:{...cart.lines,edges:updatedLines}});}queryClient.setQueryData(cartQueryKey,old=>old?updateCartInResponse(old,updatedCart):old);return{previousCart,addKey,counter};},onError:(_err,_variables,context)=>{if(!context)return;const{previousCart,addKey,counter}=context;// Only rollback if this is the latest add for this variant+sellingPlan\nconst pending=pendingAdds.get(addKey);if(pending&&pending.counter!==counter)return;if(previousCart){const cartQueryKey=[\"cart\",country];queryClient.setQueryData(cartQueryKey,previousCart);}},onSettled:(_data,_error,_variables,context)=>{if(!context)return;const{addKey,counter}=context;// Only invalidate if this is the latest add for this variant+sellingPlan\nconst pending=pendingAdds.get(addKey);if(pending&&pending.counter!==counter)return;pendingAdds.delete(addKey);const cartQueryKey=[\"cart\",country];queryClient.invalidateQueries({queryKey:cartQueryKey});}});return{addToCart:mutation.mutate,addToCartAsync:mutation.mutateAsync,isAdding:mutation.isPending,error:mutation.error};};export const useGetCart=cartId=>{const includeSellingPlans=getIncludeSellingPlansFlag();const{data,isLoading,error}=useQuery({queryKey:CART_QUERY_KEYS.byId(cartId),queryFn:async()=>await getShopifyCart(undefined,includeSellingPlans),enabled:!!cartId,staleTime:2*60*1e3,refetchOnWindowFocus:true});return{data,isLoading,error};};export const useCartMutations=()=>{const queryClient=useQueryClient();const{getMarket}=useMarketStore();const currentMarket=getMarket();const country=currentMarket?.countryCode;const includeSellingPlans=getIncludeSellingPlansFlag();const updateQuantity=useMutation({mutationFn:async({cartId,lineId,quantity})=>{return updateQuantityShopifyCart({cartId,lineId,quantity,country,includeSellingPlans});},onMutate:async({lineId,quantity})=>{// Record latest desired quantity for this line\nlastDesiredQuantityByLine.set(lineId,quantity);const cartQueryKey=[\"cart\",country];await queryClient.cancelQueries({queryKey:cartQueryKey});const previousCart=queryClient.getQueryData(cartQueryKey);const cart=getCartFromResponse(previousCart);if(!cart)return{previousCart};const updatedLines=cart.lines.edges.map(edge=>{if(edge.node.id!==lineId)return edge;return{...edge,node:{...edge.node,quantity}};});const updatedCart=recalculateCartTotals({...cart,lines:{...cart.lines,edges:updatedLines}});queryClient.setQueryData(cartQueryKey,old=>old?updateCartInResponse(old,updatedCart):old);return{previousCart};},onError:(_err,variables,context)=>{// Only rollback if this failed mutation corresponds to the latest desired quantity\nconst latest=lastDesiredQuantityByLine.get(variables.lineId);if(latest!==variables.quantity)return;if(!context)return;const{previousCart}=context;if(previousCart){const cartQueryKey=[\"cart\",country];queryClient.setQueryData(cartQueryKey,previousCart);}},onSettled:(_data,_error,variables)=>{// Invalidate only if this mutation represents the latest desired quantity for the line\nconst latest=lastDesiredQuantityByLine.get(variables.lineId);if(latest!==variables.quantity)return;lastDesiredQuantityByLine.delete(variables.lineId);const cartQueryKey=[\"cart\",country];queryClient.invalidateQueries({queryKey:cartQueryKey});}});const removeLine=useMutation({mutationFn:async({cartId,lineId})=>{return await removeLineShopifyCart({cartId,lineId,country,includeSellingPlans});},onMutate:async({lineId})=>{// Track this removal to prevent stale responses from \"reviving\" the item\npendingRemovals.add(lineId);const cartQueryKey=[\"cart\",country];await queryClient.cancelQueries({queryKey:cartQueryKey});const previousCart=queryClient.getQueryData(cartQueryKey);const cart=getCartFromResponse(previousCart);if(!cart)return{previousCart};const removedLine=cart.lines.edges.find(edge=>edge.node.id===lineId)?.node;if(removedLine){trackRemoveFromCartLine(removedLine);}const updatedLines=cart.lines.edges.filter(edge=>edge.node.id!==lineId);const updatedCart=recalculateCartTotals({...cart,lines:{...cart.lines,edges:updatedLines}});queryClient.setQueryData(cartQueryKey,old=>old?updateCartInResponse(old,updatedCart):old);return{previousCart};},onError:(_err,variables,context)=>{// Only rollback if this lineId is still pending removal\nif(!pendingRemovals.has(variables.lineId))return;if(!context)return;const{previousCart}=context;if(previousCart){const cartQueryKey=[\"cart\",country];queryClient.setQueryData(cartQueryKey,previousCart);}},onSuccess:(_data,variables)=>{// Just clean up tracking - the optimistic update is already correct\n// Don't apply mutation response as it has different structure (cartLinesRemove.cart vs .cart)\npendingRemovals.delete(variables.lineId);}});const updateDiscountCodes=useMutation({mutationFn:async({cartId,discountCodes})=>{return updateDiscountCodesShopifyCart({cartId,discountCodes,country,includeSellingPlans});},onSuccess:response=>{const updatedCart=response.data?.cartDiscountCodesUpdate?.cart;if(!updatedCart)return;const cartQueryKey=[\"cart\",country];queryClient.setQueryData(cartQueryKey,old=>old?updateCartInResponse(old,updatedCart):{data:{cart:updatedCart},errors:response.errors??[]});},onSettled:()=>{const cartQueryKey=[\"cart\",country];queryClient.invalidateQueries({queryKey:cartQueryKey});}});return{updateQuantity:{mutate:updateQuantity.mutate,mutateAsync:updateQuantity.mutateAsync,isPending:updateQuantity.isPending,error:updateQuantity.error},removeLine:{mutate:removeLine.mutate,mutateAsync:removeLine.mutateAsync,isPending:removeLine.isPending,error:removeLine.error},discountCodes:{mutate:updateDiscountCodes.mutate,mutateAsync:updateDiscountCodes.mutateAsync,isPending:updateDiscountCodes.isPending,error:updateDiscountCodes.error}};};/**\n * Utility hook that combines cart creation and management\n */export const useCart=()=>{const queryClient=useQueryClient();const{getMarket}=useMarketStore();const currentMarket=getMarket();const previousMarketRef=useRef();const isOnFramerCanvas=isOnFramerCanvasFn();const{data:cartData,isLoading:isCreatingCart,error:cartError}=useCreateCart();const cart=cartData?.data?.cart||cartData?.data?.cartCreate?.cart||null;const cartId=cart?.id||getCartIdFromStorage();const country=currentMarket?.countryCode;const{addToCartAsync:addToCartAsyncFn,isAdding,error:addError}=useAddToCart();const{updateQuantity,removeLine,discountCodes:discountCodesMutation}=useCartMutations();const includeSellingPlans=getIncludeSellingPlansFlag();const applyDiscountCode=async code=>{if(!cartId){return{ok:false,errorMessage:\"Cart ID not available. Please wait for cart to initialize.\"};}const normalizedCode=normalizeDiscountCode(code);if(!normalizedCode){return{ok:false,errorMessage:\"Discount code cannot be empty.\"};}const applicableCodes=getApplicableDiscountCodes(cart);const discountCodes=toUniqueValues([...applicableCodes,normalizedCode]);try{const response=await discountCodesMutation.mutateAsync({cartId,discountCodes});const errorMessage=getDiscountMutationErrorMessage(response);if(errorMessage){return{ok:false,errorMessage};}// Check if the newly applied code is not applicable\nconst responseDiscountCodes=response.data?.cartDiscountCodesUpdate?.cart?.discountCodes||[];const newCodeEntry=responseDiscountCodes.find(dc=>dc.code.toUpperCase()===normalizedCode.toUpperCase());if(newCodeEntry&&!newCodeEntry.applicable){return{ok:false,errorMessage:`Discount code ${normalizedCode} is not applicable.`};}return{ok:true};}catch(error){return{ok:false,errorMessage:error instanceof Error?error.message:\"Failed to apply discount code.\"};}};const removeDiscountCode=async code=>{if(!cartId){return{ok:false,errorMessage:\"Cart ID not available. Please wait for cart to initialize.\"};}const normalizedCode=normalizeDiscountCode(code);if(!normalizedCode){return{ok:false,errorMessage:\"Discount code cannot be empty.\"};}const applicableCodes=getApplicableDiscountCodes(cart);if(!applicableCodes.includes(normalizedCode)){return{ok:true};}const discountCodes=applicableCodes.filter(existingCode=>existingCode!==normalizedCode);try{const response=await discountCodesMutation.mutateAsync({cartId,discountCodes});const errorMessage=getDiscountMutationErrorMessage(response);if(errorMessage){return{ok:false,errorMessage};}return{ok:true};}catch(error){return{ok:false,errorMessage:error instanceof Error?error.message:\"Failed to remove discount code.\"};}};// Update cart buyer identity when market changes\nuseEffect(()=>{// Skip effect when on Framer canvas\nif(isOnFramerCanvas)return;const updateCartMarket=async()=>{const currentCountry=currentMarket?.countryCode;const previousCountry=previousMarketRef.current;// Only update if:\n// 1. Market actually changed\n// 2. We have a cart ID\n// 3. Current country exists\nif(previousCountry&&currentCountry&&previousCountry!==currentCountry&&cartId){try{// Update the cart's buyer identity to change currency\nawait updateCartBuyerIdentity({cartId,countryCode:currentCountry,includeSellingPlans});// Invalidate queries to refetch with new currency\nconst cartQueryKey=[\"cart\",currentCountry];queryClient.invalidateQueries({queryKey:cartQueryKey});}catch(error){console.error(\"[Cart] Failed to update cart market:\",error);}}previousMarketRef.current=currentCountry;};updateCartMarket();},[currentMarket?.countryCode,cartId,queryClient,isOnFramerCanvas,includeSellingPlans]);// Early return when on Framer canvas to prevent warnings and unnecessary API calls\nif(isOnFramerCanvas){return{cart:null,cartId:undefined,isLoading:false,isAdding:false,isUpdatingDiscountCodes:false,error:null,addToCart:()=>{},addToCartAsync:()=>Promise.reject(new Error(\"Cart not available on Framer canvas\")),updateQuantity:()=>{},removeLine:()=>{},applyDiscountCode:()=>Promise.resolve({ok:false,errorMessage:\"Cart not available on Framer canvas.\"}),removeDiscountCode:()=>Promise.resolve({ok:false,errorMessage:\"Cart not available on Framer canvas.\"})};}// Log for debugging - comprehensive error information\n// Skip logging when on Framer canvas to prevent console warnings\nif(!isOnFramerCanvas){if(!cartId&&!isCreatingCart&&cartError){console.error(\"[useCart] Cart initialization failed:\",cartError,\"Response data:\",cartData);}else if(!cartId&&!isCreatingCart&&!cartError&&!getDeferCartCreationFlag()){console.warn(\"[useCart] Cart ID is missing and loading finished, but no error. Response:\",cartData);}}const resolveAddToCart=async({variantId,quantity=1,sellingPlanId,variantData,attributes})=>{trackAddToCartFromOptimistic(variantId,quantity,variantData);const cartQueryKey=[\"cart\",country];const line={merchandiseId:variantId,quantity,...sellingPlanId&&{sellingPlanId},...attributes&&attributes.length>0&&{attributes}};let targetCartId=cartId??getCartIdFromStorage()??undefined;if(!targetCartId){const{response:createResult,wasStarter}=await createCartOnce(country,includeSellingPlans,line);const createdCart=createResult.data?.cartCreate?.cart;if(!createdCart?.id){throw new Error(\"Failed to create cart\");}queryClient.setQueryData(cartQueryKey,createResult);targetCartId=createdCart.id;if(wasStarter){queryClient.invalidateQueries({queryKey:cartQueryKey});return createResult;}}return addToCartAsyncFn({cartId:targetCartId,variantId,quantity,sellingPlanId,variantData,attributes});};return{cart,cartId,isLoading:isCreatingCart,isAdding,isUpdatingDiscountCodes:discountCodesMutation.isPending,error:cartError||addError,addToCart:(variantId,quantity=1,sellingPlanId,variantData,attributes)=>{void resolveAddToCart({variantId,quantity,sellingPlanId,variantData,attributes}).catch(error=>{console.error(\"[useCart] Failed to add to cart:\",error);});},addToCartAsync:(variantId,quantity=1,sellingPlanId,variantData,attributes)=>{return resolveAddToCart({variantId,quantity,sellingPlanId,variantData,attributes});},updateQuantity:(lineId,quantity)=>{if(!cartId){console.warn(\"[useCart] Cannot update quantity: cartId is not available.\");return;}updateQuantity.mutate({cartId,lineId,quantity});},removeLine:lineId=>{if(!cartId){console.warn(\"[useCart] Cannot remove line: cartId is not available.\");return;}removeLine.mutate({cartId,lineId});},applyDiscountCode,removeDiscountCode};};// ------------------------------------------------------------ //\n// HELPER FUNCTIONS\n// ------------------------------------------------------------ //\nconst getCartFromResponse=response=>{if(!response?.data)return null;return response.data.cart||response.data.cartCreate?.cart||response.data.cartLinesAdd?.cart||response.data.cartLinesUpdate?.cart||response.data.cartLinesRemove?.cart||response.data.cartDiscountCodesUpdate?.cart||null;};const updateCartInResponse=(response,updatedCart)=>{if(!response.data)return response;if(response.data.cart){return{...response,data:{...response.data,cart:updatedCart}};}if(response.data.cartCreate?.cart){return{...response,data:{...response.data,cartCreate:{cart:updatedCart}}};}if(response.data.cartLinesAdd?.cart){return{...response,data:{...response.data,cartLinesAdd:{cart:updatedCart}}};}if(response.data.cartLinesUpdate?.cart){return{...response,data:{...response.data,cartLinesUpdate:{cart:updatedCart}}};}if(response.data.cartLinesRemove?.cart){return{...response,data:{...response.data,cartLinesRemove:{cart:updatedCart}}};}if(response.data.cartDiscountCodesUpdate?.cart){return{...response,data:{...response.data,cartDiscountCodesUpdate:{...response.data.cartDiscountCodesUpdate,cart:updatedCart}}};}return response;};const normalizeDiscountCode=code=>code.trim().toUpperCase();const getApplicableDiscountCodes=cart=>{if(!cart?.discountCodes)return[];return cart.discountCodes.filter(discountCode=>discountCode.applicable).map(discountCode=>normalizeDiscountCode(discountCode.code)).filter(discountCode=>discountCode.length>0);};const toUniqueValues=values=>{return Array.from(new Set(values));};const getDiscountMutationErrorMessage=response=>{return response.data?.cartDiscountCodesUpdate?.userErrors?.[0]?.message||response.errors?.[0]?.message;};const findExistingLine=(cart,variantId,sellingPlanId,attributes)=>{if(!cart)return undefined;const targetAttributesKey=JSON.stringify(attributes||[]);return cart.lines.edges.find(edge=>{const matchesVariant=edge.node.merchandise.id===variantId;const lineSellingPlanId=edge.node.sellingPlanAllocation?.sellingPlan?.id;const matchesSellingPlan=sellingPlanId?lineSellingPlanId===sellingPlanId:!lineSellingPlanId;const lineAttributesKey=JSON.stringify(edge.node.attributes||[]);return matchesVariant&&matchesSellingPlan&&lineAttributesKey===targetAttributesKey;})?.node;};const recalculateCartTotals=cart=>{const subtotal=cart.lines.edges.reduce((acc,edge)=>{const unit=parseFloat(edge.node.merchandise.price.amount||\"0\");return acc+unit*edge.node.quantity;},0);const currencyCode=cart.cost.subtotalAmount.currencyCode||(cart.lines.edges[0]?.node.merchandise.price.currencyCode)||\"USD\";return{...cart,cost:{...cart.cost,subtotalAmount:{amount:subtotal.toFixed(2),currencyCode},totalAmount:{amount:subtotal.toFixed(2),currencyCode}}};};\nexport const __FramerMetadata__ = {\"exports\":{\"CART_QUERY_KEYS\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useGetCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCartMutations\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCreateCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAddToCart\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Use_cart.map","export const ENV={ENVIRONMENT:{development:\"framer\",staging:\"framer\",production:\"framer\"},BACKEND_URL:{development:\"https://expected-spirit-suse-gates.trycloudflare.com\",staging:\"https://frameship-backend-staging.account-ba7.workers.dev\",production:\"https://frameship-backend.account-ba7.workers.dev\"},BACKEND_API_KEY:{development:\"9692aec79a1b5ad3546e7fa02e1046195a85ff2dee60c1fdecf95d446ff16789\",staging:\"58b5bdccbf6f33a5f381fcfbe85bfa5e242bf5d62fadcb5fc30029290434142d\",production:\"9c170a2a758c830a7b191139343767cea3734f5e8c499e8f21d0dcc3a7979805\"}};\nexport const __FramerMetadata__ = {\"exports\":{\"ENV\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Env.map","import{ENV}from\"https://framerusercontent.com/modules/pKQXtSIFOkUZHJ1ZIH57/BbG3ohT1NiayzpXX4zfz/Env.js\";export async function backendClient(props){const{method,endpoint,params,body}=props;const queryString=new URLSearchParams(params).toString();const url=params?`${ENV.BACKEND_URL.production}${endpoint}?${queryString}`:`${ENV.BACKEND_URL.production}${endpoint}`;const response=await fetch(url,{method,headers:{\"Content-Type\":\"application/json\",\"X-API-Key\":ENV.BACKEND_API_KEY.production},body});if(!response.ok){throw new Error(`Backend API request failed: ${response.status} ${response.statusText}`);}const data=await response.json();return data;}\nexport const __FramerMetadata__ = {\"exports\":{\"backendClient\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{licenseCache}from\"https://framerusercontent.com/modules/U32JRYBcPmO9IzIRP4Rj/lO12g8YP9hkh4UM1N1W3/License_cache.js\";import{getLicenseId}from\"https://framerusercontent.com/modules/TgekT24FCXsp3m1M9KnX/EmTtwh9ht2RFHFqCjQuM/Get_shopify_config.js\";import{backendClient}from\"https://framerusercontent.com/modules/b3e85pFcNFtqTX3XSv9e/qKtWiBdeQaC8qFS656m9/Backend_client.js\";export async function fetchLicense(){// Check if we're in a browser environment\nif(typeof window===\"undefined\"){throw new Error(\"License check requires browser environment\");}// Get license ID from script tag\nconst licenseId=getLicenseId();if(!licenseId){// If no license ID, assume free license\nreturn{free:true,product:null};}const cacheScope={licenseId,hostname:window.location.hostname};const cached=licenseCache.get(cacheScope);if(cached)return cached;// Get current URL\nconst currentUrl=encodeURIComponent(window.location.href);// Make request to backend license endpoint using backendClient\nconst licenseData=await backendClient({method:\"GET\",endpoint:\"/license-check\",params:{url:currentUrl,license_id:licenseId}});// Responses from older backends lack product and must not enter the v2 cache.\nif(typeof licenseData.free===\"boolean\"&&(typeof licenseData.product===\"string\"||licenseData.product===null)){licenseCache.set(cacheScope,licenseData);}return licenseData;}\nexport const __FramerMetadata__ = {\"exports\":{\"fetchLicense\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","import{jsx as _jsx}from\"react/jsx-runtime\";export default function PlusSvg({style}){return /*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"32\",height:\"32\",fill:\"currentColor\",viewBox:\"0 0 256 256\",style:style,children:/*#__PURE__*/_jsx(\"path\",{d:\"M228,128a12,12,0,0,1-12,12H140v76a12,12,0,0,1-24,0V140H40a12,12,0,0,1,0-24h76V40a12,12,0,0,1,24,0v76h76A12,12,0,0,1,228,128Z\"})});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"PlusSvg\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Plus.map","import{jsx as _jsx}from\"react/jsx-runtime\";export default function MinusSvg({style}){return /*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"32\",height:\"32\",fill:\"currentColor\",viewBox:\"0 0 256 256\",style:style,children:/*#__PURE__*/_jsx(\"path\",{d:\"M228,128a12,12,0,0,1-12,12H40a12,12,0,0,1,0-24H216A12,12,0,0,1,228,128Z\"})});}\nexport const __FramerMetadata__ = {\"exports\":{\"default\":{\"type\":\"reactComponent\",\"name\":\"MinusSvg\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Minus.map","import{jsx as _jsx}from\"react/jsx-runtime\";import{forwardRef,useId}from\"react\";import{ControlType,withCSS}from\"framer\";import{SHARED_COLORS,SHARED_STYLES}from\"https://framerusercontent.com/modules/Nrs4jz2AAEOfEZRQEQij/7Ao2SBt1Ssf683HHXgzl/Shared_styles.js\";// ------------------------------------------------------------ //\n// MAIN COMPONENT\n// ------------------------------------------------------------ //\nconst InputComponent=/*#__PURE__*/forwardRef((props,ref)=>{const generatedId=useId();const{inputStyle:inputStyleProp,placeholder=InputContentControlsDefaultValues.placeholder,type=InputContentControlsDefaultValues.inputType,disabled=InputContentControlsDefaultValues.disabled,onChange,value,id,className,...restProps}=props;// Merge inputStyle with defaults to ensure defaults are always applied\nconst inputStyle={...InputStyleControlsDefaultValues.inputStyle,...inputStyleProp||{}};// Merge font with defaults\nconst font={...InputStyleControlsDefaultValues.inputStyle.font,...inputStyleProp?.font||{}};const handleChange=event=>{if(onChange){onChange(event);}};const combinedStyle={// Default input styles\nfontFamily:\"inherit\",fontSize:\"16px\",lineHeight:\"1.4\",width:\"100%\",height:\"100%\",boxSizing:\"border-box\",textAlign:\"center\",// Apply input style controls\n...mapInputControlsToStyle({inputStyle}),// Override with font prop if provided\n...font};// Add CSS custom property for focus outline color if provided\nif(inputStyle?.focusOutlineColor){combinedStyle[\"--focus-outline-color\"]=inputStyle.focusOutlineColor;}return /*#__PURE__*/_jsx(\"input\",{id:id??generatedId,className:[\"frameship-input\",className].filter(Boolean).join(\" \"),ref:ref,type:type,placeholder:placeholder,disabled:disabled,value:value,onChange:handleChange,style:combinedStyle,...restProps});});// ------------------------------------------------------------ //\n// STYLE MAPPER\n// ------------------------------------------------------------ //\nfunction mapInputControlsToStyle(controls){if(!controls)return{};const style={width:\"100%\",boxSizing:\"border-box\"};if(controls.inputStyle?.padding){style.padding=controls.inputStyle.padding;}// Border can be a shorthand string (e.g., \"1px solid #000\") or an object\nif(typeof controls.inputStyle?.border===\"string\"){style.border=controls.inputStyle.border;}else if(controls.inputStyle?.border){const b=controls.inputStyle.border;// Handle Framer's Border control structure\nif(b.borderWidth!==undefined)style.borderWidth=b.borderWidth;if(b.borderStyle!==undefined)style.borderStyle=b.borderStyle;if(b.borderColor!==undefined)style.borderColor=b.borderColor;// Handle shorthand border property if it exists\nif(b.border!==undefined)style.border=b.border;// Handle individual border widths\nif(b.borderTopWidth!==undefined)style.borderTopWidth=b.borderTopWidth;if(b.borderRightWidth!==undefined)style.borderRightWidth=b.borderRightWidth;if(b.borderBottomWidth!==undefined)style.borderBottomWidth=b.borderBottomWidth;if(b.borderLeftWidth!==undefined)style.borderLeftWidth=b.borderLeftWidth;}if(controls.inputStyle?.borderRadius!==undefined){style.borderRadius=controls.inputStyle.borderRadius;}if(controls.inputStyle?.textColor!==undefined){style.color=controls.inputStyle.textColor;}if(controls.inputStyle?.backgroundColor!==undefined){style.backgroundColor=controls.inputStyle.backgroundColor;}if(controls.inputStyle?.textAlign!==undefined){style.textAlign=controls.inputStyle.textAlign;}return style;}// ------------------------------------------------------------ //\n// DEFAULT VALUES\n// ------------------------------------------------------------ //\nexport const InputStyleControlsDefaultValues={inputStyle:{padding:\"8px 12px 8px 12px\",border:{borderWidth:0,borderStyle:\"solid\",borderColor:\"rgba(0, 0, 0, 0.2)\"},borderRadius:SHARED_STYLES.borderRadius,textColor:SHARED_COLORS.foreground,backgroundColor:SHARED_COLORS.background,focusOutlineColor:SHARED_COLORS.backgroundMuted,font:{fontFamily:\"inherit\",fontSize:\"16px\",lineHeight:\"1.2\"},textAlign:\"center\"}};export const InputContentControlsDefaultValues={placeholder:\"\",inputType:\"text\",disabled:false};// ------------------------------------------------------------ //\n// PROPERTY CONTROLS\n// ------------------------------------------------------------ //\nexport const InputStyleControls={inputStyle:{title:\"Input Style\",buttonTitle:\"Padding, Border, Colors, etc.\",type:ControlType.Object,controls:{padding:{// @ts-expect-error - Padding is not a valid control type in this Framer npm version\ntype:ControlType.Padding,title:\"Padding\",defaultValue:InputStyleControlsDefaultValues.inputStyle.padding},border:{// @ts-expect-error - Border is not a valid control type in this Framer npm version\ntype:ControlType.Border,title:\"Border\",defaultValue:{borderWidth:InputStyleControlsDefaultValues.inputStyle.border.borderWidth,borderStyle:InputStyleControlsDefaultValues.inputStyle.border.borderStyle,borderColor:InputStyleControlsDefaultValues.inputStyle.border.borderColor}},borderRadius:{// @ts-expect-error - BorderRadius is not a valid control type in this Framer npm version\ntype:ControlType.BorderRadius,title:\"Border Radius\",defaultValue:InputStyleControlsDefaultValues.inputStyle.borderRadius},textColor:{title:\"Text Color\",type:ControlType.Color,defaultValue:InputStyleControlsDefaultValues.inputStyle.textColor},backgroundColor:{title:\"Background\",type:ControlType.Color,defaultValue:InputStyleControlsDefaultValues.inputStyle.backgroundColor},focusOutlineColor:{title:\"Focus Outline Color\",type:ControlType.Color,defaultValue:InputStyleControlsDefaultValues.inputStyle.focusOutlineColor},font:{title:\"Font\",type:ControlType.Font,controls:\"extended\",defaultFontType:\"sans-serif\",defaultValue:InputStyleControlsDefaultValues.inputStyle.font},textAlign:{title:\"Text Align\",type:ControlType.Enum,options:[\"left\",\"center\",\"right\"],// optionTitles: [\"Left\", \"Center\", \"Right\"],\noptionIcons:[\"align-left\",\"align-center\",\"align-right\"],defaultValue:InputStyleControlsDefaultValues.inputStyle.textAlign,displaySegmentedControl:true}}}};export const InputContentControls={placeholder:{title:\"Placeholder\",type:ControlType.String,defaultValue:InputContentControlsDefaultValues.placeholder},inputType:{title:\"Input Type\",type:ControlType.Enum,options:[\"text\",\"email\",\"password\",\"number\",\"tel\",\"url\"],optionTitles:[\"Text\",\"Email\",\"Password\",\"Number\",\"Phone\",\"URL\"],defaultValue:InputContentControlsDefaultValues.inputType},disabled:{title:\"Disabled\",type:ControlType.Boolean,defaultValue:InputContentControlsDefaultValues.disabled}};// ------------------------------------------------------------ //\n// CSS STYLES FOR NUMBER INPUT SPINNERS\n// ------------------------------------------------------------ //\nconst InputComponentWithCSS=withCSS(InputComponent,[// Hide number input spinner buttons\n`input[type=\"number\"] {\n      -webkit-appearance: none;\n      -moz-appearance: textfield;\n    }`,`input[type=\"number\"]::-webkit-outer-spin-button,\n     input[type=\"number\"]::-webkit-inner-spin-button {\n      -webkit-appearance: none;\n      margin: 0;\n    }`,// Focus outline style\n`.frameship-input:focus, .frameship-input:focus-visible {\n      outline: 2px solid var(--focus-outline-color, #007bff);\n      outline-offset: 0px;\n    }`],\"\");// ------------------------------------------------------------ //\n// EXPORT\n// ------------------------------------------------------------ //\nexport default InputComponentWithCSS;InputComponent.displayName=\"Input\";\nexport const __FramerMetadata__ = {\"exports\":{\"InputContentControlsProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputContentControlsDefaultValues\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputStyleControlsDefaultValues\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputStyleControlsProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputContentControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"InputStyleControls\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"reactComponent\",\"name\":\"InputComponentWithCSS\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Input.map"],"mappings":"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"}