{"version":3,"file":"shared-lib.DwkhZzmh.mjs","names":["Icon","lowercaseIconKeyPairs","iconKeys","useMemo","useRef","useState","HouseFactory","React"],"sources":["https:/framer.com/m/framer/icon-nullstate.js@0.7.0","https:/framer.com/m/phosphor-icons/House.js@0.0.57","https:/framerusercontent.com/modules/Ma20hU0GGRxLxZphbywl/OSpwWF91FHPVFyQJjMHt/utils.js","https:/framerusercontent.com/modules/tYScH7LTqUtz5KUaUAYP/p8dptk4UIND8hbFWz9V7/Phosphor.js","https:/framerusercontent.com/modules/pK4LiPy4c1iwaQVBoXzu/bscHKdKocm8olPiKRUxX/siteMetadata.js"],"sourcesContent":["import { jsx as _jsx } from \"react/jsx-runtime\";\nimport * as React from \"react\";\nexport const containerStyles = {\n    width: \"100%\",\n    height: \"100%\",\n    display: \"flex\",\n    justifyContent: \"center\",\n    alignItems: \"center\"\n};\nconst nullIconStyle = {\n    minWidth: \"10px\",\n    minHeight: \"10px\",\n    maxWidth: \"20px\",\n    maxHeight: \"20px\",\n    width: \"60%\",\n    height: \"60%\"\n};\nconst emptyStateStyle = {\n    ...containerStyles,\n    borderRadius: 6,\n    background: \"rgba(149, 149, 149, 0.1)\",\n    border: \"1px dashed rgba(149, 149, 149, 0.15)\",\n    color: \"#a5a5a5\",\n    flexDirection: \"column\"\n};\nexport const NullState = /*#__PURE__*/ React.forwardRef((_, ref)=>{\n    return(/*#__PURE__*/ _jsx(\"div\", {\n        style: emptyStateStyle,\n        ref: ref\n    }));\n}) /*\n\n<svg\n                xmlns=\"http://www.w3.org/2000/svg\"\n                viewBox=\"0 0 30 30\"\n                style={nullIconStyle}\n            >\n                <path\n                    d=\"M 12.857 0 C 19.958 0 25.714 5.756 25.714 12.857 C 25.714 19.958 19.958 25.714 12.857 25.714 C 5.756 25.714 0 19.958 0 12.857 C 0 5.756 5.756 0 12.857 0 Z\"\n                    fill=\"#FFFFFF\"\n                ></path>\n                <path\n                    d=\"M 20.357 20.357 L 27.857 27.857\"\n                    fill=\"transparent\"\n                    strokeWidth=\"4.28\"\n                    stroke=\"#FFFFFF\"\n                    strokeLinecap=\"round\"\n                ></path>\n                <g transform=\"translate(9.643 6.429)\">\n                    <path\n                        d=\"M 3.214 12.857 L 3.214 12.857\"\n                        fill=\"transparent\"\n                        strokeWidth=\"3.75\"\n                        stroke=\"currentColor\"\n                        strokeLinecap=\"round\"\n                    ></path>\n                    <path\n                        d=\"M 0 3.214 C 0 1.004 1.843 0 3.214 0 C 4.586 0 6.429 0.603 6.429 3.214 C 6.429 5.826 3.214 5.913 3.214 7.232 C 3.214 8.552 3.214 8.571 3.214 8.571\"\n                        fill=\"transparent\"\n                        strokeWidth=\"3.22\"\n                        stroke=\"currentColor\"\n                        strokeLinecap=\"round\"\n                        strokeLinejoin=\"round\"\n                    ></path>\n                </g>\n            </svg>\n            */ ;\n\nexport const __FramerMetadata__ = {\"exports\":{\"containerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"NullState\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}}}}\n//# sourceMappingURL=./nullstate.map","let Component;\nlet IconInner;\nvar Icon = (React) => {\n  if (!Component) {\n    Component = /* @__PURE__ */ new Map([\n      [\n        \"bold\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M222.14,105.85l-80-80a20,20,0,0,0-28.28,0l-80,80A19.86,19.86,0,0,0,28,120v96a12,12,0,0,0,12,12h64a12,12,0,0,0,12-12V164h24v52a12,12,0,0,0,12,12h64a12,12,0,0,0,12-12V120A19.86,19.86,0,0,0,222.14,105.85ZM204,204H164V152a12,12,0,0,0-12-12H104a12,12,0,0,0-12,12v52H52V121.65l76-76,76,76Z\" }))\n      ],\n      [\n        \"duotone\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\n          \"path\",\n          {\n            d: \"M216,120v96H152V152H104v64H40V120a8,8,0,0,1,2.34-5.66l80-80a8,8,0,0,1,11.32,0l80,80A8,8,0,0,1,216,120Z\",\n            opacity: \"0.2\"\n          }\n        ), /* @__PURE__ */ React.createElement(\"path\", { d: \"M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z\" }))\n      ],\n      [\n        \"fill\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M224,120v96a8,8,0,0,1-8,8H160a8,8,0,0,1-8-8V164a4,4,0,0,0-4-4H108a4,4,0,0,0-4,4v52a8,8,0,0,1-8,8H40a8,8,0,0,1-8-8V120a16,16,0,0,1,4.69-11.31l80-80a16,16,0,0,1,22.62,0l80,80A16,16,0,0,1,224,120Z\" }))\n      ],\n      [\n        \"light\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M217.9,110.1l-80-80a14,14,0,0,0-19.8,0l-80,80A13.92,13.92,0,0,0,34,120v96a6,6,0,0,0,6,6h64a6,6,0,0,0,6-6V158h36v58a6,6,0,0,0,6,6h64a6,6,0,0,0,6-6V120A13.92,13.92,0,0,0,217.9,110.1ZM210,210H158V152a6,6,0,0,0-6-6H104a6,6,0,0,0-6,6v58H46V120a2,2,0,0,1,.58-1.42l80-80a2,2,0,0,1,2.84,0l80,80A2,2,0,0,1,210,120Z\" }))\n      ],\n      [\n        \"regular\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M219.31,108.68l-80-80a16,16,0,0,0-22.62,0l-80,80A15.87,15.87,0,0,0,32,120v96a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V160h32v56a8,8,0,0,0,8,8h64a8,8,0,0,0,8-8V120A15.87,15.87,0,0,0,219.31,108.68ZM208,208H160V152a8,8,0,0,0-8-8H104a8,8,0,0,0-8,8v56H48V120l80-80,80,80Z\" }))\n      ],\n      [\n        \"thin\",\n        /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(\"path\", { d: \"M216.49,111.51l-80-80a12,12,0,0,0-17,0l-80,80A12,12,0,0,0,36,120v96a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4V156h40v60a4,4,0,0,0,4,4h64a4,4,0,0,0,4-4V120A12,12,0,0,0,216.49,111.51ZM212,212H156V152a4,4,0,0,0-4-4H104a4,4,0,0,0-4,4v60H44V120a4,4,0,0,1,1.17-2.83l80-80a4,4,0,0,1,5.66,0l80,80A4,4,0,0,1,212,120Z\" }))\n      ]\n    ]);\n    IconInner = React.forwardRef((props, ref) => /* @__PURE__ */ React.createElement(\"g\", { ref, ...props }, Component.get(props.weight)));\n  }\n  return IconInner;\n};\nconst __FramerMetadata__ = {\n  exports: {\n    default: {\n      type: \"reactComponent\",\n      slots: [],\n      annotations: { framerContractVersion: \"1\" }\n    },\n    __FramerMetadata__: { type: \"variable\" }\n  }\n};\nvar House_default = Icon;\nexport {\n  __FramerMetadata__,\n  House_default as default\n};\n","import{useMemo}from\"react\";import{ControlType}from\"framer\";/*\n ** ICON UTILS\n ** Pull as much re-usable logic into here as possible\n ** This will make it easier to replace in all icon components\n */ export const containerStyles={width:\"100%\",height:\"100%\",display:\"flex\",justifyContent:\"center\",alignItems:\"center\"};export const defaultEvents={onClick:{type:ControlType.EventHandler},onMouseDown:{type:ControlType.EventHandler},onMouseUp:{type:ControlType.EventHandler},onMouseEnter:{type:ControlType.EventHandler},onMouseLeave:{type:ControlType.EventHandler}};const findByArray=(arr,search)=>arr.find(a=>a.toLowerCase().includes(search));export function getIconSelection(iconKeys,selectByList,iconSearch=\"\",iconSelection,lowercaseIconKeyPairs){// gotta get the exact match first THEN find\n// have a set and try to access ?\nif(selectByList)return iconSelection;if(iconSearch==null||(iconSearch===null||iconSearch===void 0?void 0:iconSearch.length)===0)return null;const iconSearchTerm=iconSearch.toLowerCase().replace(/-|\\s/g,\"\");var _iconSearchTerm;// check for exact match, otherwise use .find\nconst searchResult=(_iconSearchTerm=lowercaseIconKeyPairs[iconSearchTerm])!==null&&_iconSearchTerm!==void 0?_iconSearchTerm:findByArray(iconKeys,iconSearchTerm);return searchResult;}export function useIconSelection(iconKeys,selectByList,iconSearch=\"\",iconSelection,lowercaseIconKeyPairs){// Clean search term\nconst iconSearchResult=useMemo(()=>{if(iconSearch==null||(iconSearch===null||iconSearch===void 0?void 0:iconSearch.length)===0)return null;const iconSearchTerm=iconSearch.toLowerCase().replace(/-|\\s/g,\"\");var _iconSearchTerm;// check for exact match, otherwise use .find\nconst searchResult=(_iconSearchTerm=lowercaseIconKeyPairs[iconSearchTerm])!==null&&_iconSearchTerm!==void 0?_iconSearchTerm:findByArray(iconKeys,iconSearchTerm);return searchResult;},[iconSelection,iconSearch]);const name=selectByList?iconSelection:iconSearchResult;return name;}\nexport const __FramerMetadata__ = {\"exports\":{\"getIconSelection\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"containerStyles\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useIconSelection\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"defaultEvents\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./utils.map","import{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{useState,useEffect,useRef}from\"react\";import{addPropertyControls,ControlType,RenderTarget}from\"framer\";import{motion}from\"framer-motion\";import{NullState}from\"https://framer.com/m/framer/icon-nullstate.js@0.7.0\";import HouseFactory from\"https://framer.com/m/phosphor-icons/House.js@0.0.57\";import{defaultEvents,useIconSelection}from\"https://framerusercontent.com/modules/Ma20hU0GGRxLxZphbywl/OSpwWF91FHPVFyQJjMHt/utils.js\";const iconKeys=[\"Acorn\",\"AddressBook\",\"AddressBookTabs\",\"AirTrafficControl\",\"Airplane\",\"AirplaneInFlight\",\"AirplaneLanding\",\"AirplaneTakeoff\",\"AirplaneTaxiing\",\"AirplaneTilt\",\"Airplay\",\"Alarm\",\"Alien\",\"AlignBottom\",\"AlignBottomSimple\",\"AlignCenterVertical\",\"AlignLeft\",\"AlignLeftSimple\",\"AlignRight\",\"AlignRightSimple\",\"AlignTop\",\"AlignTopSimple\",\"AmazonLogo\",\"Ambulance\",\"Anchor\",\"AnchorSimple\",\"AndroidLogo\",\"Angle\",\"AngularLogo\",\"Aperture\",\"AppStoreLogo\",\"AppWindow\",\"AppleLogo\",\"ApplePodcastsLogo\",\"ApproximateEquals\",\"Archive\",\"ArchiveBox\",\"ArchiveTray\",\"Armchair\",\"ArrowArcLeft\",\"ArrowArcRight\",\"ArrowBendDownLeft\",\"ArrowBendDownRight\",\"ArrowBendLeftDown\",\"ArrowBendLeftUp\",\"ArrowBendRightDown\",\"ArrowBendRightUp\",\"ArrowBendUpLeft\",\"ArrowBendUpRight\",\"ArrowCircleDown\",\"ArrowCircleDownLeft\",\"ArrowCircleDownRight\",\"ArrowCircleLeft\",\"ArrowCircleRight\",\"ArrowCircleUp\",\"ArrowCircleUpLeft\",\"ArrowCircleUpRight\",\"ArrowClockwise\",\"ArrowDown\",\"ArrowDownLeft\",\"ArrowDownRight\",\"ArrowElbowDownLeft\",\"ArrowElbowDownRight\",\"ArrowElbowLeft\",\"ArrowElbowLeftDown\",\"ArrowElbowLeftUp\",\"ArrowElbowRight\",\"ArrowElbowRightDown\",\"ArrowElbowRightUp\",\"ArrowElbowUpLeft\",\"ArrowElbowUpRight\",\"ArrowFatDown\",\"ArrowFatLeft\",\"ArrowFatLineDown\",\"ArrowFatLineLeft\",\"ArrowFatLineRight\",\"ArrowFatLineUp\",\"ArrowFatLinesDown\",\"ArrowFatLinesLeft\",\"ArrowFatLinesRight\",\"ArrowFatLinesUp\",\"ArrowFatRight\",\"ArrowFatUp\",\"ArrowLeft\",\"ArrowLineDown\",\"ArrowLineDownLeft\",\"ArrowLineDownRight\",\"ArrowLineLeft\",\"ArrowLineRight\",\"ArrowLineUp\",\"ArrowLineUpLeft\",\"ArrowLineUpRight\",\"ArrowRight\",\"ArrowSquareDown\",\"ArrowSquareDownLeft\",\"ArrowSquareDownRight\",\"ArrowSquareIn\",\"ArrowSquareLeft\",\"ArrowSquareOut\",\"ArrowSquareRight\",\"ArrowSquareUp\",\"ArrowSquareUpLeft\",\"ArrowSquareUpRight\",\"ArrowUDownLeft\",\"ArrowUDownRight\",\"ArrowULeftDown\",\"ArrowULeftUp\",\"ArrowURightDown\",\"ArrowURightUp\",\"ArrowUUpLeft\",\"ArrowUUpRight\",\"ArrowUp\",\"ArrowUpLeft\",\"ArrowUpRight\",\"ArrowsClockwise\",\"ArrowsDownUp\",\"ArrowsHorizontal\",\"ArrowsIn\",\"ArrowsInCardinal\",\"ArrowsInLineVertical\",\"ArrowsInSimple\",\"ArrowsLeftRight\",\"ArrowsMerge\",\"ArrowsOut\",\"ArrowsOutCardinal\",\"ArrowsOutSimple\",\"ArrowsSplit\",\"ArrowsVertical\",\"Article\",\"ArticleMedium\",\"ArticleNyTimes\",\"Asclepius\",\"Asterisk\",\"AsteriskSimple\",\"At\",\"Atom\",\"Avocado\",\"Axe\",\"Baby\",\"BabyCarriage\",\"Backpack\",\"Backspace\",\"Bag\",\"BagSimple\",\"Balloon\",\"Bandaids\",\"Bank\",\"Barbell\",\"Barcode\",\"Barn\",\"Barricade\",\"Baseball\",\"BaseballCap\",\"BaseballHelmet\",\"Basket\",\"Basketball\",\"Bathtub\",\"BatteryCharging\",\"BatteryEmpty\",\"BatteryFull\",\"BatteryHigh\",\"BatteryLow\",\"BatteryMedium\",\"BatteryPlus\",\"BatteryPlusVertical\",\"BatteryVerticalEmpty\",\"BatteryVerticalFull\",\"BatteryVerticalHigh\",\"BatteryVerticalLow\",\"BatteryWarning\",\"BeachBall\",\"Beanie\",\"Bed\",\"BeerBottle\",\"BeerStein\",\"BehanceLogo\",\"Bell\",\"BellRinging\",\"BellSimple\",\"BellSimpleRinging\",\"BellSimpleSlash\",\"BellSimpleZ\",\"BellSlash\",\"BellZ\",\"Belt\",\"BezierCurve\",\"Bicycle\",\"Binary\",\"Binoculars\",\"Biohazard\",\"Bird\",\"Blueprint\",\"Bluetooth\",\"BluetoothConnected\",\"BluetoothSlash\",\"BluetoothX\",\"Boat\",\"Bomb\",\"Bone\",\"Book\",\"BookBookmark\",\"BookOpen\",\"BookOpenText\",\"BookOpenUser\",\"BookUser\",\"Bookmark\",\"BookmarkSimple\",\"Bookmarks\",\"BookmarksSimple\",\"Books\",\"Boot\",\"Boules\",\"BoundingBox\",\"BowlFood\",\"BowlSteam\",\"BowlingBall\",\"BoxArrowDown\",\"BoxArrowUp\",\"BoxingGlove\",\"BracketsAngle\",\"BracketsCurly\",\"BracketsRound\",\"BracketsSquare\",\"Brain\",\"Brandy\",\"Bread\",\"Bridge\",\"Briefcase\",\"BriefcaseMetal\",\"Broadcast\",\"Broom\",\"Browser\",\"Browsers\",\"Bug\",\"BugBeetle\",\"BugDroid\",\"Building\",\"BuildingApartment\",\"BuildingOffice\",\"Buildings\",\"Bulldozer\",\"Bus\",\"Butterfly\",\"CableCar\",\"Cactus\",\"Cake\",\"Calculator\",\"Calendar\",\"CalendarBlank\",\"CalendarCheck\",\"CalendarDot\",\"CalendarDots\",\"CalendarHeart\",\"CalendarMinus\",\"CalendarPlus\",\"CalendarSlash\",\"CalendarStar\",\"CalendarX\",\"CallBell\",\"Camera\",\"CameraPlus\",\"CameraRotate\",\"CameraSlash\",\"Campfire\",\"Car\",\"CarBattery\",\"CarProfile\",\"CarSimple\",\"Cardholder\",\"Cards\",\"CardsThree\",\"CaretCircleDoubleUp\",\"CaretCircleDown\",\"CaretCircleLeft\",\"CaretCircleRight\",\"CaretCircleUp\",\"CaretCircleUpDown\",\"CaretDoubleDown\",\"CaretDoubleLeft\",\"CaretDoubleRight\",\"CaretDoubleUp\",\"CaretDown\",\"CaretLeft\",\"CaretLineDown\",\"CaretLineLeft\",\"CaretLineRight\",\"CaretLineUp\",\"CaretRight\",\"CaretUp\",\"CaretUpDown\",\"Carrot\",\"CashRegister\",\"CassetteTape\",\"CastleTurret\",\"Cat\",\"CellSignalFull\",\"CellSignalHigh\",\"CellSignalLow\",\"CellSignalMedium\",\"CellSignalNone\",\"CellSignalSlash\",\"CellSignalX\",\"CellTower\",\"Certificate\",\"Chair\",\"Chalkboard\",\"ChalkboardSimple\",\"ChalkboardTeacher\",\"Champagne\",\"ChargingStation\",\"ChartBar\",\"ChartBarHorizontal\",\"ChartDonut\",\"ChartLine\",\"ChartLineDown\",\"ChartLineUp\",\"ChartPie\",\"ChartPieSlice\",\"ChartPolar\",\"ChartScatter\",\"Chat\",\"ChatCentered\",\"ChatCenteredDots\",\"ChatCenteredSlash\",\"ChatCenteredText\",\"ChatCircle\",\"ChatCircleDots\",\"ChatCircleSlash\",\"ChatCircleText\",\"ChatDots\",\"ChatSlash\",\"ChatTeardrop\",\"ChatTeardropDots\",\"ChatTeardropSlash\",\"ChatTeardropText\",\"ChatText\",\"Chats\",\"ChatsCircle\",\"ChatsTeardrop\",\"Check\",\"CheckCircle\",\"CheckFat\",\"CheckSquare\",\"CheckSquareOffset\",\"Checkerboard\",\"Checks\",\"Cheers\",\"Cheese\",\"ChefHat\",\"Cherries\",\"Church\",\"Cigarette\",\"CigaretteSlash\",\"Circle\",\"CircleDashed\",\"CircleHalf\",\"CircleHalfTilt\",\"CircleNotch\",\"CirclesFour\",\"CirclesThree\",\"CirclesThreePlus\",\"Circuitry\",\"City\",\"Clipboard\",\"ClipboardText\",\"Clock\",\"ClockAfternoon\",\"ClockClockwise\",\"ClockCountdown\",\"ClockUser\",\"ClosedCaptioning\",\"Cloud\",\"CloudArrowDown\",\"CloudArrowUp\",\"CloudCheck\",\"CloudFog\",\"CloudLightning\",\"CloudMoon\",\"CloudRain\",\"CloudSlash\",\"CloudSnow\",\"CloudSun\",\"CloudWarning\",\"CloudX\",\"Clover\",\"Club\",\"CoatHanger\",\"CodaLogo\",\"Code\",\"CodeBlock\",\"CodeSimple\",\"CodepenLogo\",\"CodesandboxLogo\",\"Coffee\",\"CoffeeBean\",\"Coin\",\"CoinVertical\",\"Coins\",\"Columns\",\"ColumnsPlusLeft\",\"ColumnsPlusRight\",\"Command\",\"Compass\",\"CompassRose\",\"CompassTool\",\"ComputerTower\",\"Confetti\",\"ContactlessPayment\",\"Control\",\"Cookie\",\"CookingPot\",\"Copy\",\"CopySimple\",\"Copyleft\",\"Copyright\",\"CornersIn\",\"CornersOut\",\"Couch\",\"CourtBasketball\",\"Cow\",\"CowboyHat\",\"Cpu\",\"Crane\",\"CraneTower\",\"CreditCard\",\"Cricket\",\"Crop\",\"Cross\",\"Crosshair\",\"CrosshairSimple\",\"Crown\",\"CrownCross\",\"CrownSimple\",\"Cube\",\"CubeFocus\",\"CubeTransparent\",\"CurrencyBtc\",\"CurrencyCircleDollar\",\"CurrencyCny\",\"CurrencyDollar\",\"CurrencyDollarSimple\",\"CurrencyEth\",\"CurrencyEur\",\"CurrencyGbp\",\"CurrencyInr\",\"CurrencyJpy\",\"CurrencyKrw\",\"CurrencyKzt\",\"CurrencyNgn\",\"CurrencyRub\",\"Cursor\",\"CursorClick\",\"CursorText\",\"Cylinder\",\"Database\",\"Desk\",\"Desktop\",\"DesktopTower\",\"Detective\",\"DevToLogo\",\"DeviceMobile\",\"DeviceMobileCamera\",\"DeviceMobileSlash\",\"DeviceMobileSpeaker\",\"DeviceRotate\",\"DeviceTablet\",\"DeviceTabletCamera\",\"DeviceTabletSpeaker\",\"Devices\",\"Diamond\",\"DiamondsFour\",\"DiceFive\",\"DiceFour\",\"DiceOne\",\"DiceSix\",\"DiceThree\",\"DiceTwo\",\"Disc\",\"DiscoBall\",\"DiscordLogo\",\"Divide\",\"Dna\",\"Dog\",\"Door\",\"DoorOpen\",\"Dot\",\"DotOutline\",\"DotsNine\",\"DotsSix\",\"DotsSixVertical\",\"DotsThree\",\"DotsThreeCircle\",\"DotsThreeOutline\",\"DotsThreeVertical\",\"Download\",\"DownloadSimple\",\"Dress\",\"Dresser\",\"DribbbleLogo\",\"Drone\",\"Drop\",\"DropHalf\",\"DropHalfBottom\",\"DropSimple\",\"DropSlash\",\"DropboxLogo\",\"Ear\",\"EarSlash\",\"Egg\",\"EggCrack\",\"Eject\",\"EjectSimple\",\"Elevator\",\"Empty\",\"Engine\",\"Envelope\",\"EnvelopeOpen\",\"EnvelopeSimple\",\"EnvelopeSimpleOpen\",\"Equalizer\",\"Equals\",\"Eraser\",\"EscalatorDown\",\"EscalatorUp\",\"Exam\",\"ExclamationMark\",\"Exclude\",\"ExcludeSquare\",\"Export\",\"Eye\",\"EyeClosed\",\"EyeSlash\",\"Eyedropper\",\"EyedropperSample\",\"Eyeglasses\",\"Eyes\",\"FaceMask\",\"FacebookLogo\",\"Factory\",\"Faders\",\"FadersHorizontal\",\"FalloutShelter\",\"Fan\",\"Farm\",\"FastForward\",\"FastForwardCircle\",\"Feather\",\"FediverseLogo\",\"FigmaLogo\",\"File\",\"FileArchive\",\"FileArrowDown\",\"FileArrowUp\",\"FileAudio\",\"FileC\",\"FileCloud\",\"FileCode\",\"FileCpp\",\"FileCss\",\"FileCsv\",\"FileDashed\",\"FileDoc\",\"FileHtml\",\"FileImage\",\"FileIni\",\"FileJpg\",\"FileJs\",\"FileJsx\",\"FileLock\",\"FileMagnifyingGlass\",\"FileMd\",\"FileMinus\",\"FilePdf\",\"FilePlus\",\"FilePng\",\"FilePpt\",\"FilePy\",\"FileRs\",\"FileSql\",\"FileSvg\",\"FileText\",\"FileTs\",\"FileTsx\",\"FileTxt\",\"FileVideo\",\"FileVue\",\"FileX\",\"FileXls\",\"FileZip\",\"Files\",\"FilmReel\",\"FilmScript\",\"FilmSlate\",\"FilmStrip\",\"Fingerprint\",\"FingerprintSimple\",\"FinnTheHuman\",\"Fire\",\"FireExtinguisher\",\"FireSimple\",\"FireTruck\",\"FirstAid\",\"FirstAidKit\",\"Fish\",\"FishSimple\",\"Flag\",\"FlagBanner\",\"FlagBannerFold\",\"FlagCheckered\",\"FlagPennant\",\"Flame\",\"Flashlight\",\"Flask\",\"FlipHorizontal\",\"FlipVertical\",\"FloppyDisk\",\"FloppyDiskBack\",\"FlowArrow\",\"Flower\",\"FlowerLotus\",\"FlowerTulip\",\"FlyingSaucer\",\"Folder\",\"FolderDashed\",\"FolderLock\",\"FolderMinus\",\"FolderNotch\",\"FolderNotchMinus\",\"FolderNotchOpen\",\"FolderNotchPlus\",\"FolderOpen\",\"FolderPlus\",\"FolderSimple\",\"FolderSimpleDashed\",\"FolderSimpleLock\",\"FolderSimpleMinus\",\"FolderSimplePlus\",\"FolderSimpleStar\",\"FolderSimpleUser\",\"FolderStar\",\"FolderUser\",\"Folders\",\"Football\",\"FootballHelmet\",\"Footprints\",\"ForkKnife\",\"FourK\",\"FrameCorners\",\"FramerLogo\",\"Function\",\"Funnel\",\"FunnelSimple\",\"FunnelSimpleX\",\"FunnelX\",\"GameController\",\"Garage\",\"GasCan\",\"GasPump\",\"Gauge\",\"Gavel\",\"Gear\",\"GearFine\",\"GearSix\",\"GenderFemale\",\"GenderIntersex\",\"GenderMale\",\"GenderNeuter\",\"GenderNonbinary\",\"GenderTransgender\",\"Ghost\",\"Gif\",\"Gift\",\"GitBranch\",\"GitCommit\",\"GitDiff\",\"GitFork\",\"GitMerge\",\"GitPullRequest\",\"GithubLogo\",\"GitlabLogo\",\"GitlabLogoSimple\",\"Globe\",\"GlobeHemisphereEast\",\"GlobeHemisphereWest\",\"GlobeSimple\",\"GlobeSimpleX\",\"GlobeStand\",\"GlobeX\",\"Goggles\",\"Golf\",\"GoodreadsLogo\",\"GoogleCardboardLogo\",\"GoogleChromeLogo\",\"GoogleDriveLogo\",\"GoogleLogo\",\"GooglePhotosLogo\",\"GooglePlayLogo\",\"GooglePodcastsLogo\",\"Gps\",\"GpsFix\",\"GpsSlash\",\"Gradient\",\"GraduationCap\",\"Grains\",\"GrainsSlash\",\"Graph\",\"GraphicsCard\",\"GreaterThan\",\"GreaterThanOrEqual\",\"GridFour\",\"GridNine\",\"Guitar\",\"HairDryer\",\"Hamburger\",\"Hammer\",\"Hand\",\"HandArrowDown\",\"HandArrowUp\",\"HandCoins\",\"HandDeposit\",\"HandEye\",\"HandFist\",\"HandGrabbing\",\"HandHeart\",\"HandPalm\",\"HandPeace\",\"HandPointing\",\"HandSoap\",\"HandSwipeLeft\",\"HandSwipeRight\",\"HandTap\",\"HandWaving\",\"HandWithdraw\",\"Handbag\",\"HandbagSimple\",\"HandsClapping\",\"HandsPraying\",\"Handshake\",\"HardDrive\",\"HardDrives\",\"HardHat\",\"Hash\",\"HashStraight\",\"HeadCircuit\",\"Headlights\",\"Headphones\",\"Headset\",\"Heart\",\"HeartBreak\",\"HeartHalf\",\"HeartStraight\",\"HeartStraightBreak\",\"Heartbeat\",\"Hexagon\",\"HighDefinition\",\"HighHeel\",\"Highlighter\",\"HighlighterCircle\",\"Hockey\",\"Hoodie\",\"Horse\",\"Hospital\",\"Hourglass\",\"HourglassHigh\",\"HourglassLow\",\"HourglassMedium\",\"HourglassSimple\",\"HourglassSimpleHigh\",\"HourglassSimpleLow\",\"House\",\"HouseLine\",\"HouseSimple\",\"Hurricane\",\"IceCream\",\"IdentificationBadge\",\"IdentificationCard\",\"Image\",\"ImageBroken\",\"ImageSquare\",\"Images\",\"ImagesSquare\",\"Infinity\",\"Info\",\"InstagramLogo\",\"Intersect\",\"IntersectSquare\",\"IntersectThree\",\"Intersection\",\"Invoice\",\"Island\",\"Jar\",\"JarLabel\",\"Jeep\",\"Joystick\",\"Kanban\",\"Key\",\"KeyReturn\",\"Keyboard\",\"Keyhole\",\"Knife\",\"Ladder\",\"LadderSimple\",\"Lamp\",\"LampPendant\",\"Laptop\",\"Lasso\",\"LastfmLogo\",\"Layout\",\"Leaf\",\"Lectern\",\"Lego\",\"LegoSmiley\",\"LessThan\",\"LessThanOrEqual\",\"LetterCircleH\",\"LetterCircleP\",\"LetterCircleV\",\"Lifebuoy\",\"Lightbulb\",\"LightbulbFilament\",\"Lighthouse\",\"Lightning\",\"LightningA\",\"LightningSlash\",\"LineSegment\",\"LineSegments\",\"LineVertical\",\"Link\",\"LinkBreak\",\"LinkSimple\",\"LinkSimpleBreak\",\"LinkSimpleHorizontal\",\"LinkedinLogo\",\"LinktreeLogo\",\"LinuxLogo\",\"List\",\"ListBullets\",\"ListChecks\",\"ListDashes\",\"ListHeart\",\"ListMagnifyingGlass\",\"ListNumbers\",\"ListPlus\",\"ListStar\",\"Lock\",\"LockKey\",\"LockKeyOpen\",\"LockLaminated\",\"LockLaminatedOpen\",\"LockOpen\",\"LockSimple\",\"LockSimpleOpen\",\"Lockers\",\"Log\",\"MagicWand\",\"Magnet\",\"MagnetStraight\",\"MagnifyingGlass\",\"MagnifyingGlassMinus\",\"MagnifyingGlassPlus\",\"Mailbox\",\"MapPin\",\"MapPinArea\",\"MapPinLine\",\"MapPinPlus\",\"MapPinSimple\",\"MapPinSimpleArea\",\"MapPinSimpleLine\",\"MapTrifold\",\"MarkdownLogo\",\"MarkerCircle\",\"Martini\",\"MaskHappy\",\"MaskSad\",\"MastodonLogo\",\"MathOperations\",\"MatrixLogo\",\"Medal\",\"MedalMilitary\",\"MediumLogo\",\"Megaphone\",\"MegaphoneSimple\",\"MemberOf\",\"Memory\",\"MessengerLogo\",\"MetaLogo\",\"Meteor\",\"Metronome\",\"Microphone\",\"MicrophoneSlash\",\"MicrophoneStage\",\"Microscope\",\"MicrosoftExcelLogo\",\"MicrosoftOutlookLogo\",\"MicrosoftTeamsLogo\",\"MicrosoftWordLogo\",\"Minus\",\"MinusCircle\",\"MinusSquare\",\"Money\",\"MoneyWavy\",\"Monitor\",\"MonitorArrowUp\",\"MonitorPlay\",\"Moon\",\"MoonStars\",\"Moped\",\"MopedFront\",\"Mosque\",\"Motorcycle\",\"Mountains\",\"Mouse\",\"MouseLeftClick\",\"MouseMiddleClick\",\"MouseRightClick\",\"MouseScroll\",\"MouseSimple\",\"MusicNote\",\"MusicNoteSimple\",\"MusicNotes\",\"MusicNotesMinus\",\"MusicNotesPlus\",\"MusicNotesSimple\",\"NavigationArrow\",\"Needle\",\"Network\",\"NetworkSlash\",\"NetworkX\",\"Newspaper\",\"NewspaperClipping\",\"NotEquals\",\"NotMemberOf\",\"NotSubsetOf\",\"NotSupersetOf\",\"Notches\",\"Note\",\"NoteBlank\",\"NotePencil\",\"Notebook\",\"Notepad\",\"Notification\",\"NotionLogo\",\"NuclearPlant\",\"NumberCircleEight\",\"NumberCircleFive\",\"NumberCircleFour\",\"NumberCircleNine\",\"NumberCircleOne\",\"NumberCircleSeven\",\"NumberCircleSix\",\"NumberCircleThree\",\"NumberCircleTwo\",\"NumberCircleZero\",\"NumberEight\",\"NumberFive\",\"NumberFour\",\"NumberNine\",\"NumberOne\",\"NumberSeven\",\"NumberSix\",\"NumberSquareEight\",\"NumberSquareFive\",\"NumberSquareFour\",\"NumberSquareNine\",\"NumberSquareOne\",\"NumberSquareSeven\",\"NumberSquareSix\",\"NumberSquareThree\",\"NumberSquareTwo\",\"NumberSquareZero\",\"NumberThree\",\"NumberTwo\",\"NumberZero\",\"Numpad\",\"Nut\",\"NyTimesLogo\",\"Octagon\",\"OfficeChair\",\"Onigiri\",\"OpenAiLogo\",\"Option\",\"Orange\",\"OrangeSlice\",\"Oven\",\"Package\",\"PaintBrush\",\"PaintBrushBroad\",\"PaintBrushHousehold\",\"PaintBucket\",\"PaintRoller\",\"Palette\",\"Panorama\",\"Pants\",\"PaperPlane\",\"PaperPlaneRight\",\"PaperPlaneTilt\",\"Paperclip\",\"PaperclipHorizontal\",\"Parachute\",\"Paragraph\",\"Parallelogram\",\"Park\",\"Password\",\"Path\",\"PatreonLogo\",\"Pause\",\"PauseCircle\",\"PawPrint\",\"PaypalLogo\",\"Peace\",\"Pen\",\"PenNib\",\"PenNibStraight\",\"Pencil\",\"PencilCircle\",\"PencilLine\",\"PencilRuler\",\"PencilSimple\",\"PencilSimpleLine\",\"PencilSimpleSlash\",\"PencilSlash\",\"Pentagon\",\"Pentagram\",\"Pepper\",\"Percent\",\"Person\",\"PersonArmsSpread\",\"PersonSimple\",\"PersonSimpleBike\",\"PersonSimpleCircle\",\"PersonSimpleHike\",\"PersonSimpleRun\",\"PersonSimpleSki\",\"PersonSimpleSwim\",\"PersonSimpleTaiChi\",\"PersonSimpleThrow\",\"PersonSimpleWalk\",\"Perspective\",\"Phone\",\"PhoneCall\",\"PhoneDisconnect\",\"PhoneIncoming\",\"PhoneList\",\"PhoneOutgoing\",\"PhonePause\",\"PhonePlus\",\"PhoneSlash\",\"PhoneTransfer\",\"PhoneX\",\"PhosphorLogo\",\"Pi\",\"PianoKeys\",\"PicnicTable\",\"PictureInPicture\",\"PiggyBank\",\"Pill\",\"PingPong\",\"PintGlass\",\"PinterestLogo\",\"Pinwheel\",\"Pipe\",\"PipeWrench\",\"PixLogo\",\"Pizza\",\"Placeholder\",\"Planet\",\"Plant\",\"Play\",\"PlayCircle\",\"PlayPause\",\"Playlist\",\"Plug\",\"PlugCharging\",\"Plugs\",\"PlugsConnected\",\"Plus\",\"PlusCircle\",\"PlusMinus\",\"PlusSquare\",\"PokerChip\",\"PoliceCar\",\"Polygon\",\"Popcorn\",\"Popsicle\",\"PottedPlant\",\"Power\",\"Prescription\",\"Presentation\",\"PresentationChart\",\"Printer\",\"Prohibit\",\"ProhibitInset\",\"ProjectorScreen\",\"ProjectorScreenChart\",\"Pulse\",\"PushPin\",\"PushPinSimple\",\"PushPinSimpleSlash\",\"PushPinSlash\",\"PuzzlePiece\",\"QrCode\",\"Question\",\"QuestionMark\",\"Queue\",\"Quotes\",\"Rabbit\",\"Racquet\",\"Radical\",\"Radio\",\"RadioButton\",\"Radioactive\",\"Rainbow\",\"RainbowCloud\",\"Ranking\",\"ReadCvLogo\",\"Receipt\",\"ReceiptX\",\"Record\",\"Rectangle\",\"RectangleDashed\",\"Recycle\",\"RedditLogo\",\"Repeat\",\"RepeatOnce\",\"ReplitLogo\",\"Resize\",\"Rewind\",\"RewindCircle\",\"RoadHorizon\",\"Robot\",\"Rocket\",\"RocketLaunch\",\"Rows\",\"RowsPlusBottom\",\"RowsPlusTop\",\"Rss\",\"RssSimple\",\"Rug\",\"Ruler\",\"Sailboat\",\"Scales\",\"Scan\",\"ScanSmiley\",\"Scissors\",\"Scooter\",\"Screencast\",\"Screwdriver\",\"Scribble\",\"ScribbleLoop\",\"Scroll\",\"Seal\",\"SealCheck\",\"SealPercent\",\"SealQuestion\",\"SealWarning\",\"Seat\",\"Seatbelt\",\"SecurityCamera\",\"Selection\",\"SelectionAll\",\"SelectionBackground\",\"SelectionForeground\",\"SelectionInverse\",\"SelectionPlus\",\"SelectionSlash\",\"Shapes\",\"Share\",\"ShareFat\",\"ShareNetwork\",\"Shield\",\"ShieldCheck\",\"ShieldCheckered\",\"ShieldChevron\",\"ShieldPlus\",\"ShieldSlash\",\"ShieldStar\",\"ShieldWarning\",\"ShippingContainer\",\"ShirtFolded\",\"ShootingStar\",\"ShoppingBag\",\"ShoppingBagOpen\",\"ShoppingCart\",\"ShoppingCartSimple\",\"Shovel\",\"Shower\",\"Shrimp\",\"Shuffle\",\"ShuffleAngular\",\"ShuffleSimple\",\"Sidebar\",\"SidebarSimple\",\"Sigma\",\"SignIn\",\"SignOut\",\"Signature\",\"Signpost\",\"SimCard\",\"Siren\",\"SketchLogo\",\"SkipBack\",\"SkipBackCircle\",\"SkipForward\",\"SkipForwardCircle\",\"Skull\",\"SkypeLogo\",\"SlackLogo\",\"Sliders\",\"SlidersHorizontal\",\"Slideshow\",\"Smiley\",\"SmileyAngry\",\"SmileyBlank\",\"SmileyMeh\",\"SmileyMelting\",\"SmileyNervous\",\"SmileySad\",\"SmileySticker\",\"SmileyWink\",\"SmileyXEyes\",\"SnapchatLogo\",\"Sneaker\",\"SneakerMove\",\"Snowflake\",\"SoccerBall\",\"Sock\",\"SolarPanel\",\"SolarRoof\",\"SortAscending\",\"SortDescending\",\"SoundcloudLogo\",\"Spade\",\"Sparkle\",\"SpeakerHifi\",\"SpeakerHigh\",\"SpeakerLow\",\"SpeakerNone\",\"SpeakerSimpleHigh\",\"SpeakerSimpleLow\",\"SpeakerSimpleNone\",\"SpeakerSimpleSlash\",\"SpeakerSimpleX\",\"SpeakerSlash\",\"SpeakerX\",\"Speedometer\",\"Sphere\",\"Spinner\",\"SpinnerBall\",\"SpinnerGap\",\"Spiral\",\"SplitHorizontal\",\"SplitVertical\",\"SpotifyLogo\",\"SprayBottle\",\"Square\",\"SquareHalf\",\"SquareHalfBottom\",\"SquareLogo\",\"SquareSplitVertical\",\"SquaresFour\",\"Stack\",\"StackMinus\",\"StackOverflowLogo\",\"StackPlus\",\"StackSimple\",\"Stairs\",\"Stamp\",\"StandardDefinition\",\"Star\",\"StarAndCrescent\",\"StarFour\",\"StarHalf\",\"StarOfDavid\",\"SteamLogo\",\"SteeringWheel\",\"Steps\",\"Stethoscope\",\"Sticker\",\"Stool\",\"Stop\",\"StopCircle\",\"Storefront\",\"Strategy\",\"StripeLogo\",\"Student\",\"SubsetOf\",\"SubsetProperOf\",\"Subtitles\",\"SubtitlesSlash\",\"Subtract\",\"SubtractSquare\",\"Subway\",\"Suitcase\",\"SuitcaseRolling\",\"SuitcaseSimple\",\"Sun\",\"SunDim\",\"SunHorizon\",\"Sunglasses\",\"SupersetOf\",\"SupersetProperOf\",\"Swap\",\"Swatches\",\"SwimmingPool\",\"Sword\",\"Synagogue\",\"Syringe\",\"TShirt\",\"Table\",\"Tabs\",\"Tag\",\"TagChevron\",\"TagSimple\",\"Target\",\"Taxi\",\"TeaBag\",\"TelegramLogo\",\"Television\",\"TelevisionSimple\",\"TennisBall\",\"Tent\",\"Terminal\",\"TerminalWindow\",\"TestTube\",\"TextAUnderline\",\"TextAa\",\"TextAlignCenter\",\"TextAlignJustify\",\"TextAlignLeft\",\"TextAlignRight\",\"TextB\",\"TextColumns\",\"TextH\",\"TextHFive\",\"TextHFour\",\"TextHOne\",\"TextHSix\",\"TextHThree\",\"TextHTwo\",\"TextIndent\",\"TextItalic\",\"TextOutdent\",\"TextStrikethrough\",\"TextSubscript\",\"TextSuperscript\",\"TextT\",\"TextTSlash\",\"TextUnderline\",\"Textbox\",\"Thermometer\",\"ThermometerCold\",\"ThermometerHot\",\"ThermometerSimple\",\"ThreadsLogo\",\"ThreeD\",\"ThumbsDown\",\"ThumbsUp\",\"Ticket\",\"TidalLogo\",\"TiktokLogo\",\"Tilde\",\"Timer\",\"TipJar\",\"Tipi\",\"Tire\",\"ToggleLeft\",\"ToggleRight\",\"Toilet\",\"ToiletPaper\",\"Toolbox\",\"Tooth\",\"Tornado\",\"Tote\",\"ToteSimple\",\"Towel\",\"Tractor\",\"Trademark\",\"TrademarkRegistered\",\"TrafficCone\",\"TrafficSign\",\"TrafficSignal\",\"Train\",\"TrainRegional\",\"TrainSimple\",\"Tram\",\"Translate\",\"Trash\",\"TrashSimple\",\"Tray\",\"TrayArrowDown\",\"TrayArrowUp\",\"TreasureChest\",\"Tree\",\"TreeEvergreen\",\"TreePalm\",\"TreeStructure\",\"TreeView\",\"TrendDown\",\"TrendUp\",\"Triangle\",\"TriangleDashed\",\"Trolley\",\"TrolleySuitcase\",\"Trophy\",\"Truck\",\"TruckTrailer\",\"TumblrLogo\",\"TwitchLogo\",\"TwitterLogo\",\"Umbrella\",\"UmbrellaSimple\",\"Union\",\"Unite\",\"UniteSquare\",\"Upload\",\"UploadSimple\",\"Usb\",\"User\",\"UserCheck\",\"UserCircle\",\"UserCircleCheck\",\"UserCircleDashed\",\"UserCircleGear\",\"UserCircleMinus\",\"UserCirclePlus\",\"UserFocus\",\"UserGear\",\"UserList\",\"UserMinus\",\"UserPlus\",\"UserRectangle\",\"UserSound\",\"UserSquare\",\"UserSwitch\",\"Users\",\"UsersFour\",\"UsersThree\",\"Van\",\"Vault\",\"VectorThree\",\"VectorTwo\",\"Vibrate\",\"Video\",\"VideoCamera\",\"VideoCameraSlash\",\"VideoConference\",\"Vignette\",\"VinylRecord\",\"VirtualReality\",\"Virus\",\"Visor\",\"Voicemail\",\"Volleyball\",\"Wall\",\"Wallet\",\"Warehouse\",\"Warning\",\"WarningCircle\",\"WarningDiamond\",\"WarningOctagon\",\"WashingMachine\",\"Watch\",\"WaveSawtooth\",\"WaveSine\",\"WaveSquare\",\"WaveTriangle\",\"Waveform\",\"WaveformSlash\",\"Waves\",\"Webcam\",\"WebcamSlash\",\"WebhooksLogo\",\"WechatLogo\",\"WhatsappLogo\",\"Wheelchair\",\"WheelchairMotion\",\"WifiHigh\",\"WifiLow\",\"WifiMedium\",\"WifiNone\",\"WifiSlash\",\"WifiX\",\"Wind\",\"Windmill\",\"WindowsLogo\",\"Wine\",\"Wrench\",\"X\",\"XCircle\",\"XLogo\",\"XSquare\",\"Yarn\",\"YinYang\",\"YoutubeLogo\"];const moduleBaseUrl=\"https://framer.com/m/phosphor-icons/\";const weightOptions=[\"thin\",\"light\",\"regular\",\"bold\",\"fill\",\"duotone\"];const lowercaseIconKeyPairs=iconKeys.reduce((res,key)=>{res[key.toLowerCase()]=key;return res;},{});/**\n * PHOSPHOR\n *\n * @framerSupportedLayoutWidth fixed\n * @framerSupportedLayoutHeight fixed\n *\n * @framerIntrinsicWidth 24\n * @framerIntrinsicHeight 24\n */export function Icon(props){const{color,selectByList,iconSearch,iconSelection,onClick,onMouseDown,onMouseUp,onMouseEnter,onMouseLeave,weight,mirrored}=props;const isMounted=useRef(false);const iconKey=useIconSelection(iconKeys,selectByList,iconSearch,iconSelection,lowercaseIconKeyPairs);const[SelectedIcon,setSelectedIcon]=useState(iconKey===\"Home\"?HouseFactory(React):null);async function importModule(){// Get the selected module\ntry{const version=\"0.0.57\";const iconModuleUrl=`${moduleBaseUrl}${iconKey}.js@${version}`;const module=await import(/* webpackIgnore: true */iconModuleUrl);if(isMounted.current)setSelectedIcon(module.default(React));}catch(err){if(isMounted.current)setSelectedIcon(null);}}useEffect(()=>{isMounted.current=true;importModule();return()=>{isMounted.current=false;};},[iconKey]);const isOnCanvas=RenderTarget.current()===RenderTarget.canvas;const emptyState=isOnCanvas?/*#__PURE__*/_jsx(NullState,{}):null;return /*#__PURE__*/_jsx(motion.div,{style:{display:\"contents\"},onClick,onMouseEnter,onMouseLeave,onMouseDown,onMouseUp,children:SelectedIcon?/*#__PURE__*/_jsx(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 256 256\",style:{userSelect:\"none\",width:\"100%\",height:\"100%\",display:\"inline-block\",fill:color,color,flexShrink:0,transform:mirrored?\"scale(-1, 1)\":undefined},focusable:\"false\",color:color,children:/*#__PURE__*/_jsx(SelectedIcon,{color:color,weight:weight})}):emptyState});}Icon.displayName=\"Phosphor\";Icon.defaultProps={width:24,height:24,iconSelection:\"House\",iconSearch:\"House\",color:\"#66F\",selectByList:true,weight:\"regular\",mirrored:false};addPropertyControls(Icon,{selectByList:{type:ControlType.Boolean,title:\"Select\",enabledTitle:\"List\",disabledTitle:\"Search\",defaultValue:Icon.defaultProps.selectByList},iconSelection:{type:ControlType.Enum,options:iconKeys,defaultValue:Icon.defaultProps.iconSelection,title:\"Name\",hidden:({selectByList})=>!selectByList,description:\"Find every icon name on the [Phosphor site](https://phosphoricons.com/)\"},iconSearch:{type:ControlType.String,title:\"Name\",placeholder:\"Menu, Wifi, Box…\",hidden:({selectByList})=>selectByList},color:{type:ControlType.Color,title:\"Color\",defaultValue:Icon.defaultProps.color},weight:{type:ControlType.Enum,title:\"Weight\",optionTitles:weightOptions.map(piece=>piece.charAt(0).toUpperCase()+piece.slice(1)),options:weightOptions,defaultValue:Icon.defaultProps.weight},mirrored:{type:ControlType.Boolean,enabledTitle:\"Yes\",disabledTitle:\"No\",defaultValue:Icon.defaultProps.mirrored},...defaultEvents});\nexport const __FramerMetadata__ = {\"exports\":{\"IconProps\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"Icon\":{\"type\":\"reactComponent\",\"name\":\"Icon\",\"slots\":[],\"annotations\":{\"framerIntrinsicWidth\":\"24\",\"framerSupportedLayoutWidth\":\"fixed\",\"framerContractVersion\":\"1\",\"framerSupportedLayoutHeight\":\"fixed\",\"framerIntrinsicHeight\":\"24\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./Phosphor.map","// Generated by Framer (a9375b9)\nexport default function metadata(params,activeLocale){return{customHTMLBodyEnd:'<script type=\"text/javascript\">\\n_linkedin_partner_id = \"7546652\";\\nwindow._linkedin_data_partner_ids = window._linkedin_data_partner_ids || [];\\nwindow._linkedin_data_partner_ids.push(_linkedin_partner_id);\\n</script><script type=\"text/javascript\">\\n(function(l) {\\nif (!l){window.lintrk = function(a,b){window.lintrk.q.push([a,b])};\\nwindow.lintrk.q=[]}\\nvar s = document.getElementsByTagName(\"script\")[0];\\nvar b = document.createElement(\"script\");\\nb.type = \"text/javascript\";b.async = true;\\nb.src = \"https://snap.licdn.com/li.lms-analytics/insight.min.js\";\\ns.parentNode.insertBefore(b, s);})(window.lintrk);\\n</script>\\n<noscript>\\n<img height=\"1\" width=\"1\" style=\"display:none;\" alt=\"\" src=\"https://px.ads.linkedin.com/collect/?pid=7546652&amp;fmt=gif\">\\n</noscript>\\n<img src=\"https://tracker.metricool.com/c3po.jpg?hash=a49ba4fbbc537ba786dd7e3d72d0fabb\">',customHTMLHeadEnd:'<!-- Google tag (gtag.js) -->\\n<script async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=AW-17439936844\"></script>\\n<script>\\n  window.dataLayer = window.dataLayer || [];\\n  function gtag(){dataLayer.push(arguments);}\\n  gtag(\\'js\\', new Date());\\n\\n  gtag(\\'config\\', \\'AW-17439936844\\');\\n</script>\\n<script id=\"vtag-ai-js\" async=\"\" src=\"https://r2.leadsy.ai/tag.js\" data-pid=\"qIQFrsTxLW2ZX6At\" data-version=\"062024\"></script>\\n\\n<!-- Plugin: ced618 --> <script>\\n    (function() {\\n      // Initialize shopXtools with version first\\n      window.shopXtools = window.shopXtools || {};\\n      \\n      window.shopXtools.version = \"2.0\";\\n      \\n      const fcConfigs = {\\n        storefrontDomain: \"updkki-vb.myshopify.com\",\\n        storefrontAccessToken: \"7eacd4f7fc1ef6718c8de1668fdbe669\",\\n      };\\n    \\n      const CURRENCIES = {\"AED\":\"د.إ\",\"AFN\":\"Af\",\"ALL\":\"L\",\"AMD\":\"֏\",\"ANG\":\"ƒ\",\"AOA\":\"Kz\",\"ARS\":\"$\",\"AUD\":\"$\",\"AWG\":\"ƒ\",\"AZN\":\"₼\",\"BAM\":\"KM\",\"BBD\":\"$\",\"BDT\":\"৳\",\"BGN\":\"лв\",\"BHD\":\"د.ب\",\"BIF\":\"FBu\",\"BMD\":\"$\",\"BND\":\"$\",\"BOB\":\"Bs.\",\"BRL\":\"R$\",\"BSD\":\"$\",\"BTN\":\"Nu.\",\"BWP\":\"P\",\"BYN\":\"Br\",\"BZD\":\"BZ$\",\"CAD\":\"$\",\"CDF\":\"FC\",\"CHF\":\"Fr\",\"CLP\":\"$\",\"CNY\":\"\\xa5\",\"COP\":\"$\",\"CRC\":\"₡\",\"CVE\":\"$\",\"CZK\":\"Kč\",\"DJF\":\"Fdj\",\"DKK\":\"kr\",\"DOP\":\"RD$\",\"DZD\":\"د.ج\",\"EGP\":\"\\xa3\",\"ERN\":\"Nfk\",\"ETB\":\"Br\",\"EUR\":\"€\",\"FJD\":\"$\",\"FKP\":\"\\xa3\",\"GBP\":\"\\xa3\",\"GEL\":\"₾\",\"GHS\":\"₵\",\"GIP\":\"\\xa3\",\"GMD\":\"D\",\"GNF\":\"FG\",\"GTQ\":\"Q\",\"GYD\":\"$\",\"HKD\":\"$\",\"HNL\":\"L\",\"HRK\":\"kn\",\"HTG\":\"G\",\"HUF\":\"Ft\",\"IDR\":\"Rp\",\"ILS\":\"₪\",\"INR\":\"₹\",\"IQD\":\"ع.د\",\"IRR\":\"﷼\",\"ISK\":\"kr\",\"JEP\":\"\\xa3\",\"JMD\":\"J$\",\"JOD\":\"د.ا\",\"JPY\":\"\\xa5\",\"KES\":\"KSh\",\"KGS\":\"сом\",\"KHR\":\"៛\",\"KID\":\"$\",\"KMF\":\"CF\",\"KRW\":\"₩\",\"KWD\":\"د.ك\",\"KYD\":\"$\",\"KZT\":\"₸\",\"LAK\":\"₭\",\"LBP\":\"\\xa3\",\"LKR\":\"රු\",\"LRD\":\"$\",\"LSL\":\"L\",\"LTL\":\"Lt\",\"LVL\":\"Ls\",\"LYD\":\"ل.د\",\"MAD\":\"د.م.\",\"MDL\":\"MDL\",\"MGA\":\"Ar\",\"MKD\":\"ден\",\"MMK\":\"Ks\",\"MNT\":\"₮\",\"MOP\":\"MOP$\",\"MRU\":\"UM\",\"MUR\":\"₨\",\"MVR\":\"ރ\",\"MWK\":\"MK\",\"MXN\":\"$\",\"MYR\":\"RM\",\"MZN\":\"MT\",\"NAD\":\"$\",\"NGN\":\"₦\",\"NIO\":\"C$\",\"NOK\":\"kr\",\"NPR\":\"रू\",\"NZD\":\"$\",\"OMR\":\"ر.ع.\",\"PAB\":\"B/.\",\"PEN\":\"S/.\",\"PGK\":\"K\",\"PHP\":\"₱\",\"PKR\":\"₨\",\"PLN\":\"zł\",\"PYG\":\"₲\",\"QAR\":\"ر.ق\",\"RON\":\"lei\",\"RSD\":\"Дин.\",\"RUB\":\"₽\",\"RWF\":\"FRw\",\"SAR\":\"ر.س\",\"SBD\":\"$\",\"SCR\":\"₨\",\"SDG\":\"ج.س.\",\"SEK\":\"kr\",\"SGD\":\"$\",\"SHP\":\"\\xa3\",\"SLL\":\"Le\",\"SOS\":\"Sh\",\"SRD\":\"$\",\"SSP\":\"\\xa3\",\"STN\":\"Db\",\"SYP\":\"\\xa3\",\"SZL\":\"E\",\"THB\":\"฿\",\"TJS\":\"ЅМ\",\"TMT\":\"T\",\"TND\":\"د.ت\",\"TOP\":\"T$\",\"TRY\":\"₺\",\"TTD\":\"TT$\",\"TWD\":\"NT$\",\"TZS\":\"TSh\",\"UAH\":\"₴\",\"UGX\":\"USh\",\"USD\":\"$\",\"UYU\":\"$\",\"UZS\":\"so\\'m\",\"VED\":\"Bs.S.\",\"VES\":\"Bs.\",\"VND\":\"₫\",\"VUV\":\"VT\",\"WST\":\"T\",\"XAF\":\"FCFA\",\"XCD\":\"$\",\"XOF\":\"CFA\",\"XPF\":\"₣\",\"XXX\":\"\",\"YER\":\"﷼\",\"ZAR\":\"R\",\"ZMW\":\"ZK\",\"BYR\":\"Br\",\"STD\":\"Db\",\"VEF\":\"Bs.\"}; \\n      const knownCurrenciesWithCodeAsSymbol = [\"CHF\",\"PLN\",\"SEK\",\"NOK\",\"DKK\",\"CZK\",\"HUF\",\"RON\",\"HRK\",\"BGN\",\"ISK\",\"MDL\",\"BYN\",\"KZT\",\"AMD\",\"UZS\",\"TJS\",\"KGS\",\"MNT\",\"GEL\",\"AFN\",\"MRU\",\"RWF\",\"XAF\",\"XOF\",\"XPF\"]; \\n      // Initialize default currency variables\\n      let defaultCountry = \\'\\';\\n      let defaultCountryCode = \\'\\';\\n      let defaultCurrency = \\'\\';\\n      let defaultCurrencySymbol = \\'\\';\\n\\n      document.addEventListener(\\'checkout__settings-updated\\', (event) => {\\n        const { current } = event.detail;\\n        if (current) {\\n          // Update the global default variables\\n          defaultCountry = current.defaultCountry || \\'\\';\\n          defaultCountryCode = current.defaultCountryCode || \\'\\';\\n          defaultCurrency = current.defaultCurrency || \\'\\';\\n          defaultCurrencySymbol = current.defaultCurrencySymbol || \\'\\';\\n\\n          // Set session storage only if it\\'s empty\\n          if (!localStorage.getItem(\\'selectedCountry\\')) {\\n            localStorage.setItem(\\'selectedCountry\\', defaultCountry);\\n          }\\n          if (!localStorage.getItem(\\'selectedCountryCode\\')) {\\n            localStorage.setItem(\\'selectedCountryCode\\', defaultCountryCode);\\n          }\\n          if (!localStorage.getItem(\\'selectedCurrency\\')) {\\n            localStorage.setItem(\\'selectedCurrency\\', defaultCurrency);\\n          }\\n          if (!localStorage.getItem(\\'selectedCurrencySymbol\\')) {\\n            localStorage.setItem(\\'selectedCurrencySymbol\\', defaultCurrencySymbol);\\n          }\\n\\n          // Clear product cache and refetch products with new currency\\n          localStorage.removeItem(\\'fc_products\\');\\n          localStorage.removeItem(\\'fc_products_timestamp\\');\\n          \\n          // Refetch products with the current country code\\n          const currentCountryCode = localStorage.getItem(\\'selectedCountryCode\\');\\n          if (currentCountryCode) {\\n            fetchProductsByCountry(currentCountryCode).catch(error => {\\n              console.error(\\'Error refetching products after currency change:\\', error);\\n              window.shopXtools.status = \"ready\";\\n            });\\n          }\\n\\n          // console.log(\\'Session storage is set:\\', {\\n          //   defaultCountry,\\n          //   defaultCountryCode,\\n          //   defaultCurrency,\\n          //   defaultCurrencySymbol\\n          // });\\n        }\\n      });\\n      \\n      let domain;\\n      let products = [];\\n    \\n      // ALL QUERIES\\n      const getProductsQuery = `\\n        query GetProducts($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                createdAt\\n                bestSellingRank\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                sellingPlanGroups(first: 1) {\\n                  edges {\\n                    node {\\n                      name\\n                      options {\\n                        name\\n                        values\\n                      }\\n                      sellingPlans(first: 10) {\\n                        edges {\\n                          node {\\n                            id\\n                            name\\n                            description\\n                            recurringDeliveries\\n                            priceAdjustments {\\n                              orderCount\\n                              adjustmentValue {\\n                                __typename\\n                                ... on SellingPlanPercentagePriceAdjustment {\\n                                  adjustmentPercentage\\n                                }\\n                                ... on SellingPlanFixedAmountPriceAdjustment {\\n                                  adjustmentAmount {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                                ... on SellingPlanFixedPriceAdjustment {\\n                                  price {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getProductsQueryBackup = `\\n        query GetProductsBackup($cursor: String) {\\n          products(first: 250, after: $cursor) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                     }\\n                    }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      availableForSale\\n                      quantityAvailable\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n      \\n      const getCartQuery = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            buyerIdentity {\\n              countryCode\\n            }\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  sellingPlanAllocation { \\n                    checkoutChargeAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    sellingPlan {\\n                      id\\n                      name\\n                      description\\n                    }\\n                  }\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  cost {\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            cost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n    \\n      const getCartQueryNoPlans = `\\n        query GetCart($cartId: ID!) {\\n          cart(id: $cartId) {\\n            id\\n            createdAt\\n            updatedAt\\n            checkoutUrl\\n            buyerIdentity {\\n              countryCode\\n            }\\n            lines(first: 250) {\\n              edges {\\n                node {\\n                  id\\n                  quantity\\n                  merchandise {\\n                    ... on ProductVariant {\\n                      id\\n                      title\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      product {\\n                        title\\n                        handle\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                  attributes {\\n                    key\\n                    value\\n                  }\\n                  cost {\\n                    subtotalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                    totalAmount {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            attributes {\\n              key\\n              value\\n            }\\n            cost {\\n              totalAmount {\\n                amount\\n                currencyCode\\n              }\\n              subtotalAmount {\\n                amount\\n                currencyCode\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n\\n      // Get available currencies from the store\\n      const getAvailableCurrencies = `\\n        query GetAvailableCurrencies {\\n          localization {\\n            availableCountries {\\n              currency {\\n                isoCode\\n                name\\n                symbol\\n              }\\n              isoCode\\n              name\\n            }\\n          }\\n        }\\n      `;\\n\\n      // Collection-specific queries\\n      const getProductsQueryByCollection = `\\n        query GetProductsByCollection($cursor: String, $countryCode: CountryCode, $collectionHandle: String!) @inContext(country: $countryCode) {\\n          collection(handle: $collectionHandle) {\\n            products(first: 250, after: $cursor) {\\n              edges {\\n                node {\\n                  id\\n                  title\\n                  vendor\\n                  handle\\n                  productType\\n                  tags\\n                  collections(first: 250) {\\n                    edges {\\n                      node {\\n                        id\\n                        title\\n                        handle\\n                      }\\n                    }\\n                  }\\n                  images(first: 20) {\\n                    edges {\\n                      node {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                    }\\n                  }\\n                  metafields(identifiers: [\\n                    { namespace: \"custom\", key: \"fc_color\" },\\n                    { namespace: \"custom\", key: \"fc_size\" }\\n                  ]) {\\n                    key\\n                    namespace\\n                    value\\n                  }\\n                  sellingPlanGroups(first: 1) {\\n                    edges {\\n                      node {\\n                        name\\n                        options {\\n                          name\\n                          values\\n                        }\\n                        sellingPlans(first: 10) {\\n                          edges {\\n                            node {\\n                              id\\n                              name\\n                              description\\n                              recurringDeliveries\\n                              priceAdjustments {\\n                                orderCount\\n                                adjustmentValue {\\n                                  __typename\\n                                  ... on SellingPlanPercentagePriceAdjustment {\\n                                    adjustmentPercentage\\n                                  }\\n                                  ... on SellingPlanFixedAmountPriceAdjustment {\\n                                    adjustmentAmount {\\n                                      amount\\n                                      currencyCode\\n                                    }\\n                                  }\\n                                  ... on SellingPlanFixedPriceAdjustment {\\n                                    price {\\n                                      amount\\n                                      currencyCode\\n                                    }\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                  options {\\n                    id\\n                    name\\n                    values\\n                  }\\n                  compareAtPriceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  priceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  variants(first: 250) {\\n                    pageInfo {\\n                      hasNextPage\\n                      hasPreviousPage\\n                      endCursor\\n                    }\\n                    edges {\\n                      node {\\n                        id\\n                        image {\\n                          url\\n                          altText\\n                          width\\n                          height\\n                        }\\n                        title\\n                        sku\\n                        quantityAvailable\\n                        availableForSale\\n                        requiresShipping\\n                        selectedOptions {\\n                          name\\n                          value\\n                        }\\n                        price {\\n                          amount\\n                          currencyCode\\n                        }\\n                        compareAtPrice {\\n                          amount\\n                          currencyCode\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              pageInfo {\\n                hasNextPage\\n                endCursor\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n      const getProductsQueryByCollectionBackup = `\\n        query GetProductsByCollectionBackup($cursor: String, $countryCode: CountryCode, $collectionHandle: String!) @inContext(country: $countryCode) {\\n          collection(handle: $collectionHandle) {\\n            products(first: 250, after: $cursor) {\\n              edges {\\n                node {\\n                  id\\n                  title\\n                  vendor\\n                  handle\\n                  productType\\n                  tags\\n                  collections(first: 250) {\\n                    edges {\\n                      node {\\n                        id\\n                        title\\n                        handle\\n                      }\\n                    }\\n                  }\\n                  images(first: 20) {\\n                    edges {\\n                      node {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                    }\\n                  }\\n                  metafields(identifiers: [\\n                    { namespace: \"custom\", key: \"fc_color\" },\\n                    { namespace: \"custom\", key: \"fc_size\" }\\n                  ]) {\\n                    key\\n                    namespace\\n                    value\\n                  }\\n                  options {\\n                    id\\n                    name\\n                    values\\n                  }\\n                  compareAtPriceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  priceRange {\\n                    minVariantPrice {\\n                      amount\\n                      currencyCode\\n                    }\\n                  }\\n                  variants(first: 250) {\\n                    pageInfo {\\n                      hasNextPage\\n                      hasPreviousPage\\n                      endCursor\\n                    }\\n                    edges {\\n                      node {\\n                        id\\n                        image {\\n                          url\\n                          altText\\n                          width\\n                          height\\n                        }\\n                        title\\n                        sku\\n                        quantityAvailable\\n                        availableForSale\\n                        requiresShipping\\n                        selectedOptions {\\n                          name\\n                          value\\n                        }\\n                        price {\\n                          amount\\n                          currencyCode\\n                        }\\n                        compareAtPrice {\\n                          amount\\n                          currencyCode\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n              pageInfo {\\n                hasNextPage\\n                endCursor\\n              }\\n            }\\n          }\\n        }\\n      `;\\n\\n      // Get products by country\\n      const getProductsQueryByCountry = `\\n        query GetProductsByCountry ($cursor: String, $countryCode: CountryCode, $query: String) @inContext(country: $countryCode) {\\n          products(\\n            first: 250, \\n            after: $cursor, \\n            query: $query\\n          ) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                    }\\n                  }\\n                }\\n                metafields(identifiers: [\\n                  { namespace: \"custom\", key: \"fc_color\" },\\n                  { namespace: \"custom\", key: \"fc_size\" }\\n                ]) {\\n                  key\\n                  namespace\\n                  value\\n                }\\n                sellingPlanGroups(first: 1) {\\n                  edges {\\n                    node {\\n                      name\\n                      options {\\n                        name\\n                        values\\n                      }\\n                      sellingPlans(first: 10) {\\n                        edges {\\n                          node {\\n                            id\\n                            name\\n                            description\\n                            recurringDeliveries\\n                            priceAdjustments {\\n                              orderCount\\n                              adjustmentValue {\\n                                __typename\\n                                ... on SellingPlanPercentagePriceAdjustment {\\n                                  adjustmentPercentage\\n                                }\\n                                ... on SellingPlanFixedAmountPriceAdjustment {\\n                                  adjustmentAmount {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                                ... on SellingPlanFixedPriceAdjustment {\\n                                  price {\\n                                    amount\\n                                    currencyCode\\n                                  }\\n                                }\\n                              }\\n                            }\\n                          }\\n                        }\\n                      }\\n                    }\\n                  }\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n\\n      const getProductsQueryByCountryBackup = `\\n        query GetProductsByCountryBackup($cursor: String, $countryCode: CountryCode, $query: String) @inContext(country: $countryCode) {\\n          products(\\n            first: 250, \\n            after: $cursor, \\n            query: $query\\n          ) {\\n            edges {\\n              node {\\n                id\\n                title\\n                vendor\\n                handle\\n                productType\\n                tags\\n                collections(first: 250) {\\n                  edges {\\n                    node {\\n                      id\\n                      title\\n                      handle\\n                    }\\n                  }\\n                }\\n                images(first: 20) {\\n                  edges {\\n                    node {\\n                      url\\n                      altText\\n                      width\\n                      height\\n                    }\\n                  }\\n                }\\n                metafields(identifiers: [\\n                  { namespace: \"custom\", key: \"fc_color\" },\\n                  { namespace: \"custom\", key: \"fc_size\" }\\n                ]) {\\n                  key\\n                  namespace\\n                  value\\n                }\\n                options {\\n                  id\\n                  name\\n                  values\\n                }\\n                compareAtPriceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                priceRange {\\n                  minVariantPrice {\\n                    amount\\n                    currencyCode\\n                  }\\n                }\\n                variants(first: 250) {\\n                  pageInfo {\\n                    hasNextPage\\n                    hasPreviousPage\\n                    endCursor\\n                  }\\n                  edges {\\n                    node {\\n                      id\\n                      image {\\n                        url\\n                        altText\\n                        width\\n                        height\\n                      }\\n                      title\\n                      sku\\n                      quantityAvailable\\n                      availableForSale\\n                      requiresShipping\\n                      selectedOptions {\\n                        name\\n                        value\\n                      }\\n                      price {\\n                        amount\\n                        currencyCode\\n                      }\\n                      compareAtPrice {\\n                        amount\\n                        currencyCode\\n                      }\\n                    }\\n                  }\\n                }\\n              }\\n            }\\n            pageInfo {\\n              hasNextPage\\n              endCursor\\n            }\\n          }\\n        }\\n      `;\\n\\n\\n\\n\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.products = {};\\n      window.shopXtools.fetchCart = null;\\n      window.shopXtools.dispatchEvent = (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          };\\n    \\n      window.shopXtools.handleCartMutation = async (mutation, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const token = fcConfigs.storefrontAccessToken;\\n    \\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": token,\\n            },\\n            body: JSON.stringify({\\n              query: mutation,\\n              variables,\\n            }),\\n          });\\n          const result = await response.json();\\n          if (response.ok && !result.errors) {\\n            // If this is a cart mutation and we have cart data, save it to localStorage\\n            if (result.data && (result.data.cartCreate || result.data.cartLinesAdd || \\n                result.data.cartLinesRemove || result.data.cartLinesUpdate || \\n                result.data.cartBuyerIdentityUpdate)) {\\n              \\n              // Find the cart object in the response\\n              const cartData = result.data.cartCreate?.cart || \\n                              result.data.cartLinesAdd?.cart || \\n                              result.data.cartLinesRemove?.cart || \\n                              result.data.cartLinesUpdate?.cart ||\\n                              result.data.cartBuyerIdentityUpdate?.cart;\\n              \\n              if (cartData) {\\n                //console.log(\"Saving cart data to localStorage:\", cartData);\\n                // Update the global cart object\\n                window.shopXtools.cart = cartData;\\n                // Save to localStorage\\n                localStorage.setItem(\"shopXtools.cart\", JSON.stringify(cartData));\\n                \\n                // If this is a buyerIdentity update with a country code, update currency settings\\n                if (result.data.cartBuyerIdentityUpdate && cartData.buyerIdentity && cartData.buyerIdentity.countryCode) {\\n                  //console.log(\"Country code updated in cart:\", cartData.buyerIdentity.countryCode);\\n                  // Trigger currency settings update\\n                  initializeCurrencySettings();\\n                }\\n              }\\n            }\\n            return result.data;\\n          } else {\\n            console.error(\"GraphQL errors:\", result.errors);\\n            return null;\\n          }\\n        } catch (error) {\\n          console.error(\"Network error:\", error);\\n          return null;\\n        }\\n      };\\n\\n\\n        window.shopXtools.handleTemporaryCartMutation = async (mutation, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const token = fcConfigs.storefrontAccessToken;\\n\\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": token,\\n            },\\n            body: JSON.stringify({\\n              query: mutation,\\n              variables,\\n            }),\\n          });\\n          const result = await response.json();\\n          if (response.ok && !result.errors) {\\n            // If this is a cart mutation and we have cart data, save it to temporaryCart\\n            if (result.data && (result.data.cartCreate || result.data.cartLinesAdd || \\n                result.data.cartLinesRemove || result.data.cartLinesUpdate || \\n                result.data.cartBuyerIdentityUpdate)) {\\n              \\n              // Find the cart object in the response\\n              const cartData = result.data.cartCreate?.cart || \\n                              result.data.cartLinesAdd?.cart || \\n                              result.data.cartLinesRemove?.cart || \\n                              result.data.cartLinesUpdate?.cart ||\\n                              result.data.cartBuyerIdentityUpdate?.cart;\\n              \\n              if (cartData) {\\n                // If this is a buyerIdentity update with a country code, update currency settings\\n                if (result.data.cartBuyerIdentityUpdate && cartData.buyerIdentity && cartData.buyerIdentity.countryCode) {\\n                  // Trigger currency settings update\\n                  initializeCurrencySettings();\\n                }\\n              }\\n            }\\n            return result.data; // Return the temporary cart data\\n          } else {\\n            console.error(\"GraphQL errors:\", result.errors);\\n            return null;\\n          }\\n        } catch (error) {\\n          console.error(\"Network error:\", error);\\n          return null;\\n        }\\n      };\\n    \\n      window.shopXtools.fetchCart = async function(cartId) {\\n        const variables = { cartId: cartId };\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n    \\n        const tryFetchCart = async (query, queryName) => {\\n          try {\\n            const response = await fetch(endpoint, {\\n              method: \"POST\",\\n              headers: {\\n                \"Content-Type\": \"application/json\",\\n                \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n              },\\n              body: JSON.stringify({ query: query, variables }),\\n            });\\n    \\n            const result = await response.json();\\n            if (result.errors) {\\n              console.error(`${queryName} failed with errors:`, result.errors);\\n              return null;\\n            }\\n    \\n            if (result.data && result.data.cart) {\\n              // Save cart data to localStorage\\n              //console.log(\"Saving fetched cart data to localStorage:\", result.data.cart);\\n              window.shopXtools.cart = result.data.cart;\\n              localStorage.setItem(\"shopXtools.cart\", JSON.stringify(result.data.cart));\\n              \\n              // If cart has buyerIdentity with countryCode, update currency settings\\n              if (result.data.cart.buyerIdentity && result.data.cart.buyerIdentity.countryCode) {\\n                //console.log(\"Country code found in fetched cart:\", result.data.cart.buyerIdentity.countryCode);\\n                // Trigger currency settings update\\n                initializeCurrencySettings();\\n              }\\n              \\n              return result.data.cart;\\n            } else {\\n              console.error(`Cart data not found in response from ${queryName}:`, result);\\n              return null;\\n            }\\n          } catch (error) {\\n            console.error(`Network error during ${queryName}:`, error);\\n            return null;\\n          }\\n        };\\n    \\n        let cartData = await tryFetchCart(getCartQuery, \"Primary cart query\");\\n        //console.log(cartData);\\n        if (!cartData) {\\n          //console.log(\"Primary cart query failed, attempting backup cart query...\");\\n          cartData = await tryFetchCart(getCartQueryNoPlans, \"Backup cart query\");\\n        }\\n    \\n        return cartData;\\n      };\\n    \\n      const configValidation = () => {\\n        if (!fcConfigs.storefrontDomain) {\\n          throw Error(\"Storefront domain not found\");\\n        }\\n        if (!fcConfigs.storefrontAccessToken) {\\n          throw Error(\"Storefront access token not found\");\\n        }\\n      };\\n    \\n      const setDomainUrl = () => {\\n        let storeDomain = \"https://test.shopify.com\";\\n        if (fcConfigs.storefrontDomain) {\\n          storeDomain = fcConfigs.storefrontDomain.startsWith(\"http\")\\n            ? fcConfigs.storefrontDomain\\n            : `https://${fcConfigs.storefrontDomain}`;\\n        }\\n        domain = new URL(storeDomain);\\n      };\\n    \\n      const shopify = async (type, query, variables) => {\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        const response = await fetch(endpoint, {\\n          method: \"POST\",\\n          body: JSON.stringify({ [type]: query, variables }),\\n          headers: {\\n            \"Content-Type\": \"application/json\",\\n            \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n          },\\n        });\\n        const json = await response.json();\\n        return json.data;\\n      };\\n    \\n      const setupInitialToolsObject = () => {\\n        if (window.shopXtools) {\\n          return;\\n        }\\n    \\n        window.shopXtools = {\\n          __eventsIdentifier: \"shopX__events__fragment\",\\n          dispatchEvent: (eventType, detail) => {\\n            const newEvent = new CustomEvent(eventType, { detail });\\n            document.dispatchEvent(newEvent);\\n          },\\n          status: \"loading\",\\n          cart: {},\\n          products: [],\\n          getProducts: (_id) => {\\n            if (window.shopXtools.status !== \"ready\") {\\n              console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n              return null;\\n            }\\n            const fullId = _id.startsWith(\\'gid://\\') ? _id : `gid://shopify/Product/${_id}`;\\n            return window.shopXtools.products.find(({ node: product }) => product.id === fullId);\\n          },\\n          getProductsForCountry: (countryCode) => {\\n            if (window.shopXtools.status !== \"ready\") {\\n              console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n              return [];\\n            }\\n            return window.shopXtools.productsWithPrices?.[countryCode] || [];\\n          }\\n        };\\n      };\\n\\n\\n      // Function to fetch available currencies\\n      const fetchAvailableCurrencies = async () => {\\n        // console.log(\"Domain object in fetchAvailableCurrencies:\", domain);\\n        // console.log(\"Domain host:\", domain?.host);\\n\\n        const endpoint = `https://${domain.host}/api/2024-07/graphql.json`;\\n        \\n        try {\\n          const response = await fetch(endpoint, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n            },\\n            body: JSON.stringify({ query: getAvailableCurrencies }),\\n          });\\n\\n          const result = await response.json();\\n          //console.log(\"[CURRENCIES] Result:\", result);\\n          if (result.errors) {\\n            console.error(\"Error fetching currencies:\", result.errors);\\n            return null;\\n          }\\n          const availableCurrenciesAndCountries = result?.data?.localization?.availableCountries;\\n          \\n          //console.log(\"[CURRENCIES] Available Currencies:\", availableCurrenciesAndCountries);\\n          sessionStorage.setItem(\"availableCurrenciesAndCountries\", JSON.stringify(availableCurrenciesAndCountries));\\n          //console.log(sessionStorage.getItem(\"availableCurrenciesAndCountries\")\\n          \\n          return { availableCurrenciesAndCountries };\\n          \\n        } catch (error) {\\n          console.error(\"Error fetching currencies:\", error);\\n          return null;\\n        }\\n      };\\n\\n      // Initialize shopXtools and attach fetchAvailableCurrencies to it\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.fetchAvailableCurrencies = fetchAvailableCurrencies;\\n      \\n      \\n\\n      // Function to initialize currency settings\\n      const initializeCurrencySettings = async () => {\\n        // Ensure domain is initialized before proceeding\\n        if (!domain) {\\n            await setDomainUrl();\\n        }\\n        if (!domain || !domain.host) {\\n            console.error(\"Domain is still undefined after initialization. Cannot fetch currencies.\");\\n            return;\\n        }\\n\\n        // Retrieve available currencies from sessionStorage or fetch if not available\\n        let availableCurrenciesAndCountries = JSON.parse(sessionStorage.getItem(\"availableCurrenciesAndCountries\"));\\n        if (!availableCurrenciesAndCountries) {\\n            const currencies = await fetchAvailableCurrencies();\\n            if (!currencies) {\\n                console.error(\"Failed to fetch available currencies\");\\n                return;\\n            }\\n            availableCurrenciesAndCountries = currencies.availableCurrenciesAndCountries;\\n            sessionStorage.setItem(\"availableCurrenciesAndCountries\", JSON.stringify(availableCurrenciesAndCountries));\\n        }\\n\\n        // Get values from window.__FcCheckoutConfigs\\n        const fcCheckoutConfigs = window.__FcCheckoutConfigs || {};\\n        const configCountry = fcCheckoutConfigs.defaultCountry;\\n        const configCountryCode = fcCheckoutConfigs.defaultCountryCode;\\n        const configCurrency = fcCheckoutConfigs.defaultCurrency;\\n        const configCurrencySymbol = fcCheckoutConfigs.defaultCurrencySymbol;\\n        //console.log(\"configCurrencySymbol\", configCurrencySymbol)\\n        \\n        // Get values from localStorage\\n        let storedCurrency = localStorage.getItem(\"selectedCurrency\");\\n        let storedCountry = localStorage.getItem(\"selectedCountry\");\\n        let storedCountryCode = localStorage.getItem(\"selectedCountryCode\");\\n        let storedCurrencySymbol = localStorage.getItem(\"selectedCurrencySymbol\");\\n\\n        // Get cart data from localStorage\\n        let cart;\\n        try {\\n          const cartData = localStorage.getItem(\"shopXtools.cart\");\\n          if (cartData) {\\n            cart = JSON.parse(cartData);\\n          } else {\\n            cart = {};\\n          }\\n        } catch (error) {\\n          console.error(\"Error parsing cart data:\", error);\\n          cart = {};\\n        }\\n        \\n        const buyerIdentity = cart.buyerIdentity || {};\\n        const countryCodeFromCart = buyerIdentity.countryCode;\\n        window.shopXtools.cart = cart;\\n\\n        // Determine the country code using the priority sequence\\n        let finalCountryCode;\\n        let finalCurrency = null;\\n        let finalCountry = null;\\n        let finalCurrencySymbol = null;\\n        \\n        if (countryCodeFromCart) {\\n          // Priority 1: Use country code from cart\\n          finalCountryCode = countryCodeFromCart;\\n        } else if (storedCountryCode && storedCurrency && storedCountry && storedCurrencySymbol) {\\n          // Priority 2: Use values from localStorage if all are present\\n          finalCountryCode = storedCountryCode;\\n          finalCurrency = storedCurrency;\\n          finalCountry = storedCountry;\\n          finalCurrencySymbol = storedCurrencySymbol;\\n        } else if (configCountryCode && configCurrency && configCountry) {\\n          // Priority 3: Use values from window.__FcCheckoutConfigs if all are present\\n          finalCountryCode = configCountryCode;\\n          finalCurrency = configCurrency;\\n          finalCountry = configCountry;\\n          finalCurrencySymbol = configCurrencySymbol;\\n        } else {\\n          // Priority 4: Use first available country if nothing else is available\\n          if (availableCurrenciesAndCountries && availableCurrenciesAndCountries.length > 0) {\\n            finalCountryCode = availableCurrenciesAndCountries[0].isoCode;\\n          } else {\\n            console.error(\"No country data available\");\\n            return;\\n          }\\n        }\\n        \\n        // If we only have the country code (from cart or when other values are missing),\\n        // find the matching country data to get the currency and country name\\n        if (!finalCurrency || !finalCountry) {\\n          const matchedCountry = availableCurrenciesAndCountries.find(c => c.isoCode === finalCountryCode);\\n          if (matchedCountry) {\\n            finalCurrency = matchedCountry.currency.isoCode;\\n            finalCountry = matchedCountry.name;\\n            //finalCurrencySymbol = CURRENCIES[finalCurrency];\\n            if (knownCurrenciesWithCodeAsSymbol[finalCurrency]){\\n              finalCurrencySymbol = finalCurrency\\n            } else {\\n              finalCurrencySymbol = CURRENCIES[finalCurrency];\\n            }\\n          } else {\\n            // If no match found, use first available country as fallback\\n            if (availableCurrenciesAndCountries && availableCurrenciesAndCountries.length > 0) {\\n              const firstCountry = availableCurrenciesAndCountries[0];\\n              finalCountryCode = firstCountry.isoCode;\\n              finalCurrency = firstCountry.currency.isoCode;\\n              finalCountry = firstCountry.name;\\n              //finalCurrencySymbol = CURRENCIES[finalCurrency];\\n              if (knownCurrenciesWithCodeAsSymbol[finalCurrency]){\\n                finalCurrencySymbol = finalCurrency\\n              } else {\\n                finalCurrencySymbol = CURRENCIES[finalCurrency];\\n              }\\n            } else {\\n              console.error(\"Cannot determine country settings\");\\n              return;\\n            }\\n          }\\n        }\\n\\n        // Update localStorage with the final values\\n        localStorage.setItem(\"selectedCountry\", finalCountry);\\n        localStorage.setItem(\"selectedCurrency\", finalCurrency);\\n        localStorage.setItem(\"selectedCountryCode\", finalCountryCode);\\n        localStorage.setItem(\"selectedCurrencySymbol\", finalCurrencySymbol);\\n\\n        // Also update window.shopXtools for global consistency\\n        window.shopXtools.defaultCurrency = finalCurrency;\\n        window.shopXtools.defaultCountry = finalCountry;\\n        window.shopXtools.defaultCountryCode = finalCountryCode;\\n        window.shopXtools.defaultCurrencySymbol = finalCurrencySymbol;\\n\\n        // Dispatch an event to notify the application of currency settings changes\\n        const currencyEvent = new CustomEvent(\\'currency__settings-updated\\', {\\n          detail: {\\n            previous: {\\n              defaultCountry: storedCountry,\\n              defaultCountryCode: storedCountryCode,\\n              defaultCurrency: storedCurrency,\\n              defaultCurrencySymbol: storedCurrencySymbol\\n            },\\n            current: {\\n              defaultCountry: finalCountry,\\n              defaultCountryCode: finalCountryCode,\\n              defaultCurrency: finalCurrency,\\n              defaultCurrencySymbol: finalCurrencySymbol\\n            }\\n          }\\n        });\\n        document.dispatchEvent(currencyEvent);\\n      };\\n\\n\\n      const handleProductData = (newProducts, countryCode, isInitialLoad = false, cursor = null) => {\\n        try {\\n          // Transform products into minimal format with only essential data\\n          const transformedProducts = newProducts.map(({ node }) => {\\n            // For initial load, include minimal but sufficient variant data\\n            if (isInitialLoad) {\\n              return {\\n                node: {\\n                  id: node.id,\\n                  handle: node.handle,\\n                  title: node.title,\\n                  priceRange: node.priceRange,\\n                  metafields: node.metafields,\\n                  variants: { \\n                    edges: node.variants?.edges?.map(({ node: variant }) => ({\\n                      node: {\\n                        id: variant.id,\\n                        title: variant.title,\\n                        price: variant.price,\\n                        availableForSale: variant.availableForSale,\\n                        selectedOptions: variant.selectedOptions || [],\\n                        quantityAvailable: variant.quantityAvailable || 0,\\n                        compareAtPrice: variant.compareAtPrice\\n                      }\\n                    })) || []\\n                  },\\n                  options: node.options || []\\n                }\\n              };\\n            }\\n\\n            // For complete data load, include all necessary fields\\n            return {\\n              node: {\\n                id: node.id,\\n                handle: node.handle,\\n                title: node.title,\\n                vendor: node.vendor,\\n                productType: node.productType,\\n                tags: node.tags,\\n                metafields: node.metafields,\\n                collections: Array.isArray(node.collections)\\n                  ? node.collections // already transformed\\n                  : (node.collections?.edges || []).map(edge => ({\\n                    node: {\\n                      id: edge.node.id,\\n                      handle: edge.node.handle,\\n                      title: edge.node.title\\n                    }\\n                })),\\n                variants: { \\n                  edges: (node.variants?.edges || []).map(({ node: variant }) => ({\\n                    node: {\\n                      id: variant.id,\\n                      title: variant.title,\\n                      price: variant.price,\\n                      availableForSale: variant.availableForSale,\\n                      selectedOptions: variant.selectedOptions || [],\\n                      quantityAvailable: variant.quantityAvailable || 0,\\n                      compareAtPrice: variant.compareAtPrice,\\n                      requiresShipping: variant.requiresShipping\\n                    }\\n                  }))\\n                },\\n                options: node.options || [],\\n                priceRange: node.priceRange,\\n                compareAtPriceRange: node.compareAtPriceRange,\\n                sellingPlanGroups: node.sellingPlanGroups ? {\\n                  edges: (node.sellingPlanGroups.edges || []).map(({ node: sellingPlanGroup }) => ({\\n                    node: {\\n                      name: sellingPlanGroup.name,\\n                      options: sellingPlanGroup.options,\\n                      sellingPlans: {\\n                        edges: (sellingPlanGroup.sellingPlans.edges || []).map(({ node: sellingPlan }) => ({\\n                          node: {\\n                            id: sellingPlan.id,\\n                            name: sellingPlan.name,\\n                            description: sellingPlan.description,\\n                            recurringDeliveries: sellingPlan.recurringDeliveries,\\n                            priceAdjustments: sellingPlan.priceAdjustments\\n                          }\\n                        }))\\n                      }\\n                    }\\n                  }))\\n                } : null\\n              }\\n            };\\n          });\\n\\n          // Always accumulate products, whether initial load or not\\n          if (!cursor) {\\n            // If this is the first page, start fresh\\n            products = transformedProducts;\\n          } else {\\n            // For subsequent pages, append to existing products\\n            products = [...products, ...transformedProducts];\\n          }\\n\\n          // Store products in smaller chunks to avoid quota issues\\n          const CHUNK_SIZE = 50;\\n          const chunks = [];\\n          for (let i = 0; i < products.length; i += CHUNK_SIZE) {\\n            chunks.push(products.slice(i, i + CHUNK_SIZE));\\n          }\\n\\n          let storageQuotaExceeded = false;\\n\\n          // Update storage with all chunks\\n          try {\\n            // Only attempt to clear old chunks if we haven\\'t hit quota yet\\n            if (!storageQuotaExceeded) {\\n              try {\\n                const oldMetadata = JSON.parse(sessionStorage.getItem(\\'fc_products_\\' + countryCode + \\'_metadata\\') || \\'{}\\');\\n                if (oldMetadata.totalChunks) {\\n                  for (let i = 0; i < oldMetadata.totalChunks; i++) {\\n                    sessionStorage.removeItem(\\'fc_products_\\' + countryCode + \\'_chunk_\\' + i);\\n                  }\\n                }\\n              } catch (error) {\\n                console.warn(\\'Storage quota exceeded during cleanup, switching to in-memory only\\');\\n                storageQuotaExceeded = true;\\n              }\\n            }\\n\\n            // Only attempt to store new chunks if we haven\\'t hit quota yet\\n            if (!storageQuotaExceeded) {\\n              for (let i = 0; i < chunks.length; i++) {\\n                const chunkKey = \\'fc_products_\\' + countryCode + \\'_chunk_\\' + i;\\n                try {\\n                  sessionStorage.setItem(chunkKey, JSON.stringify(chunks[i]));\\n                } catch (storageError) {\\n                  console.warn(\\'Storage quota exceeded at chunk\\', i, \\', switching to in-memory only\\');\\n                  storageQuotaExceeded = true;\\n                  break;\\n                }\\n              }\\n\\n              // Only attempt to update metadata if we haven\\'t hit quota\\n              if (!storageQuotaExceeded) {\\n                const metadata = {\\n                  totalChunks: chunks.length,\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: !cursor\\n                };\\n                try {\\n                  sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n                } catch (error) {\\n                  console.warn(\\'Storage quota exceeded during metadata update\\');\\n                  storageQuotaExceeded = true;\\n                }\\n              }\\n            }\\n          } catch (error) {\\n            console.warn(\\'Storage operations failed, proceeding with in-memory only\\');\\n            storageQuotaExceeded = true;\\n          }\\n\\n          // Update global references with complete product list (always do this regardless of storage status)\\n          window.shopXtools.productsWithPrices = { [countryCode]: products };\\n          window.shopXtools.products = products;\\n\\n          // Set status and dispatch events\\n          window.shopXtools.status = \"ready\";\\n          window.shopXtools.dispatchEvent(\\'data__products-ready\\', { \\n            products: window.shopXtools.products,\\n            isInitialLoad\\n          });\\n\\n          // Start fetching complete data immediately after displaying prices\\n          if (isInitialLoad && !cursor) {\\n            const { vendor, collection, productType, tag } = window.shopXtools.lastAppliedFilters || {};\\n            setTimeout(() => {\\n              fetchCompleteProductData(countryCode, vendor, collection, productType, tag);\\n            }, 0);\\n          }\\n\\n          //console.log(\\'[Products] Total products loaded:\\', products.length);\\n        } catch (error) {\\n          console.error(\\'Error in handleProductData:\\', error);\\n          window.shopXtools.status = \"error\";\\n        }\\n      };\\n\\n      // Client-side filtering function to ensure filters are applied correctly\\n      const filterProductsClientSide = (products, filters) => {\\n        const { vendor, collection, productType, tag } = filters;\\n        \\n        return products.filter(({ node }) => {\\n          // Filter by vendor if specified\\n          if (vendor && node.vendor !== vendor) {\\n            return false;\\n          }\\n          \\n          // Filter by collection if specified\\n          if (collection) {\\n            // Check if the product belongs to the specified collection\\n            const collections = node.collections || [];\\n            const matchingCollection = collections.find(col => \\n              col.handle === collection.toLowerCase() || \\n              col.title === collection\\n            );\\n            if (!matchingCollection) {\\n              return false;\\n            }\\n          }\\n          \\n          // Filter by product type if specified\\n          if (productType && node.productType !== productType) {\\n            return false;\\n          }\\n          \\n          // Filter by tag if specified\\n          if (tag) {\\n            const tags = node.tags || [];\\n            if (!tags.includes(tag)) {\\n              return false;\\n            }\\n          }\\n          \\n          return true;\\n        });\\n      };\\n\\n      const fetchProductsByCountry = async (countryCode, cursor = null, vendor = null, collection = null, productType = null, tag = null) => {\\n        // Store filter information if this is a first page request\\n        if (!cursor) {\\n          const newFilters = { vendor, collection, productType, tag };\\n          window.shopXtools.lastAppliedFilters = newFilters;\\n          \\n          // Store filters in sessionStorage\\n          try {\\n            const storedFilters = JSON.parse(sessionStorage.getItem(\\'fc_filters\\') || \\'{}\\');\\n            const filtersChanged = JSON.stringify(storedFilters) !== JSON.stringify(newFilters);\\n            \\n            if (filtersChanged) {\\n              sessionStorage.setItem(\\'fc_filters\\', JSON.stringify(newFilters));\\n              // Force refresh from Shopify if filters changed\\n              products = [];\\n              return fetchProductsByCountry(countryCode, null, vendor, collection, productType, tag);\\n            }\\n          } catch (error) {\\n            console.error(\\'Error handling filter storage:\\', error);\\n          }\\n          \\n          products = [];\\n          \\n          // Try to load and display cached data immediately\\n          try {\\n            const metadata = JSON.parse(sessionStorage.getItem(\\'fc_products_\\' + countryCode + \\'_metadata\\') || \\'{}\\');\\n            if (metadata.totalChunks > 0) {\\n              let cachedProducts = [];\\n              for (let i = 0; i < metadata.totalChunks; i++) {\\n                const chunkKey = \\'fc_products_\\' + countryCode + \\'_chunk_\\' + i;\\n                const chunk = JSON.parse(sessionStorage.getItem(chunkKey) || \\'[]\\');\\n                cachedProducts = cachedProducts.concat(chunk);\\n              }\\n              \\n              if (cachedProducts.length > 0) {\\n                //console.log(\\'[Cache] Displaying\\', cachedProducts.length, \\'cached products\\');\\n                handleProductData(cachedProducts, countryCode, false, cursor);\\n                \\n                // If cache is older than 1 minute or incomplete, refresh in background\\n                if (Date.now() - metadata.lastUpdated > 60000 || !metadata.isComplete) {\\n                  //console.log(\\'[Cache] Starting background refresh\\');\\n                } else {\\n                  //console.log(\\'[Cache] Cache is fresh and complete, skipping refresh\\');\\n                  return;\\n                }\\n              }\\n            }\\n          } catch (error) {\\n            console.error(\\'Error loading from cache:\\', error);\\n          }\\n        }\\n\\n        try {\\n          let response;\\n          let variables;\\n          let query;\\n\\n          // Use collection-specific query structure if a collection filter is provided\\n          if (collection) {\\n            query = getProductsQueryByCollection;\\n            variables = {\\n              countryCode,\\n              collectionHandle: collection.toLowerCase(),\\n              ...(cursor && { cursor })\\n            };\\n            \\n            //console.log(\"[FILTER] Using collection-specific query for:\", collection);\\n          } else {\\n            query = getProductsQueryByCountry;\\n            \\n            // Build query string for non-collection filters\\n            const queryParts = [];\\n            if (vendor) queryParts.push(`vendor:${vendor}`);\\n            if (productType) queryParts.push(`product_type:${productType}`);\\n            if (tag) queryParts.push(`tag:${tag}`);\\n            const queryString = queryParts.length > 0 ? queryParts.join(\" AND \") : null;\\n\\n            variables = {\\n              countryCode,\\n              ...(cursor && { cursor }),\\n              ...(queryString && { query: queryString })\\n            };\\n          }\\n\\n          response = await fetch(`https://${domain.host}/api/2024-07/graphql.json`, {\\n            method: \"POST\",\\n            headers: {\\n              \"Content-Type\": \"application/json\",\\n              \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n            },\\n            body: JSON.stringify({ query, variables }),\\n          });\\n\\n          const result = await response.json();\\n          \\n          if (collection) {\\n            // Handle collection-specific response structure\\n            if (!result.errors && result.data?.collection?.products) {\\n              const newProducts = result.data.collection.products.edges || [];\\n              handleProductData(newProducts, countryCode, true, cursor);\\n\\n              // Continue pagination if there are more products\\n              const pageInfo = result.data.collection.products.pageInfo;\\n              if (pageInfo.hasNextPage && pageInfo.endCursor) {\\n                await fetchProductsByCountry(countryCode, pageInfo.endCursor, vendor, collection, productType, tag);\\n              } else {\\n                // All products have been fetched, update the metadata\\n                const metadata = {\\n                  totalChunks: Math.ceil(products.length / 50),\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: true\\n                };\\n                sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n              }\\n            } else if (result.errors) {\\n              console.error(\\'Error fetching collection products:\\', result.errors);\\n              window.shopXtools.status = \"error\";\\n            } else if (!result.data?.collection) {\\n              console.error(\\'Collection not found:\\', collection);\\n              window.shopXtools.status = \"ready\";\\n              window.shopXtools.products = [];\\n              window.shopXtools.dispatchEvent(\\'data__products-ready\\', { \\n                products: [],\\n                isInitialLoad: false\\n              });\\n            }\\n          } else {\\n            // Handle regular product query response\\n            if (!result.errors && result.data?.products) {\\n              const newProducts = result.data.products.edges || [];\\n              handleProductData(newProducts, countryCode, true, cursor);\\n\\n              // Continue pagination if there are more products\\n              const pageInfo = result.data.products.pageInfo;\\n              if (pageInfo.hasNextPage && pageInfo.endCursor) {\\n                await fetchProductsByCountry(countryCode, pageInfo.endCursor, vendor, collection, productType, tag);\\n              } else {\\n                // All products have been fetched, update the metadata\\n                const metadata = {\\n                  totalChunks: Math.ceil(products.length / 50),\\n                  totalProducts: products.length,\\n                  lastUpdated: Date.now(),\\n                  isComplete: true\\n                };\\n                sessionStorage.setItem(\\'fc_products_\\' + countryCode + \\'_metadata\\', JSON.stringify(metadata));\\n              }\\n            }\\n          }\\n        } catch (error) {\\n          console.error(\\'Error fetching products:\\', error);\\n          window.shopXtools.status = \"error\";\\n        }\\n      };\\n\\n      // Function to fetch complete product data in the background\\n      const fetchCompleteProductData = async (countryCode, vendor, collection, productType, tag) => {\\n        let cursor = null;\\n        let allProducts = [];\\n\\n        try {\\n            while (true) {\\n                let response;\\n                let variables;\\n                let query;\\n\\n                // Use collection-specific query for collections, matching the main fetch function\\n                if (collection) {\\n                    query = getProductsQueryByCollection;\\n                    variables = {\\n                        countryCode,\\n                        collectionHandle: collection.toLowerCase(),\\n                        ...(cursor && { cursor })\\n                    };\\n                } else {\\n                    // For non-collection filters, use regular query\\n                    query = getProductsQueryByCountry;\\n                    \\n                    // Build query parts\\n                    const queryParts = [];\\n                    if (vendor) queryParts.push(`vendor:${vendor}`);\\n                    if (productType) queryParts.push(`product_type:${productType}`);\\n                    if (tag) queryParts.push(`tag:${tag}`);\\n                    const queryString = queryParts.length > 0 ? queryParts.join(\" AND \") : null;\\n                    \\n                    variables = {\\n                        countryCode,\\n                        cursor,\\n                        ...(queryString && { query: queryString })\\n                    };\\n                }\\n\\n                response = await fetch(`https://${domain.host}/api/2024-07/graphql.json`, {\\n                    method: \"POST\",\\n                    headers: {\\n                        \"Content-Type\": \"application/json\",\\n                        \"X-Shopify-Storefront-Access-Token\": fcConfigs.storefrontAccessToken,\\n                    },\\n                    body: JSON.stringify({ query, variables }),\\n                });\\n\\n                const result = await response.json();\\n                \\n                if (collection) {\\n                    // Handle collection response structure\\n                    if (!result.errors && result.data?.collection?.products) {\\n                        const newProducts = result.data.collection.products.edges || [];\\n                        allProducts = [...allProducts, ...newProducts];\\n\\n                        // Update data every 500 products or when complete\\n                        if (allProducts.length >= 500 || !result.data.collection.products.pageInfo.hasNextPage) {\\n                            handleProductData(allProducts, countryCode, false, cursor);\\n                            allProducts = [];\\n                        }\\n\\n                        if (!result.data.collection.products.pageInfo.hasNextPage) {\\n                            break;\\n                        }\\n                        cursor = result.data.collection.products.pageInfo.endCursor;\\n                    } else {\\n                        console.error(\\'Error fetching complete collection data:\\', result.errors);\\n                        break;\\n                    }\\n                } else {\\n                    // Handle regular product response\\n                    if (!result.errors && result.data?.products) {\\n                        const newProducts = result.data.products.edges || [];\\n                        allProducts = [...allProducts, ...newProducts];\\n\\n                        // Update data every 500 products or when complete\\n                        if (allProducts.length >= 500 || !result.data.products.pageInfo.hasNextPage) {\\n                            handleProductData(allProducts, countryCode, false, cursor);\\n                            allProducts = [];\\n                        }\\n\\n                        if (!result.data.products.pageInfo.hasNextPage) {\\n                            break;\\n                        }\\n                        cursor = result.data.products.pageInfo.endCursor;\\n                    } else {\\n                        console.error(\\'Error fetching complete product data:\\', result.errors);\\n                        break;\\n                    }\\n                }\\n            }\\n        } catch (error) {\\n            console.error(\\'Error in background data fetch:\\', error);\\n        }\\n      };\\n\\n      // Initialize shopXtools and attach fetchProductsByCountry to it\\n      window.shopXtools = window.shopXtools || {};\\n      window.shopXtools.fetchProductsByCountry = fetchProductsByCountry;\\n\\n      setupInitialToolsObject();\\n      configValidation();\\n      setDomainUrl();\\n      \\n  const validateDomainForFreePlan = () => {\\n    if (\"basic\" === \"free\") {\\n      const isFramerSubdomain = domain.host.includes(\\'framer.app\\');\\n      if (isFramerSubdomain) {\\n        console.error(\\'Free plan users can only use a Framer subdomain\\');\\n        return false;\\n      }\\n    }\\n    return true;\\n  };\\n\\n  if (!validateDomainForFreePlan()) {\\n    //console.log(\\'Domain validation failed, products will not be fetched\\');\\n    return;\\n  }\\n\\n      \\n  if (\"basic\" === \"free\") {\\n    // Wait for DOM to be ready\\n    const insertWidget = () => {\\n      const widget = document.createElement(\\'div\\');\\n      widget.innerHTML = `\\n        <div \\n          style=\"\\n            position: fixed;\\n            bottom: 60px;\\n            right: 20px;\\n            border-radius: 10px;\\n            overflow: hidden;\\n            z-index: 999999;\\n            transition: opacity 0.3s ease;\\n            box-shadow:\\n              rgba(0, 0, 0, 0.26) 0px 0.636953px 1.14652px -1.125px, \\n              rgba(0, 0, 0, 0.24) 0px 1.9316px 3.47689px -2.25px, \\n              rgba(0, 0, 0, 0.192) 0px 5.10612px 9.19102px -3.375px, \\n              rgba(0, 0, 0, 0.03) 0px 16px 28.8px -4.5px;\\n            width: 142px;\\n            background: white;\\n          \"\\n          onmouseover=\"this.style.opacity = \\'1\\'\"\\n          onmouseout=\"this.style.opacity = \\'1\\'\"\\n        >\\n          <a \\n            href=\"https://framercommerce.com/?utm_source=framer&utm_medium=badge&utm_campaign=free_tier\" \\n            target=\"_blank\" \\n            style=\"\\n              display: block;\\n              line-height: 0;\\n            \"\\n          >\\n            <img \\n              src=\"https://www.dropbox.com/scl/fi/liuwd84g4nioi6fmu93e1/fc-free-badge.png?rlkey=yearpo3rkxqalq4mtmabujdk4&raw=1\" \\n              alt=\"Framer Commerce\"\\n              width=\"142\"\\n              height=\"36\"\\n              style=\"display: block; width: 100%; height: auto;\"\\n            />\\n          </a>\\n        </div>\\n      `;\\n\\n      // Check if widget already exists\\n      const existingWidget = document.querySelector(\\'[data-framercommerce-widget]\\');\\n      if (!existingWidget) {\\n        widget.setAttribute(\\'data-framercommerce-widget\\', \\'true\\');\\n        document.body.appendChild(widget);\\n      }\\n    };\\n\\n    // If DOM is already loaded\\n    if (document.readyState === \\'complete\\' || document.readyState === \\'interactive\\') {\\n      setTimeout(insertWidget, 1);\\n    } else {\\n      // Wait for DOM to be ready\\n      document.addEventListener(\\'DOMContentLoaded\\', insertWidget);\\n    }\\n\\n    // Backup in case DOMContentLoaded doesn\\'t fire\\n    window.addEventListener(\\'load\\', insertWidget);\\n  }\\n\\n\\n      // Initialize cart from localStorage\\n      const initializeCartFromLocalStorage = () => {\\n        try {\\n          const cartData = localStorage.getItem(\"shopXtools.cart\");\\n          if (cartData) {\\n            const cart = JSON.parse(cartData);\\n            window.shopXtools.cart = cart;\\n            \\n            // If cart has buyerIdentity with countryCode, we\\'ll use it during currency initialization\\n            if (cart.buyerIdentity && cart.buyerIdentity.countryCode) {\\n              // Found country code in stored cart\\n            }\\n          } else {\\n            window.shopXtools.cart = {};\\n          }\\n        } catch (error) {\\n          console.error(\"Error initializing cart from localStorage:\", error);\\n          window.shopXtools.cart = {};\\n        }\\n      };\\n\\n      // Initialize cart before proceeding with other initializations\\n      initializeCartFromLocalStorage();\\n\\n      // Check domain before proceeding with product fetch\\n      if (!validateDomainForFreePlan()) {\\n        window.shopXtools.products = [];\\n        window.shopXtools.status = \"ready\";\\n        window.shopXtools.getProducts = () => null;\\n        return;\\n      }\\n\\n      if (!window.shopXtools || !Array.isArray(window.shopXtools.products)) {\\n        // Initialize currency settings first\\n        initializeCurrencySettings().then(() => {\\n            // Get the stored country code\\n            const storedCountryCode = localStorage.getItem(\"selectedCountryCode\");\\n            if (storedCountryCode) {\\n              // Check for stored filters from other tabs/sessions\\n              let storedFilters;\\n              try {\\n                storedFilters = JSON.parse(sessionStorage.getItem(\\'fc_filters\\') || \\'{}\\');\\n              } catch (error) {\\n                console.error(\\'Error reading stored filters:\\', error);\\n                storedFilters = {};\\n              }\\n              \\n              // Initialize filtering capabilities with stored filters if they exist\\n              window.shopXtools.lastAppliedFilters = {\\n                vendor: storedFilters.vendor || null,\\n                collection: storedFilters.collection || null,\\n                productType: storedFilters.productType || null,\\n                tag: storedFilters.tag || null\\n              };\\n              \\n              // Initialize filtering capabilities\\n              window.shopXtools.getFilteredProducts = (filters = null) => {\\n                if (window.shopXtools.status !== \"ready\") {\\n                  console.warn(\"Products not yet loaded, please wait for data__products-ready event\");\\n                  return [];\\n                }\\n                \\n                // If filters provided, fetch fresh filtered products\\n                if (filters) {\\n                  const countryCode = localStorage.getItem(\"selectedCountryCode\");\\n                  if (!countryCode) {\\n                    console.error(\"No country code available for product fetch\");\\n                    return [];\\n                  }\\n                  \\n                  // Store filters for future reference\\n                  window.shopXtools.lastAppliedFilters = { \\n                    ...window.shopXtools.lastAppliedFilters,\\n                    ...filters\\n                  };\\n                  \\n                  // Fetch filtered products\\n                  window.shopXtools.fetchProductsByCountry(\\n                    countryCode,\\n                    null,\\n                    filters.vendor || null,\\n                    filters.collection || null,\\n                    filters.productType || null,\\n                    filters.tag || null\\n                  );\\n                  \\n                  // Return null to indicate async operation in progress\\n                  return null;\\n                }\\n                \\n                // If no new filters, but we have existing filters, apply client-side filtering\\n                const existingFilters = window.shopXtools.lastAppliedFilters;\\n                if (existingFilters.vendor || existingFilters.collection || existingFilters.productType || existingFilters.tag) {\\n                  // Get all products\\n                  const allProducts = window.shopXtools.productsWithPrices?.[localStorage.getItem(\"selectedCountryCode\")] || [];\\n                  \\n                  // Apply client-side filtering\\n                  return filterProductsClientSide(allProducts, existingFilters);\\n                }\\n                \\n                // Otherwise return currently loaded products\\n                return window.shopXtools.products;\\n              };\\n              \\n              window.shopXtools.areProductsFiltered = () => {\\n                const filters = window.shopXtools.lastAppliedFilters || {};\\n                return !!(filters.vendor || filters.collection || filters.productType || filters.tag);\\n              };\\n              \\n              window.shopXtools.getFilterInfo = () => {\\n                const filters = window.shopXtools.lastAppliedFilters || {};\\n                const activeFilters = {};\\n                \\n                if (filters.vendor) activeFilters.vendor = filters.vendor;\\n                if (filters.collection) activeFilters.collection = filters.collection;\\n                if (filters.productType) activeFilters.productType = filters.productType;\\n                if (filters.tag) activeFilters.tag = filters.tag;\\n                \\n                const allProductsCount = window.shopXtools.productsWithPrices?.[localStorage.getItem(\"selectedCountryCode\")]?.length || 0;\\n                const filteredProductsCount = window.shopXtools.products?.length || 0;\\n                \\n                return {\\n                  isFiltered: window.shopXtools.areProductsFiltered(),\\n                  activeFilters,\\n                  allProductsCount,\\n                  filteredProductsCount,\\n                  filterRate: allProductsCount ? Math.round((filteredProductsCount / allProductsCount) * 100) : 100\\n                };\\n              };\\n              \\n              window.shopXtools.clearFilters = () => {\\n                window.shopXtools.lastAppliedFilters = {\\n                  vendor: null,\\n                  collection: null,\\n                  productType: null,\\n                  tag: null\\n                };\\n                \\n                const countryCode = localStorage.getItem(\"selectedCountryCode\");\\n                if (!countryCode) {\\n                  console.error(\"No country code available for product fetch\");\\n                  return;\\n                }\\n                \\n                return window.shopXtools.fetchProductsByCountry(countryCode);\\n              };\\n              \\n              // Get filter settings from window.__FcCheckoutConfigs\\n              const fcConfig = window.__FcCheckoutConfigs || {};\\n              let vendor = null;\\n              let collection = null;\\n              let productType = null;\\n              let tag = null;\\n              \\n              // Check if filter settings exist in the config\\n              if (fcConfig.filterByVendor) {\\n                vendor = fcConfig.filterByVendor;\\n              }\\n              \\n              if (fcConfig.filterByCollection) {\\n                collection = fcConfig.filterByCollection;\\n              }\\n              \\n              if (fcConfig.filterByProductType) {\\n                productType = fcConfig.filterByProductType;\\n              }\\n              \\n              if (fcConfig.filterByTags) {\\n                tag = fcConfig.filterByTags;\\n              }\\n              \\n              // Update lastAppliedFilters with any settings we found\\n              window.shopXtools.lastAppliedFilters = {\\n                vendor: vendor,\\n                collection: collection,\\n                productType: productType,\\n                tag: tag\\n              };\\n              \\n              // Then fetch products with the correct country code and filters\\n              fetchProductsByCountry(\\n                storedCountryCode, \\n                null, \\n                vendor, \\n                collection, \\n                productType, \\n                tag\\n              ).catch(error => {\\n                console.error(\\'Error fetching products by country:\\', error);\\n                window.shopXtools.status = \"ready\";\\n              });\\n              \\n            } else {\\n                console.error(\\'No country code available for product fetch\\');\\n            }\\n        }).catch(error => {\\n            console.error(\\'Error during initialization:\\', error);\\n        });\\n      }\\n    \\n      window.__currencyMap = CURRENCIES;\\n      \\n\\n    })();\\n  </script>',customHTMLHeadStart:\"<!-- Plugin: ced618 --> <script>\\n        (function() {\\n          window.__FcCheckoutConfigs = window.__FcCheckoutConfigs || {};\\n          window.__FcCheckoutConfigs = {\\n            ...window.__FcCheckoutConfigs,\\n            checkoutLocale: \\\"en\\\",\\n            defaultCountry: \\\"United States\\\",\\n            defaultCountryCode: \\\"US\\\",\\n            defaultCurrency: \\\"USD\\\",\\n            defaultCurrencySymbol: \\\"$\\\",\\n            metaPixelId: \\\"\\\",\\n            googleAnalyticsId: \\\"\\\"\\n          };\\n\\n          // Store settings in localStorage for persistence!!\\n          const existingLocale = localStorage.getItem('checkoutLocale');\\n          if (existingLocale === null) {\\n            localStorage.setItem('checkoutLocale', 'en');\\n          }\\n          const existingCountry = localStorage.getItem('selectedCountry');\\n          if (existingCountry === null) { \\n            localStorage.setItem('selectedCountry', 'United States');\\n          }\\n          const existingCountryCode = localStorage.getItem('selectedCountryCode');\\n          if (existingCountryCode === null) {\\n            localStorage.setItem('selectedCountryCode', 'US');\\n          }\\n          const existingCurrency = localStorage.getItem('selectedCurrency');\\n          if (existingCurrency === null) {\\n            localStorage.setItem('selectedCurrency', 'USD');\\n          }\\n          const existingCurrencySymbol = localStorage.getItem('selectedCurrencySymbol');\\n          if (existingCurrencySymbol === null) {\\n            localStorage.setItem('selectedCurrencySymbol', '$');\\n          }\\n\\n          // Dispatch checkout settings update event\\n          const checkoutEvent = new CustomEvent('checkout__settings-updated', {\\n            detail: {\\n              previous: { ...window.__FcCheckoutConfigs },\\n              current: window.__FcCheckoutConfigs\\n            }\\n          });\\n          document.dispatchEvent(checkoutEvent);\\n\\n          \\n          \\n        })();</script>\",description:\"Discover Fan Pivot, the innovative airless spray gun accessory. Reduce fatigue, gain control, and spray faster on every painting project. Shop now.\",favicon:\"https://framerusercontent.com/assets/r5Og6BUkmO6KGItIOV0CLEk19A.png\",robots:\"max-image-preview:large\",socialImage:\"https://framerusercontent.com/assets/nEYnkSxTp4s7v3pvEy0d8DxnwZE.png\",title:\"Fan Pivot | Effortless Spraying Solutions\"};}export const metadataVersion=1;\nexport const __FramerMetadata__ = {\"exports\":{\"metadataVersion\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"default\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"sbAAgD,IACjB,CAClB,EAAkB,CAC3B,MAAO,OACP,OAAQ,OACR,QAAS,OACT,eAAgB,SAChB,WAAY,SACf,CASK,EAAkB,CACpB,GAAG,EACH,aAAc,EACd,WAAY,2BACZ,OAAQ,uCACR,MAAO,UACP,cAAe,SAClB,CACY,EAA0B,GAAkB,EAAG,IACnC,EAAK,MAAO,CAC7B,MAAO,EACF,MACR,CAAC,CACJ,sBC5BEA,EAAQ,IACL,IACH,EAA4B,IAAI,IAAI,CAClC,CACE,OACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAAc,OAAQ,CAAE,EAAG,8RAA+R,CAAC,CAAC,CAC7Y,CACD,CACE,UACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAC9E,OACA,CACE,EAAG,yGACH,QAAS,MACV,CACF,CAAkB,EAAM,cAAc,OAAQ,CAAE,EAAG,mQAAoQ,CAAC,CAAC,CAC3T,CACD,CACE,OACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAAc,OAAQ,CAAE,EAAG,oMAAqM,CAAC,CAAC,CACnT,CACD,CACE,QACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAAc,OAAQ,CAAE,EAAG,oTAAqT,CAAC,CAAC,CACna,CACD,CACE,UACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAAc,OAAQ,CAAE,EAAG,mQAAoQ,CAAC,CAAC,CAClX,CACD,CACE,OACgB,EAAM,cAAc,EAAM,SAAU,KAAsB,EAAM,cAAc,OAAQ,CAAE,EAAG,2SAA4S,CAAC,CAAC,CAC1Z,CACF,CAAC,CACF,EAAY,EAAM,YAAY,EAAO,IAAwB,EAAM,cAAc,IAAK,CAAE,MAAK,GAAG,EAAO,CAAE,EAAU,IAAI,EAAM,OAAO,CAAC,CAAC,EAEjI,GAYL,EAAgBA,KC9Cwa,SAAgB,EAAiB,EAAS,EAAa,EAAW,GAAG,EAAc,EAAsB,CAEriB,GAAG,EAAa,OAAO,EAAc,GAAG,GAAY,MAAO,GAAyD,SAAU,EAAE,OAAO,KAAK,IAAM,EAAe,EAAW,aAAa,CAAC,QAAQ,QAAQ,GAAG,CAC5C,OAA7HC,EAAsB,IAAkE,EAAYC,EAAS,EAAe,CAAsB,SAAgB,EAAiB,EAAS,EAAa,EAAW,GAAG,EAAc,EAAsB,CAC/R,IAAM,EAAiBC,MAAY,CAAC,GAAG,GAAY,MAAO,GAAyD,SAAU,EAAE,OAAO,KAAK,IAAM,EAAe,EAAW,aAAa,CAAC,QAAQ,QAAQ,GAAG,CAC3C,OAA7HF,EAAsB,IAAkE,EAAYC,EAAS,EAAe,EAAuB,CAAC,EAAc,EAAW,CAAC,CAAwD,OAA5C,EAAa,EAAc,uBAT9N,IAAgC,CAI2E,EAAc,CAAC,QAAQ,CAAC,KAAK,EAAY,aAAa,CAAC,YAAY,CAAC,KAAK,EAAY,aAAa,CAAC,UAAU,CAAC,KAAK,EAAY,aAAa,CAAC,aAAa,CAAC,KAAK,EAAY,aAAa,CAAC,aAAa,CAAC,KAAK,EAAY,aAAa,CAAC,CAAO,GAAa,EAAI,IAAS,EAAI,KAAK,GAAG,EAAE,aAAa,CAAC,SAAS,EAAO,CAAC,ICIxb,SAAgB,EAAK,EAAM,CAAC,GAAK,CAAC,QAAM,eAAa,aAAW,gBAAc,UAAQ,cAAY,YAAU,eAAa,eAAa,SAAO,YAAU,EAAY,EAAUE,EAAO,GAAM,CAAO,EAAQ,EAAiB,EAAS,EAAa,EAAW,EAAc,EAAsB,CAAM,CAAC,EAAa,GAAiBC,EAAS,IAAU,OAAOC,EAAaC,EAAM,CAAC,KAAK,CAAC,eAAe,GAAc,CACxZ,GAAG,CAAuF,IAAM,EAAO,MAAM,OAA9D,GAAG,IAAgB,EAAQ,aAAqF,EAAU,SAAQ,EAAgB,EAAO,QAAQA,EAAM,CAAC,MAAY,CAAI,EAAU,SAAQ,EAAgB,KAAK,EAAG,OAAe,EAAU,QAAQ,GAAK,GAAc,KAAW,CAAC,EAAU,QAAQ,KAAU,CAAC,EAAQ,CAAC,CAA+D,IAAM,EAAnD,EAAa,SAAS,GAAG,EAAa,OAAgD,EAAK,EAAU,EAAE,CAAC,CAAC,KAAK,OAAoB,EAAK,EAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,WAAW,CAAC,UAAQ,eAAa,eAAa,cAAY,YAAU,SAAS,EAA0B,EAAK,MAAM,CAAC,MAAM,6BAA6B,QAAQ,cAAc,MAAM,CAAC,WAAW,OAAO,MAAM,OAAO,OAAO,OAAO,QAAQ,eAAe,KAAK,EAAM,QAAM,WAAW,EAAE,UAAU,EAAS,eAAe,IAAA,GAAU,CAAC,UAAU,QAAc,QAAM,SAAsB,EAAK,EAAa,CAAO,QAAa,SAAO,CAAC,CAAC,CAAC,CAAC,EAAW,CAAC,0BATn7B,IAA4B,IAA8G,IAAkC,IAA2E,IAA8E,IAAqI,CAAM,EAAS,+4gBAAgzmB,CAAO,EAAc,uCAA6C,EAAc,CAAC,OAAO,QAAQ,UAAU,OAAO,OAAO,UAAU,CAAO,EAAsB,EAAS,QAAQ,EAAI,KAAO,EAAI,EAAI,aAAa,EAAE,EAAW,GAAM,EAAE,CAAC,CAS1jmB,EAAK,YAAY,WAAW,EAAK,aAAa,CAAC,MAAM,GAAG,OAAO,GAAG,cAAc,QAAQ,WAAW,QAAQ,MAAM,OAAO,aAAa,GAAK,OAAO,UAAU,SAAS,GAAM,CAAC,EAAoB,EAAK,CAAC,aAAa,CAAC,KAAK,EAAY,QAAQ,MAAM,SAAS,aAAa,OAAO,cAAc,SAAS,aAAa,EAAK,aAAa,aAAa,CAAC,cAAc,CAAC,KAAK,EAAY,KAAK,QAAQ,EAAS,aAAa,EAAK,aAAa,cAAc,MAAM,OAAO,QAAQ,CAAC,kBAAgB,CAAC,EAAa,YAAY,0EAA0E,CAAC,WAAW,CAAC,KAAK,EAAY,OAAO,MAAM,OAAO,YAAY,mBAAmB,QAAQ,CAAC,kBAAgB,EAAa,CAAC,MAAM,CAAC,KAAK,EAAY,MAAM,MAAM,QAAQ,aAAa,EAAK,aAAa,MAAM,CAAC,OAAO,CAAC,KAAK,EAAY,KAAK,MAAM,SAAS,aAAa,EAAc,IAAI,GAAO,EAAM,OAAO,EAAE,CAAC,aAAa,CAAC,EAAM,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAc,aAAa,EAAK,aAAa,OAAO,CAAC,SAAS,CAAC,KAAK,EAAY,QAAQ,aAAa,MAAM,cAAc,KAAK,aAAa,EAAK,aAAa,SAAS,CAAC,GAAG,EAAc,CAAC,ICR5iE,SAAwB,EAAS,EAAO,EAAa,CAAC,MAAM,CAAC,kBAAkB;;;;;;;;;;;;;;;;;0FAAm2B,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA0zkF,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAAu8D,YAAY,sJAAsJ,QAAQ,sEAAsE,OAAO,0BAA0B,YAAY,uEAAuE,MAAM,4CAA4C"}