tanya-chatbot 0.9.5 → 0.9.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"tanya-chatbot.es.js","sources":["../src/inject-style.ts","../src/store/reducers/storeReducer.ts","../src/store/reducers/productReducer.ts","../src/store/index.ts","../src/components/provider/reduxProvider.tsx","../src/components/lib/utils.ts","../src/components/ui/popover.tsx","../src/config/api.ts","../src/components/utils/fetchTokenBmGrant.ts","../src/components/utils/fetchExistingRegisterCustomerToken.ts","../src/sfcc-apis/session/index.ts","../src/components/utils/index.ts","../src/components/utils/helper.js","../src/components/carousel/ProductCarousel.tsx","../src/components/carousel/ProductDisplay.tsx","../src/components/api/api.ts","../src/config/constant.ts","../src/components/utils/localStorage.ts","../src/components/product/ProductDisplayCard.tsx","../src/components/tanya-widget/tanya-shopping-assistent.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/ts-invariant/lib/invariant.js","../node_modules/@apollo/client/version.js","../node_modules/@apollo/client/utilities/globals/maybe.js","../node_modules/@apollo/client/utilities/globals/global.js","../node_modules/@apollo/client/utilities/common/makeUniqueId.js","../node_modules/@apollo/client/utilities/common/stringifyForDisplay.js","../node_modules/@apollo/client/utilities/globals/invariantWrappers.js","../node_modules/@apollo/client/utilities/graphql/getFromAST.js","../node_modules/@wry/context/lib/slot.js","../node_modules/@wry/context/lib/index.js","../node_modules/optimism/lib/context.js","../node_modules/zen-observable-ts/module.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/@apollo/client/utilities/observables/Observable.js","../node_modules/@apollo/client/link/utils/validateOperation.js","../node_modules/@apollo/client/link/utils/createOperation.js","../node_modules/@apollo/client/link/utils/transformOperation.js","../node_modules/@apollo/client/utilities/deprecation/index.js","../node_modules/@apollo/client/link/core/ApolloLink.js","../node_modules/@apollo/client/link/context/index.js","../src/components/utils/generateToken.js","../src/components/graphQL/apollo-client.ts","../src/components/tanya-widget/TanyaWrapper.tsx","../node_modules/@iconify/react/dist/iconify.js","../src/components/agenticShopping/productVariantHelper.tsx","../src/components/agenticShopping/agenticShopping.tsx"],"sourcesContent":["import css from \"./index.css?inline\";\nimport { useEffect } from \"react\";\n\nexport function TanyaChatbotProvider() {\n useEffect(() => {\n if (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }\n }, []);\n\n return null;\n}\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { Store } from \"../../components/graphQL/queries/types\";\n\ninterface StoreState {\n store?: Store;\n}\n\nconst initialState: StoreState = {\n store: {\n storeCode: \"\",\n storeName: \"\",\n storeDescription: \"\",\n activeCatalogId: 0,\n isDefault: false,\n logoDarkBg: \"\",\n logoLightBg: \"\",\n logoTransparent: \"\",\n catalogs: [],\n themeColor: \"\",\n themeContrastColor: \"\",\n tanyaThemeColor: \"\",\n tanyaThemeColorLight: \"\",\n favicon: \"\",\n websiteTitle: \"\",\n flowId: \"\",\n aliasId: \"\",\n searchConfigs: {\n endpoint: \"\",\n accessKey: \"\",\n secretKey: \"\",\n },\n homePageCategories: [],\n carouselImages: {\n web: [],\n mobile: [],\n },\n otherImages: {\n web: [],\n mobile: [],\n },\n },\n};\n\nexport const storeSlice = createSlice({\n name: \"store\",\n initialState,\n reducers: {\n setStore: (state, action: PayloadAction<Store>) => {\n state.store = action.payload;\n },\n },\n});\n\nexport const { setStore } = storeSlice.actions;\n\nexport default storeSlice.reducer;\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { SearchProduct } from \"../../components/graphQL/queries/types\";\n\ninterface ProductState {\n product: SearchProduct | null;\n}\n\nconst initialState: ProductState = {\n product: null,\n};\n\nexport const productSlice = createSlice({\n name: \"product\",\n initialState,\n reducers: {\n setProduct: (state, action: PayloadAction<SearchProduct | null>) => {\n state.product = action.payload;\n },\n },\n});\n\nexport const { setProduct } = productSlice.actions;\n\nexport default productSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport storeReducer from \"./reducers/storeReducer\";\nimport productReducer from \"./reducers/productReducer\";\n\nconst store = configureStore({\n reducer: {\n store: storeReducer,\n product: productReducer,\n },\n});\n\nexport default store;\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n","import { Provider } from \"react-redux\";\nimport store from \"../../store\";\n\nconst ReduxProvider = ({ children }: { children: React.ReactNode }) => {\n return <Provider store={store}>{children}</Provider>;\n};\n\nexport default ReduxProvider;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const notifySFCC = (basketId?: string) => {\n const event = new CustomEvent(\"reactCartUpdated\", {\n detail: {\n cartUpdated: true,\n basketId,\n },\n });\n window.dispatchEvent(event);\n};\n\nexport const findImageGroupBy = (imageGroups = [], options: any) => {\n console.log(options,'the option');\n let { viewType, selectedVariationAttributes = {} } = options;\n\n // Start by filtering out any imageGroup that isn't the correct viewType.\n imageGroups = imageGroups.filter(\n ({ viewType: imageGroupViewType }) => imageGroupViewType === viewType\n );\n\n // Not all variation attributes are reflected in images. For example, you probably\n // won't have a separate image group for various sizes, but you might for colors. For that\n // reason we need to know what are valid attribute values to filter on.\n const refinableAttributeIds = [\n ...new Set(\n imageGroups\n .reduce(\n (acc, { variationAttributes = [] }) => [\n ...acc,\n ...variationAttributes,\n ],\n []\n )\n .map(({ id }) => id)\n ),\n ];\n\n // Update the `selectedVariationAttributes` by filtering out the attributes that have no\n // representation in this imageGroup.\n selectedVariationAttributes = Object.keys(selectedVariationAttributes).reduce(\n (acc, curr) => {\n return refinableAttributeIds.includes(curr)\n ? {\n ...acc,\n [`${curr}`]: selectedVariationAttributes[curr],\n }\n : acc;\n },\n {}\n );\n\n // Find the image group that has all the all the selected variation value attributes.\n imageGroups = imageGroups.find(({ variationAttributes = [] }) => {\n const selectedIds = Object.keys(selectedVariationAttributes);\n\n return selectedIds.every((selectedId) => {\n const selectedValue = selectedVariationAttributes[selectedId];\n\n return variationAttributes.find(\n ({ id, values }) =>\n id === selectedId &&\n values.every(({ value }) => value === selectedValue)\n );\n });\n });\n\n return imageGroups;\n};\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"../lib/utils\";\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\r\n}\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\r\n","function stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n// Helper function to convert ArrayBuffer to hex string\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n const byteArray = new Uint8Array(buffer);\n const hexCodes = [...byteArray].map((value) => {\n const hexCode = value.toString(16);\n const paddedHexCode = hexCode.padStart(2, \"0\");\n return paddedHexCode;\n });\n return hexCodes.join(\"\");\n}\n\n// SHA256 hash using Web Crypto API\nasync function sha256(data: string): Promise<ArrayBuffer> {\n const encoder = new TextEncoder();\n return await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n}\n\n// HMAC-SHA256 using Web Crypto API\nasync function hmacSha256(\n key: ArrayBuffer | Uint8Array,\n data: string\n): Promise<ArrayBuffer> {\n const cryptoKey = await crypto.subtle.importKey(\n \"raw\",\n key,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n\n const encoder = new TextEncoder();\n return await crypto.subtle.sign(\"HMAC\", cryptoKey, encoder.encode(data));\n}\n\n// Get signing key\nasync function getSignatureKey(\n key: string,\n dateStamp: string,\n regionName: string,\n serviceName: string\n): Promise<ArrayBuffer> {\n const kDate = await hmacSha256(stringToUint8Array(\"AWS4\" + key), dateStamp);\n const kRegion = await hmacSha256(kDate, regionName);\n const kService = await hmacSha256(kRegion, serviceName);\n const kSigning = await hmacSha256(kService, \"aws4_request\");\n return kSigning;\n}\n\nexport async function createSignedHeaders(\n url: string,\n method: string,\n payload: string,\n accessKeyId: string,\n secretAccessKey: string,\n region: string,\n service: string\n): Promise<Record<string, string>> {\n const urlObj = new URL(url);\n const host = urlObj.hostname;\n const pathname = urlObj.pathname;\n const search = urlObj.search;\n\n const now = new Date();\n const amzDate = now.toISOString().replace(/[:\\-]|\\.\\d{3}/g, \"\");\n const dateStamp = amzDate.substring(0, 8);\n const payloadHash = arrayBufferToHex(await sha256(payload));\n const contentLength = new TextEncoder().encode(payload).length.toString();\n\n const canonicalHeaders =\n `content-length:${contentLength}\\n` +\n `content-type:application/json\\n` +\n `host:${host}\\n` +\n `x-amz-content-sha256:${payloadHash}\\n` +\n `x-amz-date:${amzDate}\\n`;\n\n const signedHeaders =\n \"content-length;content-type;host;x-amz-content-sha256;x-amz-date\";\n\n const canonicalRequest = [\n method,\n pathname,\n search.slice(1),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n const algorithm = \"AWS4-HMAC-SHA256\";\n const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n algorithm,\n amzDate,\n credentialScope,\n arrayBufferToHex(await sha256(canonicalRequest)),\n ].join(\"\\n\");\n\n const signingKey = await getSignatureKey(\n secretAccessKey,\n dateStamp,\n region,\n service\n );\n\n const signature = arrayBufferToHex(\n await hmacSha256(signingKey, stringToSign)\n );\n\n const authorizationHeader = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n return {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": contentLength,\n \"X-Amz-Content-Sha256\": payloadHash,\n \"X-Amz-Date\": amzDate,\n Authorization: authorizationHeader,\n };\n}\n\nexport const apiConfig = () => {\n const aiConversationUrl = `https://mdv3qwfi2j.execute-api.us-east-1.amazonaws.com/dev/api/bedrock/invoke/stream`;\n const xAPIKey = \"BJBtjpPkqGatuoa3qJqdR8aHXSsHkgvGaootbubi\";\n // const serverUrl = \"https://tanya-sfcc-server.vercel.app/\";\n const serverUrl = import.meta.env.VITE_SERVER_BASE_URL;\n // const serverUrl = \"\";\n const basePath = import.meta.env.VITE_SCAPI_ENVIRONMENT ? \"sc-api\" : \"api\";\n\n return { aiConversationUrl, xAPIKey, serverUrl, basePath };\n};\n","import axios from \"axios\";\r\nimport { getHost, getSiteId } from \".\";\r\n\r\n// email:password:client need to be pass in encrypt form in the auth of fetchTokenBmGrant\r\n\r\n// email:password:client is different from user to user\r\nexport const fetchTokenBmGrant = async () => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-bm-grant?baseUrl=${getHost()}&siteId=${getSiteId()}`\r\n );\r\n if (response.status === 200 && response.data.access_token) {\r\n return response.data.access_token;\r\n } else {\r\n console.error(\"Failed to fetch token:\", response.data);\r\n return null;\r\n }\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error fetching token:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\r\nimport { clientId, getHost, getSiteId, organisationId, shortCode } from \".\";\r\n\r\ninterface Customer {\r\n access_token: string;\r\n customerId: string;\r\n}\r\n\r\n// function getCookie(name: string): string | null {\r\n// const value = `; ${document.cookie}`;\r\n// console.log(\"parts\", value,value.includes(\"dwsid\"));\r\n// const parts = value.split(`; ${name}=`);\r\n// if (parts.length === 2) return parts.pop()?.split(\";\").shift() || null;\r\n// return null;\r\n// }\r\n\r\nexport const fetchExistingRegisterCustomerToken = async ({\r\n access_token,\r\n customerId,\r\n}: Customer) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-register-customer/${customerId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n // console.log(\"customer token res fe\", response.data)\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n\r\nexport const fetchExistingGuestCustomerToken = async (\r\n access_token: string,\r\n) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const dwsid = JSON.parse(sessionStorage.getItem(\"customerData\")|| \"{}\").dwsid // fetch cookie\r\n\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-guest-customer?dwsid=${dwsid}&baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../../components/utils\";\n\nexport async function authData() {\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n // return \"\";\n // }\n const siteId = getSiteId();\n const accessKey = \"access_token\" + \"_\" + siteId;\n const expiresInKey = \"expires_in\" + \"_\" + siteId;\n const expires_in = localStorage.getItem(expiresInKey);\n const access_token = localStorage.getItem(accessKey);\n console.log(access_token);\n const isGuest =\n JSON.parse(sessionStorage.getItem(\"customerData\") || \"{}\")?.isGuest || true;\n // if (\n // expires_in &&\n // access_token &&\n // new Date().getTime() < parseInt(expires_in)\n // // && (isGuest === localStorage.getItem(\"isGuest\") || \"true\")\n // ) {\n console.log(\"access token found in local storage\");\n return { access_token, expires_in };\n // }\n // const { serverUrl } = apiConfig();\n // const dwsid = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).dwsid;\n\n // const customerMail = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).usrRef;\n\n // try {\n // const endpoint = isGuest ? \"unregister-auth\" : \"register-auth\";\n // const res = await axios.get(\n // `${serverUrl}sc-api/${endpoint}?dwsid=${dwsid}&email=${customerMail}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}&siteId=${getSiteId()}&token=true`,\n // {\n // withCredentials: true,\n // }\n // );\n // // localStorage.setItem(accessKey, res.data.access_token);\n // // localStorage.setItem(\n // // expiresInKey,\n // // String(new Date().getTime() + res.data.expires_in * 1000)\n // // );\n // // localStorage.setItem(\"isGuest\", isGuest ? \"true\" : \"false\");\n // return res.data;\n // } catch (err) {\n // console.log(err);\n // }\n}\n\nexport const getJWTToken = async (cachedToken: any, tokenExpiry: any) => {\n if (cachedToken && tokenExpiry && Date.now() < tokenExpiry) {\n return cachedToken;\n }\n\n try {\n const tokenUrl =\n \"https://us-east-1lsr29ln3u.auth.us-east-1.amazoncognito.com/oauth2/token\";\n\n const tokenPayload = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: \"4i8rd70sgt961tc4dhskgf08c\",\n client_secret: \"bnsfq1220loh2cn2cm2ttn8fdhdpt0u8m1fgj8vfk2rn61aurjg\",\n scope: \"default-m2m-resource-server-8xzfzo/read\",\n });\n\n const tokenResponse = await fetch(tokenUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: tokenPayload,\n });\n\n if (!tokenResponse.ok) {\n throw new Error(`Token request failed! status: ${tokenResponse.status}`);\n }\n\n const tokenData = await tokenResponse.json();\n\n // Cache the token\n cachedToken = tokenData.access_token;\n const expiresIn = tokenData.expires_in || 3600; // Default to 1 hour\n tokenExpiry = Date.now() + (expiresIn - 60) * 1000; // Refresh 1 minute before expiry\n\n return cachedToken;\n } catch (error) {\n console.error(\"Error obtaining JWT token:\", error);\n // Clear cache on error\n cachedToken = null;\n tokenExpiry = null;\n return null;\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport { fetchTokenBmGrant } from \"./fetchTokenBmGrant\";\nimport { fetchExistingGuestCustomerToken } from \"./fetchExistingRegisterCustomerToken\";\nimport { authData } from \"../../sfcc-apis/session\";\n\nexport const getHost = () => {\n const host = sessionStorage.getItem(\"Host\");\n return host;\n};\n\nexport const getSiteId = () => {\n const siteId = sessionStorage.getItem(\"SiteId\");\n return siteId;\n};\n\nexport const clientId = () => {\n const clientId = sessionStorage.getItem(\"pubCfg\");\n return clientId;\n};\n\nexport const shortCode = () => {\n const shortCode = sessionStorage.getItem(\"envRef\");\n return shortCode;\n};\n\nexport const organisationId = () => {\n const orgRef = sessionStorage.getItem(\"orgRef\");\n return orgRef;\n};\n\nexport const getSearchResults = async (query: string) => {\n console.log('fetching results');\n const { serverUrl, basePath } = apiConfig();\n let token = \"\";\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n const res = await authData();\n console.log(\"the token from getSearchResults\", res);\n token = res.access_token;\n }\n\n try {\n const host = getHost();\n const response = await axios.get(\n `${serverUrl}${basePath}/search-sfcc?baseUrl=${host}&query=${query}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n return response.data.hits;\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n throw error;\n }\n};\n\nexport const getProductById = async (id: number | string) => {\n if (!id) throw new Error(\"Product ID is required\");\n const { serverUrl, basePath } = apiConfig();\n const host = getHost();\n console.log(\"calling access\");\n const { access_token } = await authData();\n const response = await axios.get(\n `${serverUrl}${basePath}/product-sfcc/${id}?baseUrl=${host}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${access_token}`,\n },\n }\n );\n\n return response.data;\n};\n\nexport const getInterestApi = async (customerId: any) => {\n if (!customerId) throw new Error(\"customerId is required\");\n const access_token = await fetchTokenBmGrant();\n\n const { customer_token } = await fetchExistingGuestCustomerToken(\n access_token\n );\n const { serverUrl, basePath } = apiConfig();\n const data = await authData();\n const token = data.access_token;\n\n const response = await axios.get(\n `${serverUrl}${basePath}/get-interest?baseUrl=${getHost()}&customerId=${customerId}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: import.meta.env.VITE_SCAPI_ENVIRONMENT\n ? `Bearer ${token}`\n : `${customer_token}`,\n },\n }\n );\n\n return response.data;\n};\n","import CryptoJS from \"crypto-js\";\nconst SECRET_KEY = \"admin_one\";\nexport const displayData = (data) => {\n if (typeof data === \"string\") {\n return String(data);\n }\n return String(data[\"en-US\"] || data);\n};\nexport const imageUrlArray = (data) => {\n if (data?.image) {\n return [data.image];\n }\n else if (\"variants\" in data) {\n return data.variants[0].images;\n }\n return data.masterVariant.images.map((image) => image.url);\n};\nexport const currencyFormatter = (data, currencyCode) => {\n return data.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: currencyCode || \"USD\",\n });\n};\nexport const priceFormatter = (data) => {\n if (\"variants\" in data) {\n return {\n centAmount: data.variants[0]?.prices.EUR.max,\n currencyCode: \"DOL\",\n };\n }\n return {\n centAmount: data.masterVariant?.prices[0].value.centAmount,\n currencyCode: data.masterVariant?.prices[0].value.currencyCode,\n };\n};\nexport const encryptData = (data) => {\n return CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY).toString();\n};\nexport const decryptData = (cipherText) => {\n const bytes = CryptoJS.AES.decrypt(cipherText, SECRET_KEY);\n return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n};\nexport const initialCapital = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nexport const laterDate = (day) => {\n const fiveDaysLater = new Date();\n fiveDaysLater.setDate(fiveDaysLater.getDate() + day);\n const formattedDate = fiveDaysLater.toLocaleDateString(\"en-US\", {\n day: \"numeric\",\n month: \"long\",\n });\n return formattedDate;\n};\nexport const stringReducer = (text, length) => {\n return text.length < length ? text : text.slice(0, length) + \"...\";\n};\nexport const formatStringToHtml = (str) => {\n return str\n .split(\"\\\\n\")\n .map((line, index) => {\n const numberedPoint = line.match(/^(\\d+)\\.\\s(.+)/);\n if (numberedPoint) {\n return `<p key=${index} class=\"mb-2\"><strong>${numberedPoint[1]}.</strong> ${numberedPoint[2]}</p>`;\n }\n return line.trim() ? `<p key=${index} class=\"mb-2\">${line}</p>` : \"<br/>\";\n })\n .join(\"\");\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useDispatch } from \"react-redux\";\nimport type { SearchProduct } from \"../graphQL/queries/types\";\nimport {\n stringReducer,\n priceFormatter,\n currencyFormatter,\n displayData,\n imageUrlArray,\n} from \"../utils/helper\";\nimport { useEffect, useState } from \"react\";\nimport { setProduct } from \"../../store/reducers/productReducer\";\nimport { getProductById } from \"../utils\";\n\nfunction useResponsiveProductsPerPage() {\n const getProductsPerPage = () => {\n if (window.innerWidth < 425) return 1; // Below Mobile-L\n if (window.innerWidth < 768) return 2; // Mobile-L to md\n return 4; // md and above\n };\n\n const [productsPerPage, setProductsPerPage] = useState(getProductsPerPage);\n\n useEffect(() => {\n const handleResize = () => setProductsPerPage(getProductsPerPage());\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return productsPerPage;\n}\n\nconst ProductCarousel = ({\n product,\n}: // storeDetails,\n{\n product: SearchProduct[];\n storeDetails: any;\n}) => {\n const dispatch = useDispatch();\n // const selectedProduct = useSelector((state: any) => state.product.product);\n const productsPerPage = useResponsiveProductsPerPage();\n const [startIndex, setStartIndex] = useState(0);\n\n const nextProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex + productsPerPage >= product.length\n ? 0\n : prevIndex + productsPerPage\n );\n };\n\n const prevProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex - productsPerPage < 0\n ? product.length - (product.length % productsPerPage || productsPerPage)\n : prevIndex - productsPerPage\n );\n };\n\n const getProduct = async (id: number | string) => {\n const product = await getProductById(id);\n dispatch(setProduct(product));\n };\n\n return (\n <div className=\"mt-2 overflow-x-hidden\">\n <div className=\"flex items-center justify-center gap-4 relative\">\n {product?.length > productsPerPage && (\n <button\n onClick={prevProducts}\n className=\"absolute z-50 left-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-left\" width=\"25\" /> */}\n &lt;\n </button>\n )}\n\n <div className=\"flex gap-5 justify-center flex-1 overflow-hidden\">\n {product\n .slice(startIndex, startIndex + productsPerPage)\n .map((prod) => (\n <div\n key={prod.productId}\n className=\"flex-shrink-0 flex flex-col w-[150px] h-[200px] p-2 items-center justify-between cursor-pointer bg-[#FFFFFF] rounded-[10px] shadow-[0px_2px_2px_0px_#9292BC40]\"\n onClick={() => {\n getProduct(prod.product_id ?? prod.productId);\n }}\n >\n {/* Image */}\n <div className=\"w-full p-2 flex items-center justify-center bg-white\">\n <img\n src={\n imageUrlArray(prod)[0]?.link ||\n imageUrlArray(prod)[0] || // fallback if it's a string\n \"https://via.placeholder.com/120\"\n }\n alt={prod?.productName ? prod.productName : \"Product\"}\n className=\"w-28 h-28 rounded-[10px] transition-transform duration-300 hover:scale-125 object-cover\"\n />\n </div>\n\n {/* Price & Name */}\n <div\n className=\"text-white w-full p-2 text-[12px] text-center h-[60px]\"\n // style={{ background: storeDetails.tanyaThemeColor }}\n >\n <div className=\"relative inline-block group\">\n <div className=\"w-full line-clamp-1 overflow-hidden text-ellipsis text-[#000000] font-medium font-nunitoSans\">\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n\n {/* Tooltip */}\n <div\n className=\"absolute left-0 top-full mt-1 w-max max-w-[200px] p-2 bg-white shadow-lg text-black text-xs rounded opacity-0 transition-opacity duration-300 group-hover:opacity-100 z-50 pointer-events-auto\"\n style={{\n position: \"absolute\",\n top: \"-100%\",\n left: \"0\",\n marginBottom: \"5px\",\n zIndex: 50,\n }}\n >\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n </div>\n <div className=\" flex text-center items-center gap-2 text-[14px] text-[#14121F] font-bold font-nunitoSans text-base mb-1\">\n <p>\n {currencyFormatter(\n prod?.price\n ? Number(prod?.price)\n : priceFormatter(prod).centAmount || 0,\n priceFormatter(prod)?.currencyCode\n )}\n </p>\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans truncate\">\n ${Number(prod?.price).toFixed(2) ?? 0 + 5}\n </p>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {product?.length > productsPerPage && (\n <button\n onClick={nextProducts}\n className=\"absolute z-50 right-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-right\" width=\"25\" /> */}\n &gt;\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default ProductCarousel;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ProductCarousel from \"./ProductCarousel\";\nimport { initialCapital } from \"../utils/helper\";\n\nconst ProductDisplay = ({ chat, storeDetails }: any) => {\n return (\n <div className=\"bg-[#FFFFFF] px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\">\n {chat.map((products: any, i: number) => (\n <div\n key={i}\n className=\"mb-4 p-3 rounded-xl\"\n style={{ \n background: \"linear-gradient(109.52deg, #F0EEF5 36.91%, #F4F3EE 100.34%\",\n // backgroundColor: storeDetails.tanyaThemeColorLight \n }} // slightly darker grey // light grey section bg\n >\n <div\n className=\"font-nunitoSans font-bold text-sm text-[#494949] p-2 w-fit rounded-[20px]\"\n // style={{\n // color: storeDetails?.tanyaThemeContrastColor,\n // border: `1px solid ${storeDetails.tanyaThemeColor}`,\n // backgroundColor: storeDetails.tanyaThemeColor,\n // }}\n >\n {initialCapital(products.keyword) || \"No keyword\"}\n </div>\n\n <ProductCarousel\n product={products.items}\n storeDetails={storeDetails}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ProductDisplay;\n","import { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getHost,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../utils\";\nimport { getAccessToken } from \"../utils/getAccessToken\";\nimport axios from \"axios\";\n\nexport const fetchStoreConfig = async (storeCode: string) => {\n try {\n const token = await getAccessToken();\n const { serverUrl } = apiConfig();\n const response = await axios.get(\n `${serverUrl}api/logo?storeCode=${storeCode}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return response.data;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n return error;\n // console.error(\"Error fetching logo details:\", error);\n }\n};\n\ninterface Product {\n product_id: string;\n quantity: number;\n}\n\nexport const createBasket = async (customer_token: string, data?: any) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/create?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n data,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n window.postMessage(\n {\n type: \"WIDGET_CREATED_BASKET\",\n basketId: response.data?.basket_id || response.data?.basketId,\n },\n \"*\"\n );\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error creating basket:\", error.response || error.message);\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const addProductToBasket = async (\n basketId: string,\n products: Product[],\n customer_token: string\n) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/add-product/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n products,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n\n if (response.status === 200 && response.data) {\n return response.data;\n }\n return null;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\n \"Error adding products to basket:\",\n error.response || error.message\n );\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const fetchBasket = async ({\n basketId,\n customer_token,\n}: {\n basketId: string;\n customer_token: string;\n}) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.get(\n `${URL}${basePath}/basket/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n return { status: response.status, data: response.data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return { status: error.response?.status, data: null };\n } else {\n return { status: null, data: null };\n }\n }\n};\n","export const BASKET_ID_KEY = \"sfcc_basket_id\";\r\nexport const TOKEN_KEY = \"sfcc_customer_token\";\r\nexport const TOKEN_EXPIRY_KEY = \"sfcc_token_expiry\";\r\n\r\nexport const EXPIRY_TIME = 5 * 60 * 1000; // 5 minutes in milliseconds\r\nexport const BUFFER_TIME = 10 * 1000; // 10 seconds buffer before expiry\r\nexport const VERSION = \"1.0.0\";","import {\r\n BASKET_ID_KEY,\r\n EXPIRY_TIME,\r\n TOKEN_EXPIRY_KEY,\r\n TOKEN_KEY,\r\n} from \"../../config/constant\";\r\n\r\nexport const getStoredBasketId = (): string | null => {\r\n try {\r\n return localStorage.getItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading basket ID from storage:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredBasketId = (basketId: string | null): void => {\r\n try {\r\n if (basketId) {\r\n localStorage.setItem(BASKET_ID_KEY, basketId);\r\n } else {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error saving basket ID to storage:\", error);\r\n }\r\n};\r\n\r\nexport const clearBasketStorage = (): void => {\r\n try {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error clearing basket storage:\", error);\r\n }\r\n};\r\n\r\nexport const getStoredToken = (): string | null => {\r\n try {\r\n return localStorage.getItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading token:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredToken = (token: string | null): void => {\r\n try {\r\n if (token) {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n const expiryTime = Date.now() + EXPIRY_TIME;\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, expiryTime.toString());\r\n } else {\r\n localStorage.removeItem(TOKEN_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing token:\", error);\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useState } from \"react\"; // Add useMemo here when uncomment the color, size, width code\r\n// import { useEffect, useMemo, useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { setProduct } from \"../../store/reducers/productReducer\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\n// import { fetchTokenSFCC } from \"../utils/fetchTokenSFCC\";\r\nimport {\r\n getStoredBasketId,\r\n // getStoredToken,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { toast } from \"react-toastify\";\r\nimport { BASKET_ID_KEY, TOKEN_EXPIRY_KEY } from \"../../config/constant\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport {\r\n // fetchExistingRegisterCustomerToken,\r\n fetchExistingGuestCustomerToken,\r\n} from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\nconst ANIMATION_DURATION = 300; // ms\r\n\r\nconst ProductDisplayCard = ({ addToCartPwa }) => {\r\n const dispatch = useDispatch();\r\n const product = useSelector((state: any) => state.product.product);\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const [show, setShow] = useState(!!product);\r\n\r\n useEffect(() => {\r\n setShow(!!product);\r\n }, [product]);\r\n\r\n if (!product) return null;\r\n\r\n // const { sizeAttr, colorAttr, widthAttr } = attributes;\r\n\r\n const addToCart = async () => {\r\n try {\r\n // Check if product and variants exist\r\n\r\n if (\r\n !product?.variants?.[0]?.product_id &&\r\n !(product.type.item || product.type.bundle) &&\r\n !product?.variants?.[0]?.productId\r\n ) {\r\n toast.error(\"Variants not available\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ];\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n let customer_token = \"\";\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n const authDetails = await authData();\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n } else {\r\n console.log(\"token from bm grant\");\r\n const access_token = await fetchTokenBmGrant();\r\n const customerTokenData = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n customer_token = customerTokenData.customer_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n\r\n // const response = await addToCartPwa(\r\n // productData\r\n // // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n\r\n const basketResponse = await createBasket(customer_token, data);\r\n if (!basketResponse?.basket_id && !basketResponse?.basketId) {\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // else if (basketResponse?.basketId) {\r\n // toast.success(`Added to cart`, {\r\n // position: \"bottom-right\",\r\n // autoClose: 3000,\r\n // hideProgressBar: false,\r\n // closeOnClick: true,\r\n // pauseOnHover: true,\r\n // draggable: true,\r\n // });\r\n // }\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n console.log(\"adding product to basket\");\r\n const response = await addProductToBasket(\r\n basketResponse?.basket_id || basketResponse?.basketId,\r\n productData,\r\n customer_token\r\n );\r\n // const response = await addToCartPwa(\r\n // productData,\r\n // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n console.log(\"object added to basket\");\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n return;\r\n }\r\n\r\n const response = await addProductToBasket(\r\n basketId,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Function to generate and redirect to the product detail page\r\n const viewMore = () => {\r\n if (!product) return;\r\n const path = window.location.origin +\"/product/\" +product.id;\r\n console.log(\"path\", path);\r\n window.location.href = path; //redirect to sfcc product details url\r\n };\r\n console.log(product, \"the prod\");\r\n return (\r\n <>\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(() => dispatch(setProduct(null)), ANIMATION_DURATION);\r\n }}\r\n />\r\n <div\r\n className={`\r\n flex flex-col gap-2 items-center h-[90vh] absolute right-0 bottom-0 z-50 w-full md:w-1/2 md:h-[100vh] lg:w-1/2 lg:h-[100vh] shadow-xl p-2 border-l-2 bg-white border-gray-200 overflow-y-scroll\r\n transition-all duration-300\r\n ${\r\n show\r\n ? \"translate-y-0 md:translate-y-0 md:translate-x-0 opacity-100\"\r\n : \"translate-y-full md:translate-y-0 md:translate-x-full opacity-0 pointer-events-none\"\r\n }\r\n `}\r\n style={{ willChange: \"transform, opacity\" }}\r\n // Prevent click inside card from closing\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* name and close button */}\r\n <div className=\"mt-3 flex flex-row justify-between w-full \">\r\n <div>\r\n <p className=\"text-[#000000] font-bold font-nunitoSans\">\r\n {product.name}\r\n </p>\r\n </div>\r\n <div>\r\n <div\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n >\r\n &#10005;\r\n </div>\r\n {/* <Icon\r\n icon=\"mdi:close\"\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n /> */}\r\n </div>\r\n </div>\r\n {/* image and variants */}\r\n <div className=\"flex flex-row gap-2 items-center flex-wrap\">\r\n <div className=\"flex flex-row items-center justify-center w-[120px] h-[120px] my-5\">\r\n <img\r\n src={\r\n import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups?.[0]?.images?.[0]?.link\r\n : product.image_groups?.[0]?.images?.[0]?.link ||\r\n \"https://via.placeholder.com/120\"\r\n }\r\n alt={product.name}\r\n className=\"rounded-[10px]\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center gap-2\">\r\n {(import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups\r\n : product.image_groups\r\n )\r\n .slice(1, 2)\r\n .map((group: any) =>\r\n group.images\r\n .slice(1, 2)\r\n .map((image: any) => (\r\n <img\r\n key={image.link}\r\n src={image.link}\r\n alt={product.name}\r\n className=\"rounded-[10px] w-[60px] h-[60px]\"\r\n />\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n {/* price and discount */}\r\n <div className=\"flex flex-row items-center justify-between w-full\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <p className=\"text-[#14121F] font-bold font-nunitoSans\">\r\n {\" \"}\r\n ${product.price.toFixed(2)}\r\n </p>{\" \"}\r\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans\">\r\n {\" \"}\r\n ${(product.price + 5).toFixed(2)}\r\n </p>\r\n </div>\r\n <div>\r\n <p className=\"text-[#EC5050] font-bold font-nunitoSans\">\r\n {product.discount}\r\n </p>\r\n </div>\r\n </div>\r\n {/* horizontal line */}\r\n <div className=\"mt-2 w-full border-t-2 border-gray-200\"></div>\r\n <div className=\"w-full text-left\">\r\n <div className=\"text-[#323135] font-bold font-nunitoSans mt-3 text-[14px]\">\r\n Product Details\r\n </div>\r\n <div\r\n className=\"text-[#68656E] font-normal font-nunitoSans text-xs pl-2 mt-3\"\r\n dangerouslySetInnerHTML={{\r\n __html: product.short_description || product.longDescription,\r\n }}\r\n ></div>\r\n </div>\r\n {/* rating and reviews */}\r\n <div className=\"mt-4 flex flex-col gap-2 w-full p-2\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <div className=\"flex items-center gap-2 text-left font-nunitoSans\">\r\n <div className=\"text-[#323135] font-bold\">\r\n {product?.rating?.rate || 0} /{\" \"}\r\n <span className=\"text-[#68656E]\">5</span>\r\n </div>\r\n <div className=\"text-[#323135] font-semibold text-sm\">\r\n Overall Rating\r\n </div>\r\n <div className=\"text-[#68656E] font-semibold text-sm\">\r\n {product?.rating?.count || 0} ratings\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-2 flex flex-row items-center gap-2\">\r\n {Array.from({ length: 5 }).map((_, index) => (\r\n <Icon\r\n key={index}\r\n icon=\"mdi:star\"\r\n width=\"20\"\r\n height=\"20\"\r\n className={`text-yellow-500 \r\n ${\r\n product?.rating?.rate > index\r\n ? \"text-yellow-500\"\r\n : \"text-gray-300\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"flex flex-col items-center justify-between font-nunitoSans font-semibold w-5/6 text-black gap-2\"\r\n style={{ marginTop: \"40px\" }}\r\n >\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={addToCart}\r\n >\r\n Add to Cart\r\n </button>\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer mb-16\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={viewMore}\r\n >\r\n View more\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProductDisplayCard;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Popover, PopoverTrigger } from \"../ui/popover\";\r\nimport { getInterestApi, getProductById, getSearchResults } from \"../utils\";\r\nimport type { SearchProduct } from \"../graphQL/queries/types\";\r\nimport { formatStringToHtml } from \"../utils/helper\";\r\nimport ProductDisplay from \"../carousel/ProductDisplay\";\r\nimport { useSelector } from \"react-redux\";\r\nimport ProductDisplayCard from \"../product/ProductDisplayCard\";\r\nimport { toast } from \"react-toastify\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport { fetchExistingGuestCustomerToken } from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport {\r\n BASKET_ID_KEY,\r\n TOKEN_EXPIRY_KEY,\r\n VERSION,\r\n} from \"../../config/constant\";\r\nimport {\r\n getStoredBasketId,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { authData, getJWTToken } from \"../../sfcc-apis/session\";\r\n\r\ntype ProductSnapshot = {\r\n id: string;\r\n name: string;\r\n image: string | null;\r\n price: number | null;\r\n points: number;\r\n quantity: number;\r\n};\r\n\r\nconst TanyaShoppingAssistantStream = ({\r\n tanyaConfig,\r\n basketId,\r\n addToCart,\r\n}: {\r\n tanyaConfig?: any;\r\n basketId?: string;\r\n addToCart?: any;\r\n}) => {\r\n // Shopping options\r\n const shoppingOptions = [\r\n \"Myself\",\r\n \"My Child\",\r\n \"My Grandchild\",\r\n \"Niece/Nephew\",\r\n \"My Friends\",\r\n \"Others\",\r\n ];\r\n\r\n const payloadMapping: Record<string, string> = {\r\n Myself: \"himself/herself\",\r\n \"My Child\": \"his/her child\",\r\n \"My Grandchild\": \"his/her grandchild\",\r\n \"Niece/Nephew\": \"his/her niece/nephew\",\r\n \"My Friends\": \"his/her friends\",\r\n Others: \"others\",\r\n };\r\n const productName = useRef<string | null>(null);\r\n const productId = useRef<number | null>(null);\r\n const productImage = useRef<string | null>(null);\r\n const productPrice = useRef<number | null>(null);\r\n const [authDetails, setAuthDetails] = useState<any>(null);\r\n const lastChat = useRef(null);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [adding, setAdding] = useState<boolean>(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [productLoading, setProductLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [whom, setWhom] = useState(\"\");\r\n const mapSnapshotToProduct = (snap: ProductSnapshot): any => ({\r\n id: snap.id,\r\n title: snap.name,\r\n image: snap.image ?? \"\",\r\n price: snap.price ?? 0,\r\n });\r\n // const dispatch = useDispatch();\r\n\r\n const [chatHistory, setChatHistory] = useState<\r\n {\r\n query: string;\r\n response: string;\r\n potentialQuestions: string;\r\n products?: { keyword: string; items: SearchProduct[] }[];\r\n keywords: string;\r\n noResults?: boolean;\r\n secondaryResponse?: string;\r\n secondaryLoading?: boolean;\r\n productSnapshot?: ProductSnapshot; // NEW\r\n }[]\r\n >([]);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n // const storeCode =\r\n // searchParams.get(\"storeCode\") || localStorage.getItem(\"storeCode\");\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const product = useSelector((s: any) => s.product.product);\r\n\r\n // Runs once on mount\r\n useEffect(() => {\r\n const currentAccessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n const savedChatToken = localStorage.getItem(\r\n `chat-token-${tanyaConfig.siteId}`\r\n );\r\n\r\n if (currentAccessToken && savedChatToken === currentAccessToken) {\r\n // Token matches → restore chat history\r\n const savedHistory = localStorage.getItem(\"chatHistory\");\r\n if (savedHistory) {\r\n setChatHistory(JSON.parse(savedHistory));\r\n }\r\n } else {\r\n // Token missing OR mismatch → reset chat data\r\n localStorage.setItem(\"chatHistory\", JSON.stringify([]));\r\n localStorage.setItem(\r\n `chat-token-${tanyaConfig.siteId}`,\r\n currentAccessToken || \"\"\r\n );\r\n }\r\n }, []);\r\n\r\n // Runs whenever chatHistory updates\r\n useEffect(() => {\r\n localStorage.setItem(\"chatHistory\", JSON.stringify(chatHistory));\r\n\r\n const accessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n if (accessToken) {\r\n localStorage.setItem(`chat-token-${tanyaConfig.siteId}`, accessToken);\r\n }\r\n }, [chatHistory]);\r\n\r\n const openPanel = () => {\r\n setIsVisible(true);\r\n setTimeout(() => setIsAnimating(true), 10); // trigger opening animation\r\n };\r\n\r\n const closePanel = () => {\r\n setIsAnimating(false);\r\n setTimeout(() => setIsVisible(false), 300); // // wait for exit animation\r\n };\r\n\r\n useEffect(() => {\r\n if (isOpen) openPanel();\r\n else closePanel();\r\n }, [isOpen]);\r\n\r\n const handleWhomSelection = (selected: string) => {\r\n setWhom(payloadMapping[selected]);\r\n };\r\n\r\n useEffect(() => {\r\n if (isVisible && scrollRef.current) {\r\n scrollRef.current.scrollTo({\r\n top: scrollRef.current.scrollHeight,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n }, [chatHistory, isVisible]);\r\n\r\n const cachedToken: any = null;\r\n const tokenExpiry: any = null;\r\n\r\n const getAuthDetails = async () => {\r\n const data = await authData(); // <- calls your async function\r\n if (data == null) return;\r\n setAuthDetails(data); // <- saves the result in state\r\n };\r\n\r\n useEffect(() => {\r\n if (tanyaConfig?.siteId) {\r\n const { clientID, host, organizationID, shortCode, siteId } = tanyaConfig;\r\n sessionStorage.setItem(\"Host\", host);\r\n sessionStorage.setItem(\"SiteId\", siteId);\r\n sessionStorage.setItem(\"pubCfg\", btoa(clientID));\r\n sessionStorage.setItem(\"envRef\", shortCode);\r\n sessionStorage.setItem(\"orgRef\", organizationID);\r\n }\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n getAuthDetails();\r\n console.log(\"scapi environment v1\");\r\n } else {\r\n console.log(\"ocapi environment\");\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (basketId) {\r\n console.log(\"setting the basket id\", basketId);\r\n setStoredBasketId(basketId);\r\n }\r\n }, [basketId]);\r\n\r\n const getInterests = async () => {\r\n const customer_id = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n ).customerId;\r\n const res = await getInterestApi(customer_id || \"\");\r\n return res.c_interests;\r\n };\r\n\r\n const runSecondaryFlow = async (productTitle: string, points: number) => {\r\n console.log(\"in secondary flow\", VERSION);\r\n const interests = await getInterests();\r\n console.log(interests, \"interests of customer\", VERSION);\r\n if (!interests) return;\r\n try {\r\n // surprise animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1 ? { ...msg, secondaryLoading: true } : msg\r\n )\r\n );\r\n\r\n const accessToken = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!accessToken) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"Q166PR519W\",\r\n flowAliasId: \"HKFUVLWVH2\",\r\n input: {\r\n loyaltyPoints: \"\",\r\n productName: productTitle,\r\n productPoints: String(points || 0),\r\n interests: interests,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n\r\n if (parsedData.index === 0) {\r\n // attach response & stop animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n secondaryResponse: parsedData.data,\r\n secondaryLoading: false,\r\n }\r\n : msg\r\n )\r\n );\r\n }\r\n // ignore 1/2/3\r\n } catch (e) {\r\n // stop animation on parse error too\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? { ...msg, secondaryLoading: false }\r\n : msg\r\n )\r\n );\r\n console.error(\"Secondary flow JSON parse error:\", e);\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(\"Secondary flow error:\", e);\r\n }\r\n };\r\n\r\n const handleSendMessage = async (question?: string) => {\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setIsLoading(true);\r\n setInputText(\"\");\r\n\r\n productName.current = null;\r\n productId.current = null;\r\n productImage.current = null;\r\n productPrice.current = null;\r\n\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: newQuery,\r\n response: \"Thinking for what suits you best...\",\r\n potentialQuestions: \"\",\r\n products: [],\r\n keywords: \"Thinking for best products...\",\r\n },\r\n ]);\r\n\r\n try {\r\n const sanitizedWhom = whom;\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n\r\n // Get JWT access token\r\n const accessToken = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!accessToken) {\r\n throw new Error(\"Failed to obtain access token\");\r\n }\r\n\r\n // Build the invoke flow URL\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"MMHQKYI1NE\",\r\n flowAliasId: \"SZF9ZK1ATE\",\r\n input: {\r\n userPrompt: newQuery,\r\n whom: sanitizedWhom,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n let keywords = \"\";\r\n\r\n while (true) {\r\n setProductLoading(true);\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n if (parsedData.index == 1) keywords = parsedData.data;\r\n\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n [parsedData.index == 0\r\n ? \"response\"\r\n : parsedData.index == 1\r\n ? \"keywords\"\r\n : parsedData.index == 2\r\n ? \"potentialQuestions\"\r\n : \"end\"]: parsedData.data,\r\n }\r\n : msg\r\n )\r\n );\r\n } catch (error) {\r\n console.error(\"Error parsing JSON:\", error);\r\n }\r\n }\r\n }\r\n }\r\n getKeywords(sanitizeKeywords(keywords));\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const sanitizeKeywords = (response: string) => {\r\n const keywordMatch = response.match(\r\n /top five relevant product or category names are: (.*)/i\r\n );\r\n const keywordsString = keywordMatch ? keywordMatch[1] : response;\r\n const keywordsArray = keywordsString.split(\", \");\r\n const sanitizedKeywords = keywordsArray.map((keyword) => {\r\n return keyword.replace(/\\s*(Toys|Bags|Miniature|etc\\.*)\\s*/gi, \"\").trim();\r\n });\r\n const uniqueKeywords = [...new Set(sanitizedKeywords)].filter(Boolean);\r\n return uniqueKeywords.join(\",\");\r\n };\r\n\r\n const getKeywords = async (keywords: string[] | string) => {\r\n const keys = typeof keywords === \"string\" ? keywords.split(\",\") : keywords;\r\n\r\n setProductLoading(true);\r\n\r\n try {\r\n // fire all API requests in parallel\r\n const responses = await Promise.all(\r\n keys.map((k) => getSearchResults(k).catch(() => [])) // prevent Promise.all crash\r\n );\r\n\r\n // build product array\r\n const productData = keys\r\n .map((keyword, idx) => ({\r\n keyword,\r\n items: responses[idx] ?? [],\r\n loading: false,\r\n }))\r\n .filter((p) => p.items.length > 0);\r\n\r\n // extract first product for snapshot\r\n const firstProduct = productData[0]?.items?.[0];\r\n if (firstProduct) {\r\n productId.current = firstProduct.product_id;\r\n productName.current = firstProduct.product_name;\r\n productImage.current = firstProduct.image?.link;\r\n const price =\r\n typeof firstProduct.price === \"number\" ? firstProduct.price : null;\r\n productPrice.current = price;\r\n }\r\n\r\n // apply single chatHistory update\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n products: productData,\r\n productSnapshot: firstProduct\r\n ? {\r\n id: productId.current,\r\n name: productName.current,\r\n image: productImage.current,\r\n price: productPrice.current,\r\n points: 0,\r\n quantity: 1,\r\n }\r\n : msg.productSnapshot,\r\n }\r\n : msg\r\n )\r\n );\r\n\r\n // run secondary flow only if user logged in + snapshot ready\r\n if (firstProduct) {\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n if (!customerData?.isGuest) {\r\n console.log(\"running secondary flow\", VERSION);\r\n runSecondaryFlow(productName.current, 0);\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"error in keyword search\", err);\r\n } finally {\r\n setProductLoading(false);\r\n }\r\n };\r\n\r\n const handleAddToCart = async (productToBeAdded: any, quantity: number) => {\r\n setAdding(true);\r\n try {\r\n const product = await getProductById(productToBeAdded.id);\r\n if (\r\n !(\r\n product?.variants?.[0]?.product_id ||\r\n product?.variants?.[0]?.productId\r\n ) &&\r\n !(product.type.item || product.type.bundle)\r\n ) {\r\n setAdding(false);\r\n toast.error(\"Variants not found\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: quantity,\r\n },\r\n ];\r\n console.log(productData, \"product data\", \"app version\", VERSION);\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n const access_token = await fetchTokenBmGrant();\r\n\r\n let { customer_token } = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n console.log(basketIdFromCustomer, \"basketIdFromCustomer\");\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n setAdding(false);\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n const basketResponse = await createBasket(customer_token, data);\r\n console.log(\r\n basketResponse,\r\n basketResponse?.basket_id,\r\n basketResponse?.basketId,\r\n \"the basket response\"\r\n );\r\n if (!(basketResponse?.basket_id || !basketResponse?.basketId)) {\r\n setAdding(false);\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // Store new basket ID\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n // const response = await addProductToBasket(\r\n // basketResponse?.basket_id || basketResponse?.basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart(\r\n {\r\n productId,\r\n quantity,\r\n },\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n setAdding(false);\r\n return;\r\n }\r\n\r\n // const response = await addProductToBasket(\r\n // basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart({\r\n productId,\r\n quantity,\r\n });\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n setAdding(false);\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n setAdding(false);\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n setAdding(false);\r\n };\r\n\r\n // useEffect(() => {\r\n // if (lastChat.current)\r\n // lastChat.current.scrollIntoView({ behavior: \"smooth\" });\r\n // }, [lastChat.current]);\r\n\r\n useEffect(() => {\r\n if (isVisible) setTimeout(() => setIsAnimating(true), 10);\r\n else setIsAnimating(false);\r\n }, [isVisible]);\r\n\r\n // Update the main container div's className\r\n return (\r\n <div className=\"relative flex justify-center\">\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onClick={() => setIsOpen(true)}\r\n style={\r\n {\r\n // background: storeDetails.tanyaThemeColor,\r\n }\r\n }\r\n className=\"flex items-center rounded-lg cursor-pointer hover:opacity-90 transition-opacity p-0\"\r\n >\r\n <div className=\"flex flex-col\">\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_958_585)\">\r\n <path\r\n d=\"M30.0002 5C31.7683 5 33.464 5.70238 34.7142 6.95262C35.9644 8.20286 36.6668 9.89856 36.6668 11.6667V25C36.6668 26.7681 35.9644 28.4638 34.7142 29.714C33.464 30.9643 31.7683 31.6667 30.0002 31.6667H25.6902L21.1785 36.1783C20.8915 36.4653 20.5097 36.6377 20.1046 36.6631C19.6996 36.6886 19.2992 36.5654 18.9785 36.3167L18.8218 36.1783L14.3085 31.6667H10.0002C8.28976 31.6667 6.64478 31.0093 5.40548 29.8305C4.16617 28.6516 3.42735 27.0416 3.34183 25.3333L3.3335 25V11.6667C3.3335 9.89856 4.03588 8.20286 5.28612 6.95262C6.53636 5.70238 8.23205 5 10.0002 5H30.0002Z\"\r\n fill=\"url(#paint0_linear_958_585)\"\r\n />\r\n <path\r\n d=\"M28.3335 15.6511V11.6667C28.3335 11.6667 22.2774 12.6042 20.1148 15.4167C17.9521 18.2292 18.6644 26.6667 18.6644 26.6667H22.5321C22.5321 26.6667 22.0614 18.9323 23.4989 17.2917C24.9364 15.6511 28.3335 15.6511 28.3335 15.6511Z\"\r\n fill=\"white\"\r\n />\r\n <path\r\n d=\"M13.3335 11.6667H19.6184V15.4167H13.3335V11.6667Z\"\r\n fill=\"white\"\r\n />\r\n </g>\r\n <defs>\r\n <linearGradient\r\n id=\"paint0_linear_958_585\"\r\n x1=\"20.0002\"\r\n y1=\"5\"\r\n x2=\"35.0002\"\r\n y2=\"30\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#452697\" />\r\n <stop offset=\"1\" stopColor=\"#7C5BFF\" />\r\n </linearGradient>\r\n <clipPath id=\"clip0_958_585\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </PopoverTrigger>\r\n\r\n {/* Absolute Positioned PopoverContent and Custom Sidebar Panel */}\r\n {isVisible && (\r\n <>\r\n {/* Overlay For closing tanya popup by clicking on side or background */}\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n <div\r\n className={`\r\n fixed z-50 h-screen w-[100vw] sm:w-[80vw] md:w-[770px] border-0 bg-white lg:rounded-l-xl overflow-hidden flex flex-col shadow-[0px_4px_10px_0px_#5F499840]\r\n top-0 right-0\r\n transition-transform duration-300 ease-in-out\r\n lg:transform lg:translate-y-0\r\n \r\n `}\r\n // ${\r\n // isAnimating\r\n // ? \"lg:translate-x-0 translate-y-0\"\r\n // : \"lg:translate-x-full translate-y-full\"\r\n // }\r\n style={{\r\n background:\r\n \"linear-gradient(170.1deg, #FFFFFF 60.03%, #E3DEEF 99.59%)\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n className={`flex justify-between p-3 bg-[#FFFFFF] border border-b-1 border-[#E5E5E5] `} //lg:rounded-tl-xl lg:rounded-bl-xl\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <div\r\n className=\"flex gap-2 w-28 h-12 text-center items-center p-2 border rounded-l-[20px] rounded-tr-[20px]\"\r\n style={{\r\n background:\r\n \"linear-gradient(265.62deg, #6851C6 5.24%, #8668FF 98.49%)\",\r\n }}\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 15 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 4.48438V0.5C15 0.5 8.94395 1.4375 6.78127 4.25C4.61859 7.0625 5.33095 15.5 5.33095 15.5H9.19857C9.19857 15.5 8.72793 7.76562 10.1654 6.125C11.6029 4.48438 15 4.48438 15 4.48438Z\"\r\n fill=\"white\"\r\n />\r\n <path d=\"M0 0.5H6.28488V4.25H0V0.5Z\" fill=\"white\" />\r\n </svg>\r\n\r\n <p className=\"text-[#FFFFFF] font-nunitoSans font-semibold\">\r\n TANYA\r\n </p>\r\n </div>\r\n <p\r\n className=\"text-[#5B5B5B] font-nunitoSans font-semibold\"\r\n style={{ fontStyle: \"italic\" }}\r\n >\r\n {\" \"}\r\n Your AI shopping assistant !{\" \"}\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n {/* close icon */}\r\n <button onClick={() => setIsOpen(false)}>\r\n <svg\r\n width=\"24\"\r\n height=\"25\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6036)\">\r\n <path\r\n d=\"M18 6.5L6 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6.5L18 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6036\">\r\n <rect\r\n width=\"24\"\r\n height=\"24\"\r\n fill=\"white\"\r\n transform=\"translate(0 0.5)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Chat Container */}\r\n <div className={`flex h-full md:flex-row lg:flex-row`}>\r\n <div\r\n className={`flex flex-col h-full ${\r\n product ? \"lg:w-2/3 w-full\" : \"w-full\"\r\n }`}\r\n >\r\n {/* Chat Body - Scrollable */}\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-2 space-y-4 hide-scrollbar flex-grow mb-24\"\r\n >\r\n {/* Shopping Options */}\r\n {storeDetails?.whomRequired && (\r\n <div\r\n className=\"mx-3 p-3 rounded-2xl bg-[#FFFFFF]\"\r\n // style={{\r\n // color: storeDetails?.tanyaThemeContrastColor,\r\n // backgroundColor: storeDetails.tanyaThemeColor, //need to comment\r\n // width: \"fit-content\",\r\n // }}\r\n >\r\n <div className=\"flex gap-2 bg-[#FFFFFF]\">\r\n {/* <Icon\r\n icon=\"mdi:shopping\"\r\n color=\"white\"\r\n width=\"22\"\r\n height=\"22\"\r\n /> */}\r\n <p className=\"font-bold font-nunitoSans text-[#494949]\">\r\n Is this for you or someone else?\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {shoppingOptions.map((option) => (\r\n <button\r\n key={option}\r\n onClick={() => handleWhomSelection(option)}\r\n className=\"px-2 py-2 font-semibold text-xs text-[#18181B] bg-[#F3F3F3] rounded-2xl\"\r\n style={{\r\n backgroundColor:\r\n whom === payloadMapping[option]\r\n ? \"#FFFFFF\"\r\n : \"#F3F3F3\",\r\n borderColor:\r\n whom === payloadMapping[option]\r\n ? \"#BBB3DD\"\r\n : \"\",\r\n }}\r\n >\r\n {option}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {/* Chat History */}\r\n {chatHistory.map((chat, index) => (\r\n <div key={index}>\r\n <div\r\n className=\"flex justify-end\"\r\n // ref={\r\n // index == chatHistory.length - 1 ? lastChat : null\r\n // }\r\n >\r\n <p className=\"text-sm font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n {chat.query}\r\n </p>\r\n </div>\r\n {chat.response && chat.response.includes(\"Thinking\") ? (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans animate-pulse font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n ) : (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n )}\r\n {productLoading &&\r\n !chat.response.includes(\"Thinking\") &&\r\n chat.products?.length == 0 && (\r\n <div>\r\n <p className=\"text-sm animate-pulse font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n Finding best products for you\r\n </p>\r\n </div>\r\n )}\r\n {chat?.products && chat?.products?.length > 0 && (\r\n <ProductDisplay\r\n chat={chat.products}\r\n storeDetails={storeDetails}\r\n />\r\n )}\r\n\r\n {/* Potential Questions */}\r\n {chat?.potentialQuestions.length > 0 && (\r\n <div className=\"my-2 px-4 text-sm text-gray-700\">\r\n <p\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949]\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n Why not explore these inquiries...\r\n </p>\r\n {chat.potentialQuestions\r\n .split(\",\")\r\n .map((question, idx) => (\r\n <button\r\n key={idx}\r\n className={`cursor-pointer font-nunitoSans font-semibold text-[#232323] border bg-[#804C9E0D] border-${storeDetails.themeDarkColor} m-1 rounded-xl px-2 py-1`}\r\n onClick={() => handleSendMessage(question)}\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n {question}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {chat?.secondaryLoading && (\r\n <div className=\"mt-3 mb-4 px-4\">\r\n <div\r\n className=\"tanya-surprise-wrapper bg-indigo-300 text-sm px-7 py-4 rounded-r-xl rounded-bl-2xl w-full relative overflow-hidden\"\r\n style={{\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex gap-1\">\r\n <div className=\"tanya-sparkle tanya-sparkle-1\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-2\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-3\">\r\n ✨\r\n </div>\r\n </div>\r\n <div className=\"tanya-shimmer\" />\r\n <p\r\n className=\"font-semibold tanya-pulse\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n I’ve found a special surprise crafted just for\r\n you… hang on a sec!\r\n </p>\r\n <p\r\n className=\"tanya-dots mt-1\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n • • •\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Secondary Response (from secondary flow) */}\r\n {chat?.secondaryResponse && (\r\n <>\r\n <div className=\"mt-3 mb-8 px-4 bg-indigo-300 rounded-tr-[5px]\">\r\n {/* Chat Response */}\r\n <div\r\n className=\"text-sm text-[#232323] bg-[#FFFFFF] px-7 py-4 rounded-br-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(\r\n chat.secondaryResponse\r\n ),\r\n }}\r\n />\r\n {chat.productSnapshot && (\r\n // chat.productSnapshot.points > 0 &&\r\n <div className=\"mt-4 w-full\">\r\n <div\r\n className=\"flex gap-4 items-stretch rounded-2xl p-4\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n <div\r\n className=\"flex-shrink-0 rounded-xl overflow-hidden border\"\r\n style={{\r\n width: 112,\r\n height: 112,\r\n borderColor: \"#eee\",\r\n }}\r\n >\r\n {chat.productSnapshot.image ? (\r\n <img\r\n src={chat.productSnapshot.image}\r\n alt={chat.productSnapshot.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs text-gray-500\">\r\n No Image\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-col flex-1 justify-between\">\r\n <div>\r\n <p className=\"font-semibold text-[15px] leading-snug\">\r\n {chat.productSnapshot.name}\r\n </p>\r\n <p className=\"mt-1 text-[14px] font-medium\">\r\n {chat.productSnapshot.price != null\r\n ? new Intl.NumberFormat(undefined, {\r\n style: \"currency\",\r\n currency:\r\n storeDetails?.currency ||\r\n \"USD\",\r\n }).format(\r\n chat.productSnapshot.price\r\n )\r\n : \"\"}\r\n </p>\r\n\r\n {chat.productSnapshot.points > 0 && (\r\n <p className=\"mt-1 text-xs opacity-80\">\r\n You will earn{\" \"}\r\n <strong>\r\n {chat.productSnapshot.points}{\" \"}\r\n points\r\n </strong>\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"mt-3 flex items-center gap-3\">\r\n <div className=\"flex items-center border rounded-full overflow-hidden\">\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity: Math.max(\r\n 1,\r\n m.productSnapshot\r\n .quantity - 1\r\n ),\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n −\r\n </button>\r\n <div className=\"px-3 py-1 text-sm select-none\">\r\n {chat.productSnapshot.quantity}\r\n </div>\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity:\r\n m.productSnapshot\r\n .quantity + 1,\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n +\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => {\r\n handleAddToCart(\r\n mapSnapshotToProduct(\r\n chat.productSnapshot!\r\n ),\r\n chat.productSnapshot!.quantity\r\n );\r\n }}\r\n disabled={adding}\r\n className=\"px-4 py-2 rounded-full font-medium\"\r\n style={{\r\n background:\r\n storeDetails.tanyaThemeColor,\r\n color:\r\n storeDetails?.tanyaThemeContrastColor ||\r\n \"#fff\",\r\n opacity: adding ? 0.8 : 1,\r\n }}\r\n >\r\n {adding ? \"Adding...\" : \"Add to cart\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n <div className=\"mb-20\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Sticky Bottom Input Bar */}\r\n <div className=\"flex flex-col gap-2 sticky bottom-0 left-0 right-0 bg-[#E3DEEF] z-50 px-4 py-2\">\r\n {/* Gradient Border Wrapper */}\r\n <div\r\n className=\"p-[1px] rounded-xl\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, #B09FFF 0%, #8D79F6 100%)\",\r\n }}\r\n >\r\n {/* Input + Mic + Submit */}\r\n <div className=\"flex items-center bg-[#FFFFFF] flex-1 rounded-xl px-2 py-1\">\r\n <input\r\n className=\"flex-1 bg-[#FFFFFF] text-[#232323] outline-none border-none px-2 py-2 text-sm\"\r\n placeholder=\"How can I help you...\"\r\n value={inputText}\r\n autoFocus\r\n onChange={(e) => setInputText(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading)\r\n handleSendMessage();\r\n }}\r\n />\r\n {/* Mic Icon */}\r\n {/* <button\r\n type=\"button\"\r\n className=\"p-2 text-[#959595] hover:text-[#6952C7]\"\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6086)\">\r\n <path\r\n d=\"M7.5 4.16663C7.5 3.50358 7.76339 2.8677 8.23223 2.39886C8.70107 1.93002 9.33696 1.66663 10 1.66663C10.663 1.66663 11.2989 1.93002 11.7678 2.39886C12.2366 2.8677 12.5 3.50358 12.5 4.16663V8.33329C12.5 8.99633 12.2366 9.63222 11.7678 10.1011C11.2989 10.5699 10.663 10.8333 10 10.8333C9.33696 10.8333 8.70107 10.5699 8.23223 10.1011C7.76339 9.63222 7.5 8.99633 7.5 8.33329V4.16663Z\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M4.1665 8.33337C4.1665 9.88047 4.78109 11.3642 5.87505 12.4582C6.96901 13.5521 8.45274 14.1667 9.99984 14.1667C11.5469 14.1667 13.0307 13.5521 14.1246 12.4582C15.2186 11.3642 15.8332 9.88047 15.8332 8.33337\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6.6665 17.5H13.3332\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10 14.1666V17.5\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6086\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button> */}\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"p-3\"\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"p-3 animate-spin rounded-full h-3 w-3 border-b-2\"\r\n style={{\r\n borderBottom: \"2px solid\",\r\n color: storeDetails.tanyaThemeColor,\r\n }}\r\n />\r\n ) : (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.6357 13.6701L18.3521 8.5208C19.8516 4.02242 20.6013 1.77322 19.414 0.585948C18.2268 -0.601312 15.9776 0.148418 11.4792 1.64788L6.32987 3.36432C2.69923 4.57453 0.883923 5.17964 0.368062 6.06698C-0.122688 6.91112 -0.122688 7.95369 0.368062 8.7978C0.883923 9.6852 2.69923 10.2903 6.32987 11.5005C6.77981 11.6505 7.28601 11.5434 7.62294 11.2096L13.1286 5.75495C13.4383 5.44808 13.9382 5.45041 14.245 5.76015C14.5519 6.06989 14.5496 6.56975 14.2398 6.87662L8.8231 12.2432C8.4518 12.6111 8.3342 13.1742 8.4995 13.6701C9.7097 17.3007 10.3148 19.1161 11.2022 19.6319C12.0463 20.1227 13.0889 20.1227 13.933 19.6319C14.8204 19.1161 15.4255 17.3008 16.6357 13.6701Z\"\r\n fill=\"#6952C7\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ProductDisplayCard addToCartPwa={addToCart} />\r\n </div>\r\n {/* </PopoverContent> */}\r\n </div>\r\n </>\r\n )}\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TanyaShoppingAssistantStream;\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nvar genericMessage = \"Invariant Violation\";\nvar _a = Object.setPrototypeOf, setPrototypeOf = _a === void 0 ? function (obj, proto) {\n obj.__proto__ = proto;\n return obj;\n} : _a;\nvar InvariantError = /** @class */ (function (_super) {\n __extends(InvariantError, _super);\n function InvariantError(message) {\n if (message === void 0) { message = genericMessage; }\n var _this = _super.call(this, typeof message === \"number\"\n ? genericMessage + \": \" + message + \" (see https://github.com/apollographql/invariant-packages)\"\n : message) || this;\n _this.framesToPop = 1;\n _this.name = genericMessage;\n setPrototypeOf(_this, InvariantError.prototype);\n return _this;\n }\n return InvariantError;\n}(Error));\nexport { InvariantError };\nexport function invariant(condition, message) {\n if (!condition) {\n throw new InvariantError(message);\n }\n}\nvar verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"];\nvar verbosityLevel = verbosityLevels.indexOf(\"log\");\nfunction wrapConsoleMethod(name) {\n return function () {\n if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n // Default to console.log if this host environment happens not to provide\n // all the console.* methods we need.\n var method = console[name] || console.log;\n return method.apply(console, arguments);\n }\n };\n}\n(function (invariant) {\n invariant.debug = wrapConsoleMethod(\"debug\");\n invariant.log = wrapConsoleMethod(\"log\");\n invariant.warn = wrapConsoleMethod(\"warn\");\n invariant.error = wrapConsoleMethod(\"error\");\n})(invariant || (invariant = {}));\nexport function setVerbosity(level) {\n var old = verbosityLevels[verbosityLevel];\n verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n return old;\n}\nexport default invariant;\n//# sourceMappingURL=invariant.js.map","export var version = \"3.14.0\";\n//# sourceMappingURL=version.js.map","export function maybe(thunk) {\n try {\n return thunk();\n }\n catch (_a) { }\n}\n//# sourceMappingURL=maybe.js.map","import { maybe } from \"./maybe.js\";\nexport default (maybe(function () { return globalThis; }) ||\n maybe(function () { return window; }) ||\n maybe(function () { return self; }) ||\n maybe(function () { return global; }) || // We don't expect the Function constructor ever to be invoked at runtime, as\n// long as at least one of globalThis, window, self, or global is defined, so\n// we are under no obligation to make it easy for static analysis tools to\n// detect syntactic usage of the Function constructor. If you think you can\n// improve your static analysis to detect this obfuscation, think again. This\n// is an arms race you cannot win, at least not in JavaScript.\nmaybe(function () {\n return maybe.constructor(\"return this\")();\n}));\n//# sourceMappingURL=global.js.map","var prefixCounts = new Map();\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix) {\n var count = prefixCounts.get(prefix) || 1;\n prefixCounts.set(prefix, count + 1);\n return \"\".concat(prefix, \":\").concat(count, \":\").concat(Math.random().toString(36).slice(2));\n}\n//# sourceMappingURL=makeUniqueId.js.map","import { makeUniqueId } from \"./makeUniqueId.js\";\nexport function stringifyForDisplay(value, space) {\n if (space === void 0) { space = 0; }\n var undefId = makeUniqueId(\"stringifyForDisplay\");\n return JSON.stringify(value, function (key, value) {\n return value === void 0 ? undefId : value;\n }, space)\n .split(JSON.stringify(undefId))\n .join(\"<undefined>\");\n}\n//# sourceMappingURL=stringifyForDisplay.js.map","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\nfunction wrap(fn) {\n return function (message) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof message === \"number\") {\n var arg0 = message;\n message = getHandledErrorMsg(arg0);\n if (!message) {\n message = getFallbackErrorMsg(arg0, args);\n args = [];\n }\n }\n fn.apply(void 0, [message].concat(args));\n };\n}\nvar invariant = Object.assign(function invariant(condition, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (!condition) {\n originalInvariant(condition, getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args));\n }\n}, {\n debug: wrap(originalInvariant.debug),\n log: wrap(originalInvariant.log),\n warn: wrap(originalInvariant.warn),\n error: wrap(originalInvariant.error),\n});\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n return new InvariantError(getHandledErrorMsg(message, optionalParams) ||\n getFallbackErrorMsg(message, optionalParams));\n}\nvar ApolloErrorMessageHandler = Symbol.for(\"ApolloErrorMessageHandler_\" + version);\nfunction stringify(arg) {\n if (typeof arg == \"string\") {\n return arg;\n }\n try {\n return stringifyForDisplay(arg, 2).slice(0, 1000);\n }\n catch (_a) {\n return \"<non-serializable>\";\n }\n}\nfunction getHandledErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return (global[ApolloErrorMessageHandler] &&\n global[ApolloErrorMessageHandler](message, messageArgs.map(stringify)));\n}\nfunction getFallbackErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return \"An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#\".concat(encodeURIComponent(JSON.stringify({\n version: version,\n message: message,\n args: messageArgs.map(stringify),\n })));\n}\nexport { invariant, InvariantError, newInvariantError, ApolloErrorMessageHandler, };\n//# sourceMappingURL=invariantWrappers.js.map","import { invariant, newInvariantError } from \"../globals/index.js\";\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc) {\n invariant(doc && doc.kind === \"Document\", 116);\n var operations = doc.definitions\n .filter(function (d) { return d.kind !== \"FragmentDefinition\"; })\n .map(function (definition) {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(117, definition.kind);\n }\n return definition;\n });\n invariant(operations.length <= 1, 118, operations.length);\n return doc;\n}\nexport function getOperationDefinition(doc) {\n checkDocument(doc);\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"OperationDefinition\";\n })[0];\n}\nexport function getOperationName(doc) {\n return (doc.definitions\n .filter(function (definition) {\n return definition.kind === \"OperationDefinition\" && !!definition.name;\n })\n .map(function (x) { return x.name.value; })[0] || null);\n}\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(doc) {\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"FragmentDefinition\";\n });\n}\nexport function getQueryDefinition(doc) {\n var queryDef = getOperationDefinition(doc);\n invariant(queryDef && queryDef.operation === \"query\", 119);\n return queryDef;\n}\nexport function getFragmentDefinition(doc) {\n invariant(doc.kind === \"Document\", 120);\n invariant(doc.definitions.length <= 1, 121);\n var fragmentDef = doc.definitions[0];\n invariant(fragmentDef.kind === \"FragmentDefinition\", 122);\n return fragmentDef;\n}\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(queryDoc) {\n checkDocument(queryDoc);\n var fragmentDefinition;\n for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {\n var definition = _a[_i];\n if (definition.kind === \"OperationDefinition\") {\n var operation = definition.operation;\n if (operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\") {\n return definition;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition;\n }\n }\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n throw newInvariantError(123);\n}\nexport function getDefaultValues(definition) {\n var defaultValues = Object.create(null);\n var defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(function (def) {\n if (def.defaultValue) {\n valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);\n }\n });\n }\n return defaultValues;\n}\n//# sourceMappingURL=getFromAST.js.map","// This currentContext variable will only be used if the makeSlotClass\n// function is called, which happens only if this is the first copy of the\n// @wry/context package to be imported.\nlet currentContext = null;\n// This unique internal object is used to denote the absence of a value\n// for a given Slot, and is never exposed to outside code.\nconst MISSING_VALUE = {};\nlet idCounter = 1;\n// Although we can't do anything about the cost of duplicated code from\n// accidentally bundling multiple copies of the @wry/context package, we can\n// avoid creating the Slot class more than once using makeSlotClass.\nconst makeSlotClass = () => class Slot {\n constructor() {\n // If you have a Slot object, you can find out its slot.id, but you cannot\n // guess the slot.id of a Slot you don't have access to, thanks to the\n // randomized suffix.\n this.id = [\n \"slot\",\n idCounter++,\n Date.now(),\n Math.random().toString(36).slice(2),\n ].join(\":\");\n }\n hasValue() {\n for (let context = currentContext; context; context = context.parent) {\n // We use the Slot object iself as a key to its value, which means the\n // value cannot be obtained without a reference to the Slot object.\n if (this.id in context.slots) {\n const value = context.slots[this.id];\n if (value === MISSING_VALUE)\n break;\n if (context !== currentContext) {\n // Cache the value in currentContext.slots so the next lookup will\n // be faster. This caching is safe because the tree of contexts and\n // the values of the slots are logically immutable.\n currentContext.slots[this.id] = value;\n }\n return true;\n }\n }\n if (currentContext) {\n // If a value was not found for this Slot, it's never going to be found\n // no matter how many times we look it up, so we might as well cache\n // the absence of the value, too.\n currentContext.slots[this.id] = MISSING_VALUE;\n }\n return false;\n }\n getValue() {\n if (this.hasValue()) {\n return currentContext.slots[this.id];\n }\n }\n withValue(value, callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n const slots = {\n __proto__: null,\n [this.id]: value,\n };\n const parent = currentContext;\n currentContext = { parent, slots };\n try {\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = parent;\n }\n }\n // Capture the current context and wrap a callback function so that it\n // reestablishes the captured context when called.\n static bind(callback) {\n const context = currentContext;\n return function () {\n const saved = currentContext;\n try {\n currentContext = context;\n return callback.apply(this, arguments);\n }\n finally {\n currentContext = saved;\n }\n };\n }\n // Immediately run a callback function without any captured context.\n static noContext(callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n if (currentContext) {\n const saved = currentContext;\n try {\n currentContext = null;\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = saved;\n }\n }\n else {\n return callback.apply(thisArg, args);\n }\n }\n};\nfunction maybe(fn) {\n try {\n return fn();\n }\n catch (ignored) { }\n}\n// We store a single global implementation of the Slot class as a permanent\n// non-enumerable property of the globalThis object. This obfuscation does\n// nothing to prevent access to the Slot class, but at least it ensures the\n// implementation (i.e. currentContext) cannot be tampered with, and all copies\n// of the @wry/context package (hopefully just one) will share the same Slot\n// implementation. Since the first copy of the @wry/context package to be\n// imported wins, this technique imposes a steep cost for any future breaking\n// changes to the Slot class.\nconst globalKey = \"@wry/context:Slot\";\nconst host = \n// Prefer globalThis when available.\n// https://github.com/benjamn/wryware/issues/347\nmaybe(() => globalThis) ||\n // Fall back to global, which works in Node.js and may be converted by some\n // bundlers to the appropriate identifier (window, self, ...) depending on the\n // bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224\n maybe(() => global) ||\n // Otherwise, use a dummy host that's local to this module. We used to fall\n // back to using the Array constructor as a namespace, but that was flagged in\n // https://github.com/benjamn/wryware/issues/347, and can be avoided.\n Object.create(null);\n// Whichever globalHost we're using, make TypeScript happy about the additional\n// globalKey property.\nconst globalHost = host;\nexport const Slot = globalHost[globalKey] ||\n // Earlier versions of this package stored the globalKey property on the Array\n // constructor, so we check there as well, to prevent Slot class duplication.\n Array[globalKey] ||\n (function (Slot) {\n try {\n Object.defineProperty(globalHost, globalKey, {\n value: Slot,\n enumerable: false,\n writable: false,\n // When it was possible for globalHost to be the Array constructor (a\n // legacy Slot dedup strategy), it was important for the property to be\n // configurable:true so it could be deleted. That does not seem to be as\n // important when globalHost is the global object, but I don't want to\n // cause similar problems again, and configurable:true seems safest.\n // https://github.com/endojs/endo/issues/576#issuecomment-1178274008\n configurable: true\n });\n }\n finally {\n return Slot;\n }\n })(makeSlotClass());\n//# sourceMappingURL=slot.js.map","import { Slot } from \"./slot.js\";\nexport { Slot };\nexport const { bind, noContext } = Slot;\n// Like global.setTimeout, except the callback runs with captured context.\nexport { setTimeoutWithContext as setTimeout };\nfunction setTimeoutWithContext(callback, delay) {\n return setTimeout(bind(callback), delay);\n}\n// Turn any generator function into an async function (using yield instead\n// of await), with context automatically preserved across yields.\nexport function asyncFromGen(genFn) {\n return function () {\n const gen = genFn.apply(this, arguments);\n const boundNext = bind(gen.next);\n const boundThrow = bind(gen.throw);\n return new Promise((resolve, reject) => {\n function invoke(method, argument) {\n try {\n var result = method.call(gen, argument);\n }\n catch (error) {\n return reject(error);\n }\n const next = result.done ? resolve : invokeNext;\n if (isPromiseLike(result.value)) {\n result.value.then(next, result.done ? reject : invokeThrow);\n }\n else {\n next(result.value);\n }\n }\n const invokeNext = (value) => invoke(boundNext, value);\n const invokeThrow = (error) => invoke(boundThrow, error);\n invokeNext();\n });\n };\n}\nfunction isPromiseLike(value) {\n return value && typeof value.then === \"function\";\n}\n// If you use the fibers npm package to implement coroutines in Node.js,\n// you should call this function at least once to ensure context management\n// remains coherent across any yields.\nconst wrappedFibers = [];\nexport function wrapYieldingFiberMethods(Fiber) {\n // There can be only one implementation of Fiber per process, so this array\n // should never grow longer than one element.\n if (wrappedFibers.indexOf(Fiber) < 0) {\n const wrap = (obj, method) => {\n const fn = obj[method];\n obj[method] = function () {\n return noContext(fn, arguments, this);\n };\n };\n // These methods can yield, according to\n // https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100\n wrap(Fiber, \"yield\");\n wrap(Fiber.prototype, \"run\");\n wrap(Fiber.prototype, \"throwInto\");\n wrappedFibers.push(Fiber);\n }\n return Fiber;\n}\n//# sourceMappingURL=index.js.map","import { Slot } from \"@wry/context\";\nexport const parentEntrySlot = new Slot();\nexport function nonReactive(fn) {\n return parentEntrySlot.withValue(void 0, fn);\n}\nexport { Slot };\nexport { bind as bindContext, noContext, setTimeout, asyncFromGen, } from \"@wry/context\";\n//# sourceMappingURL=context.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\n\t\t\tif (typeof Symbol.for === 'function') {\n\t\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t\t// META: It's a resource locator!\n\t\t\t\tresult = Symbol.for('https://github.com/benlesh/symbol-observable');\n\t\t\t} else {\n\t\t\t\t// Symbol.for didn't exist! The best we can do at this point is a totally \n\t\t\t\t// unique symbol. Note that the string argument here is a descriptor, not\n\t\t\t\t// an identifier. This symbol is unique.\n\t\t\t\tresult = Symbol('https://github.com/benlesh/symbol-observable');\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tSymbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import { Observable } from \"zen-observable-ts\";\n// This simplified polyfill attempts to follow the ECMAScript Observable\n// proposal (https://github.com/zenparsing/es-observable)\nimport \"symbol-observable\";\n// The zen-observable package defines Observable.prototype[Symbol.observable]\n// when Symbol is supported, but RxJS interop depends on also setting this fake\n// '@@observable' string as a polyfill for Symbol.observable.\nvar prototype = Observable.prototype;\nvar fakeObsSymbol = \"@@observable\";\nif (!prototype[fakeObsSymbol]) {\n // @ts-expect-error\n prototype[fakeObsSymbol] = function () {\n return this;\n };\n}\nexport { Observable };\n//# sourceMappingURL=Observable.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport function validateOperation(operation) {\n var OPERATION_FIELDS = [\n \"query\",\n \"operationName\",\n \"variables\",\n \"extensions\",\n \"context\",\n ];\n for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) {\n var key = _a[_i];\n if (OPERATION_FIELDS.indexOf(key) < 0) {\n throw newInvariantError(58, key);\n }\n }\n return operation;\n}\n//# sourceMappingURL=validateOperation.js.map","import { __assign } from \"tslib\";\nexport function createOperation(starting, operation) {\n var context = __assign({}, starting);\n var setContext = function (next) {\n if (typeof next === \"function\") {\n context = __assign(__assign({}, context), next(context));\n }\n else {\n context = __assign(__assign({}, context), next);\n }\n };\n var getContext = function () { return (__assign({}, context)); };\n Object.defineProperty(operation, \"setContext\", {\n enumerable: false,\n value: setContext,\n });\n Object.defineProperty(operation, \"getContext\", {\n enumerable: false,\n value: getContext,\n });\n return operation;\n}\n//# sourceMappingURL=createOperation.js.map","import { getOperationName } from \"../../utilities/index.js\";\nexport function transformOperation(operation) {\n var transformedOperation = {\n variables: operation.variables || {},\n extensions: operation.extensions || {},\n operationName: operation.operationName,\n query: operation.query,\n };\n // Best guess at an operation name\n if (!transformedOperation.operationName) {\n transformedOperation.operationName =\n typeof transformedOperation.query !== \"string\" ?\n getOperationName(transformedOperation.query) || undefined\n : \"\";\n }\n return transformedOperation;\n}\n//# sourceMappingURL=transformOperation.js.map","import { __spreadArray } from \"tslib\";\nimport { Slot } from \"optimism\";\nimport { invariant, global as untypedGlobal } from \"../globals/index.js\";\nvar muteAllDeprecations = Symbol.for(\"apollo.deprecations\");\nvar global = untypedGlobal;\nvar slot = new Slot();\nfunction isMuted(name) {\n return global[muteAllDeprecations] || (slot.getValue() || []).includes(name);\n}\nexport function muteDeprecations(name) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return slot.withValue.apply(slot, __spreadArray([Array.isArray(name) ? name : [name]], args, false));\n}\nexport function warnRemovedOption(options, name, callSite, recommendation) {\n if (recommendation === void 0) { recommendation = \"Please remove this option.\"; }\n warnDeprecated(name, function () {\n if (name in options) {\n globalThis.__DEV__ !== false && invariant.warn(104, callSite, name, recommendation);\n }\n });\n}\nexport function warnDeprecated(name, cb) {\n if (!isMuted(name)) {\n cb();\n }\n}\nexport function withDisabledDeprecations() {\n var _a;\n var prev = global[muteAllDeprecations];\n global[muteAllDeprecations] = true;\n return _a = {},\n _a[Symbol.dispose] = function () {\n global[muteAllDeprecations] = prev;\n },\n _a;\n}\n//# sourceMappingURL=index.js.map","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { validateOperation, createOperation, transformOperation, } from \"../utils/index.js\";\nimport { warnDeprecated } from \"../../utilities/deprecation/index.js\";\nfunction passthrough(op, forward) {\n return (forward ? forward(op) : Observable.of());\n}\nfunction toLink(handler) {\n return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\nfunction isTerminating(link) {\n return link.request.length <= 1;\n}\nvar ApolloLink = /** @class */ (function () {\n function ApolloLink(request) {\n if (request)\n this.request = request;\n }\n ApolloLink.empty = function () {\n return new ApolloLink(function () { return Observable.of(); });\n };\n ApolloLink.from = function (links) {\n if (links.length === 0)\n return ApolloLink.empty();\n return links.map(toLink).reduce(function (x, y) { return x.concat(y); });\n };\n ApolloLink.split = function (test, left, right) {\n var leftLink = toLink(left);\n var rightLink = toLink(right || new ApolloLink(passthrough));\n var ret;\n if (isTerminating(leftLink) && isTerminating(rightLink)) {\n ret = new ApolloLink(function (operation) {\n return test(operation) ?\n leftLink.request(operation) || Observable.of()\n : rightLink.request(operation) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return test(operation) ?\n leftLink.request(operation, forward) || Observable.of()\n : rightLink.request(operation, forward) || Observable.of();\n });\n }\n return Object.assign(ret, { left: leftLink, right: rightLink });\n };\n ApolloLink.execute = function (link, operation) {\n return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());\n };\n ApolloLink.concat = function (first, second) {\n var firstLink = toLink(first);\n if (isTerminating(firstLink)) {\n globalThis.__DEV__ !== false && invariant.warn(47, firstLink);\n return firstLink;\n }\n var nextLink = toLink(second);\n var ret;\n if (isTerminating(nextLink)) {\n ret = new ApolloLink(function (operation) {\n return firstLink.request(operation, function (op) { return nextLink.request(op) || Observable.of(); }) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return (firstLink.request(operation, function (op) {\n return nextLink.request(op, forward) || Observable.of();\n }) || Observable.of());\n });\n }\n return Object.assign(ret, { left: firstLink, right: nextLink });\n };\n ApolloLink.prototype.split = function (test, left, right) {\n return this.concat(ApolloLink.split(test, left, right || new ApolloLink(passthrough)));\n };\n ApolloLink.prototype.concat = function (next) {\n return ApolloLink.concat(this, next);\n };\n ApolloLink.prototype.request = function (operation, forward) {\n throw newInvariantError(48);\n };\n /**\n * @deprecated `onError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.onError = function (error, observer) {\n if (globalThis.__DEV__ !== false) {\n warnDeprecated(\"onError\", function () {\n globalThis.__DEV__ !== false && invariant.warn(49);\n });\n }\n if (observer && observer.error) {\n observer.error(error);\n // Returning false indicates that observer.error does not need to be\n // called again, since it was already called (on the previous line).\n // Calling observer.error again would not cause any real problems,\n // since only the first call matters, but custom onError functions\n // might have other reasons for wanting to prevent the default\n // behavior by returning false.\n return false;\n }\n // Throw errors will be passed to observer.error.\n throw error;\n };\n /**\n * @deprecated `setOnError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.setOnError = function (fn) {\n if (globalThis.__DEV__ !== false) {\n globalThis.__DEV__ !== false && invariant.warn(50);\n }\n this.onError = fn;\n return this;\n };\n return ApolloLink;\n}());\nexport { ApolloLink };\n//# sourceMappingURL=ApolloLink.js.map","import { __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nexport function setContext(setter) {\n return new ApolloLink(function (operation, forward) {\n var request = __rest(operation, []);\n return new Observable(function (observer) {\n var handle;\n var closed = false;\n Promise.resolve(request)\n .then(function (req) { return setter(req, operation.getContext()); })\n .then(operation.setContext)\n .then(function () {\n // if the observer is already closed, no need to subscribe.\n if (closed)\n return;\n handle = forward(operation).subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n })\n .catch(observer.error.bind(observer));\n return function () {\n closed = true;\n if (handle)\n handle.unsubscribe();\n };\n });\n });\n}\n//# sourceMappingURL=index.js.map","import axios from \"axios\";\nexport const generateToken = async () => {\n const URL = import.meta.env.VITE_TOKEN_URL;\n const clientId = import.meta.env.VITE_CLIENT_ID;\n const clientSecret = import.meta.env.VITE_CLIENT_SECRET;\n if (!URL || !clientId || !clientSecret) {\n console.error(\"Missing token credentials\");\n throw new Error(\"Missing token credentials\");\n }\n const authHeader = \"Basic \" +\n btoa(encodeURIComponent(clientId) + \":\" + encodeURIComponent(clientSecret));\n try {\n const response = await axios.post(URL, new URLSearchParams({ grant_type: \"client_credentials\" }), // Only grant_type in body\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Authorization: authHeader,\n },\n });\n if (response.status === 200 && response.data.access_token) {\n return response.data.access_token;\n }\n else {\n console.error(\"Failed to fetch token:\", response.data);\n return null;\n }\n }\n catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error fetching token:\", error.response || error.message);\n }\n else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n","import { ApolloClient, InMemoryCache, createHttpLink } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { generateToken } from \"../utils/generateToken\";\n\nconst BASE_URL = import.meta.env.VITE_BASE_URL;\n\nif (!BASE_URL) {\n console.error(\"Missing base URL\");\n throw new Error(\"Missing base URL\");\n}\n\nconst httpLink = createHttpLink({\n uri: `${BASE_URL}`,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n // Always get fresh token instead of storing it\n const token = await generateToken();\n\n return {\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n };\n});\n\nexport const apolloClient = new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: \"cache-and-network\",\n },\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApolloProvider } from \"@apollo/client\";\nimport ReduxProvider from \"../provider/reduxProvider\";\nimport TanyaShoppingAssistantStream from \"./tanya-shopping-assistent\";\nimport { apolloClient } from \"../graphQL/apollo-client\";\n\nconst TanyaWrapper = (props: any) => {\n \n const { tanyaConfig } = props;\n return (\n <ApolloProvider client={apolloClient}>\n <ReduxProvider>\n <TanyaShoppingAssistantStream tanyaConfig={tanyaConfig} />\n </ReduxProvider>\n </ApolloProvider>\n );\n};\n\nexport default TanyaWrapper;\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\tconst providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n\tproviders.forEach((provider$1) => {\n\t\tconst prefixes = typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {});\n\t\tprefixes.forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\tconst storage = getStorage(provider, prefix);\n\treturn !!addIconSet(storage, data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\tconst result = {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n\treturn result;\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst icons = params.icons;\n\t\t\tconst iconsList = icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\tconst instance = {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n\treturn instance;\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tconst redundancy = initRedundancy(config);\n\t\tconst cachedReundancy = {\n\t\t\tconfig,\n\t\t\tredundancy\n\t\t};\n\t\tredundancyCache[provider] = cachedReundancy;\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst moduleKey = target.resources ? target.resources[0] : \"\";\n\t\t\tconst api = getAPIModule(moduleKey);\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tconst parsed = addIconSet(storage, data);\n\t\tif (!parsed.length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tconst response = customIconLoader(name, prefix, provider);\n\t\t\t\t\tparsePossiblyAsyncResponse(response, (data) => {\n\t\t\t\t\t\tconst iconSet = data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null;\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], iconSet);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst params = api.prepare(provider, prefix, valid);\n\t\t\tparams.forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n\tconst sortedIcons = sortIcons(cleanedIcons);\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tconst value = str.trim();\n\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n WebkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n ...defaultExtendedIconCustomisations,\n inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n // Get default properties\n const defaultProps = props.inline\n ? inlineDefaults\n : defaultExtendedIconCustomisations;\n // Get all customisations\n const customisations = mergeCustomisations(defaultProps, props);\n // Check mode\n const mode = props.mode || 'svg';\n // Create style\n const style = {};\n const customStyle = props.style || {};\n // Create SVG component properties\n const componentProps = {\n ...(mode === 'svg' ? svgDefaults : {}),\n };\n if (name) {\n const iconName = stringToIcon(name, false, true);\n if (iconName) {\n const classNames = ['iconify'];\n const props = [\n 'provider',\n 'prefix',\n ];\n for (const prop of props) {\n if (iconName[prop]) {\n classNames.push('iconify--' + iconName[prop]);\n }\n }\n componentProps.className = classNames.join(' ');\n }\n }\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'children':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'fallback':\n break;\n // Forward ref\n case '_ref':\n componentProps.ref = value;\n break;\n // Merge class names\n case 'className':\n componentProps[key] =\n (componentProps[key] ? componentProps[key] + ' ' : '') +\n value;\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: copy to style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n // Copy missing property if it does not exist in customisations\n default:\n if (defaultProps[key] === void 0) {\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add icon stuff\n componentProps.dangerouslySetInnerHTML = {\n __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n };\n return createElement('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return createElement('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\nfunction IconComponent(props) {\n const [mounted, setMounted] = useState(!!props.ssr);\n const [abort, setAbort] = useState({});\n // Get initial state\n function getInitialState(mounted) {\n if (mounted) {\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n return {\n name: '',\n data: name,\n };\n }\n const data = getIconData(name);\n if (data) {\n return {\n name,\n data,\n };\n }\n }\n return {\n name: '',\n };\n }\n const [state, setState] = useState(getInitialState(!!props.ssr));\n // Cancel loading\n function cleanup() {\n const callback = abort.callback;\n if (callback) {\n callback();\n setAbort({});\n }\n }\n // Change state if it is different\n function changeState(newState) {\n if (JSON.stringify(state) !== JSON.stringify(newState)) {\n cleanup();\n setState(newState);\n return true;\n }\n }\n // Update state\n function updateState() {\n var _a;\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n changeState({\n name: '',\n data: name,\n });\n return;\n }\n // New icon or got icon data\n const data = getIconData(name);\n if (changeState({\n name,\n data,\n })) {\n if (data === undefined) {\n // Load icon, update state when done\n const callback = loadIcons([name], updateState);\n setAbort({\n callback,\n });\n }\n else if (data) {\n // Icon data is available: trigger onLoad callback if present\n (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n }\n }\n }\n // Mounted state, cleanup for loader\n useEffect(() => {\n setMounted(true);\n return cleanup;\n }, []);\n // Icon changed or component mounted\n useEffect(() => {\n if (mounted) {\n updateState();\n }\n }, [props.icon, mounted]);\n // Render icon\n const { name, data } = state;\n if (!data) {\n return props.children\n ? props.children\n : props.fallback\n ? props.fallback\n : createElement('span', {});\n }\n return render({\n ...defaultIconProps,\n ...data,\n }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n ...props,\n _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n inline: true,\n ...props,\n _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/** -------- Variant helpers from your shared utilities -------- */\r\nexport const CURRENCY_PREF = \"USD\";\r\n\r\nexport const isVariantOnStock = (variant?: any): boolean => {\r\n const availability = variant?.availability;\r\n if (!availability) return false;\r\n const firstChannelAvail =\r\n availability.channels?.results?.[0]?.availability;\r\n\r\n if (firstChannelAvail) {\r\n return (\r\n firstChannelAvail.isOnStock === true &&\r\n (firstChannelAvail.availableQuantity ?? 0) > 0\r\n );\r\n }\r\n\r\n return false;\r\n};\r\n\r\n\r\n/** Prefer discounted price, prefer desired currency, with safe fallbacks */\r\nexport const pickVariantMoney = (variant: any, currencyPref = CURRENCY_PREF) => {\r\n const prices = variant?.prices ?? [];\r\n if (!prices.length) return null;\r\n\r\n const choose = (list: any[]): any => {\r\n const discountedFirst = list.find((p) => !!p.discounted?.value);\r\n if (discountedFirst) {\r\n return {\r\n cent: discountedFirst.discounted.value.centAmount,\r\n cur: discountedFirst.discounted.value.currencyCode,\r\n regularCent: discountedFirst.value?.centAmount,\r\n };\r\n }\r\n const normal = list[0]?.value;\r\n return normal ? { cent: normal.centAmount, cur: normal.currencyCode } : null;\r\n };\r\n\r\n const prefer = prices.filter(\r\n (p: any) => (p.discounted?.value || p.value)?.currencyCode === currencyPref\r\n );\r\n const picked = choose(prefer);\r\n if (picked) return picked;\r\n return choose(prices) || null;\r\n};\r\n\r\n/** Get attribute label (case-insensitive) */\r\nexport const getVariantAttributeLabel = (attributes: any[], name: string): string => {\r\n if (!Array.isArray(attributes)) return \"\";\r\n const attr =\r\n attributes.find((a) => a.name === name) ||\r\n attributes.find((a) => a.name?.toLowerCase() === name.toLowerCase());\r\n if (!attr || !attr.value) return \"\";\r\n return typeof attr.value === \"object\" ? attr.value.label || \"\" : attr.value;\r\n};\r\n\r\nexport const getVariantStyleAndLabel = (attributes: any[]) => {\r\n let sizeLabel = \"\";\r\n if (Array.isArray(attributes)) {\r\n const sizeAttr =\r\n attributes.find((a) => a.name === \"size\") ||\r\n attributes.find((a) => a.name === \"Size\");\r\n if (sizeAttr && sizeAttr.value) {\r\n sizeLabel =\r\n typeof sizeAttr.value === \"object\"\r\n ? sizeAttr.value.label || \"\"\r\n : sizeAttr.value;\r\n }\r\n }\r\n return { sizeLabel };\r\n};\r\n\r\nexport const getVariantColor = (v?: any) =>\r\n getVariantAttributeLabel(v?.attributesRaw ?? [], \"color\");\r\n\r\nexport const getVariantSize = (v?: any) =>\r\n getVariantStyleAndLabel(v?.attributesRaw ?? []).sizeLabel;\r\n\r\n/** Find matching variant by color/size */\r\nexport const findVariantBy = (variants: any[], color?: string | null, size?: string | null) => {\r\n for (const e of variants) {\r\n const c = getVariantColor(e.variant);\r\n const s = getVariantSize(e.variant);\r\n const colorOk = color ? c === color : true;\r\n const sizeOk = size ? s === size : true;\r\n if (colorOk && sizeOk) return e;\r\n }\r\n return null;\r\n};\r\n\r\nexport const getVariantAvailableQty = (variant: any): number | null => {\r\n if (!variant?.availability) return null;\r\n\r\n const channelResult =\r\n variant.availability.channels?.results &&\r\n variant.availability.channels.results[0];\r\n\r\n const channelQty = channelResult?.availability?.availableQuantity;\r\n\r\n if (typeof channelQty === \"number\") {\r\n return channelQty;\r\n }\r\n\r\n return null;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { Icon } from \"@iconify/react/dist/iconify.js\";\r\n// import { useCustomerAddress } from \"@/hooks/useAddress\";\r\n// import { useNavigate } from \"react-router\";\r\nimport {\r\n CURRENCY_PREF,\r\n getVariantColor,\r\n getVariantSize,\r\n findVariantBy,\r\n pickVariantMoney,\r\n} from \"./productVariantHelper\";\r\nimport { apiConfig } from \"../../config/api\";\r\nimport { getJWTToken, authData } from \"../../sfcc-apis/session\";\r\nimport { findImageGroupBy } from \"../lib/utils\";\r\n\r\ntype AgenticShoppingProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n product: any;\r\n index?: number;\r\n addressListProp?: any;\r\n addressLoading?: boolean;\r\n variationAttributes: any;\r\n};\r\n\r\nconst initialCapital = (str: string) => {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n};\r\n\r\ntype DeliveryOptionKey = \"standard\" | \"express\" | \"sameday\";\r\n\r\nconst DELIVERY_OPTIONS: Record<\r\n DeliveryOptionKey,\r\n { label: string; fee: number; subtitle: string; icon: string }\r\n> = {\r\n standard: {\r\n label: \"Standard Delivery\",\r\n fee: 0,\r\n subtitle: \"Arrives in 4–6 days (Free)\",\r\n icon: \"mdi:clock-outline\",\r\n },\r\n express: {\r\n label: \"Express Delivery\",\r\n fee: 5,\r\n subtitle: \"Arrives in 1–2 days (+$5)\",\r\n icon: \"mdi:flash\",\r\n },\r\n sameday: {\r\n label: \"Same-Day Delivery\",\r\n fee: 10,\r\n subtitle: \"Available in select locations (+$10)\",\r\n icon: \"mdi:truck-fast-outline\",\r\n },\r\n};\r\n\r\nconst SHIPPING_METHOD_MAP: Record<DeliveryOptionKey, string> = {\r\n standard: \"GROUND\",\r\n express: \"2-DAY SHIPPING\",\r\n sameday: \"OVERNIGHT\",\r\n};\r\n\r\nconst formatCurrency = (amount: number, currency: string) => {\r\n try {\r\n return amount.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: currency || \"USD\",\r\n });\r\n } catch {\r\n return `${currency} ${amount.toFixed(2)}`;\r\n }\r\n};\r\n\r\n// ------------ any/any helpers ------------\r\nconst pvMaster = (p?: any): any | undefined => p?.masterVariant;\r\nconst pvVariants = (p?: any): any[] =>\r\n Array.isArray(p?.variants) ? p!.variants : [];\r\nconst pvAll = (p?: any): any[] => {\r\n const m = pvMaster(p);\r\n return m ? [m, ...pvVariants(p)] : pvVariants(p);\r\n};\r\n\r\nconst getVariantByIndex = (p: any, idx = 0): any | undefined => pvAll(p)[idx];\r\n\r\nconst getVariantImage = (v?: any) => v?.images?.[0]?.url ?? \"\";\r\n\r\n// any-aware image/title\r\nconst getProductImage = (p?: any, v?: any) =>\r\n getVariantImage(v) ||\r\n p.imageGroups?.[0]?.images?.[0]?.link ||\r\n p.image_groups?.[0]?.images?.[0]?.link ||\r\n \"\";\r\n\r\nconst getProductTitle = (p?: any) =>\r\n p?.name || (p as any)?.title || (p as any)?.productName || \"any\";\r\n\r\n/** any price via pickVariantMoney with safe fallbacks */\r\nconst getVariantPrice = (v?: any) => {\r\n const picked = v ? pickVariantMoney(v, CURRENCY_PREF) : null;\r\n if (picked?.cent && picked?.cur) {\r\n return {\r\n amount: +(picked.cent / 100),\r\n currency: picked.cur,\r\n regularAmount: picked.regularCent ? picked.regularCent / 100 : undefined,\r\n };\r\n }\r\n const cents = v?.prices?.[0]?.value?.centAmount;\r\n const cur = v?.prices?.[0]?.value?.currencyCode ?? CURRENCY_PREF;\r\n const amount = Number.isFinite(cents) ? +(Number(cents) / 100) : 0;\r\n return { amount, currency: cur };\r\n};\r\n\r\nconst getProductPrice = (p?: any, v?: any) => {\r\n const { amount } = getVariantPrice(v);\r\n if (amount) return amount;\r\n const val =\r\n (p as any)?.price ??\r\n (p as any)?.sellingPrice ??\r\n (p as any)?.unitPrice ??\r\n (p as any)?.mrp ??\r\n 0;\r\n const n = Number(val);\r\n return Number.isFinite(n) ? n : 0;\r\n};\r\n\r\nconst getProductSku = (p?: any) =>\r\n (p as any)?.sku || (p as any)?.variant?.sku || (p as any)?.selectedSku || \"\";\r\nconst getProductColor = (p?: any) =>\r\n (p as any)?.color ||\r\n (p as any)?.selectedColor ||\r\n (p as any)?.variant?.color ||\r\n \"\";\r\nconst getProductSize = (p?: any) =>\r\n (p as any)?.size ||\r\n (p as any)?.selectedSize ||\r\n (p as any)?.variant?.size ||\r\n \"\";\r\n\r\n// ----------------- Local Address Mapping -----------------\r\n// const mapGraphQLAddressToUI = (a: any) => {\r\n// const addressLine1 = [a?.streetNumber, a?.streetName]\r\n// .filter(Boolean)\r\n// .join(\" \")\r\n// .trim();\r\n// const addressLine2 = a?.building ?? \"\";\r\n// return {\r\n// ...a,\r\n// addressId: String(a?.id ?? a?.addressId ?? \"\"),\r\n// addressLine1,\r\n// addressLine2,\r\n// street: \"\",\r\n// city: a?.city ?? \"\",\r\n// state: a?.state ?? \"\",\r\n// postalCode: a?.postalCode ?? \"\",\r\n// country: a?.country ?? \"\",\r\n// firstName: a?.firstName ?? \"\",\r\n// lastName: a?.lastName ?? \"\",\r\n// phone: a?.phone ?? \"\",\r\n// email: a?.email ?? \"\",\r\n// } as any;\r\n// };\r\n\r\n// ----------------- Chat Types -----------------\r\ntype Stage =\r\n | \"initial\"\r\n | \"address\"\r\n | \"delivery\"\r\n | \"payment\"\r\n | \"final\"\r\n | \"success\";\r\ntype ChatItem = {\r\n query: string;\r\n response: string;\r\n snapshotStage?: Stage;\r\n snapshotPayload?: any;\r\n};\r\ntype ContextItem = {\r\n userQuery: string;\r\n mainResponse: string;\r\n keywords: string;\r\n};\r\nconst MAX_CONTEXT_ITEMS = 20;\r\n\r\ntype VariantEntry = { index: number; variant: any; images: string[] };\r\n\r\nconst AgenticShopping = ({\r\n open,\r\n onClose,\r\n product,\r\n index,\r\n addressListProp,\r\n addressLoading,\r\n variationAttributes,\r\n}: AgenticShoppingProps) => {\r\n const cachedToken: any = null;\r\n const tokenExpiry: any = null;\r\n\r\n const allVariants = pvAll(product);\r\n const safeInitialIdx = Math.min(\r\n Math.max(0, index || 0),\r\n Math.max(0, allVariants.length - 1)\r\n );\r\n const [variantsByColor, setVariantsByColor] = useState([]);\r\n const [selectedVariantIndex, setSelectedVariantIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n if (product?.variants) {\r\n const grouped = groupVariantsByColor(\r\n product.variants,\r\n product.imageGroups,\r\n variationAttributes\r\n );\r\n setVariantsByColor(grouped);\r\n }\r\n }, [product]);\r\n\r\n const groupVariantsByColor = (\r\n variants: any[],\r\n imageGroups: any[],\r\n variationAttributes: any[]\r\n ) => {\r\n const { colorMap, sizeMap } = buildVariationMaps(variationAttributes);\r\n\r\n // 1️⃣ Prepare image map\r\n const imagesByColor: any = {};\r\n\r\n imageGroups?.forEach((group) => {\r\n const colorAttr = group.variationAttributes?.find(\r\n (a) => a.id === \"color\"\r\n );\r\n\r\n const colorCode = colorAttr?.values?.[0]?.value;\r\n if (!colorCode) return;\r\n\r\n if (!imagesByColor[colorCode]) {\r\n imagesByColor[colorCode] = {};\r\n }\r\n\r\n imagesByColor[colorCode][group.viewType] = group.images;\r\n });\r\n\r\n // 2️⃣ Group variants\r\n const map = variants.reduce((acc: any, item: any) => {\r\n const colorCode = item.variationValues.color;\r\n const sizeCode = item.variationValues.size;\r\n\r\n if (!acc[colorCode]) {\r\n acc[colorCode] = {\r\n color: colorCode,\r\n name: colorMap[colorCode] || colorCode, // ✅ DISPLAY NAME\r\n images: imagesByColor[colorCode] || {},\r\n variants: [],\r\n };\r\n }\r\n\r\n acc[colorCode].variants.push({\r\n size: sizeCode,\r\n name: sizeMap[sizeCode] || sizeCode, // ✅ DISPLAY NAME\r\n ...item,\r\n });\r\n\r\n return acc;\r\n }, {});\r\n\r\n // 3️⃣ Sort\r\n return Object.values(map)\r\n .sort((a: any, b: any) => {\r\n const nameA = a.colorName || a.color || \"\";\r\n const nameB = b.colorName || b.color || \"\";\r\n return nameA.localeCompare(nameB);\r\n })\r\n .map((entry: any) => ({\r\n ...entry,\r\n variants: entry.variants.sort(\r\n (a: any, b: any) => Number(a.size) - Number(b.size)\r\n ),\r\n }));\r\n };\r\n\r\n const buildVariationMaps = (variationAttributes: any[]) => {\r\n const colorMap: Record<string, string> = {};\r\n const sizeMap: Record<string, string> = {};\r\n\r\n variationAttributes?.forEach((attr) => {\r\n if (attr.id === \"color\") {\r\n attr.values.forEach((v) => {\r\n colorMap[v.value] = v.name; // JJ169XX → Black\r\n });\r\n }\r\n\r\n if (attr.id === \"size\") {\r\n attr.values.forEach((v) => {\r\n sizeMap[v.value] = v.name; // 004 → 4\r\n });\r\n }\r\n });\r\n\r\n return { colorMap, sizeMap };\r\n };\r\n\r\n const variantCount = allVariants.length;\r\n\r\n const [selectedVariantIdx, setSelectedVariantIdx] =\r\n useState<number>(safeInitialIdx);\r\n\r\n // PDP-like picked color/size state\r\n const [pickedColor, setPickedColor] = useState<string | null>(null);\r\n const [pickedSize, setPickedSize] = useState<string | null>(null);\r\n const masterColorRef = useRef<string | null>(null);\r\n const masterSizeRef = useRef<string | null>(null);\r\n // const navigate = useNavigate();\r\n const selectedVariant = getVariantByIndex(product, selectedVariantIdx);\r\n\r\n // flow gating states\r\n const [pendingQuery, setPendingQuery] = useState<string>(\"\");\r\n const [showProceedConfirm, setShowProceedConfirm] = useState<boolean>(false);\r\n const [showVariantPicker, setShowVariantPicker] = useState<boolean>(false);\r\n\r\n // ------------- Chat & flow state -------------\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [chatLocked, setChatLocked] = useState(false);\r\n const [extractedDetails, setExtractedDetails] = useState<any | null>(null);\r\n\r\n const [chatHistory, setChatHistory] = useState<ChatItem[]>([]);\r\n const [contextHistory, setContextHistory] = useState<ContextItem[]>([]);\r\n\r\n // address + delivery state\r\n const [addressList, setAddressList] = useState<any[]>([]);\r\n const [showAddressSelection, setShowAddressSelection] = useState(false);\r\n const [selectedAddressId, setSelectedAddressId] = useState<\r\n string | undefined\r\n >();\r\n const [confirmButton, SetConfirmButton] = useState(true);\r\n const [addressSubmitted, setAddressSubmitted] = useState(false);\r\n\r\n const [showDeliveryOptions, setShowDeliveryOptions] = useState(false);\r\n const [selectedDelivery, setSelectedDelivery] =\r\n useState<DeliveryOptionKey>(\"standard\");\r\n const [deliverySubmitted, setDeliverySubmitted] = useState(false);\r\n\r\n // payment state\r\n type PaymentMethodKey = \"card\";\r\n const [showPaymentOptions, setShowPaymentOptions] = useState(false);\r\n const [selectedPayment, setSelectedPayment] =\r\n useState<PaymentMethodKey>(\"card\");\r\n const [paymentSubmitted, setPaymentSubmitted] = useState(false);\r\n\r\n const [showFinalSummary, setShowFinalSummary] = useState(false);\r\n const [confirmSuccess, setConfirmSuccess] = useState(false);\r\n const [intentMandateId, setIntentMandateId] = useState<string | null>(null);\r\n\r\n const [feedbackRating, setFeedbackRating] = useState<number | null>(null);\r\n const [feedbackComment, setFeedbackComment] = useState(\"\");\r\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\r\n const [selectedVariantProductId, setSelectedVariantProductId] = useState<\r\n string | null\r\n >(product?.id);\r\n\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // GraphQL address hook\r\n // const {\r\n // getCustomerAddresses,\r\n // addresses: hookAddresses,\r\n // loading: addressLoading,\r\n // } = useCustomerAddress();\r\n\r\n // Normalize addresses\r\n // useEffect(() => {\r\n // if (!Array.isArray(hookAddresses)) return;\r\n // const normalized = hookAddresses.map(mapGraphQLAddressToUI);\r\n // setAddressList((prev) => {\r\n // if (\r\n // prev.length === normalized.length &&\r\n // prev.every(\r\n // (p, i) =>\r\n // String((p as any).addressId) ===\r\n // String((normalized[i] as any).addressId)\r\n // )\r\n // ) {\r\n // return prev;\r\n // }\r\n // return normalized;\r\n // });\r\n // }, [hookAddresses]);\r\n\r\n // seed defaults from master on product/index change\r\n useEffect(() => {\r\n const all = pvAll(product);\r\n const bounded = Math.min(\r\n Math.max(0, index || 0),\r\n Math.max(0, all.length - 1)\r\n );\r\n setSelectedVariantIdx(bounded);\r\n\r\n const m = pvMaster(product);\r\n const mColor = getVariantColor(m);\r\n const mSize = getVariantSize(m);\r\n\r\n masterColorRef.current = mColor || null;\r\n masterSizeRef.current = mSize || null;\r\n setPickedColor(mColor || null);\r\n setPickedSize(mSize || null);\r\n }, [index, product]);\r\n\r\n // scroll to bottom on changes\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [\r\n chatHistory,\r\n showAddressSelection,\r\n addressSubmitted,\r\n showDeliveryOptions,\r\n deliverySubmitted,\r\n showPaymentOptions,\r\n paymentSubmitted,\r\n showFinalSummary,\r\n confirmSuccess,\r\n showProceedConfirm,\r\n showVariantPicker,\r\n ]);\r\n\r\n // --------------------- UI helpers (theme) ---------------------\r\n const themeColor = \"var(--tanya)\";\r\n const themeDark = \"var(--tanya-contrast)\";\r\n const theme = themeColor || \"#16a34a\";\r\n const themeHeaderBg = \"#804c9e\";\r\n\r\n const handleFeedbackSubmit = () => {\r\n console.log(\"AgenticShopping feedback:\", {\r\n rating: feedbackRating,\r\n comment: feedbackComment,\r\n });\r\n setFeedbackSubmitted(true);\r\n };\r\n\r\n const handleFeedbackCancel = () => {\r\n setFeedbackRating(null);\r\n setFeedbackComment(\"\");\r\n setFeedbackSubmitted(true);\r\n };\r\n\r\n // --------------------- Snapshots ---------------------\r\n const renderSuccessSnapshot = (payload?: any) => {\r\n const idFromPayload =\r\n payload?.intentMandateId ||\r\n payload?.intent_mandate_id ||\r\n payload?.id ||\r\n null;\r\n\r\n const id = idFromPayload ?? intentMandateId;\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"mt-3 flex items-start gap-3 rounded-lg border border-green-200 bg-green-50 p-4 text-green-800\">\r\n <div className=\"success-tick-animation\">\r\n <Icon icon=\"mdi:check-circle\" width=\"28\" color=\"#16a34a\" />\r\n </div>\r\n <div className=\"text-sm w-full\">\r\n <div className=\"font-semibold\">Success!</div>\r\n <div>\r\n Your smart order has been saved. I’ll watch the price and\r\n auto-purchase when the conditions are met.\r\n </div>\r\n\r\n {id && (\r\n <div className=\"mt-2 text-xs font-medium\">\r\n Your Smart Order ID:&nbsp;\r\n <span\r\n className=\"font-semibold text-blue-600 cursor-pointer underline\"\r\n // onClick={() => navigate(`/smart-order-detail/${id}`)}\r\n >\r\n {id}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {!feedbackSubmitted && (\r\n <div className=\"mt-4 rounded-lg bg-white/70 p-3 text-gray-900\">\r\n <h4 className=\"font-semibold mb-1\">\r\n Please post your feedback here\r\n </h4>\r\n\r\n <p className=\"text-sm text-gray-700 mb-3\">\r\n Rate us on how much our response was helpful\r\n </p>\r\n\r\n <div className=\"flex items-center gap-1 mb-3\">\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <button\r\n key={star}\r\n type=\"button\"\r\n onClick={() => setFeedbackRating(star)}\r\n className=\"p-0.5\"\r\n >\r\n <Icon\r\n icon={\r\n feedbackRating && feedbackRating >= star\r\n ? \"mdi:star\"\r\n : \"mdi:star-outline\"\r\n }\r\n width=\"20\"\r\n className=\"text-yellow-500\"\r\n />\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <label className=\"block text-sm text-gray-700 mb-1\">\r\n Tell us more about the response\r\n </label>\r\n <textarea\r\n value={feedbackComment}\r\n onChange={(e) => setFeedbackComment(e.target.value)}\r\n rows={3}\r\n className=\"mt-1 w-full rounded-md border border-gray-300 p-2 text-sm outline-none focus:ring-1 focus:ring-gray-300\"\r\n placeholder=\"Your feedback helps us improve...\"\r\n />\r\n\r\n <div className=\"mt-3 flex justify-end gap-2\">\r\n <button\r\n type=\"button\"\r\n onClick={handleFeedbackCancel}\r\n className=\"px-4 py-2 rounded-full border text-sm font-medium hover:bg-gray-50\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={handleFeedbackSubmit}\r\n className=\"px-4 py-2 rounded-full text-sm font-semibold text-white shadow\"\r\n style={{ background: themeColor }}\r\n disabled={!feedbackRating && !feedbackComment.trim()}\r\n >\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {feedbackSubmitted && (\r\n <div className=\"mt-3 text-xs text-green-900 font-medium\">\r\n Thanks for your feedback! 💚\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const getAllAddresses = async () => {\r\n try {\r\n // const fetched = await getCustomerAddresses();\r\n // const normalized = (fetched || []).map(mapGraphQLAddressToUI);\r\n setAddressList(addressListProp);\r\n } catch (error) {\r\n console.error(\"Error fetching addresses:\", error);\r\n }\r\n };\r\n\r\n const snapshotToHistory = (stage: Stage, payload: any) => {\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__SNAPSHOT__\",\r\n snapshotStage: stage,\r\n snapshotPayload: payload,\r\n },\r\n ]);\r\n };\r\n\r\n const finalizeLiveCards = (stage?: Stage, payload?: any) => {\r\n setChatHistory((prev) =>\r\n prev.map((m) =>\r\n m.response === \"__CARD__\"\r\n ? {\r\n ...m,\r\n response: \"__SNAPSHOT__\",\r\n snapshotStage: stage ?? m.snapshotStage,\r\n snapshotPayload: payload ?? m.snapshotPayload,\r\n }\r\n : m\r\n )\r\n );\r\n };\r\n\r\n const removeAllAssistantLiveRows = () => {\r\n setChatHistory((prev) =>\r\n prev.filter(\r\n (m) =>\r\n !(\r\n m.query === \"\" &&\r\n m.response !== \"__SNAPSHOT__\" &&\r\n m.response !== \"__TEXT__\"\r\n )\r\n )\r\n );\r\n };\r\n\r\n const hardResetLive = () => {\r\n setShowFinalSummary(false);\r\n setShowAddressSelection(false);\r\n setShowDeliveryOptions(false);\r\n setShowPaymentOptions(false);\r\n setAddressSubmitted(false);\r\n setDeliverySubmitted(false);\r\n setPaymentSubmitted(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n setExtractedDetails(null);\r\n removeAllAssistantLiveRows();\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(false);\r\n };\r\n\r\n const resetFlowStateForNewQuery = () => {\r\n setShowAddressSelection(false);\r\n setAddressSubmitted(false);\r\n setShowDeliveryOptions(false);\r\n setSelectedDelivery(\"standard\");\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setSelectedPayment(\"card\");\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n SetConfirmButton(true);\r\n setExtractedDetails(null);\r\n\r\n localStorage.removeItem(\"agentic_order\");\r\n localStorage.removeItem(\"agentic_order_address\");\r\n localStorage.removeItem(\"agentic_order_delivery\");\r\n localStorage.removeItem(\"agentic_order_payment\");\r\n localStorage.removeItem(\"agentic_order_final\");\r\n };\r\n\r\n const variantEntries: VariantEntry[] = useMemo(() => {\r\n const all = pvAll(product);\r\n return all.map((v, i) => ({\r\n index: i,\r\n variant: v,\r\n images: (v?.images || [])\r\n .map((img: any) => img?.url || \"\")\r\n .filter(Boolean),\r\n }));\r\n }, [product]);\r\n\r\n const hasMatchingVariant = useMemo(() => {\r\n if (!variantEntries.length) return false;\r\n\r\n const color = pickedColor || undefined;\r\n const size = pickedSize || undefined;\r\n\r\n // const resolveFor = (c?: string | null, s?: string | null) => {\r\n // const combo = findVariantBy(\r\n // variantEntries,\r\n // c || undefined,\r\n // s || undefined\r\n // );\r\n // return !!(combo && combo.variant?.sku);\r\n // };\r\n\r\n // if (color && size) return resolveFor(color, size);\r\n // if (color && !size) return resolveFor(color, null);\r\n // if (!color && size) return resolveFor(undefined, size);\r\n\r\n if (color && size) return true;\r\n else return false;\r\n }, [variantEntries, pickedColor, pickedSize, selectedVariant]);\r\n\r\n const isInputDisabled = isLoading || chatLocked || !hasMatchingVariant;\r\n\r\n // ---------- PRICE HELPERS ----------\r\n const getQuantity = (details?: any) => {\r\n const q = Number(details?.quantity ?? 1);\r\n return Number.isFinite(q) && q > 0 ? q : 1;\r\n };\r\n\r\n const computeProductTotalWithFallback = (details?: any) => {\r\n const quantity = getQuantity(details);\r\n const minor = Number(details?.max_price_minor ?? 0);\r\n const hasValidMinor = Number.isFinite(minor) && minor > 0;\r\n if (hasValidMinor) {\r\n return +(minor / 100);\r\n }\r\n const unitPrice = getProductPrice(product, selectedVariant);\r\n return +(unitPrice * quantity);\r\n };\r\n\r\n const computeSummary = (currencyArg?: string) => {\r\n const source = extractedDetails;\r\n const variantPrice = getVariantPrice(selectedVariant);\r\n const currency =\r\n currencyArg || source?.currency || variantPrice.currency || CURRENCY_PREF;\r\n const product_total = computeProductTotalWithFallback(source);\r\n const tax = +(product_total * 0.08).toFixed(2);\r\n const shipping_fee = DELIVERY_OPTIONS[selectedDelivery]?.fee || 0;\r\n return { product_total, tax, shipping_fee, currency };\r\n };\r\n\r\n const startFlowWithSku = async (\r\n query: string,\r\n sku: string,\r\n variantIndex: number\r\n ) => {\r\n finalizeLiveCards();\r\n resetFlowStateForNewQuery();\r\n\r\n setIsLoading(true);\r\n setChatLocked(true);\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(false);\r\n\r\n const contextToSend = contextHistory.slice(-MAX_CONTEXT_ITEMS);\r\n\r\n try {\r\n const token = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!token) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const response = await fetch(`${invokeUrl}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({\r\n flowId: \"MTMI0P4LC6\",\r\n flowAliasId: \"BCUA138F2Q\",\r\n input: {\r\n instruction: `Use SKU ${sku}. Currency is USD. ${query}`,\r\n metadata: {\r\n productId: (product as any)?.id ?? null,\r\n skuId: sku ?? null,\r\n variantIndex,\r\n },\r\n context: contextToSend,\r\n },\r\n }),\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n let finalResponse = \"\";\r\n let finalKeywords = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (!line.startsWith(\"data:\")) continue;\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsed = JSON.parse(jsonData);\r\n const idx = parsed.index;\r\n const data = parsed.data;\r\n\r\n if (idx === 0) {\r\n finalResponse = String(data ?? \"\");\r\n } else if (idx === 1) {\r\n finalKeywords = String(data ?? \"\");\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing JSON chunk:\", err);\r\n }\r\n }\r\n }\r\n\r\n let extracted: any | null = null;\r\n if (finalResponse) {\r\n const maybeJson = String(finalResponse).replace(/\\\\n/g, \"\").trim();\r\n if (maybeJson.startsWith(\"{\") && maybeJson.endsWith(\"}\")) {\r\n try {\r\n extracted = JSON.parse(maybeJson);\r\n extracted.product_id = sku;\r\n extracted.sku_id = sku;\r\n localStorage.setItem(\"agentic_order\", JSON.stringify(extracted));\r\n } catch (err: any) {\r\n console.log(err);\r\n }\r\n }\r\n }\r\n\r\n setExtractedDetails(extracted);\r\n\r\n if (extracted) {\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__CARD__\",\r\n snapshotPayload: { extractedDetails: extracted },\r\n },\r\n ]);\r\n }\r\n\r\n setContextHistory((prev) => {\r\n const next = [\r\n ...prev,\r\n {\r\n userQuery: query,\r\n mainResponse: finalResponse || \"\",\r\n keywords: finalKeywords || \"\",\r\n },\r\n ];\r\n return next.slice(-MAX_CONTEXT_ITEMS);\r\n });\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n setChatLocked(false);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n // -------------------- Handlers (flow) --------------------\r\n const handleSendMessage = async (question?: string) => {\r\n if (chatLocked || isLoading || !hasMatchingVariant) return;\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setChatHistory((prev) => [...prev, { query: newQuery, response: \"\" }]);\r\n setInputText(\"\");\r\n\r\n setPendingQuery(newQuery);\r\n const sku = selectedVariantProductId || \"\";\r\n\r\n // Single-variant or master-only: go directly\r\n if (variantCount <= 1) {\r\n if (sku) {\r\n startFlowWithSku(newQuery, sku, selectedVariantIdx);\r\n return;\r\n }\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n return;\r\n }\r\n\r\n // Multiple variants: ask confirmation\r\n if (sku) {\r\n setShowProceedConfirm(true);\r\n setChatLocked(true);\r\n } else {\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n }\r\n };\r\n\r\n const handleConfirmProceedYes = () => {\r\n const sku = selectedVariantProductId;\r\n if (!sku) return;\r\n startFlowWithSku(pendingQuery, sku, selectedVariantIdx);\r\n };\r\n\r\n const handleConfirmProceedNo = () => {\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n };\r\n\r\n const handleVariantSubmitAfterNo = () => {\r\n if (!selectedVariantProductId) return;\r\n const sku = selectedVariantProductId;\r\n startFlowWithSku(pendingQuery, sku, selectedVariantIdx);\r\n };\r\n\r\n // ---------- address/delivery/payment ----------\r\n const handleYesLockItIn = async () => {\r\n setShowAddressSelection(true);\r\n setShowDeliveryOptions(false);\r\n setShowPaymentOptions(false);\r\n setShowFinalSummary(false);\r\n setAddressSubmitted(false);\r\n setDeliverySubmitted(false);\r\n setPaymentSubmitted(false);\r\n setConfirmSuccess(false);\r\n await getAllAddresses();\r\n\r\n finalizeLiveCards(\"initial\", {\r\n extractedDetails: extractedDetails ?? undefined,\r\n });\r\n };\r\n\r\n const handleSubmitAddress = () => {\r\n if (!selectedAddressId) return;\r\n const selected =\r\n addressList.find(\r\n (a: any) =>\r\n String((a as any).addressId ?? (a as any).id) === selectedAddressId\r\n ) || null;\r\n if (!selected) return;\r\n\r\n localStorage.setItem(\"agentic_order_address\", JSON.stringify(selected));\r\n setAddressSubmitted(true);\r\n setShowDeliveryOptions(true);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"address\", selected);\r\n };\r\n\r\n const handleChangeAddress = () => {\r\n setAddressSubmitted(false);\r\n setShowDeliveryOptions(false);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_address\");\r\n };\r\n\r\n const handleSubmitDelivery = () => {\r\n if (!selectedDelivery) return;\r\n localStorage.setItem(\"agentic_order_delivery\", selectedDelivery);\r\n setDeliverySubmitted(true);\r\n setShowPaymentOptions(true);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"delivery\", {\r\n method: selectedDelivery,\r\n ...DELIVERY_OPTIONS[selectedDelivery],\r\n });\r\n };\r\n\r\n const handleCancelDelivery = () => {\r\n setShowDeliveryOptions(false);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n const handleChangeDelivery = () => {\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_delivery\");\r\n };\r\n\r\n const handleSubmitPayment = () => {\r\n if (!selectedPayment) return;\r\n localStorage.setItem(\"agentic_order_payment\", selectedPayment);\r\n setPaymentSubmitted(true);\r\n setShowFinalSummary(true);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"payment\", { method: selectedPayment });\r\n };\r\n\r\n const handleCancelPayment = () => {\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n const handleChangePayment = () => {\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_payment\");\r\n };\r\n\r\n const handleConfirmWatch = async () => {\r\n try {\r\n setIsLoading(true);\r\n\r\n const order = extractedDetails || {};\r\n const chosenAddress = JSON.parse(\r\n localStorage.getItem(\"agentic_order_address\") || \"null\"\r\n );\r\n const chosenDelivery = localStorage.getItem(\r\n \"agentic_order_delivery\"\r\n ) as DeliveryOptionKey | null;\r\n const chosenPayment =\r\n localStorage.getItem(\"agentic_order_payment\") || \"card\";\r\n\r\n const { product_total, tax, shipping_fee, currency } = computeSummary();\r\n\r\n const shopperId =\r\n order.shopper_id || localStorage.getItem(\"customerId\") || undefined;\r\n\r\n const shippingAddressId =\r\n chosenAddress?.addressId || chosenAddress?.id || undefined;\r\n\r\n const shippingMethodId = chosenDelivery\r\n ? SHIPPING_METHOD_MAP[chosenDelivery]\r\n : \"GROUND\";\r\n\r\n const paymentMethodId = \"card-visa\";\r\n\r\n const sku = selectedVariant?.sku;\r\n const productId = (product as any)?.id || \"\";\r\n\r\n const quantity = getQuantity(order);\r\n const maxPriceMinor =\r\n typeof order.max_price_minor === \"number\"\r\n ? order.max_price_minor\r\n : Math.round(product_total * 100);\r\n\r\n const platform = \"SFCC\";\r\n const storeCode = \"Sites-SiteGenesis-Site\";\r\n\r\n const intentMandatePayload = {\r\n shopper_id: shopperId,\r\n shipping_address_id: shippingAddressId,\r\n shipping_method_id: shippingMethodId,\r\n payment_method_id: paymentMethodId,\r\n sku: sku,\r\n platform,\r\n storeCode,\r\n product_id: productId,\r\n quantity,\r\n max_price_minor: maxPriceMinor,\r\n currency,\r\n instruction_text: pendingQuery,\r\n };\r\n\r\n if (!shopperId || !shippingAddressId) {\r\n console.error(\r\n \"Missing shopper_id or shipping_address_id for intent-mandate\",\r\n {\r\n shopperId,\r\n shippingAddressId,\r\n }\r\n );\r\n alert(\r\n \"Missing customer or address information. Please re-select address and try again.\"\r\n );\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const tokenData = await authData();\r\n const token = tokenData.access_token;\r\n if (!token) {\r\n throw new Error(\"Failed to fetch auth token for intent-mandate\");\r\n }\r\n const { serverUrl } = apiConfig();\r\n const response = await fetch(`${serverUrl}/api/intent-mandate`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify(intentMandatePayload),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n console.error(\"intent-mandate failed\", response.status, errorBody);\r\n alert(\r\n \"Something went wrong while saving your smart order. Please try again.\"\r\n );\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const apiResult = await response.json().catch(() => null);\r\n console.log(\"intent-mandate success:\", apiResult);\r\n\r\n const mandateId =\r\n apiResult?.intent_mandate_id ||\r\n apiResult?.intent_mandateId ||\r\n apiResult?.key ||\r\n null;\r\n\r\n if (mandateId) {\r\n setIntentMandateId(mandateId);\r\n }\r\n\r\n const finalPayload = {\r\n ...order,\r\n address: chosenAddress,\r\n delivery: chosenDelivery,\r\n payment: chosenPayment,\r\n summary: { product_total, tax, shipping_fee, currency },\r\n intent_mandate_id: mandateId,\r\n };\r\n\r\n localStorage.setItem(\"agentic_order_final\", JSON.stringify(finalPayload));\r\n\r\n setConfirmSuccess(true);\r\n SetConfirmButton(false);\r\n\r\n snapshotToHistory(\"final\", finalPayload);\r\n snapshotToHistory(\"success\", { intentMandateId: mandateId });\r\n hardResetLive();\r\n } catch (err) {\r\n console.error(\"Error in handleConfirmWatch / intent-mandate:\", err);\r\n alert(\r\n \"Unable to complete your smart order right now. Please try again in a moment.\"\r\n );\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCancelWatch = () => {\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n // ---------- any Summary Card ----------\r\n const ProductSummaryCard = ({ selectedIndex }) => {\r\n const img =\r\n variantsByColor[selectedIndex]?.images.large[0].link ||\r\n getProductImage(product, selectedVariant);\r\n const title = getProductTitle(product);\r\n\r\n const skuCode = selectedVariantProductId || \"\";\r\n const color = getVariantColor(selectedVariant) || \"\";\r\n const size = getVariantSize(selectedVariant) || \"\";\r\n\r\n const { amount: unitPrice } = getVariantPrice(selectedVariant);\r\n const hasSku = Boolean(product?.id);\r\n const inStock = hasSku;\r\n // selectedVariant && hasSku ? isVariantOnStock(selectedVariant) : false;\r\n\r\n return (\r\n <div className=\"mx-4 mt-2 rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex flex-col sm:flex-row items-center sm:items-center gap-4\">\r\n <div className=\"flex-shrink-0 flex justify-center sm:justify-start\">\r\n <div className=\"w-[150px] h-[150px] rounded-lg bg-gray-50 border border-gray-200 flex items-center justify-center overflow-hidden\">\r\n {img ? (\r\n <img\r\n src={img}\r\n alt={title}\r\n className=\"object-contain w-full h-full\"\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"mdi:image-outline\"\r\n width=\"28\"\r\n className=\"opacity-60\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex-grow flex flex-col justify-center text-center\">\r\n <div className=\"text-2xl font-bold text-gray-900 mb-1\">{title}</div>\r\n <div className=\"text-sm text-gray-700 mb-1\">\r\n {[\r\n skuCode && `SKU: ${skuCode}`,\r\n color && `Color: ${color}`,\r\n size && `Size: ${size}`,\r\n ]\r\n .filter(Boolean)\r\n .join(\" • \") || \"—\"}\r\n </div>\r\n <div className=\"mt-1 text-xl font-semibold text-gray-900\">\r\n {hasSku\r\n ? // ? formatCurrency(Number(unitPrice) || 0, CURRENCY_PREF)\r\n `$${product.price}`\r\n : \"Currently unavailable\"}\r\n </div>\r\n {hasSku && !inStock && (\r\n <div className=\"mt-1 text-xs font-medium text-red-600\">\r\n Currently out of stock\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- any Selector Card ----------\r\n const VariantSelectorCard = ({\r\n showSubmit = true,\r\n }: {\r\n showSubmit?: boolean;\r\n }) => {\r\n const byColor: Record<string, true> = {};\r\n const colors = variantEntries\r\n .map((e) => getVariantColor(e.variant))\r\n .filter((c): c is string => !!c && !byColor[c] && (byColor[c] = true));\r\n\r\n const bySize: Record<string, true> = {};\r\n const sizes = variantEntries\r\n .map((e) => getVariantSize(e.variant))\r\n .filter((s): s is string => !!s && !bySize[s] && (bySize[s] = true));\r\n\r\n return (\r\n <div className=\"mx-4 mt-4 mb-2 rounded-xl border border-gray-200 bg-white p-4 animate-fade-in\">\r\n <h3 className=\"font-semibold text-gray-800\">Choose a variant</h3>\r\n {/* COLOR SECTION */}\r\n <div className=\"mt-4\">\r\n <div className=\"flex items-baseline gap-2\">\r\n <div className=\"text-sm font-bold\">Color :</div>\r\n {pickedColor && (\r\n <div className=\"text-sm text-gray-600\">{pickedColor}</div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-4 mt-2\">\r\n {variantsByColor.map((group, index) => {\r\n const color = group.name;\r\n const isSelected = pickedColor === color;\r\n const swatch =\r\n group.images.large[0].disBaseLink || group.images.large[0].link;\r\n\r\n return (\r\n <div\r\n key={color}\r\n className={`flex flex-col items-center w-28 border rounded-md p-2\r\n ${isSelected ? \"border-2 border-[#804c9e]\" : \"border-gray-300\"}`}\r\n >\r\n <button\r\n onClick={() => {\r\n setPickedColor(color);\r\n setPickedSize(null); // reset size\r\n setSelectedVariantIdx(null);\r\n setSelectedVariantIndex(index);\r\n }}\r\n className=\"w-full h-20 flex items-center justify-center overflow-hidden\"\r\n title={color}\r\n >\r\n {swatch ? (\r\n <img\r\n src={swatch}\r\n alt={color}\r\n className=\"w/full h-full object-contain\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs px-1\">\r\n {color}\r\n </div>\r\n )}\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* SIZE SECTION */}\r\n {pickedColor && (\r\n <div className=\"mt-4\">\r\n <div className=\"flex items-baseline gap-2\">\r\n <div className=\"text-sm font-bold\">Size :</div>\r\n {pickedSize && (\r\n <div className=\"text-sm text-gray-600\">{pickedSize}</div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {(() => {\r\n const group = variantsByColor.find(\r\n (g) => g.name === pickedColor\r\n );\r\n if (!group) return null;\r\n\r\n return group.variants.map((v, idx) => {\r\n const size = v.name;\r\n const isSelected = pickedSize === size;\r\n return (\r\n <button\r\n key={`size-${size}`}\r\n onClick={() => {\r\n setPickedSize(size);\r\n setSelectedVariantIdx(idx);\r\n setSelectedVariantProductId(v.productId);\r\n }}\r\n className={`px-4 py-2 rounded-md border text-sm ${\r\n isSelected\r\n ? \"border-2 border-[#804c9e] font-semibold\"\r\n : \"border-gray-300\"\r\n }`}\r\n title={size}\r\n >\r\n {size}\r\n </button>\r\n );\r\n });\r\n })()}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showSubmit && (\r\n <div className=\"mt-4 flex justify-end\">\r\n <button\r\n onClick={handleVariantSubmitAfterNo}\r\n className=\"px-6 py-2.5 rounded-full font-semibold text-white shadow-md\"\r\n style={{ background: themeHeaderBg }}\r\n disabled={!hasMatchingVariant}\r\n >\r\n Submit\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- Initial Extraction Card ----------\r\n const renderInitialExtractionCard = (details: any, readonly = true) => {\r\n if (!details?.extractedDetails && details)\r\n details = { extractedDetails: details };\r\n const d = details?.extractedDetails || extractedDetails;\r\n if (!d) return null;\r\n const q = getQuantity(d);\r\n\r\n const { currency: priceCurrency } = getVariantPrice(selectedVariant);\r\n const unitPrice = getProductPrice(product, selectedVariant);\r\n const minor = Number(d?.max_price_minor ?? 0);\r\n const hasValidMinor = Number.isFinite(minor) && minor > 0;\r\n const displayMax = hasValidMinor ? +(minor / 100) : +(unitPrice * q);\r\n const currency = d?.currency || priceCurrency || CURRENCY_PREF;\r\n const idLabel = selectedVariant?.sku ? selectedVariant.sku : d.product_id;\r\n\r\n return (\r\n <div\r\n className=\"px-6 pb-6 flex flex-col items-center space-y-4\"\r\n style={{ backgroundColor: \"#e5dbeb\" }}\r\n >\r\n <p\r\n className=\"text-base font-semibold text-center mt-2\"\r\n style={{ color: themeDark }}\r\n >\r\n Here’s what I found from your instruction:\r\n </p>\r\n\r\n <div className=\"w-full max-w-md bg-white rounded-xl shadow-inner p-4\">\r\n <div className=\"grid grid-cols-2 gap-y-2 text-sm\">\r\n <p className=\"font-semibold text-gray-600\">SKU:</p>\r\n <p className=\"text-gray-800\">{idLabel}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Quantity:</p>\r\n <p className=\"text-gray-800\">{getQuantity(d)}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Currency:</p>\r\n <p className=\"text-gray-800\">{currency}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Maximum Total Price:</p>\r\n <p className=\"text-gray-800\">\r\n {formatCurrency(displayMax, currency)}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-3 flex flex-wrap gap-2 text-xs\">\r\n {getVariantColor(selectedVariant) && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n Color: {getVariantColor(selectedVariant)}\r\n </span>\r\n )}\r\n {getVariantSize(selectedVariant) && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n Size: {getVariantSize(selectedVariant)}\r\n </span>\r\n )}\r\n {selectedVariant?.sku && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n SKU: {selectedVariant.sku}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {!readonly && (\r\n <>\r\n <p\r\n className=\"text-sm font-medium text-gray-700 text-center max-w-[90%] leading-relaxed\"\r\n style={{ color: themeDark }}\r\n >\r\n Would you like me to <strong>lock this in</strong> and monitor it\r\n for you?\r\n </p>\r\n\r\n <div className=\"flex flex-wrap justify-center gap-4\">\r\n <button\r\n onClick={handleYesLockItIn}\r\n disabled={showAddressSelection}\r\n className={`relative inline-flex items-center justify-center px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n showAddressSelection\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: themeHeaderBg }}\r\n >\r\n <Icon\r\n icon=\"fluent:checkmark-circle-24-filled\"\r\n className=\"mr-2\"\r\n width=\"18\"\r\n height=\"18\"\r\n />\r\n Yes, lock it in\r\n </button>\r\n\r\n <button\r\n onClick={handleCancelWatch}\r\n disabled={showAddressSelection}\r\n className={`relative inline-flex items-center justify-center px-6 py-2.5 rounded-full font-semibold border transition-all duration-300 ${\r\n showAddressSelection\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ borderColor: themeHeaderBg, color: themeHeaderBg }}\r\n >\r\n <Icon\r\n icon=\"fluent:dismiss-circle-24-filled\"\r\n className=\"mr-2\"\r\n width=\"18\"\r\n height=\"18\"\r\n />\r\n No\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- Final Summary ----------\r\n const renderFinalSummaryCard = (payload: any, readonly = true) => {\r\n const d = payload || {};\r\n const currency =\r\n d?.summary?.currency || extractedDetails?.currency || CURRENCY_PREF;\r\n\r\n const img = getProductImage(product, selectedVariant);\r\n const title = getProductTitle(product);\r\n const pid = selectedVariant?.sku\r\n ? selectedVariant.sku\r\n : product?.id ?? extractedDetails?.product_id;\r\n const sku = selectedVariant?.sku ?? getProductSku(product);\r\n const color = getVariantColor(selectedVariant) || getProductColor(product);\r\n const size = getVariantSize(selectedVariant) || getProductSize(product);\r\n const quantity = getQuantity(d);\r\n const product_total =\r\n d?.summary?.product_total != null\r\n ? +d.summary.product_total\r\n : computeProductTotalWithFallback(d);\r\n const unitPrice = quantity > 0 ? +(product_total / quantity).toFixed(2) : 0;\r\n const subtotal = product_total;\r\n const tax = d?.summary?.tax ?? +(product_total * 0.08).toFixed(2);\r\n const shipping_fee =\r\n d?.summary?.shipping_fee ??\r\n (DELIVERY_OPTIONS[selectedDelivery]?.fee || 0);\r\n\r\n const addressDisplay = d?.address\r\n ? [\r\n d.address.addressLine1,\r\n d.address.addressLine2,\r\n d.address.street,\r\n [d.address.city, d.address.state, d.address.postalCode]\r\n .filter(Boolean)\r\n .join(\", \"),\r\n d.address.country,\r\n ]\r\n .filter(Boolean)\r\n .map((s: string) => initialCapital(String(s)))\r\n .join(\", \")\r\n : \"—\";\r\n\r\n const chosenPayment = d?.payment || \"card\";\r\n const paymentLabelNode =\r\n chosenPayment === \"card\" ? (\r\n <>\r\n Credit Card — Mastercard\r\n <br />\r\n •••• 7820&nbsp;Exp: 12/26\r\n </>\r\n ) : (\r\n <>{initialCapital(chosenPayment)}</>\r\n );\r\n\r\n return (\r\n <div className=\"mx-auto mt-3 mb-3 rounded-2xl bg-white\">\r\n <div className=\"px-6 pt-5 pb-3\">\r\n <h3 className=\"font-semibold text-lg mb-2 text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:receipt-text-check-outline\"\r\n width=\"24\"\r\n color={themeColor}\r\n />\r\n All set! Here’s what your smart order looks like 🧾\r\n </h3>\r\n </div>\r\n\r\n <div className=\"px-6 pb-4\">\r\n <div className=\"grid grid-cols-1 sm:grid-cols-12 gap-4 rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"sm:col-span-2 flex\">\r\n <div className=\"w-30 h-26 sm:w-30 sm:h-26 overflow-hidden rounded-lg bg-white border border-gray-200 flex items-center justify-center mx-auto sm:mx-0\">\r\n {img ? (\r\n <img\r\n src={img}\r\n alt={title}\r\n className=\"w-full h-full object-contain\"\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"mdi:image-outline\"\r\n width=\"24\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"sm:col-span-10\">\r\n <div className=\"mb-3\">\r\n <div className=\"text-lg text-center font-bold text-gray-900\">\r\n {title}\r\n </div>\r\n <div className=\"text-xs text-center font-bold text-gray-600\">\r\n <span className=\"font-medium\">SKU:</span> {pid ?? \"—\"}\r\n </div>\r\n {(sku || color || size) && (\r\n <div className=\"text-xs text-gray-600 mt-0.5 text-center\">\r\n {sku && (\r\n <>\r\n <span className=\"font-medium\">SKU:</span> {sku}\r\n &nbsp;&nbsp;\r\n </>\r\n )}\r\n {color && (\r\n <>\r\n <span className=\"font-medium\">Color:</span> {color}\r\n &nbsp;&nbsp;\r\n </>\r\n )}\r\n {size && (\r\n <>\r\n <span className=\"font-medium\">Size:</span> {size}\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"grid grid-cols-1 md-grid-cols-3 md:grid-cols-3 gap-3\">\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Unit Price\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {formatCurrency(unitPrice, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Quantity\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {quantity}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Subtotal\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {formatCurrency(subtotal, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Mini summaries */}\r\n <div className=\"px-6 pb-2\">\r\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-3\">\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🏠 Address\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {addressDisplay}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 💳 Payment\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {paymentLabelNode}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🚚 Delivery\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {d?.delivery\r\n ? DELIVERY_OPTIONS[d.delivery as DeliveryOptionKey]?.label ||\r\n \"—\"\r\n : \"—\"}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Totals */}\r\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 💰 any(s)\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(product_total, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🏛️ Taxes\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(tax, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🚚 Shipping\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(shipping_fee, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Total callout */}\r\n <div\r\n className=\"mt-4 rounded-xl p-4 text-center text-white shadow-sm\"\r\n style={{ background: theme }}\r\n >\r\n <div className=\"text-sm/5 opacity-95\">🔹 Total Payable</div>\r\n <div className=\"mt-1 text-3xl font-extrabold tracking-tight\">\r\n {formatCurrency(product_total + tax + shipping_fee, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {!readonly && (\r\n <div className=\"px-6 pb-5\">\r\n {!confirmSuccess && (\r\n <p className=\"mt-3 text-center text-sm text-gray-700\">\r\n Everything looks good! Do you want me to watch this product and\r\n buy it automatically when it meets your condition?\r\n </p>\r\n )}\r\n {confirmSuccess && renderSuccessSnapshot({ intentMandateId })}\r\n {confirmButton && !confirmSuccess && (\r\n <div className=\"mt-4 flex flex-wrap items-center justify-center gap-3\">\r\n <button\r\n onClick={handleConfirmWatch}\r\n className=\"inline-flex items-center justify-center rounded-full px-6 py-2.5 font-semibold text-white shadow-md transition-transform duration-150 hover:-translate-y-0.5 hover:shadow-lg\"\r\n style={{ background: theme }}\r\n >\r\n Confirm\r\n </button>\r\n <button\r\n onClick={handleCancelWatch}\r\n className=\"inline-flex items-center justify-center rounded-full border px-6 py-2.5 font-semibold hover:bg-gray-50\"\r\n style={{ borderColor: theme, color: theme }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderAddressSnapshot = (addr: any) => {\r\n if (!addr) return null;\r\n const addressDisplay = [\r\n (addr as any).addressLine1,\r\n (addr as any).addressLine2,\r\n (addr as any).street,\r\n [(addr as any).city, (addr as any).state, (addr as any).postalCode]\r\n .filter(Boolean)\r\n .join(\", \"),\r\n (addr as any).country,\r\n ]\r\n .filter((s): s is string => Boolean(s))\r\n .map((s) => initialCapital(s))\r\n .join(\", \");\r\n\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Icon icon=\"mdi:home-map-marker\" width=\"20\" color={themeColor} />\r\n <div className=\"font-semibold text-gray-800\">Delivery Address</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">{addressDisplay}</div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderDeliverySnapshot = (payload: any) => {\r\n const method = payload?.method as DeliveryOptionKey;\r\n const opt = method ? DELIVERY_OPTIONS[method] : undefined;\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <Icon icon=\"mdi:truck-delivery\" width=\"20\" color={themeColor} />\r\n <div className=\"font-semibold text-gray-800\">Delivery Method</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">\r\n {opt ? (\r\n <>\r\n <div className=\"flex items-center gap-2\">\r\n <Icon icon={opt.icon} width=\"18\" />\r\n <span className=\"font-medium\">{opt.label}</span>\r\n </div>\r\n <div className=\"text-gray-600\">{opt.subtitle}</div>\r\n </>\r\n ) : (\r\n \"—\"\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderPaymentSnapshot = (payload: any) => {\r\n const method = payload?.method || \"card\";\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <Icon\r\n icon=\"mdi:credit-card-outline\"\r\n width=\"20\"\r\n color={themeColor}\r\n />\r\n <div className=\"font-semibold text-gray-800\">Payment Method</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">\r\n {method === \"card\" ? (\r\n <>\r\n Credit Card — Mastercard\r\n <br />\r\n •••• 7820 &nbsp; Exp: 12/26\r\n </>\r\n ) : (\r\n initialCapital(method)\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderSnapshotCard = (chat: ChatItem, isLatest: boolean) => {\r\n const stage = chat.snapshotStage as Stage | undefined;\r\n if (!stage) return null;\r\n\r\n if (\r\n (stage === \"address\" && showAddressSelection) ||\r\n (stage === \"delivery\" && showDeliveryOptions) ||\r\n (stage === \"payment\" && showPaymentOptions) ||\r\n (stage === \"final\" && showFinalSummary)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (stage) {\r\n case \"initial\":\r\n return renderInitialExtractionCard(chat.snapshotPayload, !isLatest);\r\n case \"address\":\r\n return renderAddressSnapshot(chat.snapshotPayload as any);\r\n case \"delivery\":\r\n return renderDeliverySnapshot(chat.snapshotPayload);\r\n case \"payment\":\r\n return renderPaymentSnapshot(chat.snapshotPayload);\r\n case \"final\":\r\n return renderFinalSummaryCard(chat.snapshotPayload, !isLatest);\r\n case \"success\":\r\n return renderSuccessSnapshot(chat.snapshotPayload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return createPortal(\r\n <div\r\n className=\"fixed inset-0\"\r\n style={{ zIndex: 2147483647 }}\r\n aria-modal=\"true\"\r\n role=\"dialog\"\r\n >\r\n {/* Backdrop */}\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{ background: \"rgba(0,0,0,0.25)\" }}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Panel */}\r\n <div className=\"absolute right-0 \">\r\n <div className=\"w-[64.7vw] h-screen bg-white rounded-xl overflow-hidden flex flex-col shadow-xl\">\r\n {/* Header */}\r\n <div\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n borderTopLeftRadius: \"0.75rem\",\r\n borderBottomLeftRadius: \"0.75rem\",\r\n padding: \"0.25rem\",\r\n background: themeHeaderBg,\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n color: \"#ffffff\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"25\"\r\n height=\"25\"\r\n viewBox=\"0 0 256 256\"\r\n >\r\n <g fill=\"currentColor\">\r\n <path\r\n d=\"m194.82 151.43l-55.09 20.3l-20.3 55.09a7.92 7.92 0 0 1-14.86 0l-20.3-55.09l-55.09-20.3a7.92 7.92 0 0 1 0-14.86l55.09-20.3l20.3-55.09a7.92 7.92 0 0 1 14.86 0l20.3 55.09l55.09 20.3a7.92 7.92 0 0 1 0 14.86\"\r\n opacity=\"0.2\"\r\n />\r\n <path d=\"M197.58 129.06L146 110l-19-51.62a15.92 15.92 0 0 0-29.88 0L78 110l-51.62 19a15.92 15.92 0 0 0 0 29.88L78 178l19 51.62a15.92 15.92 0 0 0 29.88 0L146 178l51.62-19a15.92 15.92 0 0 0 0-29.88ZM137 164.22a8 8 0 0 0-4.74 4.74L112 223.85L91.78 169a8 8 0 0 0-4.78-4.78L32.15 144L87 123.78a8 8 0 0 0 4.78-4.78L112 64.15L132.22 119a8 8 0 0 0 4.74 4.74L191.85 144ZM144 40a8 8 0 0 1 8-8h16V16a8 8 0 0 1 16 0v16h16a8 8 0 0 1 0 16h-16v16a8 8 0 0 1-16 0V48h-16a8 8 0 0 1-8-8m104 48a8 8 0 0 1-8 8h-8v8a8 8 0 0 1-16 0v-8h-8a8 8 0 0 1 0-16h8v-8a8 8 0 0 1 16 0v8h8a8 8 0 0 1 8 8\" />\r\n </g>\r\n </svg>\r\n <div>\r\n <p className=\"font-bold\">Agentic Shopping with TANYA</p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <Icon\r\n icon=\"fluent:dismiss-24-filled\"\r\n color={\"#ffffff\"}\r\n width=\"24\"\r\n height=\"24\"\r\n className=\"cursor-pointer\"\r\n onClick={onClose}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-4 space-y-4 hide-scrollbar flex-grow\"\r\n >\r\n {/* Intro bubble */}\r\n <div\r\n className=\"text-sm text-[16px] rounded-r-xl p-3 m-3 rounded-bl-xl w-3/4 text-tanya-contrast\"\r\n style={{ backgroundColor: \"#e5dbeb\" }}\r\n >\r\n Welcome to your smart shopping companion!\r\n <p>\r\n Simply share your instruction — like “If this product goes below\r\n ${parseInt(product.price) - 5} grab it for me.”\r\n </p>\r\n <p>\r\n I’ll monitor it, calculate total prices, and place the order\r\n when your conditions are met.\r\n </p>\r\n </div>\r\n\r\n {/* any card */}\r\n <ProductSummaryCard selectedIndex={selectedVariantIndex} />\r\n\r\n {/* any selector (always visible for multi-variant) */}\r\n {variantCount > 1 && <VariantSelectorCard showSubmit={false} />}\r\n\r\n {/* Chat history / cards */}\r\n {chatHistory.map((chat, index) => {\r\n const isLatest = index === chatHistory.length - 1;\r\n const isSnapshot = !!chat.snapshotStage;\r\n\r\n return (\r\n <div key={index}>\r\n {/* user bubble */}\r\n {chat.query && (\r\n <div className=\"flex justify-end\">\r\n <p\r\n className=\"text-sm rounded-l-xl p-3 m-3 mb-4 rounded-br-xl max-w-[75%]\"\r\n style={{\r\n color: \"#ffffff\",\r\n backgroundColor: \"var(--tanya)\",\r\n }}\r\n >\r\n {chat.query}\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* assistant text bubble (for cancel message) */}\r\n {chat.response === \"__TEXT__\" &&\r\n chat.snapshotPayload?.text && (\r\n <div className=\"mt-2\">\r\n <div\r\n className=\"text-sm text-tanya-contrast px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor: \"var(--tanya-light)\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <p>{chat.snapshotPayload.text}</p>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Proceed confirmation */}\r\n {isLatest && showProceedConfirm && variantCount > 1 && (\r\n <div className=\"mx-4 mt-2 rounded-xl border border-gray-200 bg-white p-4 animate-fade-in\">\r\n <div className=\"text-sm text-gray-800\">\r\n Proceed with color:{\" \"}\r\n <span className=\"font-semibold\">\r\n {pickedColor || \"—\"}\r\n </span>\r\n , size:{\" \"}\r\n <span className=\"font-semibold\">\r\n {pickedSize || \"—\"}\r\n </span>\r\n ?\r\n </div>\r\n <div className=\"mt-3 flex gap-3\">\r\n <button\r\n onClick={handleConfirmProceedYes}\r\n className=\"px-5 py-2 rounded-full text-white font-semibold\"\r\n style={{ background: themeHeaderBg }}\r\n >\r\n Yes\r\n </button>\r\n <button\r\n onClick={handleConfirmProceedNo}\r\n className=\"px-5 py-2 rounded-full font-semibold border\"\r\n style={{\r\n borderColor: themeHeaderBg,\r\n color: themeHeaderBg,\r\n }}\r\n >\r\n No, change SKU\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Inline variant picker after \"No\" */}\r\n {isLatest && showVariantPicker && (\r\n <VariantSelectorCard showSubmit />\r\n )}\r\n\r\n {/* assistant loading */}\r\n {isLatest && isLoading && (\r\n <div className=\"mt-4\">\r\n <div\r\n className=\"text-sm text-tanya-contrast px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor: \"var(--tanya-light)\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex items-center gap-2 tanya-pulse-text\">\r\n <p>Reading your instruction and setting things up…</p>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* assistant cards */}\r\n {(isSnapshot || chat.response === \"__CARD__\") &&\r\n (!isLoading || !isLatest) && (\r\n <div\r\n className=\"mt-6 mb-4 mx-4 animate-fade-in\"\r\n style={{\r\n backgroundColor: \"#fff\",\r\n borderRadius: \"1rem\",\r\n boxShadow: \"0 2px 8px rgba(0,0,0,0.08)\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {isSnapshot\r\n ? renderSnapshotCard(chat, isLatest)\r\n : renderInitialExtractionCard(\r\n chat.snapshotPayload,\r\n false\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Address selection */}\r\n {showAddressSelection && (\r\n <div className=\"mt-6 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:home-map-marker\"\r\n width=\"24\"\r\n color=\"var(--tanya-light)\"\r\n />\r\n Select a Delivery Address\r\n </h3>\r\n {addressSubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangeAddress}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change address\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Choose where you’d like us to deliver this item.\r\n </p>\r\n\r\n {addressLoading ? (\r\n <div className=\"flex items-center py-6\">\r\n <div\r\n className=\"animate-spin rounded-full h-6 w-6 border-b-2\"\r\n style={{ borderBottomColor: \"var(--tanya-light)\" }}\r\n />\r\n <p className=\"ml-3 text-gray-600\">\r\n Fetching your addresses...\r\n </p>\r\n </div>\r\n ) : addressList.length > 0 ? (\r\n <div\r\n className={`space-y-3 ${\r\n addressSubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n {addressList.map((addr: any) => {\r\n const heading = [addr.addressLine1, addr.addressLine2]\r\n .filter(Boolean)\r\n .map((s: string) => initialCapital(s || \"\"))\r\n .join(\" \");\r\n const cityLine = initialCapital(addr.city || \"\");\r\n const statePostal = `${initialCapital(addr.state || \"\")}${\r\n addr.state && addr.postalCode ? \", \" : \"\"\r\n }${addr.postalCode || \"\"}`;\r\n const countryLine = initialCapital(addr.country || \"\");\r\n const idStr = String(addr.addressId ?? addr.id);\r\n const isSelected = selectedAddressId === idStr;\r\n return (\r\n <label\r\n key={idStr}\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n isSelected\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${addressSubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={\r\n addressSubmitted ? \"Address already submitted\" : \"\"\r\n }\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"address\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={isSelected}\r\n disabled={addressSubmitted}\r\n onChange={() => setSelectedAddressId(idStr)}\r\n value={idStr}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800\">\r\n {heading || \"Address\"}\r\n </div>\r\n <div className=\"text-sm text-gray-700\">\r\n {cityLine}\r\n <br />\r\n {statePostal}\r\n <br />\r\n {countryLine}\r\n </div>\r\n </div>\r\n </label>\r\n );\r\n })}\r\n <div className=\"flex justify-between pt-2\">\r\n <button\r\n onClick={handleCancelDelivery}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitAddress}\r\n disabled={addressSubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n addressSubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: themeHeaderBg }}\r\n >\r\n {addressSubmitted\r\n ? \"Address Submitted\"\r\n : \"Submit Address\"}\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"text-center py-8 text-gray-600\">\r\n No addresses found. Please add a new one in your profile.\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Delivery options */}\r\n {showDeliveryOptions && (\r\n <div className=\"mt-2 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:truck-delivery\"\r\n width=\"24\"\r\n color=\"var(--tanya-light)\"\r\n />\r\n Great! Now choose how fast you want it delivered 🚚\r\n </h3>\r\n {deliverySubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangeDelivery}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change shipping method\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Which one would you like me to use for this order?\r\n </p>\r\n\r\n <div\r\n className={`space-y-3 ${\r\n deliverySubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n {(Object.keys(DELIVERY_OPTIONS) as DeliveryOptionKey[]).map(\r\n (key) => {\r\n const opt = DELIVERY_OPTIONS[key];\r\n const isSelected = selectedDelivery === key;\r\n return (\r\n <label\r\n key={key}\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n isSelected\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${deliverySubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={\r\n deliverySubmitted\r\n ? \"Delivery already submitted\"\r\n : \"\"\r\n }\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"delivery\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={isSelected}\r\n disabled={deliverySubmitted}\r\n onChange={() => setSelectedDelivery(key)}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800 flex items-center gap-2\">\r\n <Icon icon={opt.icon} width=\"18\" /> {opt.label}\r\n </div>\r\n <div className=\"text-sm text-gray-700\">\r\n {opt.subtitle}\r\n </div>\r\n </div>\r\n <div className=\"text-sm font-semibold text-gray-800\">\r\n {opt.fee === 0\r\n ? \"Free\"\r\n : formatCurrency(\r\n opt.fee,\r\n extractedDetails?.currency || CURRENCY_PREF\r\n )}\r\n </div>\r\n </label>\r\n );\r\n }\r\n )}\r\n </div>\r\n\r\n <div className=\"flex justify-between pt-4\">\r\n <button\r\n onClick={handleCancelDelivery}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitDelivery}\r\n disabled={deliverySubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n deliverySubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: \"var(--tanya)\" }}\r\n >\r\n {deliverySubmitted\r\n ? \"Delivery Submitted\"\r\n : \"Submit Delivery Option\"}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Payment options */}\r\n {showPaymentOptions && (\r\n <div className=\"mt-2 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:credit-card-outline\"\r\n width=\"24\"\r\n color={\"var(--tanya-light)\"}\r\n />\r\n Almost done! 💳\r\n </h3>\r\n {paymentSubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangePayment}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change payment method\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Please choose a payment method for this order:\r\n </p>\r\n\r\n <div\r\n className={`space-y-3 ${\r\n paymentSubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n <label\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n selectedPayment === \"card\"\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${paymentSubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={paymentSubmitted ? \"Payment already submitted\" : \"\"}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"payment\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={selectedPayment === \"card\"}\r\n disabled={paymentSubmitted}\r\n onChange={() => setSelectedPayment(\"card\")}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800 flex items-center gap-2\">\r\n <Icon icon=\"mdi:credit-card-chip-outline\" width=\"18\" />{\" \"}\r\n Credit Card\r\n </div>\r\n {selectedPayment === \"card\" && (\r\n <div className=\"text-sm text-gray-700 mt-1\">\r\n Mastercard &nbsp;&nbsp; •••• 7820\r\n <br />\r\n Expiry: 12/26\r\n </div>\r\n )}\r\n </div>\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex justify-between pt-4\">\r\n <button\r\n onClick={handleCancelPayment}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitPayment}\r\n disabled={paymentSubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n paymentSubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: \"var(--tanya)\" }}\r\n >\r\n {paymentSubmitted\r\n ? \"Payment Submitted\"\r\n : \"Submit Payment Method\"}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Final summary (live) */}\r\n {showFinalSummary &&\r\n renderFinalSummaryCard(\r\n {\r\n ...extractedDetails,\r\n address: JSON.parse(\r\n localStorage.getItem(\"agentic_order_address\") || \"null\"\r\n ),\r\n delivery: localStorage.getItem(\"agentic_order_delivery\"),\r\n payment: localStorage.getItem(\"agentic_order_payment\"),\r\n summary: computeSummary(extractedDetails?.currency),\r\n },\r\n false\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <div className=\"sticky bottom-0 w-[96%] drop-shadow-xl flex items-center rounded-full bg-white border border-gray-300 m-[15px]\">\r\n <input\r\n placeholder={\r\n chatLocked\r\n ? \"Complete the current step…\"\r\n : !hasMatchingVariant\r\n ? \"Please select a combination first.\"\r\n : `What would you like me to do? (e.g., If this product goes below $${\r\n parseInt(product.price) - 5\r\n }, grab it for me.)`\r\n }\r\n disabled={isInputDisabled}\r\n className={`w-full rounded-full p-4 outline-none border-none focus:ring-0 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed\r\n ${\r\n !hasMatchingVariant\r\n ? \"placeholder:text-red-400 text-red-500\"\r\n : \"\"\r\n }`}\r\n value={inputText}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading && !chatLocked)\r\n handleSendMessage();\r\n }}\r\n onChange={(e) => setInputText(e.target.value)}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || chatLocked}\r\n className=\"mr-6 font-medium\"\r\n style={{ color: \"var(--tanya-light)\" }}\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"m-3 animate-spin rounded-full h-6 w-6 border-b-2\"\r\n style={{ borderBottom: \"2px solid\" }}\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"fluent:send-48-filled\"\r\n color={\"var(--tanya-light)\"}\r\n width=\"24\"\r\n height=\"24\"\r\n />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n};\r\n\r\nexport default AgenticShopping;\r\n"],"names":["TanyaChatbotProvider","useEffect","style","css","initialState","storeSlice","createSlice","state","action","setStore","storeReducer","productSlice","setProduct","productReducer","store","configureStore","ReduxProvider","children","jsx","Provider","notifySFCC","basketId","event","Popover","props","PopoverPrimitive","PopoverTrigger","apiConfig","fetchTokenBmGrant","URL","response","axios","getHost","getSiteId","error","fetchExistingGuestCustomerToken","access_token","dwsid","clientId","shortCode","organisationId","authData","siteId","accessKey","expiresInKey","expires_in","_a","getJWTToken","cachedToken","tokenExpiry","tokenUrl","tokenPayload","tokenResponse","tokenData","expiresIn","getSearchResults","query","serverUrl","basePath","token","res","host","getProductById","id","getInterestApi","customerId","customer_token","displayData","data","imageUrlArray","image","currencyFormatter","currencyCode","priceFormatter","_b","_c","initialCapital","text","stringReducer","length","formatStringToHtml","str","line","index","numberedPoint","useResponsiveProductsPerPage","getProductsPerPage","productsPerPage","setProductsPerPage","useState","handleResize","ProductCarousel","product","dispatch","useDispatch","startIndex","setStartIndex","nextProducts","prevIndex","prevProducts","getProduct","jsxs","prod","_d","ProductDisplay","chat","storeDetails","products","i","createBasket","addProductToBasket","fetchBasket","BASKET_ID_KEY","TOKEN_KEY","TOKEN_EXPIRY_KEY","EXPIRY_TIME","VERSION","setStoredBasketId","setStoredToken","expiryTime","ANIMATION_DURATION","ProductDisplayCard","addToCartPwa","useSelector","s","show","setShow","addToCart","toast","productData","_e","_f","customerData","basketIdFromCustomer","currentTime","newExpiryTime","fetchBasketResponse","_i","_j","basketResponse","_k","_l","_m","_n","_o","_p","viewMore","path","Fragment","e","group","_","Icon","TanyaShoppingAssistantStream","tanyaConfig","shoppingOptions","payloadMapping","productName","useRef","productId","productImage","productPrice","authDetails","setAuthDetails","isOpen","setIsOpen","isAnimating","setIsAnimating","isVisible","setIsVisible","adding","setAdding","isLoading","setIsLoading","productLoading","setProductLoading","inputText","setInputText","whom","setWhom","mapSnapshotToProduct","snap","chatHistory","setChatHistory","scrollRef","currentAccessToken","savedChatToken","savedHistory","accessToken","openPanel","closePanel","handleWhomSelection","selected","getAuthDetails","clientID","organizationID","getInterests","customer_id","runSecondaryFlow","productTitle","points","interests","prev","msg","idx","user","isLoggedIn","invokeUrl","payload","reader","decoder","buffer","done","value","lines","jsonData","parsedData","handleSendMessage","question","newQuery","sanitizedWhom","keywords","getKeywords","sanitizeKeywords","keywordMatch","sanitizedKeywords","keyword","keys","responses","k","p","firstProduct","price","err","handleAddToCart","productToBeAdded","quantity","option","m","extendStatics","d","b","__extends","__","__assign","n","__rest","t","genericMessage","setPrototypeOf","obj","proto","InvariantError","_super","message","_this","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","name","method","version","maybe","thunk","untypedGlobal","prefixCounts","makeUniqueId","prefix","count","stringifyForDisplay","space","undefId","key","wrap","fn","args","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","stringify","arg","messageArgs","global","getOperationName","doc","definition","x","currentContext","MISSING_VALUE","idCounter","makeSlotClass","context","callback","thisArg","slots","parent","saved","globalKey","globalHost","Slot","bind","noContext","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","len","arr2","_defineProperties","target","descriptor","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","unsubscribe","closeSubscription","flushSubscription","queue","notifySubscription","type","observer","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_proto","_proto2","_proto3","resolve","reject","_this2","C","_this3","_this4","hasSeed","hasValue","seed","acc","first","_this5","_len","sources","_key","startNext","next","v","_this6","subscriptions","outer","inner","completeIfDone","observable","_iterator","_step","item","_len2","items","_key2","symbolObservablePonyfill","root","result","Symbol","ponyfill","prototype","fakeObsSymbol","validateOperation","operation","OPERATION_FIELDS","createOperation","starting","setContext","getContext","transformOperation","transformedOperation","muteAllDeprecations","slot","isMuted","warnDeprecated","cb","passthrough","op","forward","toLink","handler","ApolloLink","isTerminating","link","request","links","y","test","left","right","leftLink","rightLink","ret","second","firstLink","nextLink","setter","handle","closed","req","generateToken","authHeader","BASE_URL","httpLink","createHttpLink","authLink","headers","apolloClient","ApolloClient","InMemoryCache","TanyaWrapper","ApolloProvider","getIconsTree","names","icons","aliases","resolved","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","child","internalGetIconData","tree","currentProps","parse","name$1","parseIconSet","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","icon","dataStorage","newStorage","provider","getStorage","providerStorage","addIconSet","storage","addIconToStorage","matchIconName","stringToIcon","validate","allowSimpleName","colonSeparated","validateIconName","dashSeparated","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","num","splitSVGDefs","content","tag","defs","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","body","split","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","regex","randomPrefix","counter","replaceIDs","ids","match","suffix","newID","escapedID","setAPIModule","getAPIModule","createAPIConfig","source","resources","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","detectFetch","fetchModule","calculateMaxLength","maxHostLength","url","shouldAbort","status","prepare","results","maxLength","getPath","send","params","iconsList","urlParams","uri","defaultError","fetchAPIModule","removeCallback","storages","row","updateCallbacks","hasPending","oldLength","storeCallback","pendingSources","abort","sortIcons","a","lastIcon","localStorage","list","listToIcons","defaultConfig","sendQuery","resourcesCount","nextIndex","startTime","queriesSent","lastError","timer","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","isError","queued","execNext","resource","status$1","initRedundancy","cfg","queries","queryCallback","doneCallback","query$1","find","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","api","cached","moduleKey","emptyCallback","loadedNewIcons","checkIconNamesForAPI","valid","invalid","parseLoaderResponse","checkMissing","pending","parsePossiblyAsyncResponse","loadNewIcons","icons$1","customIconLoader","iconSet","loadIcons","cleanedIcons","sortedIcons","callCallback","newIcons","lastProvider","lastPrefix","providerNewIcons","pendingQueue","mergeCustomisations","valueType","separator","flipFromString","custom","flip","rotateFromString","defaultValue","units","value$1","iconToHTML","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToData","svgToURL","policy","createPolicy","cleanUpInnerHTML","html","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","inlineDefaults","fixSize","render","defaultProps","mode","customStyle","componentProps","classNames","renderAttribs","localCounter","createElement","useMask","_window","preload","providers","IconComponent","mounted","setMounted","setAbort","getInitialState","setState","changeState","newState","updateState","forwardRef","ref","CURRENCY_PREF","pickVariantMoney","variant","currencyPref","prices","choose","discountedFirst","normal","prefer","picked","getVariantAttributeLabel","getVariantStyleAndLabel","sizeLabel","sizeAttr","getVariantColor","getVariantSize","DELIVERY_OPTIONS","SHIPPING_METHOD_MAP","formatCurrency","amount","currency","pvMaster","pvVariants","pvAll","getVariantByIndex","getVariantImage","getProductImage","_h","_g","getProductTitle","getVariantPrice","cents","cur","getProductPrice","val","getProductSku","getProductColor","getProductSize","MAX_CONTEXT_ITEMS","AgenticShopping","open","onClose","addressListProp","addressLoading","variationAttributes","allVariants","safeInitialIdx","variantsByColor","setVariantsByColor","selectedVariantIndex","setSelectedVariantIndex","grouped","groupVariantsByColor","variants","imageGroups","colorMap","sizeMap","buildVariationMaps","imagesByColor","colorAttr","colorCode","map","sizeCode","nameA","nameB","entry","variantCount","selectedVariantIdx","setSelectedVariantIdx","pickedColor","setPickedColor","pickedSize","setPickedSize","masterColorRef","masterSizeRef","selectedVariant","pendingQuery","setPendingQuery","showProceedConfirm","setShowProceedConfirm","showVariantPicker","setShowVariantPicker","chatLocked","setChatLocked","extractedDetails","setExtractedDetails","contextHistory","setContextHistory","addressList","setAddressList","showAddressSelection","setShowAddressSelection","selectedAddressId","setSelectedAddressId","confirmButton","SetConfirmButton","addressSubmitted","setAddressSubmitted","showDeliveryOptions","setShowDeliveryOptions","selectedDelivery","setSelectedDelivery","deliverySubmitted","setDeliverySubmitted","showPaymentOptions","setShowPaymentOptions","selectedPayment","setSelectedPayment","paymentSubmitted","setPaymentSubmitted","showFinalSummary","setShowFinalSummary","confirmSuccess","setConfirmSuccess","intentMandateId","setIntentMandateId","feedbackRating","setFeedbackRating","feedbackComment","setFeedbackComment","feedbackSubmitted","setFeedbackSubmitted","selectedVariantProductId","setSelectedVariantProductId","all","bounded","mColor","mSize","themeColor","themeDark","theme","themeHeaderBg","handleFeedbackSubmit","handleFeedbackCancel","renderSuccessSnapshot","star","getAllAddresses","snapshotToHistory","stage","finalizeLiveCards","removeAllAssistantLiveRows","hardResetLive","resetFlowStateForNewQuery","variantEntries","useMemo","img","hasMatchingVariant","isInputDisabled","getQuantity","details","q","computeProductTotalWithFallback","minor","computeSummary","currencyArg","variantPrice","product_total","tax","shipping_fee","startFlowWithSku","sku","variantIndex","contextToSend","finalResponse","finalKeywords","parsed","extracted","maybeJson","handleConfirmProceedYes","handleConfirmProceedNo","handleVariantSubmitAfterNo","handleYesLockItIn","handleSubmitAddress","handleChangeAddress","handleSubmitDelivery","handleCancelDelivery","handleChangeDelivery","handleSubmitPayment","handleCancelPayment","handleChangePayment","handleConfirmWatch","order","chosenAddress","chosenDelivery","chosenPayment","shopperId","shippingAddressId","shippingMethodId","paymentMethodId","maxPriceMinor","intentMandatePayload","errorBody","apiResult","mandateId","finalPayload","handleCancelWatch","ProductSummaryCard","selectedIndex","title","skuCode","color","unitPrice","hasSku","inStock","VariantSelectorCard","showSubmit","byColor","c","bySize","isSelected","swatch","g","renderInitialExtractionCard","readonly","priceCurrency","displayMax","idLabel","renderFinalSummaryCard","pid","subtotal","addressDisplay","paymentLabelNode","renderAddressSnapshot","addr","renderDeliverySnapshot","opt","renderPaymentSnapshot","renderSnapshotCard","isLatest","createPortal","isSnapshot","heading","cityLine","statePostal","countryLine","idStr"],"mappings":"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","x_google_ignoreList":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,45]}
1
+ {"version":3,"file":"tanya-chatbot.es.js","sources":["../src/inject-style.ts","../src/store/reducers/storeReducer.ts","../src/store/reducers/productReducer.ts","../src/store/index.ts","../src/components/provider/reduxProvider.tsx","../src/components/lib/utils.ts","../src/components/ui/popover.tsx","../src/config/api.ts","../src/components/utils/fetchTokenBmGrant.ts","../src/components/utils/fetchExistingRegisterCustomerToken.ts","../src/sfcc-apis/session/index.ts","../src/components/utils/index.ts","../src/components/utils/helper.js","../src/components/carousel/ProductCarousel.tsx","../src/components/carousel/ProductDisplay.tsx","../src/components/api/api.ts","../src/config/constant.ts","../src/components/utils/localStorage.ts","../src/components/product/ProductDisplayCard.tsx","../src/components/tanya-widget/tanya-shopping-assistent.tsx","../node_modules/tslib/tslib.es6.mjs","../node_modules/ts-invariant/lib/invariant.js","../node_modules/@apollo/client/version.js","../node_modules/@apollo/client/utilities/globals/maybe.js","../node_modules/@apollo/client/utilities/globals/global.js","../node_modules/@apollo/client/utilities/common/makeUniqueId.js","../node_modules/@apollo/client/utilities/common/stringifyForDisplay.js","../node_modules/@apollo/client/utilities/globals/invariantWrappers.js","../node_modules/@apollo/client/utilities/graphql/getFromAST.js","../node_modules/@wry/context/lib/slot.js","../node_modules/@wry/context/lib/index.js","../node_modules/optimism/lib/context.js","../node_modules/zen-observable-ts/module.js","../node_modules/symbol-observable/es/ponyfill.js","../node_modules/symbol-observable/es/index.js","../node_modules/@apollo/client/utilities/observables/Observable.js","../node_modules/@apollo/client/link/utils/validateOperation.js","../node_modules/@apollo/client/link/utils/createOperation.js","../node_modules/@apollo/client/link/utils/transformOperation.js","../node_modules/@apollo/client/utilities/deprecation/index.js","../node_modules/@apollo/client/link/core/ApolloLink.js","../node_modules/@apollo/client/link/context/index.js","../src/components/utils/generateToken.js","../src/components/graphQL/apollo-client.ts","../src/components/tanya-widget/TanyaWrapper.tsx","../node_modules/@iconify/react/dist/iconify.js","../src/components/agenticShopping/productVariantHelper.tsx","../src/components/agenticShopping/agenticShopping.tsx"],"sourcesContent":["import css from \"./index.css?inline\";\nimport { useEffect } from \"react\";\n\nexport function TanyaChatbotProvider() {\n useEffect(() => {\n if (typeof document !== \"undefined\") {\n const style = document.createElement(\"style\");\n style.textContent = css;\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }\n }, []);\n\n return null;\n}\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { Store } from \"../../components/graphQL/queries/types\";\n\ninterface StoreState {\n store?: Store;\n}\n\nconst initialState: StoreState = {\n store: {\n storeCode: \"\",\n storeName: \"\",\n storeDescription: \"\",\n activeCatalogId: 0,\n isDefault: false,\n logoDarkBg: \"\",\n logoLightBg: \"\",\n logoTransparent: \"\",\n catalogs: [],\n themeColor: \"\",\n themeContrastColor: \"\",\n tanyaThemeColor: \"\",\n tanyaThemeColorLight: \"\",\n favicon: \"\",\n websiteTitle: \"\",\n flowId: \"\",\n aliasId: \"\",\n searchConfigs: {\n endpoint: \"\",\n accessKey: \"\",\n secretKey: \"\",\n },\n homePageCategories: [],\n carouselImages: {\n web: [],\n mobile: [],\n },\n otherImages: {\n web: [],\n mobile: [],\n },\n },\n};\n\nexport const storeSlice = createSlice({\n name: \"store\",\n initialState,\n reducers: {\n setStore: (state, action: PayloadAction<Store>) => {\n state.store = action.payload;\n },\n },\n});\n\nexport const { setStore } = storeSlice.actions;\n\nexport default storeSlice.reducer;\n","import { createSlice, type PayloadAction } from \"@reduxjs/toolkit\";\nimport type { SearchProduct } from \"../../components/graphQL/queries/types\";\n\ninterface ProductState {\n product: SearchProduct | null;\n}\n\nconst initialState: ProductState = {\n product: null,\n};\n\nexport const productSlice = createSlice({\n name: \"product\",\n initialState,\n reducers: {\n setProduct: (state, action: PayloadAction<SearchProduct | null>) => {\n state.product = action.payload;\n },\n },\n});\n\nexport const { setProduct } = productSlice.actions;\n\nexport default productSlice.reducer;\n","import { configureStore } from \"@reduxjs/toolkit\";\nimport storeReducer from \"./reducers/storeReducer\";\nimport productReducer from \"./reducers/productReducer\";\n\nconst store = configureStore({\n reducer: {\n store: storeReducer,\n product: productReducer,\n },\n});\n\nexport default store;\n\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppDispatch = typeof store.dispatch;\n","import { Provider } from \"react-redux\";\nimport store from \"../../store\";\n\nconst ReduxProvider = ({ children }: { children: React.ReactNode }) => {\n return <Provider store={store}>{children}</Provider>;\n};\n\nexport default ReduxProvider;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const notifySFCC = (basketId?: string) => {\n const event = new CustomEvent(\"reactCartUpdated\", {\n detail: {\n cartUpdated: true,\n basketId,\n },\n });\n window.dispatchEvent(event);\n};\n\nexport const findImageGroupBy = (imageGroups = [], options: any) => {\n console.log(options,'the option');\n let { viewType, selectedVariationAttributes = {} } = options;\n\n // Start by filtering out any imageGroup that isn't the correct viewType.\n imageGroups = imageGroups.filter(\n ({ viewType: imageGroupViewType }) => imageGroupViewType === viewType\n );\n\n // Not all variation attributes are reflected in images. For example, you probably\n // won't have a separate image group for various sizes, but you might for colors. For that\n // reason we need to know what are valid attribute values to filter on.\n const refinableAttributeIds = [\n ...new Set(\n imageGroups\n .reduce(\n (acc, { variationAttributes = [] }) => [\n ...acc,\n ...variationAttributes,\n ],\n []\n )\n .map(({ id }) => id)\n ),\n ];\n\n // Update the `selectedVariationAttributes` by filtering out the attributes that have no\n // representation in this imageGroup.\n selectedVariationAttributes = Object.keys(selectedVariationAttributes).reduce(\n (acc, curr) => {\n return refinableAttributeIds.includes(curr)\n ? {\n ...acc,\n [`${curr}`]: selectedVariationAttributes[curr],\n }\n : acc;\n },\n {}\n );\n\n // Find the image group that has all the all the selected variation value attributes.\n imageGroups = imageGroups.find(({ variationAttributes = [] }) => {\n const selectedIds = Object.keys(selectedVariationAttributes);\n\n return selectedIds.every((selectedId) => {\n const selectedValue = selectedVariationAttributes[selectedId];\n\n return variationAttributes.find(\n ({ id, values }) =>\n id === selectedId &&\n values.every(({ value }) => value === selectedValue)\n );\n });\n });\n\n return imageGroups;\n};\n","\"use client\";\r\n\r\nimport * as React from \"react\";\r\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\";\r\n\r\nimport { cn } from \"../lib/utils\";\r\n\r\nfunction Popover({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Root>) {\r\n return <PopoverPrimitive.Root data-slot=\"popover\" {...props} />;\r\n}\r\n\r\nfunction PopoverTrigger({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Trigger>) {\r\n return <PopoverPrimitive.Trigger data-slot=\"popover-trigger\" {...props} />;\r\n}\r\n\r\nfunction PopoverContent({\r\n className,\r\n align = \"center\",\r\n sideOffset = 4,\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Content>) {\r\n return (\r\n <PopoverPrimitive.Portal>\r\n <PopoverPrimitive.Content\r\n data-slot=\"popover-content\"\r\n align={align}\r\n sideOffset={sideOffset}\r\n className={cn(\r\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden\",\r\n className\r\n )}\r\n {...props}\r\n />\r\n </PopoverPrimitive.Portal>\r\n );\r\n}\r\n\r\nfunction PopoverAnchor({\r\n ...props\r\n}: React.ComponentProps<typeof PopoverPrimitive.Anchor>) {\r\n return <PopoverPrimitive.Anchor data-slot=\"popover-anchor\" {...props} />;\r\n}\r\n\r\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };\r\n","function stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n}\n\n// Helper function to convert ArrayBuffer to hex string\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\n const byteArray = new Uint8Array(buffer);\n const hexCodes = [...byteArray].map((value) => {\n const hexCode = value.toString(16);\n const paddedHexCode = hexCode.padStart(2, \"0\");\n return paddedHexCode;\n });\n return hexCodes.join(\"\");\n}\n\n// SHA256 hash using Web Crypto API\nasync function sha256(data: string): Promise<ArrayBuffer> {\n const encoder = new TextEncoder();\n return await crypto.subtle.digest(\"SHA-256\", encoder.encode(data));\n}\n\n// HMAC-SHA256 using Web Crypto API\nasync function hmacSha256(\n key: ArrayBuffer | Uint8Array,\n data: string\n): Promise<ArrayBuffer> {\n const cryptoKey = await crypto.subtle.importKey(\n \"raw\",\n key,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n\n const encoder = new TextEncoder();\n return await crypto.subtle.sign(\"HMAC\", cryptoKey, encoder.encode(data));\n}\n\n// Get signing key\nasync function getSignatureKey(\n key: string,\n dateStamp: string,\n regionName: string,\n serviceName: string\n): Promise<ArrayBuffer> {\n const kDate = await hmacSha256(stringToUint8Array(\"AWS4\" + key), dateStamp);\n const kRegion = await hmacSha256(kDate, regionName);\n const kService = await hmacSha256(kRegion, serviceName);\n const kSigning = await hmacSha256(kService, \"aws4_request\");\n return kSigning;\n}\n\nexport async function createSignedHeaders(\n url: string,\n method: string,\n payload: string,\n accessKeyId: string,\n secretAccessKey: string,\n region: string,\n service: string\n): Promise<Record<string, string>> {\n const urlObj = new URL(url);\n const host = urlObj.hostname;\n const pathname = urlObj.pathname;\n const search = urlObj.search;\n\n const now = new Date();\n const amzDate = now.toISOString().replace(/[:\\-]|\\.\\d{3}/g, \"\");\n const dateStamp = amzDate.substring(0, 8);\n const payloadHash = arrayBufferToHex(await sha256(payload));\n const contentLength = new TextEncoder().encode(payload).length.toString();\n\n const canonicalHeaders =\n `content-length:${contentLength}\\n` +\n `content-type:application/json\\n` +\n `host:${host}\\n` +\n `x-amz-content-sha256:${payloadHash}\\n` +\n `x-amz-date:${amzDate}\\n`;\n\n const signedHeaders =\n \"content-length;content-type;host;x-amz-content-sha256;x-amz-date\";\n\n const canonicalRequest = [\n method,\n pathname,\n search.slice(1),\n canonicalHeaders,\n signedHeaders,\n payloadHash,\n ].join(\"\\n\");\n\n const algorithm = \"AWS4-HMAC-SHA256\";\n const credentialScope = `${dateStamp}/${region}/${service}/aws4_request`;\n const stringToSign = [\n algorithm,\n amzDate,\n credentialScope,\n arrayBufferToHex(await sha256(canonicalRequest)),\n ].join(\"\\n\");\n\n const signingKey = await getSignatureKey(\n secretAccessKey,\n dateStamp,\n region,\n service\n );\n\n const signature = arrayBufferToHex(\n await hmacSha256(signingKey, stringToSign)\n );\n\n const authorizationHeader = `${algorithm} Credential=${accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n return {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": contentLength,\n \"X-Amz-Content-Sha256\": payloadHash,\n \"X-Amz-Date\": amzDate,\n Authorization: authorizationHeader,\n };\n}\n\nexport const apiConfig = () => {\n const aiConversationUrl = `https://mdv3qwfi2j.execute-api.us-east-1.amazonaws.com/dev/api/bedrock/invoke/stream`;\n const xAPIKey = \"BJBtjpPkqGatuoa3qJqdR8aHXSsHkgvGaootbubi\";\n // const serverUrl = \"https://tanya-sfcc-server.vercel.app/\";\n const serverUrl = import.meta.env.VITE_SERVER_BASE_URL;\n // const serverUrl = \"\";\n const basePath = import.meta.env.VITE_SCAPI_ENVIRONMENT ? \"sc-api\" : \"api\";\n\n return { aiConversationUrl, xAPIKey, serverUrl, basePath };\n};\n","import axios from \"axios\";\r\nimport { getHost, getSiteId } from \".\";\r\n\r\n// email:password:client need to be pass in encrypt form in the auth of fetchTokenBmGrant\r\n\r\n// email:password:client is different from user to user\r\nexport const fetchTokenBmGrant = async () => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-bm-grant?baseUrl=${getHost()}&siteId=${getSiteId()}`\r\n );\r\n if (response.status === 200 && response.data.access_token) {\r\n return response.data.access_token;\r\n } else {\r\n console.error(\"Failed to fetch token:\", response.data);\r\n return null;\r\n }\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error fetching token:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","import axios from \"axios\";\r\nimport { clientId, getHost, getSiteId, organisationId, shortCode } from \".\";\r\n\r\ninterface Customer {\r\n access_token: string;\r\n customerId: string;\r\n}\r\n\r\n// function getCookie(name: string): string | null {\r\n// const value = `; ${document.cookie}`;\r\n// console.log(\"parts\", value,value.includes(\"dwsid\"));\r\n// const parts = value.split(`; ${name}=`);\r\n// if (parts.length === 2) return parts.pop()?.split(\";\").shift() || null;\r\n// return null;\r\n// }\r\n\r\nexport const fetchExistingRegisterCustomerToken = async ({\r\n access_token,\r\n customerId,\r\n}: Customer) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-register-customer/${customerId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n // console.log(\"customer token res fe\", response.data)\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n\r\nexport const fetchExistingGuestCustomerToken = async (\r\n access_token: string,\r\n) => {\r\n const URL = `${import.meta.env.VITE_SERVER_BASE_URL}`;\r\n try {\r\n const dwsid = JSON.parse(sessionStorage.getItem(\"customerData\")|| \"{}\").dwsid // fetch cookie\r\n\r\n const response = await axios.post(\r\n `${URL}api/auth/token-existing-guest-customer?dwsid=${dwsid}&baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\r\n {},\r\n {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${access_token}`,\r\n },\r\n }\r\n );\r\n\r\n if (response.status === 200 && response.data) {\r\n return response.data;\r\n }\r\n return null;\r\n } catch (error) {\r\n if (axios.isAxiosError(error)) {\r\n console.error(\"Error creating basket:\", error.response || error.message);\r\n } else {\r\n console.error(\"Unexpected error:\", error);\r\n }\r\n return null;\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../../components/utils\";\n\nexport async function authData() {\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n // return \"\";\n // }\n const siteId = getSiteId();\n const accessKey = \"access_token\" + \"_\" + siteId;\n const expiresInKey = \"expires_in\" + \"_\" + siteId;\n const expires_in = localStorage.getItem(expiresInKey);\n const access_token = localStorage.getItem(accessKey);\n console.log(access_token);\n const isGuest =\n JSON.parse(sessionStorage.getItem(\"customerData\") || \"{}\")?.isGuest || true;\n // if (\n // expires_in &&\n // access_token &&\n // new Date().getTime() < parseInt(expires_in)\n // // && (isGuest === localStorage.getItem(\"isGuest\") || \"true\")\n // ) {\n console.log(\"access token found in local storage\");\n return { access_token, expires_in };\n // }\n // const { serverUrl } = apiConfig();\n // const dwsid = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).dwsid;\n\n // const customerMail = JSON.parse(\n // sessionStorage.getItem(\"customerData\") || \"{}\"\n // ).usrRef;\n\n // try {\n // const endpoint = isGuest ? \"unregister-auth\" : \"register-auth\";\n // const res = await axios.get(\n // `${serverUrl}sc-api/${endpoint}?dwsid=${dwsid}&email=${customerMail}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}&siteId=${getSiteId()}&token=true`,\n // {\n // withCredentials: true,\n // }\n // );\n // // localStorage.setItem(accessKey, res.data.access_token);\n // // localStorage.setItem(\n // // expiresInKey,\n // // String(new Date().getTime() + res.data.expires_in * 1000)\n // // );\n // // localStorage.setItem(\"isGuest\", isGuest ? \"true\" : \"false\");\n // return res.data;\n // } catch (err) {\n // console.log(err);\n // }\n}\n\nexport const getJWTToken = async (cachedToken: any, tokenExpiry: any) => {\n if (cachedToken && tokenExpiry && Date.now() < tokenExpiry) {\n return cachedToken;\n }\n\n try {\n const tokenUrl =\n \"https://us-east-1lsr29ln3u.auth.us-east-1.amazoncognito.com/oauth2/token\";\n\n const tokenPayload = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: \"4i8rd70sgt961tc4dhskgf08c\",\n client_secret: \"bnsfq1220loh2cn2cm2ttn8fdhdpt0u8m1fgj8vfk2rn61aurjg\",\n scope: \"default-m2m-resource-server-8xzfzo/read\",\n });\n\n const tokenResponse = await fetch(tokenUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: tokenPayload,\n });\n\n if (!tokenResponse.ok) {\n throw new Error(`Token request failed! status: ${tokenResponse.status}`);\n }\n\n const tokenData = await tokenResponse.json();\n\n // Cache the token\n cachedToken = tokenData.access_token;\n const expiresIn = tokenData.expires_in || 3600; // Default to 1 hour\n tokenExpiry = Date.now() + (expiresIn - 60) * 1000; // Refresh 1 minute before expiry\n\n return cachedToken;\n } catch (error) {\n console.error(\"Error obtaining JWT token:\", error);\n // Clear cache on error\n cachedToken = null;\n tokenExpiry = null;\n return null;\n }\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport axios from \"axios\";\nimport { apiConfig } from \"../../config/api\";\nimport { fetchTokenBmGrant } from \"./fetchTokenBmGrant\";\nimport { fetchExistingGuestCustomerToken } from \"./fetchExistingRegisterCustomerToken\";\nimport { authData } from \"../../sfcc-apis/session\";\n\nexport const getHost = () => {\n const host = sessionStorage.getItem(\"Host\");\n return host;\n};\n\nexport const getSiteId = () => {\n const siteId = sessionStorage.getItem(\"SiteId\");\n return siteId;\n};\n\nexport const clientId = () => {\n const clientId = sessionStorage.getItem(\"pubCfg\");\n return clientId;\n};\n\nexport const shortCode = () => {\n const shortCode = sessionStorage.getItem(\"envRef\");\n return shortCode;\n};\n\nexport const organisationId = () => {\n const orgRef = sessionStorage.getItem(\"orgRef\");\n return orgRef;\n};\n\nexport const getSearchResults = async (query: string) => {\n console.log('fetching results');\n const { serverUrl, basePath } = apiConfig();\n let token = \"\";\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\n const res = await authData();\n console.log(\"the token from getSearchResults\", res);\n token = res.access_token;\n }\n\n try {\n const host = getHost();\n const response = await axios.get(\n `${serverUrl}${basePath}/search-sfcc?baseUrl=${host}&query=${query}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n\n return response.data.hits;\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n throw error;\n }\n};\n\nexport const getProductById = async (id: number | string) => {\n if (!id) throw new Error(\"Product ID is required\");\n const { serverUrl, basePath } = apiConfig();\n const host = getHost();\n console.log(\"calling access\");\n const { access_token } = await authData();\n const response = await axios.get(\n `${serverUrl}${basePath}/product-sfcc/${id}?baseUrl=${host}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${access_token}`,\n },\n }\n );\n\n return response.data;\n};\n\nexport const getInterestApi = async (customerId: any) => {\n if (!customerId) throw new Error(\"customerId is required\");\n const access_token = await fetchTokenBmGrant();\n\n const { customer_token } = await fetchExistingGuestCustomerToken(\n access_token\n );\n const { serverUrl, basePath } = apiConfig();\n const data = await authData();\n const token = data.access_token;\n\n const response = await axios.get(\n `${serverUrl}${basePath}/get-interest?baseUrl=${getHost()}&customerId=${customerId}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: import.meta.env.VITE_SCAPI_ENVIRONMENT\n ? `Bearer ${token}`\n : `${customer_token}`,\n },\n }\n );\n\n return response.data;\n};\n","import CryptoJS from \"crypto-js\";\nconst SECRET_KEY = \"admin_one\";\nexport const displayData = (data) => {\n if (typeof data === \"string\") {\n return String(data);\n }\n return String(data[\"en-US\"] || data);\n};\nexport const imageUrlArray = (data) => {\n if (data?.image) {\n return [data.image];\n }\n else if (\"variants\" in data) {\n return data.variants[0].images;\n }\n return data.masterVariant.images.map((image) => image.url);\n};\nexport const currencyFormatter = (data, currencyCode) => {\n return data.toLocaleString(\"en-US\", {\n style: \"currency\",\n currency: currencyCode || \"USD\",\n });\n};\nexport const priceFormatter = (data) => {\n if (\"variants\" in data) {\n return {\n centAmount: data.variants[0]?.prices.EUR.max,\n currencyCode: \"DOL\",\n };\n }\n return {\n centAmount: data.masterVariant?.prices[0].value.centAmount,\n currencyCode: data.masterVariant?.prices[0].value.currencyCode,\n };\n};\nexport const encryptData = (data) => {\n return CryptoJS.AES.encrypt(JSON.stringify(data), SECRET_KEY).toString();\n};\nexport const decryptData = (cipherText) => {\n const bytes = CryptoJS.AES.decrypt(cipherText, SECRET_KEY);\n return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));\n};\nexport const initialCapital = (text) => {\n return text.charAt(0).toUpperCase() + text.slice(1);\n};\nexport const laterDate = (day) => {\n const fiveDaysLater = new Date();\n fiveDaysLater.setDate(fiveDaysLater.getDate() + day);\n const formattedDate = fiveDaysLater.toLocaleDateString(\"en-US\", {\n day: \"numeric\",\n month: \"long\",\n });\n return formattedDate;\n};\nexport const stringReducer = (text, length) => {\n return text.length < length ? text : text.slice(0, length) + \"...\";\n};\nexport const formatStringToHtml = (str) => {\n return str\n .split(\"\\\\n\")\n .map((line, index) => {\n const numberedPoint = line.match(/^(\\d+)\\.\\s(.+)/);\n if (numberedPoint) {\n return `<p key=${index} class=\"mb-2\"><strong>${numberedPoint[1]}.</strong> ${numberedPoint[2]}</p>`;\n }\n return line.trim() ? `<p key=${index} class=\"mb-2\">${line}</p>` : \"<br/>\";\n })\n .join(\"\");\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useDispatch } from \"react-redux\";\nimport type { SearchProduct } from \"../graphQL/queries/types\";\nimport {\n stringReducer,\n priceFormatter,\n currencyFormatter,\n displayData,\n imageUrlArray,\n} from \"../utils/helper\";\nimport { useEffect, useState } from \"react\";\nimport { setProduct } from \"../../store/reducers/productReducer\";\nimport { getProductById } from \"../utils\";\n\nfunction useResponsiveProductsPerPage() {\n const getProductsPerPage = () => {\n if (window.innerWidth < 425) return 1; // Below Mobile-L\n if (window.innerWidth < 768) return 2; // Mobile-L to md\n return 4; // md and above\n };\n\n const [productsPerPage, setProductsPerPage] = useState(getProductsPerPage);\n\n useEffect(() => {\n const handleResize = () => setProductsPerPage(getProductsPerPage());\n window.addEventListener(\"resize\", handleResize);\n return () => window.removeEventListener(\"resize\", handleResize);\n }, []);\n\n return productsPerPage;\n}\n\nconst ProductCarousel = ({\n product,\n}: // storeDetails,\n{\n product: SearchProduct[];\n storeDetails: any;\n}) => {\n const dispatch = useDispatch();\n // const selectedProduct = useSelector((state: any) => state.product.product);\n const productsPerPage = useResponsiveProductsPerPage();\n const [startIndex, setStartIndex] = useState(0);\n\n const nextProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex + productsPerPage >= product.length\n ? 0\n : prevIndex + productsPerPage\n );\n };\n\n const prevProducts = () => {\n setStartIndex((prevIndex) =>\n prevIndex - productsPerPage < 0\n ? product.length - (product.length % productsPerPage || productsPerPage)\n : prevIndex - productsPerPage\n );\n };\n\n const getProduct = async (id: number | string) => {\n const product = await getProductById(id);\n dispatch(setProduct(product));\n };\n\n return (\n <div className=\"mt-2 overflow-x-hidden\">\n <div className=\"flex items-center justify-center gap-4 relative\">\n {product?.length > productsPerPage && (\n <button\n onClick={prevProducts}\n className=\"absolute z-50 left-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-left\" width=\"25\" /> */}\n &lt;\n </button>\n )}\n\n <div className=\"flex gap-5 justify-center flex-1 overflow-hidden\">\n {product\n .slice(startIndex, startIndex + productsPerPage)\n .map((prod) => (\n <div\n key={prod.productId}\n className=\"flex-shrink-0 flex flex-col w-[150px] h-[200px] p-2 items-center justify-between cursor-pointer bg-[#FFFFFF] rounded-[10px] shadow-[0px_2px_2px_0px_#9292BC40]\"\n onClick={() => {\n getProduct(prod.product_id ?? prod.productId);\n }}\n >\n {/* Image */}\n <div className=\"w-full p-2 flex items-center justify-center bg-white\">\n <img\n src={\n imageUrlArray(prod)[0]?.link ||\n imageUrlArray(prod)[0] || // fallback if it's a string\n \"https://via.placeholder.com/120\"\n }\n alt={prod?.productName ? prod.productName : \"Product\"}\n className=\"w-28 h-28 rounded-[10px] transition-transform duration-300 hover:scale-125 object-cover\"\n />\n </div>\n\n {/* Price & Name */}\n <div\n className=\"text-white w-full p-2 text-[12px] text-center h-[60px]\"\n // style={{ background: storeDetails.tanyaThemeColor }}\n >\n <div className=\"relative inline-block group\">\n <div className=\"w-full line-clamp-1 overflow-hidden text-ellipsis text-[#000000] font-medium font-nunitoSans\">\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n\n {/* Tooltip */}\n <div\n className=\"absolute left-0 top-full mt-1 w-max max-w-[200px] p-2 bg-white shadow-lg text-black text-xs rounded opacity-0 transition-opacity duration-300 group-hover:opacity-100 z-50 pointer-events-auto\"\n style={{\n position: \"absolute\",\n top: \"-100%\",\n left: \"0\",\n marginBottom: \"5px\",\n zIndex: 50,\n }}\n >\n {prod?.productName\n ? prod.productName\n : prod?.product_name\n ? prod.product_name\n : stringReducer(\n displayData(prod?.name?.[\"en-US\"]),\n 60\n ) || \"Product\"}\n </div>\n </div>\n <div className=\" flex text-center items-center gap-2 text-[14px] text-[#14121F] font-bold font-nunitoSans text-base mb-1\">\n <p>\n {currencyFormatter(\n prod?.price\n ? Number(prod?.price)\n : priceFormatter(prod).centAmount || 0,\n priceFormatter(prod)?.currencyCode\n )}\n </p>\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans truncate\">\n ${Number(prod?.price).toFixed(2) ?? 0 + 5}\n </p>\n </div>\n </div>\n </div>\n ))}\n </div>\n\n {product?.length > productsPerPage && (\n <button\n onClick={nextProducts}\n className=\"absolute z-50 right-0 text-[#000000] bg-[#ffffff] rounded-full p-2 flex items-center h-fit\"\n style={{\n height: \"30px\",\n width: \"30px\",\n boxShadow: \"0 4px 10px rgba(0, 0, 0, 0.25)\",\n }}\n >\n {/* <Icon icon=\"mdi:chevron-right\" width=\"25\" /> */}\n &gt;\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default ProductCarousel;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport ProductCarousel from \"./ProductCarousel\";\nimport { initialCapital } from \"../utils/helper\";\n\nconst ProductDisplay = ({ chat, storeDetails }: any) => {\n return (\n <div className=\"bg-[#FFFFFF] px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\">\n {chat.map((products: any, i: number) => (\n <div\n key={i}\n className=\"mb-4 p-3 rounded-xl\"\n style={{ \n background: \"linear-gradient(109.52deg, #F0EEF5 36.91%, #F4F3EE 100.34%\",\n // backgroundColor: storeDetails.tanyaThemeColorLight \n }} // slightly darker grey // light grey section bg\n >\n <div\n className=\"font-nunitoSans font-bold text-sm text-[#494949] p-2 w-fit rounded-[20px]\"\n // style={{\n // color: storeDetails?.tanyaThemeContrastColor,\n // border: `1px solid ${storeDetails.tanyaThemeColor}`,\n // backgroundColor: storeDetails.tanyaThemeColor,\n // }}\n >\n {initialCapital(products.keyword) || \"No keyword\"}\n </div>\n\n <ProductCarousel\n product={products.items}\n storeDetails={storeDetails}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ProductDisplay;\n","import { apiConfig } from \"../../config/api\";\nimport {\n clientId,\n getHost,\n getSiteId,\n organisationId,\n shortCode,\n} from \"../utils\";\nimport { getAccessToken } from \"../utils/getAccessToken\";\nimport axios from \"axios\";\n\nexport const fetchStoreConfig = async (storeCode: string) => {\n try {\n const token = await getAccessToken();\n const { serverUrl } = apiConfig();\n const response = await axios.get(\n `${serverUrl}api/logo?storeCode=${storeCode}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n }\n );\n return response.data;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n return error;\n // console.error(\"Error fetching logo details:\", error);\n }\n};\n\ninterface Product {\n product_id: string;\n quantity: number;\n}\n\nexport const createBasket = async (customer_token: string, data?: any) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/create?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n data,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n window.postMessage(\n {\n type: \"WIDGET_CREATED_BASKET\",\n basketId: response.data?.basket_id || response.data?.basketId,\n },\n \"*\"\n );\n\n return response.data;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error creating basket:\", error.response || error.message);\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const addProductToBasket = async (\n basketId: string,\n products: Product[],\n customer_token: string\n) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.post(\n `${URL}${basePath}/basket/add-product/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n products,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n\n if (response.status === 200 && response.data) {\n return response.data;\n }\n return null;\n } catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\n \"Error adding products to basket:\",\n error.response || error.message\n );\n } else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n\nexport const fetchBasket = async ({\n basketId,\n customer_token,\n}: {\n basketId: string;\n customer_token: string;\n}) => {\n const { serverUrl, basePath } = apiConfig();\n const URL = `${serverUrl}`;\n try {\n const response = await axios.get(\n `${URL}${basePath}/basket/${basketId}?baseUrl=${getHost()}&siteId=${getSiteId()}&pubCfg=${clientId()}&envRef=${shortCode()}&orgRef=${organisationId()}`,\n {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: customer_token,\n },\n }\n );\n return { status: response.status, data: response.data };\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return { status: error.response?.status, data: null };\n } else {\n return { status: null, data: null };\n }\n }\n};\n","export const BASKET_ID_KEY = \"sfcc_basket_id\";\r\nexport const TOKEN_KEY = \"sfcc_customer_token\";\r\nexport const TOKEN_EXPIRY_KEY = \"sfcc_token_expiry\";\r\n\r\nexport const EXPIRY_TIME = 5 * 60 * 1000; // 5 minutes in milliseconds\r\nexport const BUFFER_TIME = 10 * 1000; // 10 seconds buffer before expiry\r\nexport const VERSION = \"1.0.0\";","import {\r\n BASKET_ID_KEY,\r\n EXPIRY_TIME,\r\n TOKEN_EXPIRY_KEY,\r\n TOKEN_KEY,\r\n} from \"../../config/constant\";\r\n\r\nexport const getStoredBasketId = (): string | null => {\r\n try {\r\n return localStorage.getItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading basket ID from storage:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredBasketId = (basketId: string | null): void => {\r\n try {\r\n if (basketId) {\r\n localStorage.setItem(BASKET_ID_KEY, basketId);\r\n } else {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error saving basket ID to storage:\", error);\r\n }\r\n};\r\n\r\nexport const clearBasketStorage = (): void => {\r\n try {\r\n localStorage.removeItem(BASKET_ID_KEY);\r\n } catch (error) {\r\n console.error(\"Error clearing basket storage:\", error);\r\n }\r\n};\r\n\r\nexport const getStoredToken = (): string | null => {\r\n try {\r\n return localStorage.getItem(TOKEN_KEY);\r\n } catch (error) {\r\n console.error(\"Error reading token:\", error);\r\n return null;\r\n }\r\n};\r\n\r\nexport const setStoredToken = (token: string | null): void => {\r\n try {\r\n if (token) {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n const expiryTime = Date.now() + EXPIRY_TIME;\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, expiryTime.toString());\r\n } else {\r\n localStorage.removeItem(TOKEN_KEY);\r\n }\r\n } catch (error) {\r\n console.error(\"Error storing token:\", error);\r\n }\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useState } from \"react\"; // Add useMemo here when uncomment the color, size, width code\r\n// import { useEffect, useMemo, useState } from \"react\";\r\nimport { useSelector, useDispatch } from \"react-redux\";\r\nimport { Icon } from \"@iconify/react\";\r\nimport { setProduct } from \"../../store/reducers/productReducer\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\n// import { fetchTokenSFCC } from \"../utils/fetchTokenSFCC\";\r\nimport {\r\n getStoredBasketId,\r\n // getStoredToken,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { toast } from \"react-toastify\";\r\nimport { BASKET_ID_KEY, TOKEN_EXPIRY_KEY } from \"../../config/constant\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport {\r\n // fetchExistingRegisterCustomerToken,\r\n fetchExistingGuestCustomerToken,\r\n} from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { authData } from \"../../sfcc-apis/session\";\r\n\r\nconst ANIMATION_DURATION = 300; // ms\r\n\r\nconst ProductDisplayCard = ({ addToCartPwa }) => {\r\n const dispatch = useDispatch();\r\n const product = useSelector((state: any) => state.product.product);\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const [show, setShow] = useState(!!product);\r\n\r\n useEffect(() => {\r\n setShow(!!product);\r\n }, [product]);\r\n\r\n if (!product) return null;\r\n\r\n // const { sizeAttr, colorAttr, widthAttr } = attributes;\r\n\r\n const addToCart = async () => {\r\n try {\r\n // Check if product and variants exist\r\n\r\n if (\r\n !product?.variants?.[0]?.product_id &&\r\n !(product.type.item || product.type.bundle) &&\r\n !product?.variants?.[0]?.productId\r\n ) {\r\n toast.error(\"Variants not available\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ];\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n let customer_token = \"\";\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n const authDetails = await authData();\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n } else {\r\n console.log(\"token from bm grant\");\r\n const access_token = await fetchTokenBmGrant();\r\n const customerTokenData = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n customer_token = customerTokenData.customer_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n\r\n // const response = await addToCartPwa(\r\n // productData\r\n // // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n\r\n const basketResponse = await createBasket(customer_token, data);\r\n if (!basketResponse?.basket_id && !basketResponse?.basketId) {\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // else if (basketResponse?.basketId) {\r\n // toast.success(`Added to cart`, {\r\n // position: \"bottom-right\",\r\n // autoClose: 3000,\r\n // hideProgressBar: false,\r\n // closeOnClick: true,\r\n // pauseOnHover: true,\r\n // draggable: true,\r\n // });\r\n // }\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n console.log(\"adding product to basket\");\r\n const response = await addProductToBasket(\r\n basketResponse?.basket_id || basketResponse?.basketId,\r\n productData,\r\n customer_token\r\n );\r\n // const response = await addToCartPwa(\r\n // productData,\r\n // basketResponse?.basket_id || basketResponse?.basketId\r\n // );\r\n console.log(\"object added to basket\");\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n return;\r\n }\r\n\r\n const response = await addProductToBasket(\r\n basketId,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n };\r\n\r\n // Function to generate and redirect to the product detail page\r\n const viewMore = () => {\r\n if (!product) return;\r\n const path = window.location.origin +\"/product/\" +product.id;\r\n console.log(\"path\", path);\r\n window.location.href = path; //redirect to sfcc product details url\r\n };\r\n console.log(product, \"the prod\");\r\n return (\r\n <>\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(() => dispatch(setProduct(null)), ANIMATION_DURATION);\r\n }}\r\n />\r\n <div\r\n className={`\r\n flex flex-col gap-2 items-center h-[90vh] absolute right-0 bottom-0 z-50 w-full md:w-1/2 md:h-[100vh] lg:w-1/2 lg:h-[100vh] shadow-xl p-2 border-l-2 bg-white border-gray-200 overflow-y-scroll\r\n transition-all duration-300\r\n ${\r\n show\r\n ? \"translate-y-0 md:translate-y-0 md:translate-x-0 opacity-100\"\r\n : \"translate-y-full md:translate-y-0 md:translate-x-full opacity-0 pointer-events-none\"\r\n }\r\n `}\r\n style={{ willChange: \"transform, opacity\" }}\r\n // Prevent click inside card from closing\r\n onClick={(e) => e.stopPropagation()}\r\n >\r\n {/* name and close button */}\r\n <div className=\"mt-3 flex flex-row justify-between w-full \">\r\n <div>\r\n <p className=\"text-[#000000] font-bold font-nunitoSans\">\r\n {product.name}\r\n </p>\r\n </div>\r\n <div>\r\n <div\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n >\r\n &#10005;\r\n </div>\r\n {/* <Icon\r\n icon=\"mdi:close\"\r\n className=\"text-[#555555] w-6 h-6 cursor-pointer\"\r\n onClick={() => {\r\n setShow(false);\r\n setTimeout(\r\n () => dispatch(setProduct(null)),\r\n ANIMATION_DURATION\r\n );\r\n }}\r\n /> */}\r\n </div>\r\n </div>\r\n {/* image and variants */}\r\n <div className=\"flex flex-row gap-2 items-center flex-wrap\">\r\n <div className=\"flex flex-row items-center justify-center w-[120px] h-[120px] my-5\">\r\n <img\r\n src={\r\n import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups?.[0]?.images?.[0]?.link\r\n : product.image_groups?.[0]?.images?.[0]?.link ||\r\n \"https://via.placeholder.com/120\"\r\n }\r\n alt={product.name}\r\n className=\"rounded-[10px]\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col items-center gap-2\">\r\n {(import.meta.env.VITE_SCAPI_ENVIRONMENT\r\n ? product.imageGroups\r\n : product.image_groups\r\n )\r\n .slice(1, 2)\r\n .map((group: any) =>\r\n group.images\r\n .slice(1, 2)\r\n .map((image: any) => (\r\n <img\r\n key={image.link}\r\n src={image.link}\r\n alt={product.name}\r\n className=\"rounded-[10px] w-[60px] h-[60px]\"\r\n />\r\n ))\r\n )}\r\n </div>\r\n </div>\r\n {/* price and discount */}\r\n <div className=\"flex flex-row items-center justify-between w-full\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <p className=\"text-[#14121F] font-bold font-nunitoSans\">\r\n {\" \"}\r\n ${product.price.toFixed(2)}\r\n </p>{\" \"}\r\n <p className=\"text-[#14121F] font-normal line-through text-sm font-nunitoSans\">\r\n {\" \"}\r\n ${(product.price + 5).toFixed(2)}\r\n </p>\r\n </div>\r\n <div>\r\n <p className=\"text-[#EC5050] font-bold font-nunitoSans\">\r\n {product.discount}\r\n </p>\r\n </div>\r\n </div>\r\n {/* horizontal line */}\r\n <div className=\"mt-2 w-full border-t-2 border-gray-200\"></div>\r\n <div className=\"w-full text-left\">\r\n <div className=\"text-[#323135] font-bold font-nunitoSans mt-3 text-[14px]\">\r\n Product Details\r\n </div>\r\n <div\r\n className=\"text-[#68656E] font-normal font-nunitoSans text-xs pl-2 mt-3\"\r\n dangerouslySetInnerHTML={{\r\n __html: product.short_description || product.longDescription,\r\n }}\r\n ></div>\r\n </div>\r\n {/* rating and reviews */}\r\n <div className=\"mt-4 flex flex-col gap-2 w-full p-2\">\r\n <div className=\"flex flex-row items-center gap-2\">\r\n <div className=\"flex items-center gap-2 text-left font-nunitoSans\">\r\n <div className=\"text-[#323135] font-bold\">\r\n {product?.rating?.rate || 0} /{\" \"}\r\n <span className=\"text-[#68656E]\">5</span>\r\n </div>\r\n <div className=\"text-[#323135] font-semibold text-sm\">\r\n Overall Rating\r\n </div>\r\n <div className=\"text-[#68656E] font-semibold text-sm\">\r\n {product?.rating?.count || 0} ratings\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"mt-2 flex flex-row items-center gap-2\">\r\n {Array.from({ length: 5 }).map((_, index) => (\r\n <Icon\r\n key={index}\r\n icon=\"mdi:star\"\r\n width=\"20\"\r\n height=\"20\"\r\n className={`text-yellow-500 \r\n ${\r\n product?.rating?.rate > index\r\n ? \"text-yellow-500\"\r\n : \"text-gray-300\"\r\n }\r\n `}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n\r\n <div\r\n className=\"flex flex-col items-center justify-between font-nunitoSans font-semibold w-5/6 text-black gap-2\"\r\n style={{ marginTop: \"40px\" }}\r\n >\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={addToCart}\r\n >\r\n Add to Cart\r\n </button>\r\n <button\r\n className=\"rounded-[5px] shadow-sm text-[#FBFBFC] bg-[#6851C6] p-2 w-full text-center cursor-pointer mb-16\"\r\n style={{ backgroundColor: storeDetails.tanyaThemeColor }}\r\n onClick={viewMore}\r\n >\r\n View more\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n};\r\n\r\nexport default ProductDisplayCard;\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useState, useRef, useEffect } from \"react\";\r\nimport { Popover, PopoverTrigger } from \"../ui/popover\";\r\nimport { getInterestApi, getProductById, getSearchResults } from \"../utils\";\r\nimport type { SearchProduct } from \"../graphQL/queries/types\";\r\nimport { formatStringToHtml } from \"../utils/helper\";\r\nimport ProductDisplay from \"../carousel/ProductDisplay\";\r\nimport { useSelector } from \"react-redux\";\r\nimport ProductDisplayCard from \"../product/ProductDisplayCard\";\r\nimport { toast } from \"react-toastify\";\r\nimport { notifySFCC } from \"../lib/utils\";\r\nimport { addProductToBasket, createBasket, fetchBasket } from \"../api/api\";\r\nimport { fetchTokenBmGrant } from \"../utils/fetchTokenBmGrant\";\r\nimport { fetchExistingGuestCustomerToken } from \"../utils/fetchExistingRegisterCustomerToken\";\r\nimport {\r\n BASKET_ID_KEY,\r\n TOKEN_EXPIRY_KEY,\r\n VERSION,\r\n} from \"../../config/constant\";\r\nimport {\r\n getStoredBasketId,\r\n setStoredBasketId,\r\n setStoredToken,\r\n} from \"../utils/localStorage\";\r\nimport { authData, getJWTToken } from \"../../sfcc-apis/session\";\r\n\r\ntype ProductSnapshot = {\r\n id: string;\r\n name: string;\r\n image: string | null;\r\n price: number | null;\r\n points: number;\r\n quantity: number;\r\n};\r\n\r\nconst TanyaShoppingAssistantStream = ({\r\n tanyaConfig,\r\n basketId,\r\n addToCart,\r\n}: {\r\n tanyaConfig?: any;\r\n basketId?: string;\r\n addToCart?: any;\r\n}) => {\r\n // Shopping options\r\n const shoppingOptions = [\r\n \"Myself\",\r\n \"My Child\",\r\n \"My Grandchild\",\r\n \"Niece/Nephew\",\r\n \"My Friends\",\r\n \"Others\",\r\n ];\r\n\r\n const payloadMapping: Record<string, string> = {\r\n Myself: \"himself/herself\",\r\n \"My Child\": \"his/her child\",\r\n \"My Grandchild\": \"his/her grandchild\",\r\n \"Niece/Nephew\": \"his/her niece/nephew\",\r\n \"My Friends\": \"his/her friends\",\r\n Others: \"others\",\r\n };\r\n const productName = useRef<string | null>(null);\r\n const productId = useRef<number | null>(null);\r\n const productImage = useRef<string | null>(null);\r\n const productPrice = useRef<number | null>(null);\r\n const [authDetails, setAuthDetails] = useState<any>(null);\r\n const lastChat = useRef(null);\r\n\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [isAnimating, setIsAnimating] = useState(false);\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [adding, setAdding] = useState<boolean>(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [productLoading, setProductLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [whom, setWhom] = useState(\"\");\r\n const mapSnapshotToProduct = (snap: ProductSnapshot): any => ({\r\n id: snap.id,\r\n title: snap.name,\r\n image: snap.image ?? \"\",\r\n price: snap.price ?? 0,\r\n });\r\n // const dispatch = useDispatch();\r\n\r\n const [chatHistory, setChatHistory] = useState<\r\n {\r\n query: string;\r\n response: string;\r\n potentialQuestions: string;\r\n products?: { keyword: string; items: SearchProduct[] }[];\r\n keywords: string;\r\n noResults?: boolean;\r\n secondaryResponse?: string;\r\n secondaryLoading?: boolean;\r\n productSnapshot?: ProductSnapshot; // NEW\r\n }[]\r\n >([]);\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n // const storeCode =\r\n // searchParams.get(\"storeCode\") || localStorage.getItem(\"storeCode\");\r\n const storeDetails = useSelector((s: any) => s.store.store);\r\n const product = useSelector((s: any) => s.product.product);\r\n\r\n // Runs once on mount\r\n useEffect(() => {\r\n const currentAccessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n const savedChatToken = localStorage.getItem(\r\n `chat-token-${tanyaConfig.siteId}`\r\n );\r\n\r\n if (currentAccessToken && savedChatToken === currentAccessToken) {\r\n // Token matches → restore chat history\r\n const savedHistory = localStorage.getItem(\"chatHistory\");\r\n if (savedHistory) {\r\n setChatHistory(JSON.parse(savedHistory));\r\n }\r\n } else {\r\n // Token missing OR mismatch → reset chat data\r\n localStorage.setItem(\"chatHistory\", JSON.stringify([]));\r\n localStorage.setItem(\r\n `chat-token-${tanyaConfig.siteId}`,\r\n currentAccessToken || \"\"\r\n );\r\n }\r\n }, []);\r\n\r\n // Runs whenever chatHistory updates\r\n useEffect(() => {\r\n localStorage.setItem(\"chatHistory\", JSON.stringify(chatHistory));\r\n\r\n const accessToken = localStorage.getItem(\r\n `access_token_${tanyaConfig.siteId}`\r\n );\r\n if (accessToken) {\r\n localStorage.setItem(`chat-token-${tanyaConfig.siteId}`, accessToken);\r\n }\r\n }, [chatHistory]);\r\n\r\n const openPanel = () => {\r\n setIsVisible(true);\r\n setTimeout(() => setIsAnimating(true), 10); // trigger opening animation\r\n };\r\n\r\n const closePanel = () => {\r\n setIsAnimating(false);\r\n setTimeout(() => setIsVisible(false), 300); // // wait for exit animation\r\n };\r\n\r\n useEffect(() => {\r\n if (isOpen) openPanel();\r\n else closePanel();\r\n }, [isOpen]);\r\n\r\n const handleWhomSelection = (selected: string) => {\r\n setWhom(payloadMapping[selected]);\r\n };\r\n\r\n useEffect(() => {\r\n if (isVisible && scrollRef.current) {\r\n scrollRef.current.scrollTo({\r\n top: scrollRef.current.scrollHeight,\r\n behavior: \"smooth\",\r\n });\r\n }\r\n }, [chatHistory, isVisible]);\r\n\r\n const cachedToken: any = null;\r\n const tokenExpiry: any = null;\r\n\r\n const getAuthDetails = async () => {\r\n const data = await authData(); // <- calls your async function\r\n if (data == null) return;\r\n setAuthDetails(data); // <- saves the result in state\r\n };\r\n\r\n useEffect(() => {\r\n if (tanyaConfig?.siteId) {\r\n const { clientID, host, organizationID, shortCode, siteId } = tanyaConfig;\r\n sessionStorage.setItem(\"Host\", host);\r\n sessionStorage.setItem(\"SiteId\", siteId);\r\n sessionStorage.setItem(\"pubCfg\", btoa(clientID));\r\n sessionStorage.setItem(\"envRef\", shortCode);\r\n sessionStorage.setItem(\"orgRef\", organizationID);\r\n }\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n getAuthDetails();\r\n console.log(\"scapi environment v1\");\r\n } else {\r\n console.log(\"ocapi environment\");\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n if (basketId) {\r\n console.log(\"setting the basket id\", basketId);\r\n setStoredBasketId(basketId);\r\n }\r\n }, [basketId]);\r\n\r\n const getInterests = async () => {\r\n const customer_id = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n ).customerId;\r\n const res = await getInterestApi(customer_id || \"\");\r\n return res.c_interests;\r\n };\r\n\r\n const runSecondaryFlow = async (productTitle: string, points: number) => {\r\n console.log(\"in secondary flow\", VERSION);\r\n const interests = await getInterests();\r\n console.log(interests, \"interests of customer\", VERSION);\r\n if (!interests) return;\r\n try {\r\n // surprise animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1 ? { ...msg, secondaryLoading: true } : msg\r\n )\r\n );\r\n\r\n const accessToken = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!accessToken) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"Q166PR519W\",\r\n flowAliasId: \"HKFUVLWVH2\",\r\n input: {\r\n loyaltyPoints: \"\",\r\n productName: productTitle,\r\n productPoints: String(points || 0),\r\n interests: interests,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n\r\n if (parsedData.index === 0) {\r\n // attach response & stop animation\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n secondaryResponse: parsedData.data,\r\n secondaryLoading: false,\r\n }\r\n : msg\r\n )\r\n );\r\n }\r\n // ignore 1/2/3\r\n } catch (e) {\r\n // stop animation on parse error too\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? { ...msg, secondaryLoading: false }\r\n : msg\r\n )\r\n );\r\n console.error(\"Secondary flow JSON parse error:\", e);\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(\"Secondary flow error:\", e);\r\n }\r\n };\r\n\r\n const handleSendMessage = async (question?: string) => {\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setIsLoading(true);\r\n setInputText(\"\");\r\n\r\n productName.current = null;\r\n productId.current = null;\r\n productImage.current = null;\r\n productPrice.current = null;\r\n\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: newQuery,\r\n response: \"Thinking for what suits you best...\",\r\n potentialQuestions: \"\",\r\n products: [],\r\n keywords: \"Thinking for best products...\",\r\n },\r\n ]);\r\n\r\n try {\r\n const sanitizedWhom = whom;\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n\r\n // Get JWT access token\r\n const accessToken = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!accessToken) {\r\n throw new Error(\"Failed to obtain access token\");\r\n }\r\n\r\n // Build the invoke flow URL\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const payload = JSON.stringify({\r\n flowId: \"MMHQKYI1NE\",\r\n flowAliasId: \"SZF9ZK1ATE\",\r\n input: {\r\n userPrompt: newQuery,\r\n whom: sanitizedWhom,\r\n },\r\n });\r\n\r\n const response = await fetch(invokeUrl, {\r\n signal: AbortSignal.timeout(30000),\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${accessToken}`,\r\n },\r\n body: payload,\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n let keywords = \"\";\r\n\r\n while (true) {\r\n setProductLoading(true);\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data:\")) {\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsedData = JSON.parse(jsonData);\r\n if (parsedData.index == 1) keywords = parsedData.data;\r\n\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n [parsedData.index == 0\r\n ? \"response\"\r\n : parsedData.index == 1\r\n ? \"keywords\"\r\n : parsedData.index == 2\r\n ? \"potentialQuestions\"\r\n : \"end\"]: parsedData.data,\r\n }\r\n : msg\r\n )\r\n );\r\n } catch (error) {\r\n console.error(\"Error parsing JSON:\", error);\r\n }\r\n }\r\n }\r\n }\r\n getKeywords(sanitizeKeywords(keywords));\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const sanitizeKeywords = (response: string) => {\r\n const keywordMatch = response.match(\r\n /top five relevant product or category names are: (.*)/i\r\n );\r\n const keywordsString = keywordMatch ? keywordMatch[1] : response;\r\n const keywordsArray = keywordsString.split(\", \");\r\n const sanitizedKeywords = keywordsArray.map((keyword) => {\r\n return keyword.replace(/\\s*(Toys|Bags|Miniature|etc\\.*)\\s*/gi, \"\").trim();\r\n });\r\n const uniqueKeywords = [...new Set(sanitizedKeywords)].filter(Boolean);\r\n return uniqueKeywords.join(\",\");\r\n };\r\n\r\n const getKeywords = async (keywords: string[] | string) => {\r\n const keys = typeof keywords === \"string\" ? keywords.split(\",\") : keywords;\r\n\r\n setProductLoading(true);\r\n\r\n try {\r\n // fire all API requests in parallel\r\n const responses = await Promise.all(\r\n keys.map((k) => getSearchResults(k).catch(() => [])) // prevent Promise.all crash\r\n );\r\n\r\n // build product array\r\n const productData = keys\r\n .map((keyword, idx) => ({\r\n keyword,\r\n items: responses[idx] ?? [],\r\n loading: false,\r\n }))\r\n .filter((p) => p.items.length > 0);\r\n\r\n // extract first product for snapshot\r\n const firstProduct = productData[0]?.items?.[0];\r\n if (firstProduct) {\r\n productId.current = firstProduct.product_id;\r\n productName.current = firstProduct.product_name;\r\n productImage.current = firstProduct.image?.link;\r\n const price =\r\n typeof firstProduct.price === \"number\" ? firstProduct.price : null;\r\n productPrice.current = price;\r\n }\r\n\r\n // apply single chatHistory update\r\n setChatHistory((prev) =>\r\n prev.map((msg, idx) =>\r\n idx === prev.length - 1\r\n ? {\r\n ...msg,\r\n products: productData,\r\n productSnapshot: firstProduct\r\n ? {\r\n id: productId.current,\r\n name: productName.current,\r\n image: productImage.current,\r\n price: productPrice.current,\r\n points: 0,\r\n quantity: 1,\r\n }\r\n : msg.productSnapshot,\r\n }\r\n : msg\r\n )\r\n );\r\n\r\n // run secondary flow only if user logged in + snapshot ready\r\n if (firstProduct) {\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n if (!customerData?.isGuest) {\r\n console.log(\"running secondary flow\", VERSION);\r\n runSecondaryFlow(productName.current, 0);\r\n }\r\n }\r\n } catch (err) {\r\n console.error(\"error in keyword search\", err);\r\n } finally {\r\n setProductLoading(false);\r\n }\r\n };\r\n\r\n const handleAddToCart = async (productToBeAdded: any, quantity: number) => {\r\n setAdding(true);\r\n try {\r\n const product = await getProductById(productToBeAdded.id);\r\n if (\r\n !(\r\n product?.variants?.[0]?.product_id ||\r\n product?.variants?.[0]?.productId\r\n ) &&\r\n !(product.type.item || product.type.bundle)\r\n ) {\r\n setAdding(false);\r\n toast.error(\"Variants not found\", {\r\n position: \"bottom-right\",\r\n autoClose: 1000,\r\n });\r\n console.error(\"No product variant found\");\r\n return;\r\n }\r\n\r\n const productData = [\r\n {\r\n product_id:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: quantity,\r\n },\r\n ];\r\n console.log(productData, \"product data\", \"app version\", VERSION);\r\n // for getting customer id\r\n const customerData = JSON.parse(\r\n sessionStorage.getItem(\"customerData\") || \"{}\"\r\n );\r\n const basketIdFromCustomer =\r\n customerData?.basketId || localStorage.getItem(BASKET_ID_KEY);\r\n const customer_token = false;\r\n const tokenExpiry = localStorage.getItem(TOKEN_EXPIRY_KEY);\r\n const currentTime = Date.now();\r\n\r\n // If no token, get a new one\r\n if (\r\n !customer_token ||\r\n !tokenExpiry ||\r\n currentTime >= parseInt(tokenExpiry)\r\n ) {\r\n const access_token = await fetchTokenBmGrant();\r\n\r\n let { customer_token } = await fetchExistingGuestCustomerToken(\r\n access_token\r\n );\r\n if (import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n customer_token = \"Bearer \" + authDetails.access_token;\r\n }\r\n if (!customer_token) {\r\n console.error(\"Failed to get customer_token\");\r\n return;\r\n }\r\n const newExpiryTime = currentTime + 5 * 60 * 1000;\r\n setStoredToken(customer_token);\r\n localStorage.setItem(TOKEN_EXPIRY_KEY, newExpiryTime.toString());\r\n console.log(basketIdFromCustomer, \"basketIdFromCustomer\");\r\n // 1. Try basketId from customerData\r\n if (basketIdFromCustomer) {\r\n const fetchBasketResponse = await fetchBasket({\r\n basketId: basketIdFromCustomer,\r\n customer_token,\r\n });\r\n if (fetchBasketResponse.status === 200 && fetchBasketResponse) {\r\n // Use this basketId to add product\r\n\r\n const response = await addProductToBasket(\r\n basketIdFromCustomer,\r\n productData,\r\n customer_token\r\n );\r\n if (response?.product_items?.length > 0) {\r\n // const addedProduct = response.product_items.at(-1);\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n notifySFCC(basketIdFromCustomer);\r\n setAdding(false);\r\n // window.location.reload();\r\n }\r\n return; // Skip basket creation\r\n }\r\n }\r\n\r\n // 2. If not valid, create new basket and store its ID in localStorage\r\n const data = {\r\n productItems: [\r\n {\r\n productId:\r\n product.variants?.[0].product_id ||\r\n product.variants?.[0].productId ||\r\n product?.id,\r\n quantity: 1,\r\n },\r\n ],\r\n };\r\n const basketResponse = await createBasket(customer_token, data);\r\n console.log(\r\n basketResponse,\r\n basketResponse?.basket_id,\r\n basketResponse?.basketId,\r\n \"the basket response\"\r\n );\r\n if (!(basketResponse?.basket_id || !basketResponse?.basketId)) {\r\n setAdding(false);\r\n console.error(\"Failed to create basket\");\r\n return;\r\n }\r\n // Store new basket ID\r\n setStoredBasketId(\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n // Add product to new basket\r\n // if (!import.meta.env.VITE_SCAPI_ENVIRONMENT) {\r\n // const response = await addProductToBasket(\r\n // basketResponse?.basket_id || basketResponse?.basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart(\r\n {\r\n productId,\r\n quantity,\r\n },\r\n basketResponse?.basket_id || basketResponse?.basketId\r\n );\r\n if (\r\n response?.product_items?.length > 0 ||\r\n response?.productItems?.length > 0\r\n ) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n }\r\n notifySFCC(basketResponse.basket_id || basketResponse?.basketId);\r\n // }\r\n } else {\r\n // Use existing customer_token and basket ID\r\n const basketId = getStoredBasketId();\r\n if (!basketId) {\r\n console.error(\"No basket ID found\");\r\n setAdding(false);\r\n return;\r\n }\r\n\r\n // const response = await addProductToBasket(\r\n // basketId,\r\n // productData,\r\n // customer_token\r\n // );\r\n const response = await addToCart({\r\n productId,\r\n quantity,\r\n });\r\n if (response?.product_items?.length > 0) {\r\n toast.success(`Added to cart`, {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n hideProgressBar: false,\r\n closeOnClick: true,\r\n pauseOnHover: true,\r\n draggable: true,\r\n });\r\n setAdding(false);\r\n notifySFCC(basketId);\r\n }\r\n }\r\n } catch (error: any) {\r\n setAdding(false);\r\n console.error(\"Error adding to cart:\", error);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n\r\n if (\r\n error?.response?.status === 404 || // Basket not found\r\n error?.response?.status === 401 // Unauthorized/expired\r\n ) {\r\n // Clear only basket ID for 404\r\n if (error?.response?.status === 404) {\r\n setStoredBasketId(null);\r\n }\r\n // Clear both for 401\r\n if (error?.response?.status === 401) {\r\n setStoredBasketId(null);\r\n setStoredToken(null);\r\n }\r\n } else {\r\n console.error(\"Failed to add product to basket:\", error.message);\r\n toast.error(\"Failed to add product to cart\", {\r\n position: \"bottom-right\",\r\n autoClose: 3000,\r\n });\r\n }\r\n }\r\n setAdding(false);\r\n };\r\n\r\n // useEffect(() => {\r\n // if (lastChat.current)\r\n // lastChat.current.scrollIntoView({ behavior: \"smooth\" });\r\n // }, [lastChat.current]);\r\n\r\n useEffect(() => {\r\n if (isVisible) setTimeout(() => setIsAnimating(true), 10);\r\n else setIsAnimating(false);\r\n }, [isVisible]);\r\n\r\n // Update the main container div's className\r\n return (\r\n <div className=\"relative flex justify-center\">\r\n <Popover open={isOpen} onOpenChange={setIsOpen}>\r\n <PopoverTrigger\r\n onClick={() => setIsOpen(true)}\r\n style={\r\n {\r\n // background: storeDetails.tanyaThemeColor,\r\n }\r\n }\r\n className=\"flex items-center rounded-lg cursor-pointer hover:opacity-90 transition-opacity p-0\"\r\n >\r\n <div className=\"flex flex-col\">\r\n <svg\r\n width=\"40\"\r\n height=\"40\"\r\n viewBox=\"0 0 40 40\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_958_585)\">\r\n <path\r\n d=\"M30.0002 5C31.7683 5 33.464 5.70238 34.7142 6.95262C35.9644 8.20286 36.6668 9.89856 36.6668 11.6667V25C36.6668 26.7681 35.9644 28.4638 34.7142 29.714C33.464 30.9643 31.7683 31.6667 30.0002 31.6667H25.6902L21.1785 36.1783C20.8915 36.4653 20.5097 36.6377 20.1046 36.6631C19.6996 36.6886 19.2992 36.5654 18.9785 36.3167L18.8218 36.1783L14.3085 31.6667H10.0002C8.28976 31.6667 6.64478 31.0093 5.40548 29.8305C4.16617 28.6516 3.42735 27.0416 3.34183 25.3333L3.3335 25V11.6667C3.3335 9.89856 4.03588 8.20286 5.28612 6.95262C6.53636 5.70238 8.23205 5 10.0002 5H30.0002Z\"\r\n fill=\"url(#paint0_linear_958_585)\"\r\n />\r\n <path\r\n d=\"M28.3335 15.6511V11.6667C28.3335 11.6667 22.2774 12.6042 20.1148 15.4167C17.9521 18.2292 18.6644 26.6667 18.6644 26.6667H22.5321C22.5321 26.6667 22.0614 18.9323 23.4989 17.2917C24.9364 15.6511 28.3335 15.6511 28.3335 15.6511Z\"\r\n fill=\"white\"\r\n />\r\n <path\r\n d=\"M13.3335 11.6667H19.6184V15.4167H13.3335V11.6667Z\"\r\n fill=\"white\"\r\n />\r\n </g>\r\n <defs>\r\n <linearGradient\r\n id=\"paint0_linear_958_585\"\r\n x1=\"20.0002\"\r\n y1=\"5\"\r\n x2=\"35.0002\"\r\n y2=\"30\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stopColor=\"#452697\" />\r\n <stop offset=\"1\" stopColor=\"#7C5BFF\" />\r\n </linearGradient>\r\n <clipPath id=\"clip0_958_585\">\r\n <rect width=\"40\" height=\"40\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </PopoverTrigger>\r\n\r\n {/* Absolute Positioned PopoverContent and Custom Sidebar Panel */}\r\n {isVisible && (\r\n <>\r\n {/* Overlay For closing tanya popup by clicking on side or background */}\r\n <div\r\n className=\"fixed inset-0 z-40 bg-black/30\"\r\n onClick={() => setIsOpen(false)}\r\n />\r\n <div\r\n className={`\r\n fixed z-50 h-screen w-[100vw] sm:w-[80vw] md:w-[770px] border-0 bg-white lg:rounded-l-xl overflow-hidden flex flex-col shadow-[0px_4px_10px_0px_#5F499840]\r\n top-0 right-0\r\n transition-transform duration-300 ease-in-out\r\n lg:transform lg:translate-y-0\r\n \r\n `}\r\n // ${\r\n // isAnimating\r\n // ? \"lg:translate-x-0 translate-y-0\"\r\n // : \"lg:translate-x-full translate-y-full\"\r\n // }\r\n style={{\r\n background:\r\n \"linear-gradient(170.1deg, #FFFFFF 60.03%, #E3DEEF 99.59%)\",\r\n }}\r\n >\r\n {/* Header */}\r\n <div\r\n className={`flex justify-between p-3 bg-[#FFFFFF] border border-b-1 border-[#E5E5E5] `} //lg:rounded-tl-xl lg:rounded-bl-xl\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <div className=\"flex flex-col gap-1\">\r\n <div\r\n className=\"flex gap-2 w-28 h-12 text-center items-center p-2 border rounded-l-[20px] rounded-tr-[20px]\"\r\n style={{\r\n background:\r\n \"linear-gradient(265.62deg, #6851C6 5.24%, #8668FF 98.49%)\",\r\n }}\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 15 16\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M15 4.48438V0.5C15 0.5 8.94395 1.4375 6.78127 4.25C4.61859 7.0625 5.33095 15.5 5.33095 15.5H9.19857C9.19857 15.5 8.72793 7.76562 10.1654 6.125C11.6029 4.48438 15 4.48438 15 4.48438Z\"\r\n fill=\"white\"\r\n />\r\n <path d=\"M0 0.5H6.28488V4.25H0V0.5Z\" fill=\"white\" />\r\n </svg>\r\n\r\n <p className=\"text-[#FFFFFF] font-nunitoSans font-semibold\">\r\n TANYA\r\n </p>\r\n </div>\r\n <p\r\n className=\"text-[#5B5B5B] font-nunitoSans font-semibold\"\r\n style={{ fontStyle: \"italic\" }}\r\n >\r\n {\" \"}\r\n Your AI shopping assistant !{\" \"}\r\n </p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n {/* close icon */}\r\n <button onClick={() => setIsOpen(false)}>\r\n <svg\r\n width=\"24\"\r\n height=\"25\"\r\n viewBox=\"0 0 24 25\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6036)\">\r\n <path\r\n d=\"M18 6.5L6 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6 6.5L18 18.5\"\r\n stroke=\"#555555\"\r\n strokeWidth=\"1.5\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6036\">\r\n <rect\r\n width=\"24\"\r\n height=\"24\"\r\n fill=\"white\"\r\n transform=\"translate(0 0.5)\"\r\n />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {/* Chat Container */}\r\n <div className={`flex h-full md:flex-row lg:flex-row`}>\r\n <div\r\n className={`flex flex-col h-full ${\r\n product ? \"lg:w-2/3 w-full\" : \"w-full\"\r\n }`}\r\n >\r\n {/* Chat Body - Scrollable */}\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-2 space-y-4 hide-scrollbar flex-grow mb-24\"\r\n >\r\n {/* Shopping Options */}\r\n {storeDetails?.whomRequired && (\r\n <div\r\n className=\"mx-3 p-3 rounded-2xl bg-[#FFFFFF]\"\r\n // style={{\r\n // color: storeDetails?.tanyaThemeContrastColor,\r\n // backgroundColor: storeDetails.tanyaThemeColor, //need to comment\r\n // width: \"fit-content\",\r\n // }}\r\n >\r\n <div className=\"flex gap-2 bg-[#FFFFFF]\">\r\n {/* <Icon\r\n icon=\"mdi:shopping\"\r\n color=\"white\"\r\n width=\"22\"\r\n height=\"22\"\r\n /> */}\r\n <p className=\"font-bold font-nunitoSans text-[#494949]\">\r\n Is this for you or someone else?\r\n </p>\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {shoppingOptions.map((option) => (\r\n <button\r\n key={option}\r\n onClick={() => handleWhomSelection(option)}\r\n className=\"px-2 py-2 font-semibold text-xs text-[#18181B] bg-[#F3F3F3] rounded-2xl\"\r\n style={{\r\n backgroundColor:\r\n whom === payloadMapping[option]\r\n ? \"#FFFFFF\"\r\n : \"#F3F3F3\",\r\n borderColor:\r\n whom === payloadMapping[option]\r\n ? \"#BBB3DD\"\r\n : \"\",\r\n }}\r\n >\r\n {option}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n {/* Chat History */}\r\n {chatHistory.map((chat, index) => (\r\n <div key={index}>\r\n <div\r\n className=\"flex justify-end\"\r\n // ref={\r\n // index == chatHistory.length - 1 ? lastChat : null\r\n // }\r\n >\r\n <p className=\"text-sm font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n {chat.query}\r\n </p>\r\n </div>\r\n {chat.response && chat.response.includes(\"Thinking\") ? (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans animate-pulse font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n ) : (\r\n <div>\r\n <div\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949] bg-[#FFFFFF] px-7 py-1 rounded-r-xl rounded-bl-2xl w-full\"\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(chat.response),\r\n }}\r\n />\r\n </div>\r\n )}\r\n {productLoading &&\r\n !chat.response.includes(\"Thinking\") &&\r\n chat.products?.length == 0 && (\r\n <div>\r\n <p className=\"text-sm animate-pulse font-nunitoSans font-bold text-[#000000] bg-[#E2DBFF] border border-[#C9C2DE] rounded-l-xl p-2 m-3 mb-4 rounded-br-xl max-w-[75%]\">\r\n Finding best products for you\r\n </p>\r\n </div>\r\n )}\r\n {chat?.products && chat?.products?.length > 0 && (\r\n <ProductDisplay\r\n chat={chat.products}\r\n storeDetails={storeDetails}\r\n />\r\n )}\r\n\r\n {/* Potential Questions */}\r\n {chat?.potentialQuestions.length > 0 && (\r\n <div className=\"my-2 px-4 text-sm text-gray-700\">\r\n <p\r\n className=\"font-nunitoSans font-bold text-sm text-[#494949]\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n Why not explore these inquiries...\r\n </p>\r\n {chat.potentialQuestions\r\n .split(\",\")\r\n .map((question, idx) => (\r\n <button\r\n key={idx}\r\n className={`cursor-pointer font-nunitoSans font-semibold text-[#232323] border bg-[#804C9E0D] border-${storeDetails.themeDarkColor} m-1 rounded-xl px-2 py-1`}\r\n onClick={() => handleSendMessage(question)}\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n {question}\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {chat?.secondaryLoading && (\r\n <div className=\"mt-3 mb-4 px-4\">\r\n <div\r\n className=\"tanya-surprise-wrapper bg-indigo-300 text-sm px-7 py-4 rounded-r-xl rounded-bl-2xl w-full relative overflow-hidden\"\r\n style={{\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex gap-1\">\r\n <div className=\"tanya-sparkle tanya-sparkle-1\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-2\">\r\n ✨\r\n </div>\r\n <div className=\"tanya-sparkle tanya-sparkle-3\">\r\n ✨\r\n </div>\r\n </div>\r\n <div className=\"tanya-shimmer\" />\r\n <p\r\n className=\"font-semibold tanya-pulse\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n I’ve found a special surprise crafted just for\r\n you… hang on a sec!\r\n </p>\r\n <p\r\n className=\"tanya-dots mt-1\"\r\n style={{ color: storeDetails.themeDarkColor }}\r\n >\r\n • • •\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Secondary Response (from secondary flow) */}\r\n {chat?.secondaryResponse && (\r\n <>\r\n <div className=\"mt-3 mb-8 px-4 bg-indigo-300 rounded-tr-[5px]\">\r\n {/* Chat Response */}\r\n <div\r\n className=\"text-sm text-[#232323] bg-[#FFFFFF] px-7 py-4 rounded-br-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n dangerouslySetInnerHTML={{\r\n __html: formatStringToHtml(\r\n chat.secondaryResponse\r\n ),\r\n }}\r\n />\r\n {chat.productSnapshot && (\r\n // chat.productSnapshot.points > 0 &&\r\n <div className=\"mt-4 w-full\">\r\n <div\r\n className=\"flex gap-4 items-stretch rounded-2xl p-4\"\r\n style={{\r\n backgroundColor:\r\n storeDetails.tanyaThemeColorLight,\r\n }}\r\n >\r\n <div\r\n className=\"flex-shrink-0 rounded-xl overflow-hidden border\"\r\n style={{\r\n width: 112,\r\n height: 112,\r\n borderColor: \"#eee\",\r\n }}\r\n >\r\n {chat.productSnapshot.image ? (\r\n <img\r\n src={chat.productSnapshot.image}\r\n alt={chat.productSnapshot.name}\r\n className=\"w-full h-full object-cover\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs text-gray-500\">\r\n No Image\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-col flex-1 justify-between\">\r\n <div>\r\n <p className=\"font-semibold text-[15px] leading-snug\">\r\n {chat.productSnapshot.name}\r\n </p>\r\n <p className=\"mt-1 text-[14px] font-medium\">\r\n {chat.productSnapshot.price != null\r\n ? new Intl.NumberFormat(undefined, {\r\n style: \"currency\",\r\n currency:\r\n storeDetails?.currency ||\r\n \"USD\",\r\n }).format(\r\n chat.productSnapshot.price\r\n )\r\n : \"\"}\r\n </p>\r\n\r\n {chat.productSnapshot.points > 0 && (\r\n <p className=\"mt-1 text-xs opacity-80\">\r\n You will earn{\" \"}\r\n <strong>\r\n {chat.productSnapshot.points}{\" \"}\r\n points\r\n </strong>\r\n </p>\r\n )}\r\n </div>\r\n\r\n <div className=\"mt-3 flex items-center gap-3\">\r\n <div className=\"flex items-center border rounded-full overflow-hidden\">\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity: Math.max(\r\n 1,\r\n m.productSnapshot\r\n .quantity - 1\r\n ),\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n −\r\n </button>\r\n <div className=\"px-3 py-1 text-sm select-none\">\r\n {chat.productSnapshot.quantity}\r\n </div>\r\n <button\r\n className=\"px-3 py-1 text-sm\"\r\n onClick={() =>\r\n setChatHistory((prev) =>\r\n prev.map((m, i) =>\r\n i === index &&\r\n m.productSnapshot\r\n ? {\r\n ...m,\r\n productSnapshot: {\r\n ...m.productSnapshot,\r\n quantity:\r\n m.productSnapshot\r\n .quantity + 1,\r\n },\r\n }\r\n : m\r\n )\r\n )\r\n }\r\n style={{\r\n background: \"transparent\",\r\n color:\r\n storeDetails.themeDarkColor,\r\n }}\r\n >\r\n +\r\n </button>\r\n </div>\r\n <button\r\n onClick={() => {\r\n handleAddToCart(\r\n mapSnapshotToProduct(\r\n chat.productSnapshot!\r\n ),\r\n chat.productSnapshot!.quantity\r\n );\r\n }}\r\n disabled={adding}\r\n className=\"px-4 py-2 rounded-full font-medium\"\r\n style={{\r\n background:\r\n storeDetails.tanyaThemeColor,\r\n color:\r\n storeDetails?.tanyaThemeContrastColor ||\r\n \"#fff\",\r\n opacity: adding ? 0.8 : 1,\r\n }}\r\n >\r\n {adding ? \"Adding...\" : \"Add to cart\"}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </>\r\n )}\r\n <div className=\"mb-20\"></div>\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Sticky Bottom Input Bar */}\r\n <div className=\"flex flex-col gap-2 sticky bottom-0 left-0 right-0 bg-[#E3DEEF] z-50 px-4 py-2\">\r\n {/* Gradient Border Wrapper */}\r\n <div\r\n className=\"p-[1px] rounded-xl\"\r\n style={{\r\n background:\r\n \"linear-gradient(180deg, #B09FFF 0%, #8D79F6 100%)\",\r\n }}\r\n >\r\n {/* Input + Mic + Submit */}\r\n <div className=\"flex items-center bg-[#FFFFFF] flex-1 rounded-xl px-2 py-1\">\r\n <input\r\n className=\"flex-1 bg-[#FFFFFF] text-[#232323] outline-none border-none px-2 py-2 text-sm\"\r\n placeholder=\"How can I help you...\"\r\n value={inputText}\r\n autoFocus\r\n onChange={(e) => setInputText(e.target.value)}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading)\r\n handleSendMessage();\r\n }}\r\n />\r\n {/* Mic Icon */}\r\n {/* <button\r\n type=\"button\"\r\n className=\"p-2 text-[#959595] hover:text-[#6952C7]\"\r\n >\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <g clipPath=\"url(#clip0_501_6086)\">\r\n <path\r\n d=\"M7.5 4.16663C7.5 3.50358 7.76339 2.8677 8.23223 2.39886C8.70107 1.93002 9.33696 1.66663 10 1.66663C10.663 1.66663 11.2989 1.93002 11.7678 2.39886C12.2366 2.8677 12.5 3.50358 12.5 4.16663V8.33329C12.5 8.99633 12.2366 9.63222 11.7678 10.1011C11.2989 10.5699 10.663 10.8333 10 10.8333C9.33696 10.8333 8.70107 10.5699 8.23223 10.1011C7.76339 9.63222 7.5 8.99633 7.5 8.33329V4.16663Z\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M4.1665 8.33337C4.1665 9.88047 4.78109 11.3642 5.87505 12.4582C6.96901 13.5521 8.45274 14.1667 9.99984 14.1667C11.5469 14.1667 13.0307 13.5521 14.1246 12.4582C15.2186 11.3642 15.8332 9.88047 15.8332 8.33337\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M6.6665 17.5H13.3332\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n <path\r\n d=\"M10 14.1666V17.5\"\r\n stroke=\"#959595\"\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_501_6086\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </button> */}\r\n {/* Submit Button */}\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading}\r\n className=\"p-3\"\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"p-3 animate-spin rounded-full h-3 w-3 border-b-2\"\r\n style={{\r\n borderBottom: \"2px solid\",\r\n color: storeDetails.tanyaThemeColor,\r\n }}\r\n />\r\n ) : (\r\n <svg\r\n width=\"20\"\r\n height=\"20\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <path\r\n d=\"M16.6357 13.6701L18.3521 8.5208C19.8516 4.02242 20.6013 1.77322 19.414 0.585948C18.2268 -0.601312 15.9776 0.148418 11.4792 1.64788L6.32987 3.36432C2.69923 4.57453 0.883923 5.17964 0.368062 6.06698C-0.122688 6.91112 -0.122688 7.95369 0.368062 8.7978C0.883923 9.6852 2.69923 10.2903 6.32987 11.5005C6.77981 11.6505 7.28601 11.5434 7.62294 11.2096L13.1286 5.75495C13.4383 5.44808 13.9382 5.45041 14.245 5.76015C14.5519 6.06989 14.5496 6.56975 14.2398 6.87662L8.8231 12.2432C8.4518 12.6111 8.3342 13.1742 8.4995 13.6701C9.7097 17.3007 10.3148 19.1161 11.2022 19.6319C12.0463 20.1227 13.0889 20.1227 13.933 19.6319C14.8204 19.1161 15.4255 17.3008 16.6357 13.6701Z\"\r\n fill=\"#6952C7\"\r\n />\r\n </svg>\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ProductDisplayCard addToCartPwa={addToCart} />\r\n </div>\r\n {/* </PopoverContent> */}\r\n </div>\r\n </>\r\n )}\r\n </Popover>\r\n </div>\r\n );\r\n};\r\n\r\nexport default TanyaShoppingAssistantStream;\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __extends } from \"tslib\";\nvar genericMessage = \"Invariant Violation\";\nvar _a = Object.setPrototypeOf, setPrototypeOf = _a === void 0 ? function (obj, proto) {\n obj.__proto__ = proto;\n return obj;\n} : _a;\nvar InvariantError = /** @class */ (function (_super) {\n __extends(InvariantError, _super);\n function InvariantError(message) {\n if (message === void 0) { message = genericMessage; }\n var _this = _super.call(this, typeof message === \"number\"\n ? genericMessage + \": \" + message + \" (see https://github.com/apollographql/invariant-packages)\"\n : message) || this;\n _this.framesToPop = 1;\n _this.name = genericMessage;\n setPrototypeOf(_this, InvariantError.prototype);\n return _this;\n }\n return InvariantError;\n}(Error));\nexport { InvariantError };\nexport function invariant(condition, message) {\n if (!condition) {\n throw new InvariantError(message);\n }\n}\nvar verbosityLevels = [\"debug\", \"log\", \"warn\", \"error\", \"silent\"];\nvar verbosityLevel = verbosityLevels.indexOf(\"log\");\nfunction wrapConsoleMethod(name) {\n return function () {\n if (verbosityLevels.indexOf(name) >= verbosityLevel) {\n // Default to console.log if this host environment happens not to provide\n // all the console.* methods we need.\n var method = console[name] || console.log;\n return method.apply(console, arguments);\n }\n };\n}\n(function (invariant) {\n invariant.debug = wrapConsoleMethod(\"debug\");\n invariant.log = wrapConsoleMethod(\"log\");\n invariant.warn = wrapConsoleMethod(\"warn\");\n invariant.error = wrapConsoleMethod(\"error\");\n})(invariant || (invariant = {}));\nexport function setVerbosity(level) {\n var old = verbosityLevels[verbosityLevel];\n verbosityLevel = Math.max(0, verbosityLevels.indexOf(level));\n return old;\n}\nexport default invariant;\n//# sourceMappingURL=invariant.js.map","export var version = \"3.14.0\";\n//# sourceMappingURL=version.js.map","export function maybe(thunk) {\n try {\n return thunk();\n }\n catch (_a) { }\n}\n//# sourceMappingURL=maybe.js.map","import { maybe } from \"./maybe.js\";\nexport default (maybe(function () { return globalThis; }) ||\n maybe(function () { return window; }) ||\n maybe(function () { return self; }) ||\n maybe(function () { return global; }) || // We don't expect the Function constructor ever to be invoked at runtime, as\n// long as at least one of globalThis, window, self, or global is defined, so\n// we are under no obligation to make it easy for static analysis tools to\n// detect syntactic usage of the Function constructor. If you think you can\n// improve your static analysis to detect this obfuscation, think again. This\n// is an arms race you cannot win, at least not in JavaScript.\nmaybe(function () {\n return maybe.constructor(\"return this\")();\n}));\n//# sourceMappingURL=global.js.map","var prefixCounts = new Map();\n// These IDs won't be globally unique, but they will be unique within this\n// process, thanks to the counter, and unguessable thanks to the random suffix.\nexport function makeUniqueId(prefix) {\n var count = prefixCounts.get(prefix) || 1;\n prefixCounts.set(prefix, count + 1);\n return \"\".concat(prefix, \":\").concat(count, \":\").concat(Math.random().toString(36).slice(2));\n}\n//# sourceMappingURL=makeUniqueId.js.map","import { makeUniqueId } from \"./makeUniqueId.js\";\nexport function stringifyForDisplay(value, space) {\n if (space === void 0) { space = 0; }\n var undefId = makeUniqueId(\"stringifyForDisplay\");\n return JSON.stringify(value, function (key, value) {\n return value === void 0 ? undefId : value;\n }, space)\n .split(JSON.stringify(undefId))\n .join(\"<undefined>\");\n}\n//# sourceMappingURL=stringifyForDisplay.js.map","import { invariant as originalInvariant, InvariantError } from \"ts-invariant\";\nimport { version } from \"../../version.js\";\nimport global from \"./global.js\";\nimport { stringifyForDisplay } from \"../common/stringifyForDisplay.js\";\nfunction wrap(fn) {\n return function (message) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (typeof message === \"number\") {\n var arg0 = message;\n message = getHandledErrorMsg(arg0);\n if (!message) {\n message = getFallbackErrorMsg(arg0, args);\n args = [];\n }\n }\n fn.apply(void 0, [message].concat(args));\n };\n}\nvar invariant = Object.assign(function invariant(condition, message) {\n var args = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n args[_i - 2] = arguments[_i];\n }\n if (!condition) {\n originalInvariant(condition, getHandledErrorMsg(message, args) || getFallbackErrorMsg(message, args));\n }\n}, {\n debug: wrap(originalInvariant.debug),\n log: wrap(originalInvariant.log),\n warn: wrap(originalInvariant.warn),\n error: wrap(originalInvariant.error),\n});\n/**\n * Returns an InvariantError.\n *\n * `message` can only be a string, a concatenation of strings, or a ternary statement\n * that results in a string. This will be enforced on build, where the message will\n * be replaced with a message number.\n * String substitutions with %s are supported and will also return\n * pretty-stringified objects.\n * Excess `optionalParams` will be swallowed.\n */\nfunction newInvariantError(message) {\n var optionalParams = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n optionalParams[_i - 1] = arguments[_i];\n }\n return new InvariantError(getHandledErrorMsg(message, optionalParams) ||\n getFallbackErrorMsg(message, optionalParams));\n}\nvar ApolloErrorMessageHandler = Symbol.for(\"ApolloErrorMessageHandler_\" + version);\nfunction stringify(arg) {\n if (typeof arg == \"string\") {\n return arg;\n }\n try {\n return stringifyForDisplay(arg, 2).slice(0, 1000);\n }\n catch (_a) {\n return \"<non-serializable>\";\n }\n}\nfunction getHandledErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return (global[ApolloErrorMessageHandler] &&\n global[ApolloErrorMessageHandler](message, messageArgs.map(stringify)));\n}\nfunction getFallbackErrorMsg(message, messageArgs) {\n if (messageArgs === void 0) { messageArgs = []; }\n if (!message)\n return;\n return \"An error occurred! For more details, see the full error text at https://go.apollo.dev/c/err#\".concat(encodeURIComponent(JSON.stringify({\n version: version,\n message: message,\n args: messageArgs.map(stringify),\n })));\n}\nexport { invariant, InvariantError, newInvariantError, ApolloErrorMessageHandler, };\n//# sourceMappingURL=invariantWrappers.js.map","import { invariant, newInvariantError } from \"../globals/index.js\";\nimport { valueToObjectRepresentation } from \"./storeUtils.js\";\n// Checks the document for errors and throws an exception if there is an error.\nexport function checkDocument(doc) {\n invariant(doc && doc.kind === \"Document\", 116);\n var operations = doc.definitions\n .filter(function (d) { return d.kind !== \"FragmentDefinition\"; })\n .map(function (definition) {\n if (definition.kind !== \"OperationDefinition\") {\n throw newInvariantError(117, definition.kind);\n }\n return definition;\n });\n invariant(operations.length <= 1, 118, operations.length);\n return doc;\n}\nexport function getOperationDefinition(doc) {\n checkDocument(doc);\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"OperationDefinition\";\n })[0];\n}\nexport function getOperationName(doc) {\n return (doc.definitions\n .filter(function (definition) {\n return definition.kind === \"OperationDefinition\" && !!definition.name;\n })\n .map(function (x) { return x.name.value; })[0] || null);\n}\n// Returns the FragmentDefinitions from a particular document as an array\nexport function getFragmentDefinitions(doc) {\n return doc.definitions.filter(function (definition) {\n return definition.kind === \"FragmentDefinition\";\n });\n}\nexport function getQueryDefinition(doc) {\n var queryDef = getOperationDefinition(doc);\n invariant(queryDef && queryDef.operation === \"query\", 119);\n return queryDef;\n}\nexport function getFragmentDefinition(doc) {\n invariant(doc.kind === \"Document\", 120);\n invariant(doc.definitions.length <= 1, 121);\n var fragmentDef = doc.definitions[0];\n invariant(fragmentDef.kind === \"FragmentDefinition\", 122);\n return fragmentDef;\n}\n/**\n * Returns the first operation definition found in this document.\n * If no operation definition is found, the first fragment definition will be returned.\n * If no definitions are found, an error will be thrown.\n */\nexport function getMainDefinition(queryDoc) {\n checkDocument(queryDoc);\n var fragmentDefinition;\n for (var _i = 0, _a = queryDoc.definitions; _i < _a.length; _i++) {\n var definition = _a[_i];\n if (definition.kind === \"OperationDefinition\") {\n var operation = definition.operation;\n if (operation === \"query\" ||\n operation === \"mutation\" ||\n operation === \"subscription\") {\n return definition;\n }\n }\n if (definition.kind === \"FragmentDefinition\" && !fragmentDefinition) {\n // we do this because we want to allow multiple fragment definitions\n // to precede an operation definition.\n fragmentDefinition = definition;\n }\n }\n if (fragmentDefinition) {\n return fragmentDefinition;\n }\n throw newInvariantError(123);\n}\nexport function getDefaultValues(definition) {\n var defaultValues = Object.create(null);\n var defs = definition && definition.variableDefinitions;\n if (defs && defs.length) {\n defs.forEach(function (def) {\n if (def.defaultValue) {\n valueToObjectRepresentation(defaultValues, def.variable.name, def.defaultValue);\n }\n });\n }\n return defaultValues;\n}\n//# sourceMappingURL=getFromAST.js.map","// This currentContext variable will only be used if the makeSlotClass\n// function is called, which happens only if this is the first copy of the\n// @wry/context package to be imported.\nlet currentContext = null;\n// This unique internal object is used to denote the absence of a value\n// for a given Slot, and is never exposed to outside code.\nconst MISSING_VALUE = {};\nlet idCounter = 1;\n// Although we can't do anything about the cost of duplicated code from\n// accidentally bundling multiple copies of the @wry/context package, we can\n// avoid creating the Slot class more than once using makeSlotClass.\nconst makeSlotClass = () => class Slot {\n constructor() {\n // If you have a Slot object, you can find out its slot.id, but you cannot\n // guess the slot.id of a Slot you don't have access to, thanks to the\n // randomized suffix.\n this.id = [\n \"slot\",\n idCounter++,\n Date.now(),\n Math.random().toString(36).slice(2),\n ].join(\":\");\n }\n hasValue() {\n for (let context = currentContext; context; context = context.parent) {\n // We use the Slot object iself as a key to its value, which means the\n // value cannot be obtained without a reference to the Slot object.\n if (this.id in context.slots) {\n const value = context.slots[this.id];\n if (value === MISSING_VALUE)\n break;\n if (context !== currentContext) {\n // Cache the value in currentContext.slots so the next lookup will\n // be faster. This caching is safe because the tree of contexts and\n // the values of the slots are logically immutable.\n currentContext.slots[this.id] = value;\n }\n return true;\n }\n }\n if (currentContext) {\n // If a value was not found for this Slot, it's never going to be found\n // no matter how many times we look it up, so we might as well cache\n // the absence of the value, too.\n currentContext.slots[this.id] = MISSING_VALUE;\n }\n return false;\n }\n getValue() {\n if (this.hasValue()) {\n return currentContext.slots[this.id];\n }\n }\n withValue(value, callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n const slots = {\n __proto__: null,\n [this.id]: value,\n };\n const parent = currentContext;\n currentContext = { parent, slots };\n try {\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = parent;\n }\n }\n // Capture the current context and wrap a callback function so that it\n // reestablishes the captured context when called.\n static bind(callback) {\n const context = currentContext;\n return function () {\n const saved = currentContext;\n try {\n currentContext = context;\n return callback.apply(this, arguments);\n }\n finally {\n currentContext = saved;\n }\n };\n }\n // Immediately run a callback function without any captured context.\n static noContext(callback, \n // Given the prevalence of arrow functions, specifying arguments is likely\n // to be much more common than specifying `this`, hence this ordering:\n args, thisArg) {\n if (currentContext) {\n const saved = currentContext;\n try {\n currentContext = null;\n // Function.prototype.apply allows the arguments array argument to be\n // omitted or undefined, so args! is fine here.\n return callback.apply(thisArg, args);\n }\n finally {\n currentContext = saved;\n }\n }\n else {\n return callback.apply(thisArg, args);\n }\n }\n};\nfunction maybe(fn) {\n try {\n return fn();\n }\n catch (ignored) { }\n}\n// We store a single global implementation of the Slot class as a permanent\n// non-enumerable property of the globalThis object. This obfuscation does\n// nothing to prevent access to the Slot class, but at least it ensures the\n// implementation (i.e. currentContext) cannot be tampered with, and all copies\n// of the @wry/context package (hopefully just one) will share the same Slot\n// implementation. Since the first copy of the @wry/context package to be\n// imported wins, this technique imposes a steep cost for any future breaking\n// changes to the Slot class.\nconst globalKey = \"@wry/context:Slot\";\nconst host = \n// Prefer globalThis when available.\n// https://github.com/benjamn/wryware/issues/347\nmaybe(() => globalThis) ||\n // Fall back to global, which works in Node.js and may be converted by some\n // bundlers to the appropriate identifier (window, self, ...) depending on the\n // bundling target. https://github.com/endojs/endo/issues/576#issuecomment-1178515224\n maybe(() => global) ||\n // Otherwise, use a dummy host that's local to this module. We used to fall\n // back to using the Array constructor as a namespace, but that was flagged in\n // https://github.com/benjamn/wryware/issues/347, and can be avoided.\n Object.create(null);\n// Whichever globalHost we're using, make TypeScript happy about the additional\n// globalKey property.\nconst globalHost = host;\nexport const Slot = globalHost[globalKey] ||\n // Earlier versions of this package stored the globalKey property on the Array\n // constructor, so we check there as well, to prevent Slot class duplication.\n Array[globalKey] ||\n (function (Slot) {\n try {\n Object.defineProperty(globalHost, globalKey, {\n value: Slot,\n enumerable: false,\n writable: false,\n // When it was possible for globalHost to be the Array constructor (a\n // legacy Slot dedup strategy), it was important for the property to be\n // configurable:true so it could be deleted. That does not seem to be as\n // important when globalHost is the global object, but I don't want to\n // cause similar problems again, and configurable:true seems safest.\n // https://github.com/endojs/endo/issues/576#issuecomment-1178274008\n configurable: true\n });\n }\n finally {\n return Slot;\n }\n })(makeSlotClass());\n//# sourceMappingURL=slot.js.map","import { Slot } from \"./slot.js\";\nexport { Slot };\nexport const { bind, noContext } = Slot;\n// Like global.setTimeout, except the callback runs with captured context.\nexport { setTimeoutWithContext as setTimeout };\nfunction setTimeoutWithContext(callback, delay) {\n return setTimeout(bind(callback), delay);\n}\n// Turn any generator function into an async function (using yield instead\n// of await), with context automatically preserved across yields.\nexport function asyncFromGen(genFn) {\n return function () {\n const gen = genFn.apply(this, arguments);\n const boundNext = bind(gen.next);\n const boundThrow = bind(gen.throw);\n return new Promise((resolve, reject) => {\n function invoke(method, argument) {\n try {\n var result = method.call(gen, argument);\n }\n catch (error) {\n return reject(error);\n }\n const next = result.done ? resolve : invokeNext;\n if (isPromiseLike(result.value)) {\n result.value.then(next, result.done ? reject : invokeThrow);\n }\n else {\n next(result.value);\n }\n }\n const invokeNext = (value) => invoke(boundNext, value);\n const invokeThrow = (error) => invoke(boundThrow, error);\n invokeNext();\n });\n };\n}\nfunction isPromiseLike(value) {\n return value && typeof value.then === \"function\";\n}\n// If you use the fibers npm package to implement coroutines in Node.js,\n// you should call this function at least once to ensure context management\n// remains coherent across any yields.\nconst wrappedFibers = [];\nexport function wrapYieldingFiberMethods(Fiber) {\n // There can be only one implementation of Fiber per process, so this array\n // should never grow longer than one element.\n if (wrappedFibers.indexOf(Fiber) < 0) {\n const wrap = (obj, method) => {\n const fn = obj[method];\n obj[method] = function () {\n return noContext(fn, arguments, this);\n };\n };\n // These methods can yield, according to\n // https://github.com/laverdet/node-fibers/blob/ddebed9b8ae3883e57f822e2108e6943e5c8d2a8/fibers.js#L97-L100\n wrap(Fiber, \"yield\");\n wrap(Fiber.prototype, \"run\");\n wrap(Fiber.prototype, \"throwInto\");\n wrappedFibers.push(Fiber);\n }\n return Fiber;\n}\n//# sourceMappingURL=index.js.map","import { Slot } from \"@wry/context\";\nexport const parentEntrySlot = new Slot();\nexport function nonReactive(fn) {\n return parentEntrySlot.withValue(void 0, fn);\n}\nexport { Slot };\nexport { bind as bindContext, noContext, setTimeout, asyncFromGen, } from \"@wry/context\";\n//# sourceMappingURL=context.js.map","function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\n\n// === Symbol Support ===\nvar hasSymbols = function () {\n return typeof Symbol === 'function';\n};\n\nvar hasSymbol = function (name) {\n return hasSymbols() && Boolean(Symbol[name]);\n};\n\nvar getSymbol = function (name) {\n return hasSymbol(name) ? Symbol[name] : '@@' + name;\n};\n\nif (hasSymbols() && !hasSymbol('observable')) {\n Symbol.observable = Symbol('observable');\n}\n\nvar SymbolIterator = getSymbol('iterator');\nvar SymbolObservable = getSymbol('observable');\nvar SymbolSpecies = getSymbol('species'); // === Abstract Operations ===\n\nfunction getMethod(obj, key) {\n var value = obj[key];\n if (value == null) return undefined;\n if (typeof value !== 'function') throw new TypeError(value + ' is not a function');\n return value;\n}\n\nfunction getSpecies(obj) {\n var ctor = obj.constructor;\n\n if (ctor !== undefined) {\n ctor = ctor[SymbolSpecies];\n\n if (ctor === null) {\n ctor = undefined;\n }\n }\n\n return ctor !== undefined ? ctor : Observable;\n}\n\nfunction isObservable(x) {\n return x instanceof Observable; // SPEC: Brand check\n}\n\nfunction hostReportError(e) {\n if (hostReportError.log) {\n hostReportError.log(e);\n } else {\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nfunction enqueue(fn) {\n Promise.resolve().then(function () {\n try {\n fn();\n } catch (e) {\n hostReportError(e);\n }\n });\n}\n\nfunction cleanupSubscription(subscription) {\n var cleanup = subscription._cleanup;\n if (cleanup === undefined) return;\n subscription._cleanup = undefined;\n\n if (!cleanup) {\n return;\n }\n\n try {\n if (typeof cleanup === 'function') {\n cleanup();\n } else {\n var unsubscribe = getMethod(cleanup, 'unsubscribe');\n\n if (unsubscribe) {\n unsubscribe.call(cleanup);\n }\n }\n } catch (e) {\n hostReportError(e);\n }\n}\n\nfunction closeSubscription(subscription) {\n subscription._observer = undefined;\n subscription._queue = undefined;\n subscription._state = 'closed';\n}\n\nfunction flushSubscription(subscription) {\n var queue = subscription._queue;\n\n if (!queue) {\n return;\n }\n\n subscription._queue = undefined;\n subscription._state = 'ready';\n\n for (var i = 0; i < queue.length; ++i) {\n notifySubscription(subscription, queue[i].type, queue[i].value);\n if (subscription._state === 'closed') break;\n }\n}\n\nfunction notifySubscription(subscription, type, value) {\n subscription._state = 'running';\n var observer = subscription._observer;\n\n try {\n var m = getMethod(observer, type);\n\n switch (type) {\n case 'next':\n if (m) m.call(observer, value);\n break;\n\n case 'error':\n closeSubscription(subscription);\n if (m) m.call(observer, value);else throw value;\n break;\n\n case 'complete':\n closeSubscription(subscription);\n if (m) m.call(observer);\n break;\n }\n } catch (e) {\n hostReportError(e);\n }\n\n if (subscription._state === 'closed') cleanupSubscription(subscription);else if (subscription._state === 'running') subscription._state = 'ready';\n}\n\nfunction onNotify(subscription, type, value) {\n if (subscription._state === 'closed') return;\n\n if (subscription._state === 'buffering') {\n subscription._queue.push({\n type: type,\n value: value\n });\n\n return;\n }\n\n if (subscription._state !== 'ready') {\n subscription._state = 'buffering';\n subscription._queue = [{\n type: type,\n value: value\n }];\n enqueue(function () {\n return flushSubscription(subscription);\n });\n return;\n }\n\n notifySubscription(subscription, type, value);\n}\n\nvar Subscription = /*#__PURE__*/function () {\n function Subscription(observer, subscriber) {\n // ASSERT: observer is an object\n // ASSERT: subscriber is callable\n this._cleanup = undefined;\n this._observer = observer;\n this._queue = undefined;\n this._state = 'initializing';\n var subscriptionObserver = new SubscriptionObserver(this);\n\n try {\n this._cleanup = subscriber.call(undefined, subscriptionObserver);\n } catch (e) {\n subscriptionObserver.error(e);\n }\n\n if (this._state === 'initializing') this._state = 'ready';\n }\n\n var _proto = Subscription.prototype;\n\n _proto.unsubscribe = function unsubscribe() {\n if (this._state !== 'closed') {\n closeSubscription(this);\n cleanupSubscription(this);\n }\n };\n\n _createClass(Subscription, [{\n key: \"closed\",\n get: function () {\n return this._state === 'closed';\n }\n }]);\n\n return Subscription;\n}();\n\nvar SubscriptionObserver = /*#__PURE__*/function () {\n function SubscriptionObserver(subscription) {\n this._subscription = subscription;\n }\n\n var _proto2 = SubscriptionObserver.prototype;\n\n _proto2.next = function next(value) {\n onNotify(this._subscription, 'next', value);\n };\n\n _proto2.error = function error(value) {\n onNotify(this._subscription, 'error', value);\n };\n\n _proto2.complete = function complete() {\n onNotify(this._subscription, 'complete');\n };\n\n _createClass(SubscriptionObserver, [{\n key: \"closed\",\n get: function () {\n return this._subscription._state === 'closed';\n }\n }]);\n\n return SubscriptionObserver;\n}();\n\nvar Observable = /*#__PURE__*/function () {\n function Observable(subscriber) {\n if (!(this instanceof Observable)) throw new TypeError('Observable cannot be called as a function');\n if (typeof subscriber !== 'function') throw new TypeError('Observable initializer must be a function');\n this._subscriber = subscriber;\n }\n\n var _proto3 = Observable.prototype;\n\n _proto3.subscribe = function subscribe(observer) {\n if (typeof observer !== 'object' || observer === null) {\n observer = {\n next: observer,\n error: arguments[1],\n complete: arguments[2]\n };\n }\n\n return new Subscription(observer, this._subscriber);\n };\n\n _proto3.forEach = function forEach(fn) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n if (typeof fn !== 'function') {\n reject(new TypeError(fn + ' is not a function'));\n return;\n }\n\n function done() {\n subscription.unsubscribe();\n resolve();\n }\n\n var subscription = _this.subscribe({\n next: function (value) {\n try {\n fn(value, done);\n } catch (e) {\n reject(e);\n subscription.unsubscribe();\n }\n },\n error: reject,\n complete: resolve\n });\n });\n };\n\n _proto3.map = function map(fn) {\n var _this2 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this2.subscribe({\n next: function (value) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.filter = function filter(fn) {\n var _this3 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n return _this3.subscribe({\n next: function (value) {\n try {\n if (!fn(value)) return;\n } catch (e) {\n return observer.error(e);\n }\n\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n observer.complete();\n }\n });\n });\n };\n\n _proto3.reduce = function reduce(fn) {\n var _this4 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n var hasSeed = arguments.length > 1;\n var hasValue = false;\n var seed = arguments[1];\n var acc = seed;\n return new C(function (observer) {\n return _this4.subscribe({\n next: function (value) {\n var first = !hasValue;\n hasValue = true;\n\n if (!first || hasSeed) {\n try {\n acc = fn(acc, value);\n } catch (e) {\n return observer.error(e);\n }\n } else {\n acc = value;\n }\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (!hasValue && !hasSeed) return observer.error(new TypeError('Cannot reduce an empty sequence'));\n observer.next(acc);\n observer.complete();\n }\n });\n });\n };\n\n _proto3.concat = function concat() {\n var _this5 = this;\n\n for (var _len = arguments.length, sources = new Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscription;\n var index = 0;\n\n function startNext(next) {\n subscription = next.subscribe({\n next: function (v) {\n observer.next(v);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n if (index === sources.length) {\n subscription = undefined;\n observer.complete();\n } else {\n startNext(C.from(sources[index++]));\n }\n }\n });\n }\n\n startNext(_this5);\n return function () {\n if (subscription) {\n subscription.unsubscribe();\n subscription = undefined;\n }\n };\n });\n };\n\n _proto3.flatMap = function flatMap(fn) {\n var _this6 = this;\n\n if (typeof fn !== 'function') throw new TypeError(fn + ' is not a function');\n var C = getSpecies(this);\n return new C(function (observer) {\n var subscriptions = [];\n\n var outer = _this6.subscribe({\n next: function (value) {\n if (fn) {\n try {\n value = fn(value);\n } catch (e) {\n return observer.error(e);\n }\n }\n\n var inner = C.from(value).subscribe({\n next: function (value) {\n observer.next(value);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n var i = subscriptions.indexOf(inner);\n if (i >= 0) subscriptions.splice(i, 1);\n completeIfDone();\n }\n });\n subscriptions.push(inner);\n },\n error: function (e) {\n observer.error(e);\n },\n complete: function () {\n completeIfDone();\n }\n });\n\n function completeIfDone() {\n if (outer.closed && subscriptions.length === 0) observer.complete();\n }\n\n return function () {\n subscriptions.forEach(function (s) {\n return s.unsubscribe();\n });\n outer.unsubscribe();\n };\n });\n };\n\n _proto3[SymbolObservable] = function () {\n return this;\n };\n\n Observable.from = function from(x) {\n var C = typeof this === 'function' ? this : Observable;\n if (x == null) throw new TypeError(x + ' is not an object');\n var method = getMethod(x, SymbolObservable);\n\n if (method) {\n var observable = method.call(x);\n if (Object(observable) !== observable) throw new TypeError(observable + ' is not an object');\n if (isObservable(observable) && observable.constructor === C) return observable;\n return new C(function (observer) {\n return observable.subscribe(observer);\n });\n }\n\n if (hasSymbol('iterator')) {\n method = getMethod(x, SymbolIterator);\n\n if (method) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var _iterator = _createForOfIteratorHelperLoose(method.call(x)), _step; !(_step = _iterator()).done;) {\n var item = _step.value;\n observer.next(item);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n }\n\n if (Array.isArray(x)) {\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < x.length; ++i) {\n observer.next(x[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n }\n\n throw new TypeError(x + ' is not observable');\n };\n\n Observable.of = function of() {\n for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n items[_key2] = arguments[_key2];\n }\n\n var C = typeof this === 'function' ? this : Observable;\n return new C(function (observer) {\n enqueue(function () {\n if (observer.closed) return;\n\n for (var i = 0; i < items.length; ++i) {\n observer.next(items[i]);\n if (observer.closed) return;\n }\n\n observer.complete();\n });\n });\n };\n\n _createClass(Observable, null, [{\n key: SymbolSpecies,\n get: function () {\n return this;\n }\n }]);\n\n return Observable;\n}();\n\nif (hasSymbols()) {\n Object.defineProperty(Observable, Symbol('extensions'), {\n value: {\n symbol: SymbolObservable,\n hostReportError: hostReportError\n },\n configurable: true\n });\n}\n\nexport { Observable };\n","export default function symbolObservablePonyfill(root) {\n\tvar result;\n\tvar Symbol = root.Symbol;\n\n\tif (typeof Symbol === 'function') {\n\t\tif (Symbol.observable) {\n\t\t\tresult = Symbol.observable;\n\t\t} else {\n\n\t\t\tif (typeof Symbol.for === 'function') {\n\t\t\t\t// This just needs to be something that won't trample other user's Symbol.for use\n\t\t\t\t// It also will guide people to the source of their issues, if this is problematic.\n\t\t\t\t// META: It's a resource locator!\n\t\t\t\tresult = Symbol.for('https://github.com/benlesh/symbol-observable');\n\t\t\t} else {\n\t\t\t\t// Symbol.for didn't exist! The best we can do at this point is a totally \n\t\t\t\t// unique symbol. Note that the string argument here is a descriptor, not\n\t\t\t\t// an identifier. This symbol is unique.\n\t\t\t\tresult = Symbol('https://github.com/benlesh/symbol-observable');\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tSymbol.observable = result;\n\t\t\t} catch (err) {\n\t\t\t\t// Do nothing. In some environments, users have frozen `Symbol` for security reasons,\n\t\t\t\t// if it is frozen assigning to it will throw. In this case, we don't care, because\n\t\t\t\t// they will need to use the returned value from the ponyfill.\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = '@@observable';\n\t}\n\n\treturn result;\n};\n","/* global window */\nimport ponyfill from './ponyfill.js';\n\nvar root;\n\nif (typeof self !== 'undefined') {\n root = self;\n} else if (typeof window !== 'undefined') {\n root = window;\n} else if (typeof global !== 'undefined') {\n root = global;\n} else if (typeof module !== 'undefined') {\n root = module;\n} else {\n root = Function('return this')();\n}\n\nvar result = ponyfill(root);\nexport default result;\n","import { Observable } from \"zen-observable-ts\";\n// This simplified polyfill attempts to follow the ECMAScript Observable\n// proposal (https://github.com/zenparsing/es-observable)\nimport \"symbol-observable\";\n// The zen-observable package defines Observable.prototype[Symbol.observable]\n// when Symbol is supported, but RxJS interop depends on also setting this fake\n// '@@observable' string as a polyfill for Symbol.observable.\nvar prototype = Observable.prototype;\nvar fakeObsSymbol = \"@@observable\";\nif (!prototype[fakeObsSymbol]) {\n // @ts-expect-error\n prototype[fakeObsSymbol] = function () {\n return this;\n };\n}\nexport { Observable };\n//# sourceMappingURL=Observable.js.map","import { newInvariantError } from \"../../utilities/globals/index.js\";\nexport function validateOperation(operation) {\n var OPERATION_FIELDS = [\n \"query\",\n \"operationName\",\n \"variables\",\n \"extensions\",\n \"context\",\n ];\n for (var _i = 0, _a = Object.keys(operation); _i < _a.length; _i++) {\n var key = _a[_i];\n if (OPERATION_FIELDS.indexOf(key) < 0) {\n throw newInvariantError(58, key);\n }\n }\n return operation;\n}\n//# sourceMappingURL=validateOperation.js.map","import { __assign } from \"tslib\";\nexport function createOperation(starting, operation) {\n var context = __assign({}, starting);\n var setContext = function (next) {\n if (typeof next === \"function\") {\n context = __assign(__assign({}, context), next(context));\n }\n else {\n context = __assign(__assign({}, context), next);\n }\n };\n var getContext = function () { return (__assign({}, context)); };\n Object.defineProperty(operation, \"setContext\", {\n enumerable: false,\n value: setContext,\n });\n Object.defineProperty(operation, \"getContext\", {\n enumerable: false,\n value: getContext,\n });\n return operation;\n}\n//# sourceMappingURL=createOperation.js.map","import { getOperationName } from \"../../utilities/index.js\";\nexport function transformOperation(operation) {\n var transformedOperation = {\n variables: operation.variables || {},\n extensions: operation.extensions || {},\n operationName: operation.operationName,\n query: operation.query,\n };\n // Best guess at an operation name\n if (!transformedOperation.operationName) {\n transformedOperation.operationName =\n typeof transformedOperation.query !== \"string\" ?\n getOperationName(transformedOperation.query) || undefined\n : \"\";\n }\n return transformedOperation;\n}\n//# sourceMappingURL=transformOperation.js.map","import { __spreadArray } from \"tslib\";\nimport { Slot } from \"optimism\";\nimport { invariant, global as untypedGlobal } from \"../globals/index.js\";\nvar muteAllDeprecations = Symbol.for(\"apollo.deprecations\");\nvar global = untypedGlobal;\nvar slot = new Slot();\nfunction isMuted(name) {\n return global[muteAllDeprecations] || (slot.getValue() || []).includes(name);\n}\nexport function muteDeprecations(name) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return slot.withValue.apply(slot, __spreadArray([Array.isArray(name) ? name : [name]], args, false));\n}\nexport function warnRemovedOption(options, name, callSite, recommendation) {\n if (recommendation === void 0) { recommendation = \"Please remove this option.\"; }\n warnDeprecated(name, function () {\n if (name in options) {\n globalThis.__DEV__ !== false && invariant.warn(104, callSite, name, recommendation);\n }\n });\n}\nexport function warnDeprecated(name, cb) {\n if (!isMuted(name)) {\n cb();\n }\n}\nexport function withDisabledDeprecations() {\n var _a;\n var prev = global[muteAllDeprecations];\n global[muteAllDeprecations] = true;\n return _a = {},\n _a[Symbol.dispose] = function () {\n global[muteAllDeprecations] = prev;\n },\n _a;\n}\n//# sourceMappingURL=index.js.map","import { newInvariantError, invariant } from \"../../utilities/globals/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nimport { validateOperation, createOperation, transformOperation, } from \"../utils/index.js\";\nimport { warnDeprecated } from \"../../utilities/deprecation/index.js\";\nfunction passthrough(op, forward) {\n return (forward ? forward(op) : Observable.of());\n}\nfunction toLink(handler) {\n return typeof handler === \"function\" ? new ApolloLink(handler) : handler;\n}\nfunction isTerminating(link) {\n return link.request.length <= 1;\n}\nvar ApolloLink = /** @class */ (function () {\n function ApolloLink(request) {\n if (request)\n this.request = request;\n }\n ApolloLink.empty = function () {\n return new ApolloLink(function () { return Observable.of(); });\n };\n ApolloLink.from = function (links) {\n if (links.length === 0)\n return ApolloLink.empty();\n return links.map(toLink).reduce(function (x, y) { return x.concat(y); });\n };\n ApolloLink.split = function (test, left, right) {\n var leftLink = toLink(left);\n var rightLink = toLink(right || new ApolloLink(passthrough));\n var ret;\n if (isTerminating(leftLink) && isTerminating(rightLink)) {\n ret = new ApolloLink(function (operation) {\n return test(operation) ?\n leftLink.request(operation) || Observable.of()\n : rightLink.request(operation) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return test(operation) ?\n leftLink.request(operation, forward) || Observable.of()\n : rightLink.request(operation, forward) || Observable.of();\n });\n }\n return Object.assign(ret, { left: leftLink, right: rightLink });\n };\n ApolloLink.execute = function (link, operation) {\n return (link.request(createOperation(operation.context, transformOperation(validateOperation(operation)))) || Observable.of());\n };\n ApolloLink.concat = function (first, second) {\n var firstLink = toLink(first);\n if (isTerminating(firstLink)) {\n globalThis.__DEV__ !== false && invariant.warn(47, firstLink);\n return firstLink;\n }\n var nextLink = toLink(second);\n var ret;\n if (isTerminating(nextLink)) {\n ret = new ApolloLink(function (operation) {\n return firstLink.request(operation, function (op) { return nextLink.request(op) || Observable.of(); }) || Observable.of();\n });\n }\n else {\n ret = new ApolloLink(function (operation, forward) {\n return (firstLink.request(operation, function (op) {\n return nextLink.request(op, forward) || Observable.of();\n }) || Observable.of());\n });\n }\n return Object.assign(ret, { left: firstLink, right: nextLink });\n };\n ApolloLink.prototype.split = function (test, left, right) {\n return this.concat(ApolloLink.split(test, left, right || new ApolloLink(passthrough)));\n };\n ApolloLink.prototype.concat = function (next) {\n return ApolloLink.concat(this, next);\n };\n ApolloLink.prototype.request = function (operation, forward) {\n throw newInvariantError(48);\n };\n /**\n * @deprecated `onError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.onError = function (error, observer) {\n if (globalThis.__DEV__ !== false) {\n warnDeprecated(\"onError\", function () {\n globalThis.__DEV__ !== false && invariant.warn(49);\n });\n }\n if (observer && observer.error) {\n observer.error(error);\n // Returning false indicates that observer.error does not need to be\n // called again, since it was already called (on the previous line).\n // Calling observer.error again would not cause any real problems,\n // since only the first call matters, but custom onError functions\n // might have other reasons for wanting to prevent the default\n // behavior by returning false.\n return false;\n }\n // Throw errors will be passed to observer.error.\n throw error;\n };\n /**\n * @deprecated `setOnError` will be removed with Apollo Client 4.0. Please\n * discontinue using this method.\n */\n ApolloLink.prototype.setOnError = function (fn) {\n if (globalThis.__DEV__ !== false) {\n globalThis.__DEV__ !== false && invariant.warn(50);\n }\n this.onError = fn;\n return this;\n };\n return ApolloLink;\n}());\nexport { ApolloLink };\n//# sourceMappingURL=ApolloLink.js.map","import { __rest } from \"tslib\";\nimport { ApolloLink } from \"../core/index.js\";\nimport { Observable } from \"../../utilities/index.js\";\nexport function setContext(setter) {\n return new ApolloLink(function (operation, forward) {\n var request = __rest(operation, []);\n return new Observable(function (observer) {\n var handle;\n var closed = false;\n Promise.resolve(request)\n .then(function (req) { return setter(req, operation.getContext()); })\n .then(operation.setContext)\n .then(function () {\n // if the observer is already closed, no need to subscribe.\n if (closed)\n return;\n handle = forward(operation).subscribe({\n next: observer.next.bind(observer),\n error: observer.error.bind(observer),\n complete: observer.complete.bind(observer),\n });\n })\n .catch(observer.error.bind(observer));\n return function () {\n closed = true;\n if (handle)\n handle.unsubscribe();\n };\n });\n });\n}\n//# sourceMappingURL=index.js.map","import axios from \"axios\";\nexport const generateToken = async () => {\n const URL = import.meta.env.VITE_TOKEN_URL;\n const clientId = import.meta.env.VITE_CLIENT_ID;\n const clientSecret = import.meta.env.VITE_CLIENT_SECRET;\n if (!URL || !clientId || !clientSecret) {\n console.error(\"Missing token credentials\");\n throw new Error(\"Missing token credentials\");\n }\n const authHeader = \"Basic \" +\n btoa(encodeURIComponent(clientId) + \":\" + encodeURIComponent(clientSecret));\n try {\n const response = await axios.post(URL, new URLSearchParams({ grant_type: \"client_credentials\" }), // Only grant_type in body\n {\n headers: {\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Authorization: authHeader,\n },\n });\n if (response.status === 200 && response.data.access_token) {\n return response.data.access_token;\n }\n else {\n console.error(\"Failed to fetch token:\", response.data);\n return null;\n }\n }\n catch (error) {\n if (axios.isAxiosError(error)) {\n console.error(\"Error fetching token:\", error.response || error.message);\n }\n else {\n console.error(\"Unexpected error:\", error);\n }\n return null;\n }\n};\n","import { ApolloClient, InMemoryCache, createHttpLink } from \"@apollo/client\";\nimport { setContext } from \"@apollo/client/link/context\";\nimport { generateToken } from \"../utils/generateToken\";\n\nconst BASE_URL = import.meta.env.VITE_BASE_URL;\n\nif (!BASE_URL) {\n console.error(\"Missing base URL\");\n throw new Error(\"Missing base URL\");\n}\n\nconst httpLink = createHttpLink({\n uri: `${BASE_URL}`,\n});\n\nconst authLink = setContext(async (_, { headers }) => {\n // Always get fresh token instead of storing it\n const token = await generateToken();\n\n return {\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n };\n});\n\nexport const apolloClient = new ApolloClient({\n link: authLink.concat(httpLink),\n cache: new InMemoryCache(),\n defaultOptions: {\n watchQuery: {\n fetchPolicy: \"cache-and-network\",\n },\n },\n});\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { ApolloProvider } from \"@apollo/client\";\nimport ReduxProvider from \"../provider/reduxProvider\";\nimport TanyaShoppingAssistantStream from \"./tanya-shopping-assistent\";\nimport { apolloClient } from \"../graphQL/apollo-client\";\n\nconst TanyaWrapper = (props: any) => {\n \n const { tanyaConfig } = props;\n return (\n <ApolloProvider client={apolloClient}>\n <ReduxProvider>\n <TanyaShoppingAssistantStream tanyaConfig={tanyaConfig} />\n </ReduxProvider>\n </ApolloProvider>\n );\n};\n\nexport default TanyaWrapper;\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\tconst providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n\tproviders.forEach((provider$1) => {\n\t\tconst prefixes = typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {});\n\t\tprefixes.forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\tconst storage = getStorage(provider, prefix);\n\treturn !!addIconSet(storage, data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\tconst result = {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n\treturn result;\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst icons = params.icons;\n\t\t\tconst iconsList = icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\tconst instance = {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n\treturn instance;\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tconst redundancy = initRedundancy(config);\n\t\tconst cachedReundancy = {\n\t\t\tconfig,\n\t\t\tredundancy\n\t\t};\n\t\tredundancyCache[provider] = cachedReundancy;\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst moduleKey = target.resources ? target.resources[0] : \"\";\n\t\t\tconst api = getAPIModule(moduleKey);\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tconst parsed = addIconSet(storage, data);\n\t\tif (!parsed.length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tconst response = customIconLoader(name, prefix, provider);\n\t\t\t\t\tparsePossiblyAsyncResponse(response, (data) => {\n\t\t\t\t\t\tconst iconSet = data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null;\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], iconSet);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst params = api.prepare(provider, prefix, valid);\n\t\t\tparams.forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n\tconst sortedIcons = sortIcons(cleanedIcons);\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tconst value = str.trim();\n\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n WebkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n ...defaultExtendedIconCustomisations,\n inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n // Get default properties\n const defaultProps = props.inline\n ? inlineDefaults\n : defaultExtendedIconCustomisations;\n // Get all customisations\n const customisations = mergeCustomisations(defaultProps, props);\n // Check mode\n const mode = props.mode || 'svg';\n // Create style\n const style = {};\n const customStyle = props.style || {};\n // Create SVG component properties\n const componentProps = {\n ...(mode === 'svg' ? svgDefaults : {}),\n };\n if (name) {\n const iconName = stringToIcon(name, false, true);\n if (iconName) {\n const classNames = ['iconify'];\n const props = [\n 'provider',\n 'prefix',\n ];\n for (const prop of props) {\n if (iconName[prop]) {\n classNames.push('iconify--' + iconName[prop]);\n }\n }\n componentProps.className = classNames.join(' ');\n }\n }\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'children':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'fallback':\n break;\n // Forward ref\n case '_ref':\n componentProps.ref = value;\n break;\n // Merge class names\n case 'className':\n componentProps[key] =\n (componentProps[key] ? componentProps[key] + ' ' : '') +\n value;\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: copy to style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n // Copy missing property if it does not exist in customisations\n default:\n if (defaultProps[key] === void 0) {\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add icon stuff\n componentProps.dangerouslySetInnerHTML = {\n __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n };\n return createElement('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return createElement('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\nfunction IconComponent(props) {\n const [mounted, setMounted] = useState(!!props.ssr);\n const [abort, setAbort] = useState({});\n // Get initial state\n function getInitialState(mounted) {\n if (mounted) {\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n return {\n name: '',\n data: name,\n };\n }\n const data = getIconData(name);\n if (data) {\n return {\n name,\n data,\n };\n }\n }\n return {\n name: '',\n };\n }\n const [state, setState] = useState(getInitialState(!!props.ssr));\n // Cancel loading\n function cleanup() {\n const callback = abort.callback;\n if (callback) {\n callback();\n setAbort({});\n }\n }\n // Change state if it is different\n function changeState(newState) {\n if (JSON.stringify(state) !== JSON.stringify(newState)) {\n cleanup();\n setState(newState);\n return true;\n }\n }\n // Update state\n function updateState() {\n var _a;\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n changeState({\n name: '',\n data: name,\n });\n return;\n }\n // New icon or got icon data\n const data = getIconData(name);\n if (changeState({\n name,\n data,\n })) {\n if (data === undefined) {\n // Load icon, update state when done\n const callback = loadIcons([name], updateState);\n setAbort({\n callback,\n });\n }\n else if (data) {\n // Icon data is available: trigger onLoad callback if present\n (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n }\n }\n }\n // Mounted state, cleanup for loader\n useEffect(() => {\n setMounted(true);\n return cleanup;\n }, []);\n // Icon changed or component mounted\n useEffect(() => {\n if (mounted) {\n updateState();\n }\n }, [props.icon, mounted]);\n // Render icon\n const { name, data } = state;\n if (!data) {\n return props.children\n ? props.children\n : props.fallback\n ? props.fallback\n : createElement('span', {});\n }\n return render({\n ...defaultIconProps,\n ...data,\n }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n ...props,\n _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n inline: true,\n ...props,\n _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\n/** -------- Variant helpers from your shared utilities -------- */\r\nexport const CURRENCY_PREF = \"USD\";\r\n\r\nexport const isVariantOnStock = (variant?: any): boolean => {\r\n const availability = variant?.availability;\r\n if (!availability) return false;\r\n const firstChannelAvail =\r\n availability.channels?.results?.[0]?.availability;\r\n\r\n if (firstChannelAvail) {\r\n return (\r\n firstChannelAvail.isOnStock === true &&\r\n (firstChannelAvail.availableQuantity ?? 0) > 0\r\n );\r\n }\r\n\r\n return false;\r\n};\r\n\r\n\r\n/** Prefer discounted price, prefer desired currency, with safe fallbacks */\r\nexport const pickVariantMoney = (variant: any, currencyPref = CURRENCY_PREF) => {\r\n const prices = variant?.prices ?? [];\r\n if (!prices.length) return null;\r\n\r\n const choose = (list: any[]): any => {\r\n const discountedFirst = list.find((p) => !!p.discounted?.value);\r\n if (discountedFirst) {\r\n return {\r\n cent: discountedFirst.discounted.value.centAmount,\r\n cur: discountedFirst.discounted.value.currencyCode,\r\n regularCent: discountedFirst.value?.centAmount,\r\n };\r\n }\r\n const normal = list[0]?.value;\r\n return normal ? { cent: normal.centAmount, cur: normal.currencyCode } : null;\r\n };\r\n\r\n const prefer = prices.filter(\r\n (p: any) => (p.discounted?.value || p.value)?.currencyCode === currencyPref\r\n );\r\n const picked = choose(prefer);\r\n if (picked) return picked;\r\n return choose(prices) || null;\r\n};\r\n\r\n/** Get attribute label (case-insensitive) */\r\nexport const getVariantAttributeLabel = (attributes: any[], name: string): string => {\r\n if (!Array.isArray(attributes)) return \"\";\r\n const attr =\r\n attributes.find((a) => a.name === name) ||\r\n attributes.find((a) => a.name?.toLowerCase() === name.toLowerCase());\r\n if (!attr || !attr.value) return \"\";\r\n return typeof attr.value === \"object\" ? attr.value.label || \"\" : attr.value;\r\n};\r\n\r\nexport const getVariantStyleAndLabel = (attributes: any[]) => {\r\n let sizeLabel = \"\";\r\n if (Array.isArray(attributes)) {\r\n const sizeAttr =\r\n attributes.find((a) => a.name === \"size\") ||\r\n attributes.find((a) => a.name === \"Size\");\r\n if (sizeAttr && sizeAttr.value) {\r\n sizeLabel =\r\n typeof sizeAttr.value === \"object\"\r\n ? sizeAttr.value.label || \"\"\r\n : sizeAttr.value;\r\n }\r\n }\r\n return { sizeLabel };\r\n};\r\n\r\nexport const getVariantColor = (v?: any) =>\r\n getVariantAttributeLabel(v?.attributesRaw ?? [], \"color\");\r\n\r\nexport const getVariantSize = (v?: any) =>\r\n getVariantStyleAndLabel(v?.attributesRaw ?? []).sizeLabel;\r\n\r\n/** Find matching variant by color/size */\r\nexport const findVariantBy = (variants: any[], color?: string | null, size?: string | null) => {\r\n for (const e of variants) {\r\n const c = getVariantColor(e.variant);\r\n const s = getVariantSize(e.variant);\r\n const colorOk = color ? c === color : true;\r\n const sizeOk = size ? s === size : true;\r\n if (colorOk && sizeOk) return e;\r\n }\r\n return null;\r\n};\r\n\r\nexport const getVariantAvailableQty = (variant: any): number | null => {\r\n if (!variant?.availability) return null;\r\n\r\n const channelResult =\r\n variant.availability.channels?.results &&\r\n variant.availability.channels.results[0];\r\n\r\n const channelQty = channelResult?.availability?.availableQuantity;\r\n\r\n if (typeof channelQty === \"number\") {\r\n return channelQty;\r\n }\r\n\r\n return null;\r\n};\r\n","/* eslint-disable @typescript-eslint/no-explicit-any */\r\nimport { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { Icon } from \"@iconify/react/dist/iconify.js\";\r\n// import { useCustomerAddress } from \"@/hooks/useAddress\";\r\n// import { useNavigate } from \"react-router\";\r\nimport {\r\n CURRENCY_PREF,\r\n getVariantColor,\r\n getVariantSize,\r\n findVariantBy,\r\n pickVariantMoney,\r\n} from \"./productVariantHelper\";\r\nimport { apiConfig } from \"../../config/api\";\r\nimport { getJWTToken, authData } from \"../../sfcc-apis/session\";\r\nimport { findImageGroupBy } from \"../lib/utils\";\r\n\r\ntype AgenticShoppingProps = {\r\n open: boolean;\r\n onClose: () => void;\r\n product: any;\r\n index?: number;\r\n addressListProp?: any;\r\n addressLoading?: boolean;\r\n variationAttributes: any;\r\n};\r\n\r\nconst initialCapital = (str: string) => {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n};\r\n\r\ntype DeliveryOptionKey = \"standard\" | \"express\" | \"sameday\";\r\n\r\nconst DELIVERY_OPTIONS: Record<\r\n DeliveryOptionKey,\r\n { label: string; fee: number; subtitle: string; icon: string }\r\n> = {\r\n standard: {\r\n label: \"Standard Delivery\",\r\n fee: 0,\r\n subtitle: \"Arrives in 4–6 days (Free)\",\r\n icon: \"mdi:clock-outline\",\r\n },\r\n express: {\r\n label: \"Express Delivery\",\r\n fee: 5,\r\n subtitle: \"Arrives in 1–2 days (+$5)\",\r\n icon: \"mdi:flash\",\r\n },\r\n sameday: {\r\n label: \"Same-Day Delivery\",\r\n fee: 10,\r\n subtitle: \"Available in select locations (+$10)\",\r\n icon: \"mdi:truck-fast-outline\",\r\n },\r\n};\r\n\r\nconst SHIPPING_METHOD_MAP: Record<DeliveryOptionKey, string> = {\r\n standard: \"GROUND\",\r\n express: \"2-DAY SHIPPING\",\r\n sameday: \"OVERNIGHT\",\r\n};\r\n\r\nconst formatCurrency = (amount: number, currency: string) => {\r\n try {\r\n return amount.toLocaleString(\"en-US\", {\r\n style: \"currency\",\r\n currency: currency || \"USD\",\r\n });\r\n } catch {\r\n return `${currency} ${amount.toFixed(2)}`;\r\n }\r\n};\r\n\r\n// ------------ any/any helpers ------------\r\nconst pvMaster = (p?: any): any | undefined => p?.masterVariant;\r\nconst pvVariants = (p?: any): any[] =>\r\n Array.isArray(p?.variants) ? p!.variants : [];\r\nconst pvAll = (p?: any): any[] => {\r\n const m = pvMaster(p);\r\n return m ? [m, ...pvVariants(p)] : pvVariants(p);\r\n};\r\n\r\nconst getVariantByIndex = (p: any, idx = 0): any | undefined => pvAll(p)[idx];\r\n\r\nconst getVariantImage = (v?: any) => v?.images?.[0]?.url ?? \"\";\r\n\r\n// any-aware image/title\r\nconst getProductImage = (p?: any, v?: any) =>\r\n getVariantImage(v) ||\r\n p.imageGroups?.[0]?.images?.[0]?.link ||\r\n p.image_groups?.[0]?.images?.[0]?.link ||\r\n \"\";\r\n\r\nconst getProductTitle = (p?: any) =>\r\n p?.name || (p as any)?.title || (p as any)?.productName || \"any\";\r\n\r\n/** any price via pickVariantMoney with safe fallbacks */\r\nconst getVariantPrice = (v?: any) => {\r\n const picked = v ? pickVariantMoney(v, CURRENCY_PREF) : null;\r\n if (picked?.cent && picked?.cur) {\r\n return {\r\n amount: +(picked.cent / 100),\r\n currency: picked.cur,\r\n regularAmount: picked.regularCent ? picked.regularCent / 100 : undefined,\r\n };\r\n }\r\n const cents = v?.prices?.[0]?.value?.centAmount;\r\n const cur = v?.prices?.[0]?.value?.currencyCode ?? CURRENCY_PREF;\r\n const amount = Number.isFinite(cents) ? +(Number(cents) / 100) : 0;\r\n return { amount, currency: cur };\r\n};\r\n\r\nconst getProductPrice = (p?: any, v?: any) => {\r\n const { amount } = getVariantPrice(v);\r\n if (amount) return amount;\r\n const val =\r\n (p as any)?.price ??\r\n (p as any)?.sellingPrice ??\r\n (p as any)?.unitPrice ??\r\n (p as any)?.mrp ??\r\n 0;\r\n const n = Number(val);\r\n return Number.isFinite(n) ? n : 0;\r\n};\r\n\r\nconst getProductSku = (p?: any) =>\r\n (p as any)?.sku || (p as any)?.variant?.sku || (p as any)?.selectedSku || \"\";\r\nconst getProductColor = (p?: any) =>\r\n (p as any)?.color ||\r\n (p as any)?.selectedColor ||\r\n (p as any)?.variant?.color ||\r\n \"\";\r\nconst getProductSize = (p?: any) =>\r\n (p as any)?.size ||\r\n (p as any)?.selectedSize ||\r\n (p as any)?.variant?.size ||\r\n \"\";\r\n\r\n// ----------------- Local Address Mapping -----------------\r\n// const mapGraphQLAddressToUI = (a: any) => {\r\n// const addressLine1 = [a?.streetNumber, a?.streetName]\r\n// .filter(Boolean)\r\n// .join(\" \")\r\n// .trim();\r\n// const addressLine2 = a?.building ?? \"\";\r\n// return {\r\n// ...a,\r\n// addressId: String(a?.id ?? a?.addressId ?? \"\"),\r\n// addressLine1,\r\n// addressLine2,\r\n// street: \"\",\r\n// city: a?.city ?? \"\",\r\n// state: a?.state ?? \"\",\r\n// postalCode: a?.postalCode ?? \"\",\r\n// country: a?.country ?? \"\",\r\n// firstName: a?.firstName ?? \"\",\r\n// lastName: a?.lastName ?? \"\",\r\n// phone: a?.phone ?? \"\",\r\n// email: a?.email ?? \"\",\r\n// } as any;\r\n// };\r\n\r\n// ----------------- Chat Types -----------------\r\ntype Stage =\r\n | \"initial\"\r\n | \"address\"\r\n | \"delivery\"\r\n | \"payment\"\r\n | \"final\"\r\n | \"success\";\r\ntype ChatItem = {\r\n query: string;\r\n response: string;\r\n snapshotStage?: Stage;\r\n snapshotPayload?: any;\r\n};\r\ntype ContextItem = {\r\n userQuery: string;\r\n mainResponse: string;\r\n keywords: string;\r\n};\r\nconst MAX_CONTEXT_ITEMS = 20;\r\n\r\ntype VariantEntry = { index: number; variant: any; images: string[] };\r\n\r\nconst AgenticShopping = ({\r\n open,\r\n onClose,\r\n product,\r\n index,\r\n addressListProp,\r\n addressLoading,\r\n variationAttributes,\r\n}: AgenticShoppingProps) => {\r\n const cachedToken: any = null;\r\n const tokenExpiry: any = null;\r\n\r\n const allVariants = pvAll(product);\r\n const safeInitialIdx = Math.min(\r\n Math.max(0, index || 0),\r\n Math.max(0, allVariants.length - 1)\r\n );\r\n const [variantsByColor, setVariantsByColor] = useState([]);\r\n const [selectedVariantIndex, setSelectedVariantIndex] = useState(0);\r\n\r\n useEffect(() => {\r\n if (product?.variants) {\r\n const grouped = groupVariantsByColor(\r\n product.variants,\r\n product.imageGroups,\r\n variationAttributes\r\n );\r\n setVariantsByColor(grouped);\r\n }\r\n }, [product]);\r\n\r\n const groupVariantsByColor = (\r\n variants: any[],\r\n imageGroups: any[],\r\n variationAttributes: any[]\r\n ) => {\r\n const { colorMap, sizeMap } = buildVariationMaps(variationAttributes);\r\n\r\n // 1️⃣ Prepare image map\r\n const imagesByColor: any = {};\r\n\r\n imageGroups?.forEach((group) => {\r\n const colorAttr = group.variationAttributes?.find(\r\n (a) => a.id === \"color\"\r\n );\r\n\r\n const colorCode = colorAttr?.values?.[0]?.value;\r\n if (!colorCode) return;\r\n\r\n if (!imagesByColor[colorCode]) {\r\n imagesByColor[colorCode] = {};\r\n }\r\n\r\n imagesByColor[colorCode][group.viewType] = group.images;\r\n });\r\n\r\n // 2️⃣ Group variants\r\n const map = variants.reduce((acc: any, item: any) => {\r\n const colorCode = item.variationValues.color;\r\n const sizeCode = item.variationValues.size;\r\n\r\n if (!acc[colorCode]) {\r\n acc[colorCode] = {\r\n color: colorCode,\r\n name: colorMap[colorCode] || colorCode, // ✅ DISPLAY NAME\r\n images: imagesByColor[colorCode] || {},\r\n variants: [],\r\n };\r\n }\r\n\r\n acc[colorCode].variants.push({\r\n size: sizeCode,\r\n name: sizeMap[sizeCode] || sizeCode, // ✅ DISPLAY NAME\r\n ...item,\r\n });\r\n\r\n return acc;\r\n }, {});\r\n\r\n // 3️⃣ Sort\r\n return Object.values(map)\r\n .sort((a: any, b: any) => {\r\n const nameA = a.colorName || a.color || \"\";\r\n const nameB = b.colorName || b.color || \"\";\r\n return nameA.localeCompare(nameB);\r\n })\r\n .map((entry: any) => ({\r\n ...entry,\r\n variants: entry.variants.sort(\r\n (a: any, b: any) => Number(a.size) - Number(b.size)\r\n ),\r\n }));\r\n };\r\n\r\n const buildVariationMaps = (variationAttributes: any[]) => {\r\n const colorMap: Record<string, string> = {};\r\n const sizeMap: Record<string, string> = {};\r\n\r\n variationAttributes?.forEach((attr) => {\r\n if (attr.id === \"color\") {\r\n attr.values.forEach((v) => {\r\n colorMap[v.value] = v.name; // JJ169XX → Black\r\n });\r\n }\r\n\r\n if (attr.id === \"size\") {\r\n attr.values.forEach((v) => {\r\n sizeMap[v.value] = v.name; // 004 → 4\r\n });\r\n }\r\n });\r\n\r\n return { colorMap, sizeMap };\r\n };\r\n\r\n const variantCount = allVariants.length;\r\n\r\n const [selectedVariantIdx, setSelectedVariantIdx] =\r\n useState<number>(safeInitialIdx);\r\n\r\n // PDP-like picked color/size state\r\n const [pickedColor, setPickedColor] = useState<string | null>(null);\r\n const [pickedSize, setPickedSize] = useState<string | null>(null);\r\n const masterColorRef = useRef<string | null>(null);\r\n const masterSizeRef = useRef<string | null>(null);\r\n // const navigate = useNavigate();\r\n const selectedVariant = getVariantByIndex(product, selectedVariantIdx);\r\n\r\n // flow gating states\r\n const [pendingQuery, setPendingQuery] = useState<string>(\"\");\r\n const [showProceedConfirm, setShowProceedConfirm] = useState<boolean>(false);\r\n const [showVariantPicker, setShowVariantPicker] = useState<boolean>(false);\r\n\r\n // ------------- Chat & flow state -------------\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [inputText, setInputText] = useState(\"\");\r\n const [chatLocked, setChatLocked] = useState(false);\r\n const [extractedDetails, setExtractedDetails] = useState<any | null>(null);\r\n\r\n const [chatHistory, setChatHistory] = useState<ChatItem[]>([]);\r\n const [contextHistory, setContextHistory] = useState<ContextItem[]>([]);\r\n\r\n // address + delivery state\r\n const [addressList, setAddressList] = useState<any[]>([]);\r\n const [showAddressSelection, setShowAddressSelection] = useState(false);\r\n const [selectedAddressId, setSelectedAddressId] = useState<\r\n string | undefined\r\n >();\r\n const [confirmButton, SetConfirmButton] = useState(true);\r\n const [addressSubmitted, setAddressSubmitted] = useState(false);\r\n\r\n const [showDeliveryOptions, setShowDeliveryOptions] = useState(false);\r\n const [selectedDelivery, setSelectedDelivery] =\r\n useState<DeliveryOptionKey>(\"standard\");\r\n const [deliverySubmitted, setDeliverySubmitted] = useState(false);\r\n\r\n // payment state\r\n type PaymentMethodKey = \"card\";\r\n const [showPaymentOptions, setShowPaymentOptions] = useState(false);\r\n const [selectedPayment, setSelectedPayment] =\r\n useState<PaymentMethodKey>(\"card\");\r\n const [paymentSubmitted, setPaymentSubmitted] = useState(false);\r\n\r\n const [showFinalSummary, setShowFinalSummary] = useState(false);\r\n const [confirmSuccess, setConfirmSuccess] = useState(false);\r\n const [intentMandateId, setIntentMandateId] = useState<string | null>(null);\r\n\r\n const [feedbackRating, setFeedbackRating] = useState<number | null>(null);\r\n const [feedbackComment, setFeedbackComment] = useState(\"\");\r\n const [feedbackSubmitted, setFeedbackSubmitted] = useState(false);\r\n const [selectedVariantProductId, setSelectedVariantProductId] = useState<\r\n string | null\r\n >(product?.id);\r\n\r\n const scrollRef = useRef<HTMLDivElement>(null);\r\n\r\n // GraphQL address hook\r\n // const {\r\n // getCustomerAddresses,\r\n // addresses: hookAddresses,\r\n // loading: addressLoading,\r\n // } = useCustomerAddress();\r\n\r\n // Normalize addresses\r\n // useEffect(() => {\r\n // if (!Array.isArray(hookAddresses)) return;\r\n // const normalized = hookAddresses.map(mapGraphQLAddressToUI);\r\n // setAddressList((prev) => {\r\n // if (\r\n // prev.length === normalized.length &&\r\n // prev.every(\r\n // (p, i) =>\r\n // String((p as any).addressId) ===\r\n // String((normalized[i] as any).addressId)\r\n // )\r\n // ) {\r\n // return prev;\r\n // }\r\n // return normalized;\r\n // });\r\n // }, [hookAddresses]);\r\n\r\n // seed defaults from master on product/index change\r\n useEffect(() => {\r\n const all = pvAll(product);\r\n const bounded = Math.min(\r\n Math.max(0, index || 0),\r\n Math.max(0, all.length - 1)\r\n );\r\n setSelectedVariantIdx(bounded);\r\n\r\n const m = pvMaster(product);\r\n const mColor = getVariantColor(m);\r\n const mSize = getVariantSize(m);\r\n\r\n masterColorRef.current = mColor || null;\r\n masterSizeRef.current = mSize || null;\r\n setPickedColor(mColor || null);\r\n setPickedSize(mSize || null);\r\n }, [index, product]);\r\n\r\n // scroll to bottom on changes\r\n useEffect(() => {\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = scrollRef.current.scrollHeight;\r\n }\r\n }, [\r\n chatHistory,\r\n showAddressSelection,\r\n addressSubmitted,\r\n showDeliveryOptions,\r\n deliverySubmitted,\r\n showPaymentOptions,\r\n paymentSubmitted,\r\n showFinalSummary,\r\n confirmSuccess,\r\n showProceedConfirm,\r\n showVariantPicker,\r\n ]);\r\n\r\n // --------------------- UI helpers (theme) ---------------------\r\n const themeColor = \"var(--tanya)\";\r\n const themeDark = \"var(--tanya-contrast)\";\r\n const theme = themeColor || \"#16a34a\";\r\n const themeHeaderBg = \"#804c9e\";\r\n\r\n const handleFeedbackSubmit = () => {\r\n console.log(\"AgenticShopping feedback:\", {\r\n rating: feedbackRating,\r\n comment: feedbackComment,\r\n });\r\n setFeedbackSubmitted(true);\r\n };\r\n\r\n const handleFeedbackCancel = () => {\r\n setFeedbackRating(null);\r\n setFeedbackComment(\"\");\r\n setFeedbackSubmitted(true);\r\n };\r\n\r\n // --------------------- Snapshots ---------------------\r\n const renderSuccessSnapshot = (payload?: any) => {\r\n const idFromPayload =\r\n payload?.intentMandateId ||\r\n payload?.intent_mandate_id ||\r\n payload?.id ||\r\n null;\r\n\r\n const id = idFromPayload ?? intentMandateId;\r\n if (!open) return null;\r\n\r\n return (\r\n <div className=\"mt-3 flex items-start gap-3 rounded-lg border border-green-200 bg-green-50 p-4 text-green-800\">\r\n <div className=\"success-tick-animation\">\r\n <Icon icon=\"mdi:check-circle\" width=\"28\" color=\"#16a34a\" />\r\n </div>\r\n <div className=\"text-sm w-full\">\r\n <div className=\"font-semibold\">Success!</div>\r\n <div>\r\n Your smart order has been saved. I’ll watch the price and\r\n auto-purchase when the conditions are met.\r\n </div>\r\n\r\n {id && (\r\n <div className=\"mt-2 text-xs font-medium\">\r\n Your Smart Order ID:&nbsp;\r\n <span\r\n className=\"font-semibold text-blue-600 cursor-pointer underline\"\r\n // onClick={() => navigate(`/smart-order-detail/${id}`)}\r\n >\r\n {id}\r\n </span>\r\n </div>\r\n )}\r\n\r\n {!feedbackSubmitted && (\r\n <div className=\"mt-4 rounded-lg bg-white/70 p-3 text-gray-900\">\r\n <h4 className=\"font-semibold mb-1\">\r\n Please post your feedback here\r\n </h4>\r\n\r\n <p className=\"text-sm text-gray-700 mb-3\">\r\n Rate us on how much our response was helpful\r\n </p>\r\n\r\n <div className=\"flex items-center gap-1 mb-3\">\r\n {[1, 2, 3, 4, 5].map((star) => (\r\n <button\r\n key={star}\r\n type=\"button\"\r\n onClick={() => setFeedbackRating(star)}\r\n className=\"p-0.5\"\r\n >\r\n <Icon\r\n icon={\r\n feedbackRating && feedbackRating >= star\r\n ? \"mdi:star\"\r\n : \"mdi:star-outline\"\r\n }\r\n width=\"20\"\r\n className=\"text-yellow-500\"\r\n />\r\n </button>\r\n ))}\r\n </div>\r\n\r\n <label className=\"block text-sm text-gray-700 mb-1\">\r\n Tell us more about the response\r\n </label>\r\n <textarea\r\n value={feedbackComment}\r\n onChange={(e) => setFeedbackComment(e.target.value)}\r\n rows={3}\r\n className=\"mt-1 w-full rounded-md border border-gray-300 p-2 text-sm outline-none focus:ring-1 focus:ring-gray-300\"\r\n placeholder=\"Your feedback helps us improve...\"\r\n />\r\n\r\n <div className=\"mt-3 flex justify-end gap-2\">\r\n <button\r\n type=\"button\"\r\n onClick={handleFeedbackCancel}\r\n className=\"px-4 py-2 rounded-full border text-sm font-medium hover:bg-gray-50\"\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n type=\"button\"\r\n onClick={handleFeedbackSubmit}\r\n className=\"px-4 py-2 rounded-full text-sm font-semibold text-white shadow\"\r\n style={{ background: themeColor }}\r\n disabled={!feedbackRating && !feedbackComment.trim()}\r\n >\r\n Submit\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {feedbackSubmitted && (\r\n <div className=\"mt-3 text-xs text-green-900 font-medium\">\r\n Thanks for your feedback! 💚\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const getAllAddresses = async () => {\r\n try {\r\n // const fetched = await getCustomerAddresses();\r\n // const normalized = (fetched || []).map(mapGraphQLAddressToUI);\r\n setAddressList(addressListProp);\r\n } catch (error) {\r\n console.error(\"Error fetching addresses:\", error);\r\n }\r\n };\r\n\r\n const snapshotToHistory = (stage: Stage, payload: any) => {\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__SNAPSHOT__\",\r\n snapshotStage: stage,\r\n snapshotPayload: payload,\r\n },\r\n ]);\r\n };\r\n\r\n const finalizeLiveCards = (stage?: Stage, payload?: any) => {\r\n setChatHistory((prev) =>\r\n prev.map((m) =>\r\n m.response === \"__CARD__\"\r\n ? {\r\n ...m,\r\n response: \"__SNAPSHOT__\",\r\n snapshotStage: stage ?? m.snapshotStage,\r\n snapshotPayload: payload ?? m.snapshotPayload,\r\n }\r\n : m\r\n )\r\n );\r\n };\r\n\r\n const removeAllAssistantLiveRows = () => {\r\n setChatHistory((prev) =>\r\n prev.filter(\r\n (m) =>\r\n !(\r\n m.query === \"\" &&\r\n m.response !== \"__SNAPSHOT__\" &&\r\n m.response !== \"__TEXT__\"\r\n )\r\n )\r\n );\r\n };\r\n\r\n const hardResetLive = () => {\r\n setShowFinalSummary(false);\r\n setShowAddressSelection(false);\r\n setShowDeliveryOptions(false);\r\n setShowPaymentOptions(false);\r\n setAddressSubmitted(false);\r\n setDeliverySubmitted(false);\r\n setPaymentSubmitted(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n setExtractedDetails(null);\r\n removeAllAssistantLiveRows();\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(false);\r\n };\r\n\r\n const resetFlowStateForNewQuery = () => {\r\n setShowAddressSelection(false);\r\n setAddressSubmitted(false);\r\n setShowDeliveryOptions(false);\r\n setSelectedDelivery(\"standard\");\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setSelectedPayment(\"card\");\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n SetConfirmButton(true);\r\n setExtractedDetails(null);\r\n\r\n localStorage.removeItem(\"agentic_order\");\r\n localStorage.removeItem(\"agentic_order_address\");\r\n localStorage.removeItem(\"agentic_order_delivery\");\r\n localStorage.removeItem(\"agentic_order_payment\");\r\n localStorage.removeItem(\"agentic_order_final\");\r\n };\r\n\r\n const variantEntries: VariantEntry[] = useMemo(() => {\r\n const all = pvAll(product);\r\n return all.map((v, i) => ({\r\n index: i,\r\n variant: v,\r\n images: (v?.images || [])\r\n .map((img: any) => img?.url || \"\")\r\n .filter(Boolean),\r\n }));\r\n }, [product]);\r\n\r\n const hasMatchingVariant = useMemo(() => {\r\n if (!variantEntries.length) return false;\r\n\r\n const color = pickedColor || undefined;\r\n const size = pickedSize || undefined;\r\n\r\n // const resolveFor = (c?: string | null, s?: string | null) => {\r\n // const combo = findVariantBy(\r\n // variantEntries,\r\n // c || undefined,\r\n // s || undefined\r\n // );\r\n // return !!(combo && combo.variant?.sku);\r\n // };\r\n\r\n // if (color && size) return resolveFor(color, size);\r\n // if (color && !size) return resolveFor(color, null);\r\n // if (!color && size) return resolveFor(undefined, size);\r\n\r\n if (color && size) return true;\r\n else return false;\r\n }, [variantEntries, pickedColor, pickedSize, selectedVariant]);\r\n\r\n const isInputDisabled = isLoading || chatLocked || !hasMatchingVariant;\r\n\r\n // ---------- PRICE HELPERS ----------\r\n const getQuantity = (details?: any) => {\r\n const q = Number(details?.quantity ?? 1);\r\n return Number.isFinite(q) && q > 0 ? q : 1;\r\n };\r\n\r\n const computeProductTotalWithFallback = (details?: any) => {\r\n const quantity = getQuantity(details);\r\n const minor = Number(details?.max_price_minor ?? 0);\r\n const hasValidMinor = Number.isFinite(minor) && minor > 0;\r\n if (hasValidMinor) {\r\n return +(minor / 100);\r\n }\r\n const unitPrice = getProductPrice(product, selectedVariant);\r\n return +(unitPrice * quantity);\r\n };\r\n\r\n const computeSummary = (currencyArg?: string) => {\r\n const source = extractedDetails;\r\n const variantPrice = getVariantPrice(selectedVariant);\r\n const currency =\r\n currencyArg || source?.currency || variantPrice.currency || CURRENCY_PREF;\r\n const product_total = computeProductTotalWithFallback(source);\r\n const tax = +(product_total * 0.08).toFixed(2);\r\n const shipping_fee = DELIVERY_OPTIONS[selectedDelivery]?.fee || 0;\r\n return { product_total, tax, shipping_fee, currency };\r\n };\r\n\r\n const startFlowWithSku = async (\r\n query: string,\r\n sku: string,\r\n variantIndex: number\r\n ) => {\r\n finalizeLiveCards();\r\n resetFlowStateForNewQuery();\r\n\r\n setIsLoading(true);\r\n setChatLocked(true);\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(false);\r\n\r\n const contextToSend = contextHistory.slice(-MAX_CONTEXT_ITEMS);\r\n\r\n try {\r\n const token = await getJWTToken(cachedToken, tokenExpiry);\r\n if (!token) throw new Error(\"Failed to fetch token\");\r\n\r\n const user = localStorage.getItem(\"customerNumber\");\r\n const isLoggedIn = localStorage.getItem(\"isLoggedIn\");\r\n const queryParams = new URLSearchParams({\r\n registered: String(isLoggedIn || false),\r\n userId: String(user || new Date().getTime()),\r\n });\r\n const invokeUrl = `https://tanya.aspiresystems.com/api/bedrock/invoke/stream?${queryParams.toString()}`;\r\n\r\n const response = await fetch(`${invokeUrl}`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify({\r\n flowId: \"MTMI0P4LC6\",\r\n flowAliasId: \"BCUA138F2Q\",\r\n input: {\r\n instruction: `Use SKU ${sku}. Currency is USD. ${query}`,\r\n metadata: {\r\n productId: (product as any)?.id ?? null,\r\n skuId: sku ?? null,\r\n variantIndex,\r\n },\r\n context: contextToSend,\r\n },\r\n }),\r\n });\r\n\r\n if (!response.body) throw new Error(\"Readable stream not supported\");\r\n\r\n const reader = response.body.getReader();\r\n const decoder = new TextDecoder();\r\n let buffer = \"\";\r\n\r\n let finalResponse = \"\";\r\n let finalKeywords = \"\";\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (!line.startsWith(\"data:\")) continue;\r\n const jsonData = line.slice(5).trim();\r\n try {\r\n const parsed = JSON.parse(jsonData);\r\n const idx = parsed.index;\r\n const data = parsed.data;\r\n\r\n if (idx === 0) {\r\n finalResponse = String(data ?? \"\");\r\n } else if (idx === 1) {\r\n finalKeywords = String(data ?? \"\");\r\n }\r\n } catch (err) {\r\n console.error(\"Error parsing JSON chunk:\", err);\r\n }\r\n }\r\n }\r\n\r\n let extracted: any | null = null;\r\n if (finalResponse) {\r\n const maybeJson = String(finalResponse).replace(/\\\\n/g, \"\").trim();\r\n if (maybeJson.startsWith(\"{\") && maybeJson.endsWith(\"}\")) {\r\n try {\r\n extracted = JSON.parse(maybeJson);\r\n extracted.product_id = sku;\r\n extracted.sku_id = sku;\r\n localStorage.setItem(\"agentic_order\", JSON.stringify(extracted));\r\n } catch (err: any) {\r\n console.log(err);\r\n }\r\n }\r\n }\r\n\r\n setExtractedDetails(extracted);\r\n\r\n if (extracted) {\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__CARD__\",\r\n snapshotPayload: { extractedDetails: extracted },\r\n },\r\n ]);\r\n }\r\n\r\n setContextHistory((prev) => {\r\n const next = [\r\n ...prev,\r\n {\r\n userQuery: query,\r\n mainResponse: finalResponse || \"\",\r\n keywords: finalKeywords || \"\",\r\n },\r\n ];\r\n return next.slice(-MAX_CONTEXT_ITEMS);\r\n });\r\n } catch (error) {\r\n console.error(\"Error sending message to Tanya:\", error);\r\n setChatLocked(false);\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n // -------------------- Handlers (flow) --------------------\r\n const handleSendMessage = async (question?: string) => {\r\n if (chatLocked || isLoading || !hasMatchingVariant) return;\r\n const newQuery = question || inputText.trim();\r\n if (!newQuery) return;\r\n\r\n setChatHistory((prev) => [...prev, { query: newQuery, response: \"\" }]);\r\n setInputText(\"\");\r\n\r\n setPendingQuery(newQuery);\r\n const sku = selectedVariantProductId || \"\";\r\n\r\n // Single-variant or master-only: go directly\r\n if (variantCount <= 1) {\r\n if (sku) {\r\n startFlowWithSku(newQuery, sku, selectedVariantIdx);\r\n return;\r\n }\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n return;\r\n }\r\n\r\n // Multiple variants: ask confirmation\r\n if (sku) {\r\n setShowProceedConfirm(true);\r\n setChatLocked(true);\r\n } else {\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n }\r\n };\r\n\r\n const handleConfirmProceedYes = () => {\r\n const sku = selectedVariantProductId;\r\n if (!sku) return;\r\n startFlowWithSku(pendingQuery, sku, selectedVariantIdx);\r\n };\r\n\r\n const handleConfirmProceedNo = () => {\r\n setShowProceedConfirm(false);\r\n setShowVariantPicker(true);\r\n setChatLocked(true);\r\n };\r\n\r\n const handleVariantSubmitAfterNo = () => {\r\n if (!selectedVariantProductId) return;\r\n const sku = selectedVariantProductId;\r\n startFlowWithSku(pendingQuery, sku, selectedVariantIdx);\r\n };\r\n\r\n // ---------- address/delivery/payment ----------\r\n const handleYesLockItIn = async () => {\r\n setShowAddressSelection(true);\r\n setShowDeliveryOptions(false);\r\n setShowPaymentOptions(false);\r\n setShowFinalSummary(false);\r\n setAddressSubmitted(false);\r\n setDeliverySubmitted(false);\r\n setPaymentSubmitted(false);\r\n setConfirmSuccess(false);\r\n await getAllAddresses();\r\n\r\n finalizeLiveCards(\"initial\", {\r\n extractedDetails: extractedDetails ?? undefined,\r\n });\r\n };\r\n\r\n const handleSubmitAddress = () => {\r\n if (!selectedAddressId) return;\r\n const selected =\r\n addressList.find(\r\n (a: any) =>\r\n String((a as any).addressId ?? (a as any).id) === selectedAddressId\r\n ) || null;\r\n if (!selected) return;\r\n\r\n localStorage.setItem(\"agentic_order_address\", JSON.stringify(selected));\r\n setAddressSubmitted(true);\r\n setShowDeliveryOptions(true);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"address\", selected);\r\n };\r\n\r\n const handleChangeAddress = () => {\r\n setAddressSubmitted(false);\r\n setShowDeliveryOptions(false);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_address\");\r\n };\r\n\r\n const handleSubmitDelivery = () => {\r\n if (!selectedDelivery) return;\r\n localStorage.setItem(\"agentic_order_delivery\", selectedDelivery);\r\n setDeliverySubmitted(true);\r\n setShowPaymentOptions(true);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"delivery\", {\r\n method: selectedDelivery,\r\n ...DELIVERY_OPTIONS[selectedDelivery],\r\n });\r\n };\r\n\r\n const handleCancelDelivery = () => {\r\n setShowDeliveryOptions(false);\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n const handleChangeDelivery = () => {\r\n setDeliverySubmitted(false);\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_delivery\");\r\n };\r\n\r\n const handleSubmitPayment = () => {\r\n if (!selectedPayment) return;\r\n localStorage.setItem(\"agentic_order_payment\", selectedPayment);\r\n setPaymentSubmitted(true);\r\n setShowFinalSummary(true);\r\n setConfirmSuccess(false);\r\n\r\n snapshotToHistory(\"payment\", { method: selectedPayment });\r\n };\r\n\r\n const handleCancelPayment = () => {\r\n setShowPaymentOptions(false);\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n setChatLocked(false);\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n const handleChangePayment = () => {\r\n setPaymentSubmitted(false);\r\n setShowFinalSummary(false);\r\n setConfirmSuccess(false);\r\n localStorage.removeItem(\"agentic_order_payment\");\r\n };\r\n\r\n const handleConfirmWatch = async () => {\r\n try {\r\n setIsLoading(true);\r\n\r\n const order = extractedDetails || {};\r\n const chosenAddress = JSON.parse(\r\n localStorage.getItem(\"agentic_order_address\") || \"null\"\r\n );\r\n const chosenDelivery = localStorage.getItem(\r\n \"agentic_order_delivery\"\r\n ) as DeliveryOptionKey | null;\r\n const chosenPayment =\r\n localStorage.getItem(\"agentic_order_payment\") || \"card\";\r\n\r\n const { product_total, tax, shipping_fee, currency } = computeSummary();\r\n\r\n const shopperId =\r\n order.shopper_id || localStorage.getItem(\"customerId\") || undefined;\r\n\r\n const shippingAddressId =\r\n chosenAddress?.addressId || chosenAddress?.id || undefined;\r\n\r\n const shippingMethodId = chosenDelivery\r\n ? SHIPPING_METHOD_MAP[chosenDelivery]\r\n : \"GROUND\";\r\n\r\n const paymentMethodId = \"card-visa\";\r\n\r\n const sku = selectedVariant?.sku;\r\n const productId = (product as any)?.id || \"\";\r\n\r\n const quantity = getQuantity(order);\r\n const maxPriceMinor =\r\n typeof order.max_price_minor === \"number\"\r\n ? order.max_price_minor\r\n : Math.round(product_total * 100);\r\n\r\n const platform = \"SFCC\";\r\n const storeCode = \"Sites-SiteGenesis-Site\";\r\n\r\n const intentMandatePayload = {\r\n shopper_id: shopperId,\r\n shipping_address_id: shippingAddressId,\r\n shipping_method_id: shippingMethodId,\r\n payment_method_id: paymentMethodId,\r\n sku: sku,\r\n platform,\r\n storeCode,\r\n product_id: productId,\r\n quantity,\r\n max_price_minor: maxPriceMinor,\r\n currency,\r\n instruction_text: pendingQuery,\r\n };\r\n\r\n if (!shopperId || !shippingAddressId) {\r\n console.error(\r\n \"Missing shopper_id or shipping_address_id for intent-mandate\",\r\n {\r\n shopperId,\r\n shippingAddressId,\r\n }\r\n );\r\n alert(\r\n \"Missing customer or address information. Please re-select address and try again.\"\r\n );\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const tokenData = await authData();\r\n const token = tokenData.access_token;\r\n if (!token) {\r\n throw new Error(\"Failed to fetch auth token for intent-mandate\");\r\n }\r\n const { serverUrl } = apiConfig();\r\n const response = await fetch(`${serverUrl}/api/intent-mandate`, {\r\n method: \"POST\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: `Bearer ${token}`,\r\n },\r\n body: JSON.stringify(intentMandatePayload),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorBody = await response.text().catch(() => \"\");\r\n console.error(\"intent-mandate failed\", response.status, errorBody);\r\n alert(\r\n \"Something went wrong while saving your smart order. Please try again.\"\r\n );\r\n setIsLoading(false);\r\n return;\r\n }\r\n\r\n const apiResult = await response.json().catch(() => null);\r\n console.log(\"intent-mandate success:\", apiResult);\r\n\r\n const mandateId =\r\n apiResult?.intent_mandate_id ||\r\n apiResult?.intent_mandateId ||\r\n apiResult?.key ||\r\n null;\r\n\r\n if (mandateId) {\r\n setIntentMandateId(mandateId);\r\n }\r\n\r\n const finalPayload = {\r\n ...order,\r\n address: chosenAddress,\r\n delivery: chosenDelivery,\r\n payment: chosenPayment,\r\n summary: { product_total, tax, shipping_fee, currency },\r\n intent_mandate_id: mandateId,\r\n };\r\n\r\n localStorage.setItem(\"agentic_order_final\", JSON.stringify(finalPayload));\r\n\r\n setConfirmSuccess(true);\r\n SetConfirmButton(false);\r\n\r\n snapshotToHistory(\"final\", finalPayload);\r\n snapshotToHistory(\"success\", { intentMandateId: mandateId });\r\n hardResetLive();\r\n } catch (err) {\r\n console.error(\"Error in handleConfirmWatch / intent-mandate:\", err);\r\n alert(\r\n \"Unable to complete your smart order right now. Please try again in a moment.\"\r\n );\r\n } finally {\r\n setIsLoading(false);\r\n }\r\n };\r\n\r\n const handleCancelWatch = () => {\r\n hardResetLive();\r\n setChatHistory((prev) => [\r\n ...prev,\r\n {\r\n query: \"\",\r\n response: \"__TEXT__\",\r\n snapshotPayload: {\r\n text: \"No worries! I’ve cancelled this request. You can start again anytime — just tell me what you’d like to buy or track\",\r\n },\r\n },\r\n ]);\r\n };\r\n\r\n // ---------- any Summary Card ----------\r\n const ProductSummaryCard = ({ selectedIndex }) => {\r\n const img =\r\n variantsByColor[selectedIndex]?.images.large[0].link ||\r\n getProductImage(product, selectedVariant);\r\n const title = getProductTitle(product);\r\n\r\n const skuCode = selectedVariantProductId || \"\";\r\n const color = getVariantColor(selectedVariant) || \"\";\r\n const size = getVariantSize(selectedVariant) || \"\";\r\n\r\n const { amount: unitPrice } = getVariantPrice(selectedVariant);\r\n const hasSku = Boolean(product?.id);\r\n const inStock = hasSku;\r\n // selectedVariant && hasSku ? isVariantOnStock(selectedVariant) : false;\r\n\r\n return (\r\n <div className=\"mx-4 mt-2 rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex flex-col sm:flex-row items-center sm:items-center gap-4\">\r\n <div className=\"flex-shrink-0 flex justify-center sm:justify-start\">\r\n <div className=\"w-[150px] h-[150px] rounded-lg bg-gray-50 border border-gray-200 flex items-center justify-center overflow-hidden\">\r\n {img ? (\r\n <img\r\n src={img}\r\n alt={title}\r\n className=\"object-contain w-full h-full\"\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"mdi:image-outline\"\r\n width=\"28\"\r\n className=\"opacity-60\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"flex-grow flex flex-col justify-center text-center\">\r\n <div className=\"text-2xl font-bold text-gray-900 mb-1\">{title}</div>\r\n <div className=\"text-sm text-gray-700 mb-1\">\r\n {[\r\n skuCode && `SKU: ${skuCode}`,\r\n color && `Color: ${color}`,\r\n size && `Size: ${size}`,\r\n ]\r\n .filter(Boolean)\r\n .join(\" • \") || \"—\"}\r\n </div>\r\n <div className=\"mt-1 text-xl font-semibold text-gray-900\">\r\n {hasSku\r\n ? // ? formatCurrency(Number(unitPrice) || 0, CURRENCY_PREF)\r\n `$${product.price}`\r\n : \"Currently unavailable\"}\r\n </div>\r\n {hasSku && !inStock && (\r\n <div className=\"mt-1 text-xs font-medium text-red-600\">\r\n Currently out of stock\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- any Selector Card ----------\r\n const VariantSelectorCard = ({\r\n showSubmit = true,\r\n }: {\r\n showSubmit?: boolean;\r\n }) => {\r\n const byColor: Record<string, true> = {};\r\n const colors = variantEntries\r\n .map((e) => getVariantColor(e.variant))\r\n .filter((c): c is string => !!c && !byColor[c] && (byColor[c] = true));\r\n\r\n const bySize: Record<string, true> = {};\r\n const sizes = variantEntries\r\n .map((e) => getVariantSize(e.variant))\r\n .filter((s): s is string => !!s && !bySize[s] && (bySize[s] = true));\r\n\r\n return (\r\n <div className=\"mx-4 mt-4 mb-2 rounded-xl border border-gray-200 bg-white p-4 animate-fade-in\">\r\n <h3 className=\"font-semibold text-gray-800\">Choose a variant</h3>\r\n {/* COLOR SECTION */}\r\n <div className=\"mt-4\">\r\n <div className=\"flex items-baseline gap-2\">\r\n <div className=\"text-sm font-bold\">Color :</div>\r\n {pickedColor && (\r\n <div className=\"text-sm text-gray-600\">{pickedColor}</div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-4 mt-2\">\r\n {variantsByColor.map((group, index) => {\r\n const color = group.name;\r\n const isSelected = pickedColor === color;\r\n const swatch =\r\n group.images.large[0].disBaseLink || group.images.large[0].link;\r\n\r\n return (\r\n <div\r\n key={color}\r\n className={`flex flex-col items-center w-28 border rounded-md p-2\r\n ${isSelected ? \"border-2 border-[#804c9e]\" : \"border-gray-300\"}`}\r\n >\r\n <button\r\n onClick={() => {\r\n setPickedColor(color);\r\n setPickedSize(null); // reset size\r\n setSelectedVariantIdx(null);\r\n setSelectedVariantIndex(index);\r\n }}\r\n className=\"w-full h-20 flex items-center justify-center overflow-hidden\"\r\n title={color}\r\n >\r\n {swatch ? (\r\n <img\r\n src={swatch}\r\n alt={color}\r\n className=\"w/full h-full object-contain\"\r\n />\r\n ) : (\r\n <div className=\"w-full h-full flex items-center justify-center text-xs px-1\">\r\n {color}\r\n </div>\r\n )}\r\n </button>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n\r\n {/* SIZE SECTION */}\r\n {pickedColor && (\r\n <div className=\"mt-4\">\r\n <div className=\"flex items-baseline gap-2\">\r\n <div className=\"text-sm font-bold\">Size :</div>\r\n {pickedSize && (\r\n <div className=\"text-sm text-gray-600\">{pickedSize}</div>\r\n )}\r\n </div>\r\n\r\n <div className=\"flex flex-wrap gap-2 mt-2\">\r\n {(() => {\r\n const group = variantsByColor.find(\r\n (g) => g.name === pickedColor\r\n );\r\n if (!group) return null;\r\n\r\n return group.variants.map((v, idx) => {\r\n const size = v.name;\r\n const isSelected = pickedSize === size;\r\n return (\r\n <button\r\n key={`size-${size}`}\r\n onClick={() => {\r\n setPickedSize(size);\r\n setSelectedVariantIdx(idx);\r\n setSelectedVariantProductId(v.productId);\r\n }}\r\n className={`px-4 py-2 rounded-md border text-sm ${\r\n isSelected\r\n ? \"border-2 border-[#804c9e] font-semibold\"\r\n : \"border-gray-300\"\r\n }`}\r\n title={size}\r\n >\r\n {size}\r\n </button>\r\n );\r\n });\r\n })()}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {showSubmit && (\r\n <div className=\"mt-4 flex justify-end\">\r\n <button\r\n onClick={handleVariantSubmitAfterNo}\r\n className=\"px-6 py-2.5 rounded-full font-semibold text-white shadow-md\"\r\n style={{ background: themeHeaderBg }}\r\n disabled={!hasMatchingVariant}\r\n >\r\n Submit\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- Initial Extraction Card ----------\r\n const renderInitialExtractionCard = (details: any, readonly = true) => {\r\n if (!details?.extractedDetails && details)\r\n details = { extractedDetails: details };\r\n const d = details?.extractedDetails || extractedDetails;\r\n if (!d) return null;\r\n const q = getQuantity(d);\r\n\r\n const { currency: priceCurrency } = getVariantPrice(selectedVariant);\r\n const unitPrice = getProductPrice(product, selectedVariant);\r\n const minor = Number(d?.max_price_minor ?? 0);\r\n const hasValidMinor = Number.isFinite(minor) && minor > 0;\r\n const displayMax = hasValidMinor ? +(minor / 100) : +(unitPrice * q);\r\n const currency = d?.currency || priceCurrency || CURRENCY_PREF;\r\n const idLabel = selectedVariant?.sku ? selectedVariant.sku : d.product_id;\r\n\r\n return (\r\n <div\r\n className=\"px-6 pb-6 flex flex-col items-center space-y-4\"\r\n style={{ backgroundColor: \"#e5dbeb\" }}\r\n >\r\n <p\r\n className=\"text-base font-semibold text-center mt-2\"\r\n style={{ color: themeDark }}\r\n >\r\n Here’s what I found from your instruction:\r\n </p>\r\n\r\n <div className=\"w-full max-w-md bg-white rounded-xl shadow-inner p-4\">\r\n <div className=\"grid grid-cols-2 gap-y-2 text-sm\">\r\n <p className=\"font-semibold text-gray-600\">SKU:</p>\r\n <p className=\"text-gray-800\">{idLabel}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Quantity:</p>\r\n <p className=\"text-gray-800\">{getQuantity(d)}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Currency:</p>\r\n <p className=\"text-gray-800\">{currency}</p>\r\n\r\n <p className=\"font-semibold text-gray-600\">Maximum Total Price:</p>\r\n <p className=\"text-gray-800\">\r\n {formatCurrency(displayMax, currency)}\r\n </p>\r\n </div>\r\n\r\n <div className=\"mt-3 flex flex-wrap gap-2 text-xs\">\r\n {getVariantColor(selectedVariant) && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n Color: {getVariantColor(selectedVariant)}\r\n </span>\r\n )}\r\n {getVariantSize(selectedVariant) && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n Size: {getVariantSize(selectedVariant)}\r\n </span>\r\n )}\r\n {selectedVariant?.sku && (\r\n <span className=\"rounded-full bg-gray-100 px-2 py-1\">\r\n SKU: {selectedVariant.sku}\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n\r\n {!readonly && (\r\n <>\r\n <p\r\n className=\"text-sm font-medium text-gray-700 text-center max-w-[90%] leading-relaxed\"\r\n style={{ color: themeDark }}\r\n >\r\n Would you like me to <strong>lock this in</strong> and monitor it\r\n for you?\r\n </p>\r\n\r\n <div className=\"flex flex-wrap justify-center gap-4\">\r\n <button\r\n onClick={handleYesLockItIn}\r\n disabled={showAddressSelection}\r\n className={`relative inline-flex items-center justify-center px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n showAddressSelection\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: themeHeaderBg }}\r\n >\r\n <Icon\r\n icon=\"fluent:checkmark-circle-24-filled\"\r\n className=\"mr-2\"\r\n width=\"18\"\r\n height=\"18\"\r\n />\r\n Yes, lock it in\r\n </button>\r\n\r\n <button\r\n onClick={handleCancelWatch}\r\n disabled={showAddressSelection}\r\n className={`relative inline-flex items-center justify-center px-6 py-2.5 rounded-full font-semibold border transition-all duration-300 ${\r\n showAddressSelection\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ borderColor: themeHeaderBg, color: themeHeaderBg }}\r\n >\r\n <Icon\r\n icon=\"fluent:dismiss-circle-24-filled\"\r\n className=\"mr-2\"\r\n width=\"18\"\r\n height=\"18\"\r\n />\r\n No\r\n </button>\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n // ---------- Final Summary ----------\r\n const renderFinalSummaryCard = (payload: any, readonly = true) => {\r\n const d = payload || {};\r\n const currency =\r\n d?.summary?.currency || extractedDetails?.currency || CURRENCY_PREF;\r\n\r\n const img = getProductImage(product, selectedVariant);\r\n const title = getProductTitle(product);\r\n const pid = selectedVariant?.sku\r\n ? selectedVariant.sku\r\n : product?.id ?? extractedDetails?.product_id;\r\n const sku = selectedVariant?.sku ?? getProductSku(product);\r\n const color = getVariantColor(selectedVariant) || getProductColor(product);\r\n const size = getVariantSize(selectedVariant) || getProductSize(product);\r\n const quantity = getQuantity(d);\r\n const product_total =\r\n d?.summary?.product_total != null\r\n ? +d.summary.product_total\r\n : computeProductTotalWithFallback(d);\r\n const unitPrice = quantity > 0 ? +(product_total / quantity).toFixed(2) : 0;\r\n const subtotal = product_total;\r\n const tax = d?.summary?.tax ?? +(product_total * 0.08).toFixed(2);\r\n const shipping_fee =\r\n d?.summary?.shipping_fee ??\r\n (DELIVERY_OPTIONS[selectedDelivery]?.fee || 0);\r\n\r\n const addressDisplay = d?.address\r\n ? [\r\n d.address.addressLine1,\r\n d.address.addressLine2,\r\n d.address.street,\r\n [d.address.city, d.address.state, d.address.postalCode]\r\n .filter(Boolean)\r\n .join(\", \"),\r\n d.address.country,\r\n ]\r\n .filter(Boolean)\r\n .map((s: string) => initialCapital(String(s)))\r\n .join(\", \")\r\n : \"—\";\r\n\r\n const chosenPayment = d?.payment || \"card\";\r\n const paymentLabelNode =\r\n chosenPayment === \"card\" ? (\r\n <>\r\n Credit Card — Mastercard\r\n <br />\r\n •••• 7820&nbsp;Exp: 12/26\r\n </>\r\n ) : (\r\n <>{initialCapital(chosenPayment)}</>\r\n );\r\n\r\n return (\r\n <div className=\"mx-auto mt-3 mb-3 rounded-2xl bg-white\">\r\n <div className=\"px-6 pt-5 pb-3\">\r\n <h3 className=\"font-semibold text-lg mb-2 text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:receipt-text-check-outline\"\r\n width=\"24\"\r\n color={themeColor}\r\n />\r\n All set! Here’s what your smart order looks like 🧾\r\n </h3>\r\n </div>\r\n\r\n <div className=\"px-6 pb-4\">\r\n <div className=\"grid grid-cols-1 sm:grid-cols-12 gap-4 rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"sm:col-span-2 flex\">\r\n <div className=\"w-30 h-26 sm:w-30 sm:h-26 overflow-hidden rounded-lg bg-white border border-gray-200 flex items-center justify-center mx-auto sm:mx-0\">\r\n {img ? (\r\n <img\r\n src={img}\r\n alt={title}\r\n className=\"w-full h-full object-contain\"\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"mdi:image-outline\"\r\n width=\"24\"\r\n className=\"opacity-50\"\r\n />\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"sm:col-span-10\">\r\n <div className=\"mb-3\">\r\n <div className=\"text-lg text-center font-bold text-gray-900\">\r\n {title}\r\n </div>\r\n <div className=\"text-xs text-center font-bold text-gray-600\">\r\n <span className=\"font-medium\">SKU:</span> {pid ?? \"—\"}\r\n </div>\r\n {(sku || color || size) && (\r\n <div className=\"text-xs text-gray-600 mt-0.5 text-center\">\r\n {sku && (\r\n <>\r\n <span className=\"font-medium\">SKU:</span> {sku}\r\n &nbsp;&nbsp;\r\n </>\r\n )}\r\n {color && (\r\n <>\r\n <span className=\"font-medium\">Color:</span> {color}\r\n &nbsp;&nbsp;\r\n </>\r\n )}\r\n {size && (\r\n <>\r\n <span className=\"font-medium\">Size:</span> {size}\r\n </>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"grid grid-cols-1 md-grid-cols-3 md:grid-cols-3 gap-3\">\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Unit Price\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {formatCurrency(unitPrice, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Quantity\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {quantity}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-white p-3 text-center\">\r\n <div className=\"text-[11px] uppercase tracking-wide text-gray-500\">\r\n Subtotal\r\n </div>\r\n <div className=\"mt-0.5 text-base font-bold text-gray-900\">\r\n {formatCurrency(subtotal, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Mini summaries */}\r\n <div className=\"px-6 pb-2\">\r\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3 mb-3\">\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🏠 Address\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {addressDisplay}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 💳 Payment\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {paymentLabelNode}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center rounded-xl border border-gray-200 bg-gray-50 p-3\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🚚 Delivery\r\n </div>\r\n <div className=\"mt-1 text-sm font-semibold text-gray-900 text-center\">\r\n {d?.delivery\r\n ? DELIVERY_OPTIONS[d.delivery as DeliveryOptionKey]?.label ||\r\n \"—\"\r\n : \"—\"}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Totals */}\r\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 💰 any(s)\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(product_total, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🏛️ Taxes\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(tax, currency)}\r\n </div>\r\n </div>\r\n <div className=\"flex flex-col items-center justify-center rounded-xl border border-gray-200 bg-gray-50 p-4 text-center\">\r\n <div className=\"text-xs uppercase tracking-wide text-gray-500\">\r\n 🚚 Shipping\r\n </div>\r\n <div className=\"mt-1 text-2xl font-bold text-gray-900\">\r\n {formatCurrency(shipping_fee, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {/* Total callout */}\r\n <div\r\n className=\"mt-4 rounded-xl p-4 text-center text-white shadow-sm\"\r\n style={{ background: theme }}\r\n >\r\n <div className=\"text-sm/5 opacity-95\">🔹 Total Payable</div>\r\n <div className=\"mt-1 text-3xl font-extrabold tracking-tight\">\r\n {formatCurrency(product_total + tax + shipping_fee, currency)}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {!readonly && (\r\n <div className=\"px-6 pb-5\">\r\n {!confirmSuccess && (\r\n <p className=\"mt-3 text-center text-sm text-gray-700\">\r\n Everything looks good! Do you want me to watch this product and\r\n buy it automatically when it meets your condition?\r\n </p>\r\n )}\r\n {confirmSuccess && renderSuccessSnapshot({ intentMandateId })}\r\n {confirmButton && !confirmSuccess && (\r\n <div className=\"mt-4 flex flex-wrap items-center justify-center gap-3\">\r\n <button\r\n onClick={handleConfirmWatch}\r\n className=\"inline-flex items-center justify-center rounded-full px-6 py-2.5 font-semibold text-white shadow-md transition-transform duration-150 hover:-translate-y-0.5 hover:shadow-lg\"\r\n style={{ background: theme }}\r\n >\r\n Confirm\r\n </button>\r\n <button\r\n onClick={handleCancelWatch}\r\n className=\"inline-flex items-center justify-center rounded-full border px-6 py-2.5 font-semibold hover:bg-gray-50\"\r\n style={{ borderColor: theme, color: theme }}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n };\r\n\r\n const renderAddressSnapshot = (addr: any) => {\r\n if (!addr) return null;\r\n const addressDisplay = [\r\n (addr as any).addressLine1,\r\n (addr as any).addressLine2,\r\n (addr as any).street,\r\n [(addr as any).city, (addr as any).state, (addr as any).postalCode]\r\n .filter(Boolean)\r\n .join(\", \"),\r\n (addr as any).country,\r\n ]\r\n .filter((s): s is string => Boolean(s))\r\n .map((s) => initialCapital(s))\r\n .join(\", \");\r\n\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <Icon icon=\"mdi:home-map-marker\" width=\"20\" color={themeColor} />\r\n <div className=\"font-semibold text-gray-800\">Delivery Address</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">{addressDisplay}</div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderDeliverySnapshot = (payload: any) => {\r\n const method = payload?.method as DeliveryOptionKey;\r\n const opt = method ? DELIVERY_OPTIONS[method] : undefined;\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <Icon icon=\"mdi:truck-delivery\" width=\"20\" color={themeColor} />\r\n <div className=\"font-semibold text-gray-800\">Delivery Method</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">\r\n {opt ? (\r\n <>\r\n <div className=\"flex items-center gap-2\">\r\n <Icon icon={opt.icon} width=\"18\" />\r\n <span className=\"font-medium\">{opt.label}</span>\r\n </div>\r\n <div className=\"text-gray-600\">{opt.subtitle}</div>\r\n </>\r\n ) : (\r\n \"—\"\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderPaymentSnapshot = (payload: any) => {\r\n const method = payload?.method || \"card\";\r\n return (\r\n <div\r\n className=\"px-6 py-4\"\r\n style={{ backgroundColor: \"var(--tanya-light)\" }}\r\n >\r\n <div className=\"rounded-xl border border-gray-200 bg-white p-4\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <Icon\r\n icon=\"mdi:credit-card-outline\"\r\n width=\"20\"\r\n color={themeColor}\r\n />\r\n <div className=\"font-semibold text-gray-800\">Payment Method</div>\r\n </div>\r\n <div className=\"text-sm text-gray-800\">\r\n {method === \"card\" ? (\r\n <>\r\n Credit Card — Mastercard\r\n <br />\r\n •••• 7820 &nbsp; Exp: 12/26\r\n </>\r\n ) : (\r\n initialCapital(method)\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n };\r\n\r\n const renderSnapshotCard = (chat: ChatItem, isLatest: boolean) => {\r\n const stage = chat.snapshotStage as Stage | undefined;\r\n if (!stage) return null;\r\n\r\n if (\r\n (stage === \"address\" && showAddressSelection) ||\r\n (stage === \"delivery\" && showDeliveryOptions) ||\r\n (stage === \"payment\" && showPaymentOptions) ||\r\n (stage === \"final\" && showFinalSummary)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (stage) {\r\n case \"initial\":\r\n return renderInitialExtractionCard(chat.snapshotPayload, !isLatest);\r\n case \"address\":\r\n return renderAddressSnapshot(chat.snapshotPayload as any);\r\n case \"delivery\":\r\n return renderDeliverySnapshot(chat.snapshotPayload);\r\n case \"payment\":\r\n return renderPaymentSnapshot(chat.snapshotPayload);\r\n case \"final\":\r\n return renderFinalSummaryCard(chat.snapshotPayload, !isLatest);\r\n case \"success\":\r\n return renderSuccessSnapshot(chat.snapshotPayload);\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n return createPortal(\r\n <div\r\n className=\"fixed inset-0\"\r\n style={{ zIndex: 2147483647 }}\r\n aria-modal=\"true\"\r\n role=\"dialog\"\r\n >\r\n {/* Backdrop */}\r\n <div\r\n className=\"absolute inset-0\"\r\n style={{ background: \"rgba(0,0,0,0.25)\" }}\r\n onClick={onClose}\r\n />\r\n\r\n {/* Panel */}\r\n <div className=\"absolute right-0 \">\r\n <div className=\"w-[64.7vw] h-screen bg-white rounded-xl overflow-hidden flex flex-col shadow-xl\">\r\n {/* Header */}\r\n <div\r\n style={{\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n borderTopLeftRadius: \"0.75rem\",\r\n borderBottomLeftRadius: \"0.75rem\",\r\n padding: \"0.25rem\",\r\n background: themeHeaderBg,\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"flex\",\r\n color: \"#ffffff\",\r\n alignItems: \"center\",\r\n gap: \"0.5rem\",\r\n }}\r\n >\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"25\"\r\n height=\"25\"\r\n viewBox=\"0 0 256 256\"\r\n >\r\n <g fill=\"currentColor\">\r\n <path\r\n d=\"m194.82 151.43l-55.09 20.3l-20.3 55.09a7.92 7.92 0 0 1-14.86 0l-20.3-55.09l-55.09-20.3a7.92 7.92 0 0 1 0-14.86l55.09-20.3l20.3-55.09a7.92 7.92 0 0 1 14.86 0l20.3 55.09l55.09 20.3a7.92 7.92 0 0 1 0 14.86\"\r\n opacity=\"0.2\"\r\n />\r\n <path d=\"M197.58 129.06L146 110l-19-51.62a15.92 15.92 0 0 0-29.88 0L78 110l-51.62 19a15.92 15.92 0 0 0 0 29.88L78 178l19 51.62a15.92 15.92 0 0 0 29.88 0L146 178l51.62-19a15.92 15.92 0 0 0 0-29.88ZM137 164.22a8 8 0 0 0-4.74 4.74L112 223.85L91.78 169a8 8 0 0 0-4.78-4.78L32.15 144L87 123.78a8 8 0 0 0 4.78-4.78L112 64.15L132.22 119a8 8 0 0 0 4.74 4.74L191.85 144ZM144 40a8 8 0 0 1 8-8h16V16a8 8 0 0 1 16 0v16h16a8 8 0 0 1 0 16h-16v16a8 8 0 0 1-16 0V48h-16a8 8 0 0 1-8-8m104 48a8 8 0 0 1-8 8h-8v8a8 8 0 0 1-16 0v-8h-8a8 8 0 0 1 0-16h8v-8a8 8 0 0 1 16 0v8h8a8 8 0 0 1 8 8\" />\r\n </g>\r\n </svg>\r\n <div>\r\n <p className=\"font-bold\">Agentic Shopping with TANYA</p>\r\n </div>\r\n </div>\r\n <div\r\n style={{\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n gap: \"1.25rem\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <Icon\r\n icon=\"fluent:dismiss-24-filled\"\r\n color={\"#ffffff\"}\r\n width=\"24\"\r\n height=\"24\"\r\n className=\"cursor-pointer\"\r\n onClick={onClose}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div\r\n ref={scrollRef}\r\n className=\"overflow-y-auto pr-5 pb-4 space-y-4 hide-scrollbar flex-grow\"\r\n >\r\n {/* Intro bubble */}\r\n <div\r\n className=\"text-sm text-[16px] rounded-r-xl p-3 m-3 rounded-bl-xl w-3/4 text-tanya-contrast\"\r\n style={{ backgroundColor: \"#e5dbeb\" }}\r\n >\r\n Welcome to your smart shopping companion!\r\n <p>\r\n Simply share your instruction — like “If this product goes below\r\n ${parseInt(product.price) - 5} grab it for me.”\r\n </p>\r\n <p>\r\n I’ll monitor it, calculate total prices, and place the order\r\n when your conditions are met.\r\n </p>\r\n </div>\r\n\r\n {/* any card */}\r\n <ProductSummaryCard selectedIndex={selectedVariantIndex} />\r\n\r\n {/* any selector (always visible for multi-variant) */}\r\n {variantCount > 1 && <VariantSelectorCard showSubmit={false} />}\r\n\r\n {/* Chat history / cards */}\r\n {chatHistory.map((chat, index) => {\r\n const isLatest = index === chatHistory.length - 1;\r\n const isSnapshot = !!chat.snapshotStage;\r\n\r\n return (\r\n <div key={index}>\r\n {/* user bubble */}\r\n {chat.query && (\r\n <div className=\"flex justify-end\">\r\n <p\r\n className=\"text-sm rounded-l-xl p-3 m-3 mb-4 rounded-br-xl max-w-[75%]\"\r\n style={{\r\n color: \"#ffffff\",\r\n backgroundColor: \"var(--tanya)\",\r\n }}\r\n >\r\n {chat.query}\r\n </p>\r\n </div>\r\n )}\r\n\r\n {/* assistant text bubble (for cancel message) */}\r\n {chat.response === \"__TEXT__\" &&\r\n chat.snapshotPayload?.text && (\r\n <div className=\"mt-2\">\r\n <div\r\n className=\"text-sm text-tanya-contrast px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor: \"var(--tanya-light)\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex items-center gap-2\">\r\n <p>{chat.snapshotPayload.text}</p>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Proceed confirmation */}\r\n {isLatest && showProceedConfirm && variantCount > 1 && (\r\n <div className=\"mx-4 mt-2 rounded-xl border border-gray-200 bg-white p-4 animate-fade-in\">\r\n <div className=\"text-sm text-gray-800\">\r\n Proceed with color:{\" \"}\r\n <span className=\"font-semibold\">\r\n {pickedColor || \"—\"}\r\n </span>\r\n , size:{\" \"}\r\n <span className=\"font-semibold\">\r\n {pickedSize || \"—\"}\r\n </span>\r\n ?\r\n </div>\r\n <div className=\"mt-3 flex gap-3\">\r\n <button\r\n onClick={handleConfirmProceedYes}\r\n className=\"px-5 py-2 rounded-full text-white font-semibold\"\r\n style={{ background: themeHeaderBg }}\r\n >\r\n Yes\r\n </button>\r\n <button\r\n onClick={handleConfirmProceedNo}\r\n className=\"px-5 py-2 rounded-full font-semibold border\"\r\n style={{\r\n borderColor: themeHeaderBg,\r\n color: themeHeaderBg,\r\n }}\r\n >\r\n No, change SKU\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Inline variant picker after \"No\" */}\r\n {isLatest && showVariantPicker && (\r\n <VariantSelectorCard showSubmit />\r\n )}\r\n\r\n {/* assistant loading */}\r\n {isLatest && isLoading && (\r\n <div className=\"mt-4\">\r\n <div\r\n className=\"text-sm text-tanya-contrast px-7 py-4 rounded-r-xl rounded-bl-2xl w-full\"\r\n style={{\r\n backgroundColor: \"var(--tanya-light)\",\r\n margin: \"0.75rem\",\r\n }}\r\n >\r\n <div className=\"flex items-center gap-2 tanya-pulse-text\">\r\n <p>Reading your instruction and setting things up…</p>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* assistant cards */}\r\n {(isSnapshot || chat.response === \"__CARD__\") &&\r\n (!isLoading || !isLatest) && (\r\n <div\r\n className=\"mt-6 mb-4 mx-4 animate-fade-in\"\r\n style={{\r\n backgroundColor: \"#fff\",\r\n borderRadius: \"1rem\",\r\n boxShadow: \"0 2px 8px rgba(0,0,0,0.08)\",\r\n overflow: \"hidden\",\r\n }}\r\n >\r\n {isSnapshot\r\n ? renderSnapshotCard(chat, isLatest)\r\n : renderInitialExtractionCard(\r\n chat.snapshotPayload,\r\n false\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n })}\r\n\r\n {/* Address selection */}\r\n {showAddressSelection && (\r\n <div className=\"mt-6 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:home-map-marker\"\r\n width=\"24\"\r\n color=\"var(--tanya-light)\"\r\n />\r\n Select a Delivery Address\r\n </h3>\r\n {addressSubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangeAddress}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change address\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Choose where you’d like us to deliver this item.\r\n </p>\r\n\r\n {addressLoading ? (\r\n <div className=\"flex items-center py-6\">\r\n <div\r\n className=\"animate-spin rounded-full h-6 w-6 border-b-2\"\r\n style={{ borderBottomColor: \"var(--tanya-light)\" }}\r\n />\r\n <p className=\"ml-3 text-gray-600\">\r\n Fetching your addresses...\r\n </p>\r\n </div>\r\n ) : addressList?.length > 0 ? (\r\n <div\r\n className={`space-y-3 ${\r\n addressSubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n {addressList.map((addr: any) => {\r\n const heading = [addr.addressLine1, addr.addressLine2]\r\n .filter(Boolean)\r\n .map((s: string) => initialCapital(s || \"\"))\r\n .join(\" \");\r\n const cityLine = initialCapital(addr.city || \"\");\r\n const statePostal = `${initialCapital(addr.state || \"\")}${\r\n addr.state && addr.postalCode ? \", \" : \"\"\r\n }${addr.postalCode || \"\"}`;\r\n const countryLine = initialCapital(addr.country || \"\");\r\n const idStr = String(addr.addressId ?? addr.id);\r\n const isSelected = selectedAddressId === idStr;\r\n return (\r\n <label\r\n key={idStr}\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n isSelected\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${addressSubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={\r\n addressSubmitted ? \"Address already submitted\" : \"\"\r\n }\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"address\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={isSelected}\r\n disabled={addressSubmitted}\r\n onChange={() => setSelectedAddressId(idStr)}\r\n value={idStr}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800\">\r\n {heading || \"Address\"}\r\n </div>\r\n <div className=\"text-sm text-gray-700\">\r\n {cityLine}\r\n <br />\r\n {statePostal}\r\n <br />\r\n {countryLine}\r\n </div>\r\n </div>\r\n </label>\r\n );\r\n })}\r\n <div className=\"flex justify-between pt-2\">\r\n <button\r\n onClick={handleCancelDelivery}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitAddress}\r\n disabled={addressSubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n addressSubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: themeHeaderBg }}\r\n >\r\n {addressSubmitted\r\n ? \"Address Submitted\"\r\n : \"Submit Address\"}\r\n </button>\r\n </div>\r\n </div>\r\n ) : (\r\n <div className=\"text-center py-8 text-gray-600\">\r\n No addresses found. Please add a new one in your profile.\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n\r\n {/* Delivery options */}\r\n {showDeliveryOptions && (\r\n <div className=\"mt-2 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:truck-delivery\"\r\n width=\"24\"\r\n color=\"var(--tanya-light)\"\r\n />\r\n Great! Now choose how fast you want it delivered 🚚\r\n </h3>\r\n {deliverySubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangeDelivery}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change shipping method\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Which one would you like me to use for this order?\r\n </p>\r\n\r\n <div\r\n className={`space-y-3 ${\r\n deliverySubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n {(Object.keys(DELIVERY_OPTIONS) as DeliveryOptionKey[]).map(\r\n (key) => {\r\n const opt = DELIVERY_OPTIONS[key];\r\n const isSelected = selectedDelivery === key;\r\n return (\r\n <label\r\n key={key}\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n isSelected\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${deliverySubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={\r\n deliverySubmitted\r\n ? \"Delivery already submitted\"\r\n : \"\"\r\n }\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"delivery\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={isSelected}\r\n disabled={deliverySubmitted}\r\n onChange={() => setSelectedDelivery(key)}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800 flex items-center gap-2\">\r\n <Icon icon={opt.icon} width=\"18\" /> {opt.label}\r\n </div>\r\n <div className=\"text-sm text-gray-700\">\r\n {opt.subtitle}\r\n </div>\r\n </div>\r\n <div className=\"text-sm font-semibold text-gray-800\">\r\n {opt.fee === 0\r\n ? \"Free\"\r\n : formatCurrency(\r\n opt.fee,\r\n extractedDetails?.currency || CURRENCY_PREF\r\n )}\r\n </div>\r\n </label>\r\n );\r\n }\r\n )}\r\n </div>\r\n\r\n <div className=\"flex justify-between pt-4\">\r\n <button\r\n onClick={handleCancelDelivery}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitDelivery}\r\n disabled={deliverySubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n deliverySubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: \"var(--tanya)\" }}\r\n >\r\n {deliverySubmitted\r\n ? \"Delivery Submitted\"\r\n : \"Submit Delivery Option\"}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Payment options */}\r\n {showPaymentOptions && (\r\n <div className=\"mt-2 mb-6 mx-6 rounded-xl p-6 shadow-md border border-gray-200 bg-white animate-fade-in\">\r\n <div className=\"flex items-center gap-2\">\r\n <h3 className=\"font-semibold text-lg text-gray-800 flex items-center gap-2\">\r\n <Icon\r\n icon=\"mdi:credit-card-outline\"\r\n width=\"24\"\r\n color={\"var(--tanya-light)\"}\r\n />\r\n Almost done! 💳\r\n </h3>\r\n {paymentSubmitted && (\r\n <>\r\n <span className=\"ml-2 text-xs px-2 py-1 rounded-full bg-green-100 text-green-700 font-semibold\">\r\n Selected\r\n </span>\r\n {!confirmSuccess && (\r\n <button\r\n onClick={handleChangePayment}\r\n className=\"ml-2 text-xs px-2 py-1 rounded-full border hover:bg-gray-50\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n title=\"Change payment method\"\r\n >\r\n Change\r\n </button>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n\r\n <p className=\"text-sm text-gray-600 mb-4\">\r\n Please choose a payment method for this order:\r\n </p>\r\n\r\n <div\r\n className={`space-y-3 ${\r\n paymentSubmitted ? \"opacity-70\" : \"\"\r\n }`}\r\n >\r\n <label\r\n className={`flex items-start gap-3 p-4 border rounded-lg cursor-pointer transition hover:shadow-sm ${\r\n selectedPayment === \"card\"\r\n ? \"border-tanya-light\"\r\n : \"border-gray-300\"\r\n } ${paymentSubmitted ? \"pointer-events-none\" : \"\"}`}\r\n title={paymentSubmitted ? \"Payment already submitted\" : \"\"}\r\n >\r\n <input\r\n type=\"radio\"\r\n name=\"payment\"\r\n className=\"mt-1 accent-tanya-light\"\r\n checked={selectedPayment === \"card\"}\r\n disabled={paymentSubmitted}\r\n onChange={() => setSelectedPayment(\"card\")}\r\n />\r\n <div className=\"flex-1\">\r\n <div className=\"font-semibold text-gray-800 flex items-center gap-2\">\r\n <Icon icon=\"mdi:credit-card-chip-outline\" width=\"18\" />{\" \"}\r\n Credit Card\r\n </div>\r\n {selectedPayment === \"card\" && (\r\n <div className=\"text-sm text-gray-700 mt-1\">\r\n Mastercard &nbsp;&nbsp; •••• 7820\r\n <br />\r\n Expiry: 12/26\r\n </div>\r\n )}\r\n </div>\r\n </label>\r\n </div>\r\n\r\n <div className=\"flex justify-between pt-4\">\r\n <button\r\n onClick={handleCancelPayment}\r\n className=\"px-6 py-2.5 rounded-full font-semibold border transition-all hover:-translate-y-0.5 hover:shadow-sm\"\r\n style={{\r\n borderColor: \"var(--tanya-light)\",\r\n color: \"var(--tanya-light)\",\r\n }}\r\n >\r\n Cancel\r\n </button>\r\n <button\r\n onClick={handleSubmitPayment}\r\n disabled={paymentSubmitted}\r\n className={`px-6 py-2.5 rounded-full font-semibold text-white shadow-md transition-all duration-300 ${\r\n paymentSubmitted\r\n ? \"opacity-60 cursor-not-allowed\"\r\n : \"hover:-translate-y-0.5 hover:shadow-lg\"\r\n }`}\r\n style={{ background: \"var(--tanya)\" }}\r\n >\r\n {paymentSubmitted\r\n ? \"Payment Submitted\"\r\n : \"Submit Payment Method\"}\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Final summary (live) */}\r\n {showFinalSummary &&\r\n renderFinalSummaryCard(\r\n {\r\n ...extractedDetails,\r\n address: JSON.parse(\r\n localStorage.getItem(\"agentic_order_address\") || \"null\"\r\n ),\r\n delivery: localStorage.getItem(\"agentic_order_delivery\"),\r\n payment: localStorage.getItem(\"agentic_order_payment\"),\r\n summary: computeSummary(extractedDetails?.currency),\r\n },\r\n false\r\n )}\r\n </div>\r\n\r\n {/* Input */}\r\n <div className=\"sticky bottom-0 w-[96%] drop-shadow-xl flex items-center rounded-full bg-white border border-gray-300 m-[15px]\">\r\n <input\r\n placeholder={\r\n chatLocked\r\n ? \"Complete the current step…\"\r\n : !hasMatchingVariant\r\n ? \"Please select a combination first.\"\r\n : `What would you like me to do? (e.g., If this product goes below $${\r\n parseInt(product.price) - 5\r\n }, grab it for me.)`\r\n }\r\n disabled={isInputDisabled}\r\n className={`w-full rounded-full p-4 outline-none border-none focus:ring-0 focus:border-transparent disabled:bg-gray-100 disabled:cursor-not-allowed\r\n ${\r\n !hasMatchingVariant\r\n ? \"placeholder:text-red-400 text-red-500\"\r\n : \"\"\r\n }`}\r\n value={inputText}\r\n onKeyDown={(e) => {\r\n if (e.key === \"Enter\" && !isLoading && !chatLocked)\r\n handleSendMessage();\r\n }}\r\n onChange={(e) => setInputText(e.target.value)}\r\n />\r\n <button\r\n type=\"submit\"\r\n disabled={isLoading || chatLocked}\r\n className=\"mr-6 font-medium\"\r\n style={{ color: \"var(--tanya-light)\" }}\r\n onClick={() => handleSendMessage()}\r\n >\r\n {isLoading ? (\r\n <div\r\n className=\"m-3 animate-spin rounded-full h-6 w-6 border-b-2\"\r\n style={{ borderBottom: \"2px solid\" }}\r\n />\r\n ) : (\r\n <Icon\r\n icon=\"fluent:send-48-filled\"\r\n color={\"var(--tanya-light)\"}\r\n width=\"24\"\r\n height=\"24\"\r\n />\r\n )}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>,\r\n document.body\r\n );\r\n};\r\n\r\nexport default AgenticShopping;\r\n"],"names":["TanyaChatbotProvider","useEffect","style","css","initialState","storeSlice","createSlice","state","action","setStore","storeReducer","productSlice","setProduct","productReducer","store","configureStore","ReduxProvider","children","jsx","Provider","notifySFCC","basketId","event","Popover","props","PopoverPrimitive","PopoverTrigger","apiConfig","fetchTokenBmGrant","URL","response","axios","getHost","getSiteId","error","fetchExistingGuestCustomerToken","access_token","dwsid","clientId","shortCode","organisationId","authData","siteId","accessKey","expiresInKey","expires_in","_a","getJWTToken","cachedToken","tokenExpiry","tokenUrl","tokenPayload","tokenResponse","tokenData","expiresIn","getSearchResults","query","serverUrl","basePath","token","res","host","getProductById","id","getInterestApi","customerId","customer_token","displayData","data","imageUrlArray","image","currencyFormatter","currencyCode","priceFormatter","_b","_c","initialCapital","text","stringReducer","length","formatStringToHtml","str","line","index","numberedPoint","useResponsiveProductsPerPage","getProductsPerPage","productsPerPage","setProductsPerPage","useState","handleResize","ProductCarousel","product","dispatch","useDispatch","startIndex","setStartIndex","nextProducts","prevIndex","prevProducts","getProduct","jsxs","prod","_d","ProductDisplay","chat","storeDetails","products","i","createBasket","addProductToBasket","fetchBasket","BASKET_ID_KEY","TOKEN_KEY","TOKEN_EXPIRY_KEY","EXPIRY_TIME","VERSION","setStoredBasketId","setStoredToken","expiryTime","ANIMATION_DURATION","ProductDisplayCard","addToCartPwa","useSelector","s","show","setShow","addToCart","toast","productData","_e","_f","customerData","basketIdFromCustomer","currentTime","newExpiryTime","fetchBasketResponse","_i","_j","basketResponse","_k","_l","_m","_n","_o","_p","viewMore","path","Fragment","e","group","_","Icon","TanyaShoppingAssistantStream","tanyaConfig","shoppingOptions","payloadMapping","productName","useRef","productId","productImage","productPrice","authDetails","setAuthDetails","isOpen","setIsOpen","isAnimating","setIsAnimating","isVisible","setIsVisible","adding","setAdding","isLoading","setIsLoading","productLoading","setProductLoading","inputText","setInputText","whom","setWhom","mapSnapshotToProduct","snap","chatHistory","setChatHistory","scrollRef","currentAccessToken","savedChatToken","savedHistory","accessToken","openPanel","closePanel","handleWhomSelection","selected","getAuthDetails","clientID","organizationID","getInterests","customer_id","runSecondaryFlow","productTitle","points","interests","prev","msg","idx","user","isLoggedIn","invokeUrl","payload","reader","decoder","buffer","done","value","lines","jsonData","parsedData","handleSendMessage","question","newQuery","sanitizedWhom","keywords","getKeywords","sanitizeKeywords","keywordMatch","sanitizedKeywords","keyword","keys","responses","k","p","firstProduct","price","err","handleAddToCart","productToBeAdded","quantity","option","m","extendStatics","d","b","__extends","__","__assign","n","__rest","t","genericMessage","setPrototypeOf","obj","proto","InvariantError","_super","message","_this","invariant","condition","verbosityLevels","verbosityLevel","wrapConsoleMethod","name","method","version","maybe","thunk","untypedGlobal","prefixCounts","makeUniqueId","prefix","count","stringifyForDisplay","space","undefId","key","wrap","fn","args","arg0","getHandledErrorMsg","getFallbackErrorMsg","originalInvariant","newInvariantError","optionalParams","ApolloErrorMessageHandler","stringify","arg","messageArgs","global","getOperationName","doc","definition","x","currentContext","MISSING_VALUE","idCounter","makeSlotClass","context","callback","thisArg","slots","parent","saved","globalKey","globalHost","Slot","bind","noContext","_createForOfIteratorHelperLoose","o","allowArrayLike","it","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr","len","arr2","_defineProperties","target","descriptor","_createClass","Constructor","protoProps","staticProps","hasSymbols","hasSymbol","getSymbol","SymbolIterator","SymbolObservable","SymbolSpecies","getMethod","getSpecies","ctor","Observable","isObservable","hostReportError","enqueue","cleanupSubscription","subscription","cleanup","unsubscribe","closeSubscription","flushSubscription","queue","notifySubscription","type","observer","onNotify","Subscription","subscriber","subscriptionObserver","SubscriptionObserver","_proto","_proto2","_proto3","resolve","reject","_this2","C","_this3","_this4","hasSeed","hasValue","seed","acc","first","_this5","_len","sources","_key","startNext","next","v","_this6","subscriptions","outer","inner","completeIfDone","observable","_iterator","_step","item","_len2","items","_key2","symbolObservablePonyfill","root","result","Symbol","ponyfill","prototype","fakeObsSymbol","validateOperation","operation","OPERATION_FIELDS","createOperation","starting","setContext","getContext","transformOperation","transformedOperation","muteAllDeprecations","slot","isMuted","warnDeprecated","cb","passthrough","op","forward","toLink","handler","ApolloLink","isTerminating","link","request","links","y","test","left","right","leftLink","rightLink","ret","second","firstLink","nextLink","setter","handle","closed","req","generateToken","authHeader","BASE_URL","httpLink","createHttpLink","authLink","headers","apolloClient","ApolloClient","InMemoryCache","TanyaWrapper","ApolloProvider","getIconsTree","names","icons","aliases","resolved","defaultIconDimensions","defaultIconTransformations","defaultIconProps","defaultExtendedIconProps","mergeIconTransformations","obj1","obj2","rotate","mergeIconData","child","internalGetIconData","tree","currentProps","parse","name$1","parseIconSet","optionalPropertyDefaults","checkOptionalProps","defaults","prop","quicklyValidateIconSet","icon","dataStorage","newStorage","provider","getStorage","providerStorage","addIconSet","storage","addIconToStorage","matchIconName","stringToIcon","validate","allowSimpleName","colonSeparated","validateIconName","dashSeparated","simpleNames","allowSimpleNames","allow","getIconData","iconName","addIcon","addCollection","added","defaultIconSizeCustomisations","defaultIconCustomisations","unitsSplit","unitsTest","calculateSize","size","ratio","precision","oldParts","newParts","code","isNumber","num","splitSVGDefs","content","tag","defs","start","end","endEnd","mergeDefsAndContent","wrapSVGContent","body","split","isUnsetKeyword","iconToSVG","customisations","fullIcon","fullCustomisations","box","transformations","hFlip","vFlip","rotation","tempValue","customisationsWidth","customisationsHeight","boxWidth","boxHeight","width","height","attributes","setAttr","viewBox","regex","randomPrefix","counter","replaceIDs","ids","match","suffix","newID","escapedID","setAPIModule","getAPIModule","createAPIConfig","source","resources","configStorage","fallBackAPISources","fallBackAPI","addAPIProvider","customConfig","config","getAPIConfig","detectFetch","fetchModule","calculateMaxLength","maxHostLength","url","shouldAbort","status","prepare","results","maxLength","getPath","send","params","iconsList","urlParams","uri","defaultError","fetchAPIModule","removeCallback","storages","row","updateCallbacks","hasPending","oldLength","storeCallback","pendingSources","abort","sortIcons","a","lastIcon","localStorage","list","listToIcons","defaultConfig","sendQuery","resourcesCount","nextIndex","startTime","queriesSent","lastError","timer","doneCallbacks","resetTimer","subscribe","overwrite","getQueryStatus","failQuery","clearQueue","moduleResponse","isError","queued","execNext","resource","status$1","initRedundancy","cfg","queries","queryCallback","doneCallback","query$1","find","emptyCallback$1","redundancyCache","getRedundancyCache","redundancy","cachedReundancy","sendAPIQuery","api","cached","moduleKey","emptyCallback","loadedNewIcons","checkIconNamesForAPI","valid","invalid","parseLoaderResponse","checkMissing","pending","parsePossiblyAsyncResponse","loadNewIcons","icons$1","customIconLoader","iconSet","loadIcons","cleanedIcons","sortedIcons","callCallback","newIcons","lastProvider","lastPrefix","providerNewIcons","pendingQueue","mergeCustomisations","valueType","separator","flipFromString","custom","flip","rotateFromString","defaultValue","units","value$1","iconToHTML","renderAttribsHTML","attr","encodeSVGforURL","svg","svgToData","svgToURL","policy","createPolicy","cleanUpInnerHTML","html","defaultExtendedIconCustomisations","svgDefaults","commonProps","monotoneProps","coloredProps","propsToAdd","propsToAddTo","inlineDefaults","fixSize","render","defaultProps","mode","customStyle","componentProps","classNames","renderAttribs","localCounter","createElement","useMask","_window","preload","providers","IconComponent","mounted","setMounted","setAbort","getInitialState","setState","changeState","newState","updateState","forwardRef","ref","CURRENCY_PREF","pickVariantMoney","variant","currencyPref","prices","choose","discountedFirst","normal","prefer","picked","getVariantAttributeLabel","getVariantStyleAndLabel","sizeLabel","sizeAttr","getVariantColor","getVariantSize","DELIVERY_OPTIONS","SHIPPING_METHOD_MAP","formatCurrency","amount","currency","pvMaster","pvVariants","pvAll","getVariantByIndex","getVariantImage","getProductImage","_h","_g","getProductTitle","getVariantPrice","cents","cur","getProductPrice","val","getProductSku","getProductColor","getProductSize","MAX_CONTEXT_ITEMS","AgenticShopping","open","onClose","addressListProp","addressLoading","variationAttributes","allVariants","safeInitialIdx","variantsByColor","setVariantsByColor","selectedVariantIndex","setSelectedVariantIndex","grouped","groupVariantsByColor","variants","imageGroups","colorMap","sizeMap","buildVariationMaps","imagesByColor","colorAttr","colorCode","map","sizeCode","nameA","nameB","entry","variantCount","selectedVariantIdx","setSelectedVariantIdx","pickedColor","setPickedColor","pickedSize","setPickedSize","masterColorRef","masterSizeRef","selectedVariant","pendingQuery","setPendingQuery","showProceedConfirm","setShowProceedConfirm","showVariantPicker","setShowVariantPicker","chatLocked","setChatLocked","extractedDetails","setExtractedDetails","contextHistory","setContextHistory","addressList","setAddressList","showAddressSelection","setShowAddressSelection","selectedAddressId","setSelectedAddressId","confirmButton","SetConfirmButton","addressSubmitted","setAddressSubmitted","showDeliveryOptions","setShowDeliveryOptions","selectedDelivery","setSelectedDelivery","deliverySubmitted","setDeliverySubmitted","showPaymentOptions","setShowPaymentOptions","selectedPayment","setSelectedPayment","paymentSubmitted","setPaymentSubmitted","showFinalSummary","setShowFinalSummary","confirmSuccess","setConfirmSuccess","intentMandateId","setIntentMandateId","feedbackRating","setFeedbackRating","feedbackComment","setFeedbackComment","feedbackSubmitted","setFeedbackSubmitted","selectedVariantProductId","setSelectedVariantProductId","all","bounded","mColor","mSize","themeColor","themeDark","theme","themeHeaderBg","handleFeedbackSubmit","handleFeedbackCancel","renderSuccessSnapshot","star","getAllAddresses","snapshotToHistory","stage","finalizeLiveCards","removeAllAssistantLiveRows","hardResetLive","resetFlowStateForNewQuery","variantEntries","useMemo","img","hasMatchingVariant","isInputDisabled","getQuantity","details","q","computeProductTotalWithFallback","minor","computeSummary","currencyArg","variantPrice","product_total","tax","shipping_fee","startFlowWithSku","sku","variantIndex","contextToSend","finalResponse","finalKeywords","parsed","extracted","maybeJson","handleConfirmProceedYes","handleConfirmProceedNo","handleVariantSubmitAfterNo","handleYesLockItIn","handleSubmitAddress","handleChangeAddress","handleSubmitDelivery","handleCancelDelivery","handleChangeDelivery","handleSubmitPayment","handleCancelPayment","handleChangePayment","handleConfirmWatch","order","chosenAddress","chosenDelivery","chosenPayment","shopperId","shippingAddressId","shippingMethodId","paymentMethodId","maxPriceMinor","intentMandatePayload","errorBody","apiResult","mandateId","finalPayload","handleCancelWatch","ProductSummaryCard","selectedIndex","title","skuCode","color","unitPrice","hasSku","inStock","VariantSelectorCard","showSubmit","byColor","c","bySize","isSelected","swatch","g","renderInitialExtractionCard","readonly","priceCurrency","displayMax","idLabel","renderFinalSummaryCard","pid","subtotal","addressDisplay","paymentLabelNode","renderAddressSnapshot","addr","renderDeliverySnapshot","opt","renderPaymentSnapshot","renderSnapshotCard","isLatest","createPortal","isSnapshot","heading","cityLine","statePostal","countryLine","idStr"],"mappings":";;;;;;;;;;;;;;AAGO,SAASA,KAAuB;AACrC,SAAAC,GAAU,MAAM;AACd,QAAI,OAAO,WAAa,KAAa;AACnC,YAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAAA,EAAM,cAAcC,IACpB,SAAS,KAAK,YAAYD,CAAK,GAExB,MAAM;AACX,iBAAS,KAAK,YAAYA,CAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAA,CAAE,GAEE;AACT;ACVA,MAAME,KAA2B;AAAA,EAC/B,OAAO;AAAA,IACL,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,UAAU,CAAA;AAAA,IACV,YAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,iBAAiB;AAAA,IACjB,sBAAsB;AAAA,IACtB,SAAS;AAAA,IACT,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,eAAe;AAAA,MACb,UAAU;AAAA,MACV,WAAW;AAAA,MACX,WAAW;AAAA,IAAA;AAAA,IAEb,oBAAoB,CAAA;AAAA,IACpB,gBAAgB;AAAA,MACd,KAAK,CAAA;AAAA,MACL,QAAQ,CAAA;AAAA,IAAC;AAAA,IAEX,aAAa;AAAA,MACX,KAAK,CAAA;AAAA,MACL,QAAQ,CAAA;AAAA,IAAC;AAAA,EACX;AAEJ,GAEaC,KAAaC,GAAY;AAAA,EACpC,MAAM;AAAA,EAAA,cACNF;AAAAA,EACA,UAAU;AAAA,IACR,UAAU,CAACG,GAAOC,MAAiC;AACjD,MAAAD,EAAM,QAAQC,EAAO;AAAA,IACvB;AAAA,EAAA;AAEJ,CAAC,GAEY,EAAE,UAAAC,GAAA,IAAaJ,GAAW,SAEvCK,KAAeL,GAAW,SChDpBD,KAA6B;AAAA,EACjC,SAAS;AACX,GAEaO,KAAeL,GAAY;AAAA,EACtC,MAAM;AAAA,EACN,cAAAF;AAAA,EACA,UAAU;AAAA,IACR,YAAY,CAACG,GAAOC,MAAgD;AAClE,MAAAD,EAAM,UAAUC,EAAO;AAAA,IACzB;AAAA,EAAA;AAEJ,CAAC,GAEY,EAAE,YAAAI,GAAA,IAAeD,GAAa,SAE3CE,KAAeF,GAAa,SCnBtBG,KAAQC,GAAe;AAAA,EAC3B,SAAS;AAAA,IACP,OAAOL;AAAA,IACP,SAASG;AAAA,EAAA;AAEb,CAAC,GCNKG,KAAgB,CAAC,EAAE,UAAAC,QAChB,gBAAAC,EAACC,IAAA,EAAS,OAAAL,IAAe,UAAAG,EAAA,CAAS,GCG9BG,KAAa,CAACC,MAAsB;AAC/C,QAAMC,IAAQ,IAAI,YAAY,oBAAoB;AAAA,IAChD,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,UAAAD;AAAA,IAAA;AAAA,EACF,CACD;AACD,SAAO,cAAcC,CAAK;AAC5B;ACRA,SAASC,GAAQ;AAAA,EACf,GAAGC;AACL,GAAuD;AACrD,2BAAQC,GAAiB,MAAjB,EAAsB,aAAU,WAAW,GAAGD,GAAO;AAC/D;AAEA,SAASE,GAAe;AAAA,EACtB,GAAGF;AACL,GAA0D;AACxD,2BAAQC,GAAiB,SAAjB,EAAyB,aAAU,mBAAmB,GAAGD,GAAO;AAC1E;ACyGO,MAAMG,KAAY,OAQhB,EAAE,mBAPiB,wFAOE,SANZ,4CAMqB,WAJnB,yCAI8B,UAFU,SAEV,IC5HrCC,KAAoB,YAAY;AAC3C,QAAMC,IAAM;AACZ,MAAI;AACF,UAAMC,IAAW,MAAMC,GAAM;AAAA,MAC3B,GAAGF,CAAG,mCAAmCG,IAAS,WAAWC,IAAW;AAAA,IAAA;AAE1E,WAAIH,EAAS,WAAW,OAAOA,EAAS,KAAK,eACpCA,EAAS,KAAK,gBAErB,QAAQ,MAAM,0BAA0BA,EAAS,IAAI,GAC9C;AAAA,EAEX,SAASI,GAAO;AACd,WAAIH,GAAM,aAAaG,CAAK,IAC1B,QAAQ,MAAM,yBAAyBA,EAAM,YAAYA,EAAM,OAAO,IAEtE,QAAQ,MAAM,qBAAqBA,CAAK,GAEnC;AAAA,EACT;AACF,GCsBaC,KAAkC,OAC7CC,MACG;AACH,QAAMP,IAAM;AACZ,MAAI;AACF,UAAMQ,IAAQ,KAAK,MAAM,eAAe,QAAQ,cAAc,KAAI,IAAI,EAAE,OAElEP,IAAW,MAAMC,GAAM;AAAA,MAC3B,GAAGF,CAAG,gDAAgDQ,CAAK,YAAYL,GAAA,CAAS,WAAWC,GAAA,CAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,MAC5K,CAAA;AAAA,MACA;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAUJ,CAAY;AAAA,QAAA;AAAA,MACvC;AAAA,IACF;AAGF,WAAIN,EAAS,WAAW,OAAOA,EAAS,OAC/BA,EAAS,OAEX;AAAA,EACT,SAASI,GAAO;AACd,WAAIH,GAAM,aAAaG,CAAK,IAC1B,QAAQ,MAAM,0BAA0BA,EAAM,YAAYA,EAAM,OAAO,IAEvE,QAAQ,MAAM,qBAAqBA,CAAK,GAEnC;AAAA,EACT;AACF;ACpEA,eAAsBO,KAAW;;AAI/B,QAAMC,IAAST,GAAA,GACTU,IAAY,kBAAuBD,GACnCE,IAAe,gBAAqBF,GACpCG,IAAa,aAAa,QAAQD,CAAY,GAC9CR,IAAe,aAAa,QAAQO,CAAS;AACnD,iBAAQ,IAAIP,CAAY,IAEtBU,IAAA,KAAK,MAAM,eAAe,QAAQ,cAAc,KAAK,IAAI,MAAzD,QAAAA,EAA4D,SAO9D,QAAQ,IAAI,qCAAqC,GAC1C,EAAE,cAAAV,GAAc,YAAAS,EAAA;AA6BzB;AAEO,MAAME,KAAc,OAAOC,GAAkBC,MAAqB;AACvE,MAAID,KAAeC,KAAe,KAAK,IAAA,IAAQA;AAC7C,WAAOD;AAGT,MAAI;AACF,UAAME,IACJ,4EAEIC,IAAe,IAAI,gBAAgB;AAAA,MACvC,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,eAAe;AAAA,MACf,OAAO;AAAA,IAAA,CACR,GAEKC,IAAgB,MAAM,MAAMF,GAAU;AAAA,MAC1C,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,MAAA;AAAA,MAElB,MAAMC;AAAA,IAAA,CACP;AAED,QAAI,CAACC,EAAc;AACjB,YAAM,IAAI,MAAM,iCAAiCA,EAAc,MAAM,EAAE;AAGzE,UAAMC,IAAY,MAAMD,EAAc,KAAA;AAGtC,IAAAJ,IAAcK,EAAU;AACxB,UAAMC,IAAYD,EAAU,cAAc;AAC1C,WAAAJ,IAAc,KAAK,IAAA,KAASK,IAAY,MAAM,KAEvCN;AAAA,EACT,SAASd,GAAO;AACd,mBAAQ,MAAM,8BAA8BA,CAAK,GAEjDc,IAAc,MACdC,IAAc,MACP;AAAA,EACT;AACF,GChGajB,KAAU,MACR,eAAe,QAAQ,MAAM,GAI/BC,KAAY,MACR,eAAe,QAAQ,QAAQ,GAInCK,KAAW,MACL,eAAe,QAAQ,QAAQ,GAIrCC,KAAY,MACL,eAAe,QAAQ,QAAQ,GAItCC,KAAiB,MACb,eAAe,QAAQ,QAAQ,GAInCe,KAAmB,OAAOC,MAAkB;AACvD,UAAQ,IAAI,kBAAkB;AAC9B,QAAM,EAAE,WAAAC,GAAW,UAAAC,EAAA,IAAa/B,GAAA;AAChC,MAAIgC,IAAQ;AACgC;AAC1C,UAAMC,IAAM,MAAMnB,GAAA;AAClB,YAAQ,IAAI,mCAAmCmB,CAAG,GAClDD,IAAQC,EAAI;AAAA,EACd;AAEA,MAAI;AACF,UAAMC,IAAO7B,GAAA;AAWb,YAViB,MAAMD,GAAM;AAAA,MAC3B,GAAG0B,CAAS,GAAGC,CAAQ,wBAAwBG,CAAI,UAAUL,CAAK,WAAWvB,IAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,MAC9J;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAUmB,CAAK;AAAA,QAAA;AAAA,MAChC;AAAA,IACF,GAGc,KAAK;AAAA,EACvB,SAASzB,GAAO;AACd,kBAAQ,MAAM,kCAAkCA,CAAK,GAC/CA;AAAA,EACR;AACF,GAEa4B,KAAiB,OAAOC,MAAwB;AAC3D,MAAI,CAACA,EAAI,OAAM,IAAI,MAAM,wBAAwB;AACjD,QAAM,EAAE,WAAAN,GAAW,UAAAC,EAAA,IAAa/B,GAAA,GAC1BkC,IAAO7B,GAAA;AACb,UAAQ,IAAI,gBAAgB;AAC5B,QAAM,EAAE,cAAAI,MAAiB,MAAMK,GAAA;AAW/B,UAViB,MAAMV,GAAM;AAAA,IAC3B,GAAG0B,CAAS,GAAGC,CAAQ,iBAAiBK,CAAE,YAAYF,CAAI,WAAW5B,IAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,IACtJ;AAAA,MACE,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAUJ,CAAY;AAAA,MAAA;AAAA,IACvC;AAAA,EACF,GAGc;AAClB,GAEa4B,KAAiB,OAAOC,MAAoB;AACvD,MAAI,CAACA,EAAY,OAAM,IAAI,MAAM,wBAAwB;AACzD,QAAM7B,IAAe,MAAMR,GAAA,GAErB,EAAE,gBAAAsC,EAAA,IAAmB,MAAM/B;AAAA,IAC/BC;AAAA,EAAA,GAEI,EAAE,WAAAqB,GAAW,UAAAC,EAAA,IAAa/B,GAAA,GAE1BgC,KADO,MAAMlB,GAAA,GACA;AAcnB,UAZiB,MAAMV,GAAM;AAAA,IAC3B,GAAG0B,CAAS,GAAGC,CAAQ,yBAAyB1B,IAAS,eAAeiC,CAAU,WAAWhC,IAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,IAC9K;AAAA,MACE,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eACI,UAAUmB,CAAK;AAAA,MACE;AAAA,IACvB;AAAA,EACF,GAGc;AAClB,GCtGaQ,KAAc,CAACC,MAEb,OADP,OAAOA,KAAS,WACFA,IAEJA,EAAK,OAAO,KAAKA,CAFT,GAIbC,KAAgB,CAACD,MACtBA,KAAA,QAAAA,EAAM,QACC,CAACA,EAAK,KAAK,IAEb,cAAcA,IACZA,EAAK,SAAS,CAAC,EAAE,SAErBA,EAAK,cAAc,OAAO,IAAI,CAACE,MAAUA,EAAM,GAAG,GAEhDC,KAAoB,CAACH,GAAMI,MAC7BJ,EAAK,eAAe,SAAS;AAAA,EAChC,OAAO;AAAA,EACP,UAAUI,KAAgB;AAClC,CAAK,GAEQC,KAAiB,CAACL,MAAS;;AACpC,SAAI,cAAcA,IACP;AAAA,IACH,aAAYtB,IAAAsB,EAAK,SAAS,CAAC,MAAf,gBAAAtB,EAAkB,OAAO,IAAI;AAAA,IACzC,cAAc;AAAA,EAC1B,IAEW;AAAA,IACH,aAAY4B,IAAAN,EAAK,kBAAL,gBAAAM,EAAoB,OAAO,GAAG,MAAM;AAAA,IAChD,eAAcC,IAAAP,EAAK,kBAAL,gBAAAO,EAAoB,OAAO,GAAG,MAAM;AAAA,EAC1D;AACA,GAQaC,KAAiB,CAACC,MACpBA,EAAK,OAAO,CAAC,EAAE,YAAW,IAAKA,EAAK,MAAM,CAAC,GAWzCC,KAAgB,CAACD,GAAME,MACzBF,EAAK,SAASE,IAASF,IAAOA,EAAK,MAAM,GAAGE,CAAM,IAAI,OAEpDC,KAAqB,CAACC,MACxBA,EACF,MAAM,KAAK,EACX,IAAI,CAACC,GAAMC,MAAU;AACtB,QAAMC,IAAgBF,EAAK,MAAM,gBAAgB;AACjD,SAAIE,IACO,UAAUD,CAAK,yBAAyBC,EAAc,CAAC,CAAC,cAAcA,EAAc,CAAC,CAAC,SAE1FF,EAAK,KAAI,IAAK,UAAUC,CAAK,iBAAiBD,CAAI,SAAS;AACtE,CAAC,EACI,KAAK,EAAE;ACrDhB,SAASG,KAA+B;AACtC,QAAMC,IAAqB,MACrB,OAAO,aAAa,MAAY,IAChC,OAAO,aAAa,MAAY,IAC7B,GAGH,CAACC,GAAiBC,CAAkB,IAAIC,EAASH,CAAkB;AAEzE,SAAArF,GAAU,MAAM;AACd,UAAMyF,IAAe,MAAMF,EAAmBF,GAAoB;AAClE,kBAAO,iBAAiB,UAAUI,CAAY,GACvC,MAAM,OAAO,oBAAoB,UAAUA,CAAY;AAAA,EAChE,GAAG,CAAA,CAAE,GAEEH;AACT;AAEA,MAAMI,KAAkB,CAAC;AAAA,EACvB,SAAAC;AACF,MAIM;AACJ,QAAMC,IAAWC,GAAA,GAEXP,IAAkBF,GAAA,GAClB,CAACU,GAAYC,CAAa,IAAIP,EAAS,CAAC,GAExCQ,IAAe,MAAM;AACzB,IAAAD;AAAA,MAAc,CAACE,MACbA,IAAYX,KAAmBK,EAAQ,SACnC,IACAM,IAAYX;AAAA,IAAA;AAAA,EAEpB,GAEMY,IAAe,MAAM;AACzB,IAAAH;AAAA,MAAc,CAACE,MACbA,IAAYX,IAAkB,IAC1BK,EAAQ,UAAUA,EAAQ,SAASL,KAAmBA,KACtDW,IAAYX;AAAA,IAAA;AAAA,EAEpB,GAEMa,IAAa,OAAOrC,MAAwB;AAChD,UAAM6B,IAAU,MAAM9B,GAAeC,CAAE;AACvC,IAAA8B,EAASjF,GAAWgF,CAAO,CAAC;AAAA,EAC9B;AAEA,2BACG,OAAA,EAAI,WAAU,0BACb,UAAA,gBAAAS,EAAC,OAAA,EAAI,WAAU,mDACZ,UAAA;AAAA,KAAAT,KAAA,gBAAAA,EAAS,UAASL,KACjB,gBAAArE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAASiF;AAAA,QACT,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,WAAW;AAAA,QAAA;AAAA,QAGsC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAKvD,gBAAAjF,EAAC,OAAA,EAAI,WAAU,oDACZ,UAAA0E,EACE,MAAMG,GAAYA,IAAaR,CAAe,EAC9C,IAAI,CAACe,MAAA;;AACJ,6BAAAD;AAAA,QAAC;AAAA,QAAA;AAAA,UAEC,WAAU;AAAA,UACV,SAAS,MAAM;AACb,YAAAD,EAAWE,EAAK,cAAcA,EAAK,SAAS;AAAA,UAC9C;AAAA,UAGA,UAAA;AAAA,YAAA,gBAAApF,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OACE4B,IAAAuB,GAAciC,CAAI,EAAE,CAAC,MAArB,gBAAAxD,EAAwB,SACxBuB,GAAciC,CAAI,EAAE,CAAC;AAAA,gBACrB;AAAA,gBAEF,KAAKA,KAAA,QAAAA,EAAM,cAAcA,EAAK,cAAc;AAAA,gBAC5C,WAAU;AAAA,cAAA;AAAA,YAAA,GAEd;AAAA,YAGA,gBAAAD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBAGV,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,oBAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,gGACZ,UAAAoF,KAAA,QAAAA,EAAM,cACHA,EAAK,cACLA,KAAA,QAAAA,EAAM,eACNA,EAAK,eACLxB;AAAA,sBACEX,IAAYO,IAAA4B,KAAA,gBAAAA,EAAM,SAAN,gBAAA5B,EAAa,QAAQ;AAAA,sBACjC;AAAA,oBAAA,KACG,UAAA,CACX;AAAA,oBAGA,gBAAAxD;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,UAAU;AAAA,0BACV,KAAK;AAAA,0BACL,MAAM;AAAA,0BACN,cAAc;AAAA,0BACd,QAAQ;AAAA,wBAAA;AAAA,wBAGT,yBAAM,cACHoF,EAAK,cACLA,KAAA,QAAAA,EAAM,eACNA,EAAK,eACLxB;AAAA,0BACEX,IAAYQ,IAAA2B,KAAA,gBAAAA,EAAM,SAAN,gBAAA3B,EAAa,QAAQ;AAAA,0BACjC;AAAA,wBAAA,KACG;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACX,GACF;AAAA,kBACA,gBAAA0B,EAAC,OAAA,EAAI,WAAU,4GACb,UAAA;AAAA,oBAAA,gBAAAnF,EAAC,KAAA,EACE,UAAAqD;AAAA,sBACC+B,KAAA,QAAAA,EAAM,QACF,OAAOA,KAAA,gBAAAA,EAAM,KAAK,IAClB7B,GAAe6B,CAAI,EAAE,cAAc;AAAA,uBACvCC,IAAA9B,GAAe6B,CAAI,MAAnB,gBAAAC,EAAsB;AAAA,oBAAA,GAE1B;AAAA,oBACA,gBAAAF,EAAC,KAAA,EAAE,WAAU,4EAA2E,UAAA;AAAA,sBAAA;AAAA,sBACpF,OAAOC,KAAA,gBAAAA,EAAM,KAAK,EAAE,QAAQ,CAAC,KAAK;AAAA,oBAAI,EAAA,CAC1C;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UACF;AAAA,QAAA;AAAA,QAtEKA,EAAK;AAAA,MAAA;AAAA,KAwEb,GACL;AAAA,KAECV,KAAA,gBAAAA,EAAS,UAASL,KACjB,gBAAArE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,SAAS+E;AAAA,QACT,WAAU;AAAA,QACV,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,WAAW;AAAA,QAAA;AAAA,QAGuC,UAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAEtD,EAAA,CAEJ,EAAA,CACF;AAEJ,GChLMO,KAAiB,CAAC,EAAE,MAAAC,GAAM,cAAAC,QAE5B,gBAAAxF,EAAC,SAAI,WAAU,6DACZ,YAAK,IAAI,CAACyF,GAAeC,MACxB,gBAAAP;AAAA,EAAC;AAAA,EAAA;AAAA,IAEC,WAAU;AAAA,IACV,OAAO;AAAA,MACL,YAAY;AAAA;AAAA,IAAA;AAAA,IAId,UAAA;AAAA,MAAA,gBAAAnF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UAOT,UAAA0D,GAAe+B,EAAS,OAAO,KAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAGvC,gBAAAzF;AAAA,QAACyE;AAAA,QAAA;AAAA,UACC,SAASgB,EAAS;AAAA,UAClB,cAAAD;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAAA,EArBKE;AAAA,CAuBR,GACH,GCISC,KAAe,OAAO3C,GAAwBE,MAAe;;AACxE,QAAM,EAAE,WAAAX,GAAW,UAAAC,EAAA,IAAa/B,GAAA,GAC1BE,IAAM,GAAG4B,CAAS;AACxB,MAAI;AACF,UAAM3B,IAAW,MAAMC,GAAM;AAAA,MAC3B,GAAGF,CAAG,GAAG6B,CAAQ,0BAA0B1B,GAAA,CAAS,WAAWC,GAAA,CAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,MAChJ4B;AAAA,MACA;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAeF;AAAA,QAAA;AAAA,MACjB;AAAA,IACF;AAEF,kBAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,YAAUpB,IAAAhB,EAAS,SAAT,gBAAAgB,EAAe,gBAAa4B,IAAA5C,EAAS,SAAT,gBAAA4C,EAAe;AAAA,MAAA;AAAA,MAEvD;AAAA,IAAA,GAGK5C,EAAS;AAAA,EAClB,SAASI,GAAO;AACd,WAAIH,GAAM,aAAaG,CAAK,IAC1B,QAAQ,MAAM,0BAA0BA,EAAM,YAAYA,EAAM,OAAO,IAEvE,QAAQ,MAAM,qBAAqBA,CAAK,GAEnC;AAAA,EACT;AACF,GAEa4E,KAAqB,OAChCzF,GACAsF,GACAzC,MACG;AACH,QAAM,EAAE,WAAAT,GAAW,UAAAC,EAAA,IAAa/B,GAAA,GAC1BE,IAAM,GAAG4B,CAAS;AACxB,MAAI;AACF,UAAM3B,IAAW,MAAMC,GAAM;AAAA,MAC3B,GAAGF,CAAG,GAAG6B,CAAQ,uBAAuBrC,CAAQ,YAAYW,IAAS,WAAWC,IAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,MACjKmE;AAAA,MACA;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAezC;AAAA,QAAA;AAAA,MACjB;AAAA,IACF;AAGF,WAAIpC,EAAS,WAAW,OAAOA,EAAS,OAC/BA,EAAS,OAEX;AAAA,EACT,SAASI,GAAO;AACd,WAAIH,GAAM,aAAaG,CAAK,IAC1B,QAAQ;AAAA,MACN;AAAA,MACAA,EAAM,YAAYA,EAAM;AAAA,IAAA,IAG1B,QAAQ,MAAM,qBAAqBA,CAAK,GAEnC;AAAA,EACT;AACF,GAEa6E,KAAc,OAAO;AAAA,EAChC,UAAA1F;AAAA,EACA,gBAAA6C;AACF,MAGM;;AACJ,QAAM,EAAE,WAAAT,GAAW,UAAAC,EAAA,IAAa/B,GAAA,GAC1BE,IAAM,GAAG4B,CAAS;AACxB,MAAI;AACF,UAAM3B,IAAW,MAAMC,GAAM;AAAA,MAC3B,GAAGF,CAAG,GAAG6B,CAAQ,WAAWrC,CAAQ,YAAYW,IAAS,WAAWC,IAAW,WAAWK,IAAU,WAAWC,IAAW,WAAWC,IAAgB;AAAA,MACrJ;AAAA,QACE,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe0B;AAAA,QAAA;AAAA,MACjB;AAAA,IACF;AAEF,WAAO,EAAE,QAAQpC,EAAS,QAAQ,MAAMA,EAAS,KAAA;AAAA,EACnD,SAASI,GAAO;AACd,WAAIH,GAAM,aAAaG,CAAK,IACnB,EAAE,SAAQY,IAAAZ,EAAM,aAAN,gBAAAY,EAAgB,QAAQ,MAAM,KAAA,IAExC,EAAE,QAAQ,MAAM,MAAM,KAAA;AAAA,EAEjC;AACF,GCrIakE,KAAgB,kBAChBC,KAAY,uBACZC,KAAmB,qBAEnBC,KAAc,MAAS,KAEvBC,KAAU;ACUhB,MAAMC,KAAoB,CAAChG,MAAkC;AAClE,MAAI;AACF,IAAIA,IACF,aAAa,QAAQ2F,IAAe3F,CAAQ,IAE5C,aAAa,WAAW2F,EAAa;AAAA,EAEzC,SAAS9E,GAAO;AACd,YAAQ,MAAM,sCAAsCA,CAAK;AAAA,EAC3D;AACF,GAmBaoF,KAAiB,CAAC3D,MAA+B;AAC5D,MAAI;AACF,QAAIA,GAAO;AACT,mBAAa,QAAQsD,IAAWtD,CAAK;AACrC,YAAM4D,IAAa,KAAK,IAAA,IAAQJ;AAChC,mBAAa,QAAQD,IAAkBK,EAAW,SAAA,CAAU;AAAA,IAC9D;AACE,mBAAa,WAAWN,EAAS;AAAA,EAErC,SAAS/E,GAAO;AACd,YAAQ,MAAM,wBAAwBA,CAAK;AAAA,EAC7C;AACF,GCjCMsF,KAAqB,KAErBC,KAAqB,CAAC,EAAE,cAAAC,QAAmB;;AAC/C,QAAM7B,IAAWC,GAAA,GACXF,IAAU+B,GAAY,CAACpH,MAAeA,EAAM,QAAQ,OAAO,GAC3DmG,IAAeiB,GAAY,CAACC,MAAWA,EAAE,MAAM,KAAK,GACpD,CAACC,GAAMC,CAAO,IAAIrC,EAAS,CAAC,CAACG,CAAO;AAM1C,MAJA3F,GAAU,MAAM;AACd,IAAA6H,EAAQ,CAAC,CAAClC,CAAO;AAAA,EACnB,GAAG,CAACA,CAAO,CAAC,GAER,CAACA,EAAS,QAAO;AAIrB,QAAMmC,IAAY,YAAY;;AAC5B,QAAI;AAGF,UACE,GAACrD,KAAA5B,IAAA8C,KAAA,gBAAAA,EAAS,aAAT,gBAAA9C,EAAoB,OAApB,QAAA4B,EAAwB,eACzB,EAAEkB,EAAQ,KAAK,QAAQA,EAAQ,KAAK,WACpC,GAACW,KAAA5B,IAAAiB,KAAA,gBAAAA,EAAS,aAAT,gBAAAjB,EAAoB,OAApB,QAAA4B,EAAwB,YACzB;AACA,QAAAyB,GAAM,MAAM,0BAA0B;AAAA,UACpC,UAAU;AAAA,UACV,WAAW;AAAA,QAAA,CACZ,GACD,QAAQ,MAAM,0BAA0B;AACxC;AAAA,MACF;AAEA,YAAMC,IAAc;AAAA,QAClB;AAAA,UACE,cACEC,IAAAtC,EAAQ,aAAR,gBAAAsC,EAAmB,GAAG,iBACtBC,IAAAvC,EAAQ,aAAR,gBAAAuC,EAAmB,GAAG,eACtBvC,KAAA,gBAAAA,EAAS;AAAA,UACX,UAAU;AAAA,QAAA;AAAA,MACZ,GAGIwC,IAAe,KAAK;AAAA,QACxB,eAAe,QAAQ,cAAc,KAAK;AAAA,MAAA,GAEtCC,MACJD,KAAA,gBAAAA,EAAc,aAAY,aAAa,QAAQpB,EAAa,GACxD9C,KAAiB,IACjBjB,KAAc,aAAa,QAAQiE,EAAgB,GACnDoB,KAAc,KAAK,IAAA;AAGzB,UACE,CAACpE,MACD,CAACjB,MACDqF,MAAe,SAASrF,EAAW,GACnC;AACA,YAAIiB,KAAiB;AAYrB,YATEA,KAAiB,aADG,MAAMzB,GAAA,GACe,cASvC,CAACyB,IAAgB;AACnB,kBAAQ,MAAM,8BAA8B;AAC5C;AAAA,QACF;AACA,cAAMqE,KAAgBD,KAAc,MAAS;AAK7C,YAJAhB,GAAepD,EAAc,GAC7B,aAAa,QAAQgD,IAAkBqB,GAAc,SAAA,CAAU,GAG3DF,IAAsB;AACxB,gBAAMG,KAAsB,MAAMzB,GAAY;AAAA,YAC5C,UAAUsB;AAAA,YACV,gBAAAnE;AAAAA,UAAAA,CACD;AACD,cAAIsE,GAAoB,WAAW,OAAOA,IAAqB;AAG7D,kBAAM1G,KAAW,MAAMgF;AAAA,cACrBuB;AAAA,cACAJ;AAAA,cACA/D;AAAAA,YAAAA;AAOF,eACEpC,IAAAA,MAAAA,gBAAAA,GAAU,kBAAVA,gBAAAA,EAAyB,UAAS,OAClCA,KAAAA,MAAAA,gBAAAA,GAAU,iBAAVA,gBAAAA,GAAwB,UAAS,OAGjCkG,GAAM,QAAQ,iBAAiB;AAAA,cAC7B,UAAU;AAAA,cACV,WAAW;AAAA,cACX,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,cAAc;AAAA,cACd,WAAW;AAAA,YAAA,CACZ,GACD5G,GAAWiH,EAAoB;AAIjC;AAAA,UACF;AAAA,QACF;AAGA,cAAMjE,KAAO;AAAA,UACX,cAAc;AAAA,YACZ;AAAA,cACE,aACEqE,IAAA7C,EAAQ,aAAR,gBAAA6C,EAAmB,GAAG,iBACtBC,IAAA9C,EAAQ,aAAR,gBAAA8C,EAAmB,GAAG,eACtB9C,KAAA,gBAAAA,EAAS;AAAA,cACX,UAAU;AAAA,YAAA;AAAA,UACZ;AAAA,QACF,GAGI+C,IAAiB,MAAM9B,GAAa3C,IAAgBE,EAAI;AAC9D,YAAI,EAACuE,KAAA,QAAAA,EAAgB,cAAa,EAACA,KAAA,QAAAA,EAAgB,WAAU;AAC3D,kBAAQ,MAAM,yBAAyB;AACvC;AAAA,QACF;AAWA,QAAAtB;AAAA,WACEsB,KAAA,gBAAAA,EAAgB,eAAaA,KAAA,gBAAAA,EAAgB;AAAA,QAAA,GAI/C,QAAQ,IAAI,0BAA0B;AACtC,cAAM7G,KAAW,MAAMgF;AAAA,WACrB6B,KAAA,gBAAAA,EAAgB,eAAaA,KAAA,gBAAAA,EAAgB;AAAA,UAC7CV;AAAA,UACA/D;AAAAA,QAAAA;AAMF,gBAAQ,IAAI,wBAAwB,MAElC0E,KAAA9G,MAAA,gBAAAA,GAAU,kBAAV,gBAAA8G,GAAyB,UAAS,OAClCC,KAAA/G,MAAA,gBAAAA,GAAU,iBAAV,gBAAA+G,GAAwB,UAAS,MAEjCb,GAAM,QAAQ,iBAAiB;AAAA,UAC7B,UAAU;AAAA,UACV,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,QAAA,CACZ,GAEH5G,GAAWuH,EAAe,cAAaA,KAAA,gBAAAA,EAAgB,SAAQ;AAAA,MAEjE;AAAA,IAyBF,SAASzG,GAAY;AACnB,cAAQ,MAAM,yBAAyBA,CAAK,GAC5C8F,GAAM,MAAM,iCAAiC;AAAA,QAC3C,UAAU;AAAA,QACV,WAAW;AAAA,MAAA,CACZ,KAGCc,IAAA5G,KAAA,gBAAAA,EAAO,aAAP,gBAAA4G,EAAiB,YAAW;AAAA,QAC5BC,KAAA7G,KAAA,gBAAAA,EAAO,aAAP,gBAAA6G,GAAiB,YAAW,SAGxBC,KAAA9G,KAAA,gBAAAA,EAAO,aAAP,gBAAA8G,GAAiB,YAAW,OAC9B3B,GAAkB,IAAI,KAGpB4B,KAAA/G,KAAA,gBAAAA,EAAO,aAAP,gBAAA+G,GAAiB,YAAW,QAC9B5B,GAAkB,IAAI,GACtBC,GAAe,IAAI,OAGrB,QAAQ,MAAM,oCAAoCpF,EAAM,OAAO,GAC/D8F,GAAM,MAAM,iCAAiC;AAAA,QAC3C,UAAU;AAAA,QACV,WAAW;AAAA,MAAA,CACZ;AAAA,IAEL;AAAA,EACF,GAGMkB,IAAW,MAAM;AACrB,QAAI,CAACtD,EAAS;AACd,UAAMuD,IAAO,OAAO,SAAS,SAAQ,cAAavD,EAAQ;AAC1D,YAAQ,IAAI,QAAQuD,CAAI,GACxB,OAAO,SAAS,OAAOA;AAAA,EACzB;AACA,iBAAQ,IAAIvD,GAAS,UAAU,GAE7B,gBAAAS,EAAA+C,IAAA,EACE,UAAA;AAAA,IAAA,gBAAAlI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,SAAS,MAAM;AACb,UAAA4G,EAAQ,EAAK,GACb,WAAW,MAAMjC,EAASjF,GAAW,IAAI,CAAC,GAAG4G,EAAkB;AAAA,QACjE;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,gBAAAnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA;AAAA;AAAA,YAIPwB,IACI,gEACA,qFACN;AAAA;AAAA,QAEF,OAAO,EAAE,YAAY,qBAAA;AAAA,QAErB,SAAS,CAACwB,MAAMA,EAAE,gBAAA;AAAA,QAGlB,UAAA;AAAA,UAAA,gBAAAhD,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,SACC,4BAAC,KAAA,EAAE,WAAU,4CACV,UAAA0E,EAAQ,KAAA,CACX,GACF;AAAA,8BACC,OAAA,EACC,UAAA,gBAAA1E;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,MAAM;AACb,kBAAA4G,EAAQ,EAAK,GACb;AAAA,oBACE,MAAMjC,EAASjF,GAAW,IAAI,CAAC;AAAA,oBAC/B4G;AAAA,kBAAA;AAAA,gBAEJ;AAAA,gBACD,UAAA;AAAA,cAAA;AAAA,YAAA,GAcH;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAnB,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAEMqF,KAAA5B,KAAAD,KAAA5B,IAAA8C,EAAQ,gBAAR,gBAAA9C,EAAsB,OAAtB,gBAAA4B,EAA0B,WAA1B,gBAAAC,EAAmC,OAAnC,gBAAA4B,EAAuC;AAAA,gBAI7C,KAAKX,EAAQ;AAAA,gBACb,WAAU;AAAA,cAAA;AAAA,YAAA,GAEd;AAAA,YACA,gBAAA1E,EAAC,OAAA,EAAI,WAAU,oCACX,UACE0E,EAAQ,YAGT,MAAM,GAAG,CAAC,EACV;AAAA,cAAI,CAAC0D,MACJA,EAAM,OACH,MAAM,GAAG,CAAC,EACV,IAAI,CAAChF,MACJ,gBAAApD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,KAAKoD,EAAM;AAAA,kBACX,KAAKsB,EAAQ;AAAA,kBACb,WAAU;AAAA,gBAAA;AAAA,gBAHLtB,EAAM;AAAA,cAAA,CAKd;AAAA,YAAA,GAET;AAAA,UAAA,GACF;AAAA,UAEA,gBAAA+B,EAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,KAAA,EAAE,WAAU,4CACV,UAAA;AAAA,gBAAA;AAAA,gBAAI;AAAA,gBACHT,EAAQ,MAAM,QAAQ,CAAC;AAAA,cAAA,GAC3B;AAAA,cAAK;AAAA,cACL,gBAAAS,EAAC,KAAA,EAAE,WAAU,mEACV,UAAA;AAAA,gBAAA;AAAA,gBAAI;AAAA,iBACFT,EAAQ,QAAQ,GAAG,QAAQ,CAAC;AAAA,cAAA,GACjC;AAAA,YAAA,GACF;AAAA,YACA,gBAAA1E,EAAC,SACC,4BAAC,KAAA,EAAE,WAAU,4CACV,UAAA0E,EAAQ,SAAA,CACX,GACF;AAAA,UAAA,GACF;AAAA,UAEA,gBAAA1E,EAAC,OAAA,EAAI,WAAU,0CAAyC;AAAA,UACxD,gBAAAmF,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA;AAAA,8BAAC,OAAA,EAAI,WAAU,6DAA4D,UAAA,mBAE3E;AAAA,YACA,gBAAAnF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,yBAAyB;AAAA,kBACvB,QAAQ0E,EAAQ,qBAAqBA,EAAQ;AAAA,gBAAA;AAAA,cAC/C;AAAA,YAAA;AAAA,UACD,GACH;AAAA,UAEA,gBAAAS,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,SAAI,WAAU,oCACb,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,qDACb,UAAA;AAAA,cAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4BACZ,UAAA;AAAA,kBAAA6B,IAAAtC,KAAA,gBAAAA,EAAS,WAAT,gBAAAsC,EAAiB,SAAQ;AAAA,gBAAE;AAAA,gBAAG;AAAA,kCAC9B,QAAA,EAAK,WAAU,kBAAiB,UAAA,KAAC;AAAA,cAAA,GACpC;AAAA,gCACC,OAAA,EAAI,WAAU,wCAAuC,UAAA,kBAEtD;AAAA,cACA,gBAAA7B,EAAC,OAAA,EAAI,WAAU,wCACZ,UAAA;AAAA,kBAAA8B,IAAAvC,KAAA,gBAAAA,EAAS,WAAT,gBAAAuC,EAAiB,UAAS;AAAA,gBAAE;AAAA,cAAA,GAC/B;AAAA,YAAA,EAAA,CACF,EAAA,CACF;AAAA,8BACC,OAAA,EAAI,WAAU,yCACZ,gBAAM,KAAK,EAAE,QAAQ,GAAG,EAAE,IAAI,CAACoB,GAAGpE;;AACjC,qCAAAjE;AAAA,gBAACsI;AAAAA,gBAAA;AAAA,kBAEC,MAAK;AAAA,kBACL,OAAM;AAAA,kBACN,QAAO;AAAA,kBACP,WAAW;AAAA,oBAET1G,IAAA8C,KAAA,gBAAAA,EAAS,WAAT,gBAAA9C,EAAiB,QAAOqC,IACpB,oBACA,eACN;AAAA;AAAA,gBAAA;AAAA,gBATKA;AAAA,cAAA;AAAA,aAYR,GACH;AAAA,UAAA,GACF;AAAA,UAEA,gBAAAkB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,WAAW,OAAA;AAAA,cAEpB,UAAA;AAAA,gBAAA,gBAAAnF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,iBAAiBwF,EAAa,gBAAA;AAAA,oBACvC,SAASqB;AAAA,oBACV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAGD,gBAAA7G;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,WAAU;AAAA,oBACV,OAAO,EAAE,iBAAiBwF,EAAa,gBAAA;AAAA,oBACvC,SAASwC;AAAA,oBACV,UAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAED;AAAA,YAAA;AAAA,UAAA;AAAA,QACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ,GCvZMO,KAA+B,CAAC;AAAA,EACpC,aAAAC;AAAA,EACA,UAAArI;AAAA,EACA,WAAA0G;AACF,MAIM;AAEJ,QAAM4B,IAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GAGIC,IAAyC;AAAA,IAC7C,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,gBAAgB;AAAA,IAChB,cAAc;AAAA,IACd,QAAQ;AAAA,EAAA,GAEJC,IAAcC,GAAsB,IAAI,GACxCC,IAAYD,GAAsB,IAAI,GACtCE,IAAeF,GAAsB,IAAI,GACzCG,IAAeH,GAAsB,IAAI,GACzC,CAACI,GAAaC,CAAc,IAAI1E,EAAc,IAAI;AACvC,EAAAqE,GAAO,IAAI;AAE5B,QAAM,CAACM,GAAQC,CAAS,IAAI5E,EAAS,EAAK,GACpC,CAAC6E,GAAaC,CAAc,IAAI9E,EAAS,EAAK,GAC9C,CAAC+E,GAAWC,CAAY,IAAIhF,EAAS,EAAK,GAC1C,CAACiF,GAAQC,CAAS,IAAIlF,EAAkB,EAAK,GAC7C,CAACmF,GAAWC,CAAY,IAAIpF,EAAS,EAAK,GAC1C,CAACqF,IAAgBC,CAAiB,IAAItF,EAAS,EAAK,GACpD,CAACuF,GAAWC,EAAY,IAAIxF,EAAS,EAAE,GACvC,CAACyF,IAAMC,CAAO,IAAI1F,EAAS,EAAE,GAC7B2F,KAAuB,CAACC,OAAgC;AAAA,IAC5D,IAAIA,EAAK;AAAA,IACT,OAAOA,EAAK;AAAA,IACZ,OAAOA,EAAK,SAAS;AAAA,IACrB,OAAOA,EAAK,SAAS;AAAA,EAAA,IAIjB,CAACC,IAAaC,EAAc,IAAI9F,EAYpC,CAAA,CAAE,GACE+F,IAAY1B,GAAuB,IAAI,GAGvCpD,IAAeiB,GAAY,CAACC,MAAWA,EAAE,MAAM,KAAK,GACpDhC,KAAU+B,GAAY,CAACC,MAAWA,EAAE,QAAQ,OAAO;AAGzD,EAAA3H,GAAU,MAAM;AACd,UAAMwL,IAAqB,aAAa;AAAA,MACtC,gBAAgB/B,EAAY,MAAM;AAAA,IAAA,GAE9BgC,IAAiB,aAAa;AAAA,MAClC,cAAchC,EAAY,MAAM;AAAA,IAAA;AAGlC,QAAI+B,KAAsBC,MAAmBD,GAAoB;AAE/D,YAAME,IAAe,aAAa,QAAQ,aAAa;AACvD,MAAIA,KACFJ,GAAe,KAAK,MAAMI,CAAY,CAAC;AAAA,IAE3C;AAEE,mBAAa,QAAQ,eAAe,KAAK,UAAU,CAAA,CAAE,CAAC,GACtD,aAAa;AAAA,QACX,cAAcjC,EAAY,MAAM;AAAA,QAChC+B,KAAsB;AAAA,MAAA;AAAA,EAG5B,GAAG,CAAA,CAAE,GAGLxL,GAAU,MAAM;AACd,iBAAa,QAAQ,eAAe,KAAK,UAAUqL,EAAW,CAAC;AAE/D,UAAMM,IAAc,aAAa;AAAA,MAC/B,gBAAgBlC,EAAY,MAAM;AAAA,IAAA;AAEpC,IAAIkC,KACF,aAAa,QAAQ,cAAclC,EAAY,MAAM,IAAIkC,CAAW;AAAA,EAExE,GAAG,CAACN,EAAW,CAAC;AAEhB,QAAMO,KAAY,MAAM;AACtB,IAAApB,EAAa,EAAI,GACjB,WAAW,MAAMF,EAAe,EAAI,GAAG,EAAE;AAAA,EAC3C,GAEMuB,KAAa,MAAM;AACvB,IAAAvB,EAAe,EAAK,GACpB,WAAW,MAAME,EAAa,EAAK,GAAG,GAAG;AAAA,EAC3C;AAEA,EAAAxK,GAAU,MAAM;AACd,IAAImK,IAAQyB,GAAA,IACPC,GAAA;AAAA,EACP,GAAG,CAAC1B,CAAM,CAAC;AAEX,QAAM2B,KAAsB,CAACC,MAAqB;AAChD,IAAAb,EAAQvB,EAAeoC,CAAQ,CAAC;AAAA,EAClC;AAEA,EAAA/L,GAAU,MAAM;AACd,IAAIuK,KAAagB,EAAU,WACzBA,EAAU,QAAQ,SAAS;AAAA,MACzB,KAAKA,EAAU,QAAQ;AAAA,MACvB,UAAU;AAAA,IAAA,CACX;AAAA,EAEL,GAAG,CAACF,IAAad,CAAS,CAAC;AAE3B,QAAMxH,KAAmB,MACnBC,KAAmB,MAEnBgJ,KAAiB,YAAY;AACjC,UAAM7H,IAAO,MAAM3B,GAAA;AACnB,IAAI2B,KAAQ,QACZ+F,EAAe/F,CAAI;AAAA,EACrB;AAEA,EAAAnE,GAAU,MAAM;AACd,QAAIyJ,KAAA,QAAAA,EAAa,QAAQ;AACvB,YAAM,EAAE,UAAAwC,GAAU,MAAArI,GAAM,gBAAAsI,GAAgB,WAAA5J,GAAW,QAAAG,MAAWgH;AAC9D,qBAAe,QAAQ,QAAQ7F,CAAI,GACnC,eAAe,QAAQ,UAAUnB,CAAM,GACvC,eAAe,QAAQ,UAAU,KAAKwJ,CAAQ,CAAC,GAC/C,eAAe,QAAQ,UAAU3J,CAAS,GAC1C,eAAe,QAAQ,UAAU4J,CAAc;AAAA,IACjD;AAEE,IAAAF,GAAA,GACA,QAAQ,IAAI,sBAAsB;AAAA,EAItC,GAAG,CAAA,CAAE,GAELhM,GAAU,MAAM;AACd,IAAIoB,MACF,QAAQ,IAAI,yBAAyBA,CAAQ,GAC7CgG,GAAkBhG,CAAQ;AAAA,EAE9B,GAAG,CAACA,CAAQ,CAAC;AAEb,QAAM+K,IAAe,YAAY;AAC/B,UAAMC,IAAc,KAAK;AAAA,MACvB,eAAe,QAAQ,cAAc,KAAK;AAAA,IAAA,EAC1C;AAEF,YADY,MAAMrI,GAAeqI,KAAe,EAAE,GACvC;AAAA,EACb,GAEMC,KAAmB,OAAOC,GAAsBC,MAAmB;AACvE,YAAQ,IAAI,qBAAqBpF,EAAO;AACxC,UAAMqF,IAAY,MAAML,EAAA;AAExB,QADA,QAAQ,IAAIK,GAAW,yBAAyBrF,EAAO,GACnD,EAACqF;AACL,UAAI;AAEF,QAAAlB;AAAA,UAAe,CAACmB,OACdA,GAAK;AAAA,YAAI,CAACC,GAAKC,OACbA,OAAQF,GAAK,SAAS,IAAI,EAAE,GAAGC,GAAK,kBAAkB,GAAA,IAASA;AAAA,UAAA;AAAA,QACjE;AAGF,cAAMf,IAAc,MAAM7I,GAAYC,IAAaC,EAAW;AAC9D,YAAI,CAAC2I,EAAa,OAAM,IAAI,MAAM,uBAAuB;AAEzD,cAAMiB,IAAO,aAAa,QAAQ,gBAAgB,GAC5CC,IAAa,aAAa,QAAQ,YAAY,GAK9CC,KAAY,6DAJE,IAAI,gBAAgB;AAAA,UACtC,YAAY,OAAOD,KAAc,EAAK;AAAA,UACtC,QAAQ,OAAOD,0BAAY,KAAA,GAAO,SAAS;AAAA,QAAA,CAC5C,EAC0F,SAAA,CAAU,IAE/FG,IAAU,KAAK,UAAU;AAAA,UAC7B,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,YACL,eAAe;AAAA,YACf,aAAaT;AAAA,YACb,eAAe,OAAOC,KAAU,CAAC;AAAA,YACjC,WAAAC;AAAA,UAAA;AAAA,QACF,CACD,GAEK3K,IAAW,MAAM,MAAMiL,IAAW;AAAA,UACtC,QAAQ,YAAY,QAAQ,GAAK;AAAA,UACjC,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,eAAe,UAAUnB,CAAW;AAAA,UAAA;AAAA,UAEtC,MAAMoB;AAAA,QAAA,CACP;AAED,YAAI,CAAClL,EAAS,KAAM,OAAM,IAAI,MAAM,+BAA+B;AAEnE,cAAMmL,KAASnL,EAAS,KAAK,UAAA,GACvBoL,KAAU,IAAI,YAAA;AACpB,YAAIC,KAAS;AAEb,mBAAa;AACX,gBAAM,EAAE,MAAAC,IAAM,OAAAC,EAAA,IAAU,MAAMJ,GAAO,KAAA;AACrC,cAAIG,GAAM;AACV,UAAAD,MAAUD,GAAQ,OAAOG,GAAO,EAAE,QAAQ,IAAM;AAChD,gBAAMC,KAAQH,GAAO,MAAM;AAAA,CAAI;AAC/B,UAAAA,KAASG,GAAM,SAAS;AAExB,qBAAWpI,MAAQoI;AACjB,gBAAIpI,GAAK,WAAW,OAAO,GAAG;AAC5B,oBAAMqI,IAAWrI,GAAK,MAAM,CAAC,EAAE,KAAA;AAC/B,kBAAI;AACF,sBAAMsI,KAAa,KAAK,MAAMD,CAAQ;AAEtC,gBAAIC,GAAW,UAAU,KAEvBjC;AAAA,kBAAe,CAACmB,MACdA,EAAK;AAAA,oBAAI,CAACC,GAAKC,MACbA,MAAQF,EAAK,SAAS,IAClB;AAAA,sBACE,GAAGC;AAAA,sBACH,mBAAmBa,GAAW;AAAA,sBAC9B,kBAAkB;AAAA,oBAAA,IAEpBb;AAAA,kBAAA;AAAA,gBACN;AAAA,cAIN,SAAStD,IAAG;AAEV,gBAAAkC;AAAA,kBAAe,CAACmB,MACdA,EAAK;AAAA,oBAAI,CAACC,GAAKC,MACbA,MAAQF,EAAK,SAAS,IAClB,EAAE,GAAGC,GAAK,kBAAkB,GAAA,IAC5BA;AAAA,kBAAA;AAAA,gBACN,GAEF,QAAQ,MAAM,oCAAoCtD,EAAC;AAAA,cACrD;AAAA,YACF;AAAA,QAEJ;AAAA,MACF,SAASA,GAAG;AACV,gBAAQ,MAAM,yBAAyBA,CAAC;AAAA,MAC1C;AAAA,EACF,GAEMoE,KAAoB,OAAOC,MAAsB;AACrD,UAAMC,IAAWD,KAAY1C,EAAU,KAAA;AACvC,QAAK2C,GAEL;AAAA,MAAA9C,EAAa,EAAI,GACjBI,GAAa,EAAE,GAEfpB,EAAY,UAAU,MACtBE,EAAU,UAAU,MACpBC,EAAa,UAAU,MACvBC,EAAa,UAAU,MAEvBsB,GAAe,CAACmB,MAAS;AAAA,QACvB,GAAGA;AAAA,QACH;AAAA,UACE,OAAOiB;AAAA,UACP,UAAU;AAAA,UACV,oBAAoB;AAAA,UACpB,UAAU,CAAA;AAAA,UACV,UAAU;AAAA,QAAA;AAAA,MACZ,CACD;AAED,UAAI;AACF,cAAMC,IAAgB1C,IAChB2B,IAAO,aAAa,QAAQ,gBAAgB,GAC5CC,IAAa,aAAa,QAAQ,YAAY,GAG9ClB,IAAc,MAAM7I,GAAYC,IAAaC,EAAW;AAC9D,YAAI,CAAC2I;AACH,gBAAM,IAAI,MAAM,+BAA+B;AASjD,cAAMmB,KAAY,6DALE,IAAI,gBAAgB;AAAA,UACtC,YAAY,OAAOD,KAAc,EAAK;AAAA,UACtC,QAAQ,OAAOD,0BAAY,KAAA,GAAO,SAAS;AAAA,QAAA,CAC5C,EAE0F,SAAA,CAAU,IAE/FG,IAAU,KAAK,UAAU;AAAA,UAC7B,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,YACL,YAAYW;AAAA,YACZ,MAAMC;AAAA,UAAA;AAAA,QACR,CACD,GAEK9L,IAAW,MAAM,MAAMiL,IAAW;AAAA,UACtC,QAAQ,YAAY,QAAQ,GAAK;AAAA,UACjC,QAAQ;AAAA,UACR,SAAS;AAAA,YACP,gBAAgB;AAAA,YAChB,eAAe,UAAUnB,CAAW;AAAA,UAAA;AAAA,UAEtC,MAAMoB;AAAA,QAAA,CACP;AAED,YAAI,CAAClL,EAAS;AACZ,gBAAM,IAAI,MAAM,uBAAuBA,EAAS,MAAM,EAAE;AAG1D,YAAI,CAACA,EAAS,KAAM,OAAM,IAAI,MAAM,+BAA+B;AAEnE,cAAMmL,KAASnL,EAAS,KAAK,UAAA,GACvBoL,KAAU,IAAI,YAAA;AACpB,YAAIC,KAAS,IACTU,KAAW;AAEf,mBAAa;AACX,UAAA9C,EAAkB,EAAI;AACtB,gBAAM,EAAE,MAAAqC,GAAM,OAAAC,GAAA,IAAU,MAAMJ,GAAO,KAAA;AACrC,cAAIG,EAAM;AAEV,UAAAD,MAAUD,GAAQ,OAAOG,IAAO,EAAE,QAAQ,IAAM;AAChD,gBAAMC,KAAQH,GAAO,MAAM;AAAA,CAAI;AAC/B,UAAAA,KAASG,GAAM,SAAS;AAExB,qBAAWpI,KAAQoI;AACjB,gBAAIpI,EAAK,WAAW,OAAO,GAAG;AAC5B,oBAAMqI,KAAWrI,EAAK,MAAM,CAAC,EAAE,KAAA;AAC/B,kBAAI;AACF,sBAAMsI,IAAa,KAAK,MAAMD,EAAQ;AACtC,gBAAIC,EAAW,SAAS,MAAGK,KAAWL,EAAW,OAEjDjC;AAAA,kBAAe,CAACmB,MACdA,EAAK;AAAA,oBAAI,CAACC,GAAKC,OACbA,OAAQF,EAAK,SAAS,IAClB;AAAA,sBACE,GAAGC;AAAA,sBACH,CAACa,EAAW,SAAS,IACjB,aACAA,EAAW,SAAS,IACpB,aACAA,EAAW,SAAS,IACpB,uBACA,KAAK,GAAGA,EAAW;AAAA,oBAAA,IAEzBb;AAAA,kBAAA;AAAA,gBACN;AAAA,cAEJ,SAASzK,GAAO;AACd,wBAAQ,MAAM,uBAAuBA,CAAK;AAAA,cAC5C;AAAA,YACF;AAAA,QAEJ;AACA,QAAA4L,GAAYC,GAAiBF,EAAQ,CAAC;AAAA,MACxC,SAAS3L,GAAO;AACd,gBAAQ,MAAM,mCAAmCA,CAAK;AAAA,MACxD,UAAA;AACE,QAAA2I,EAAa,EAAK;AAAA,MACpB;AAAA;AAAA,EACF,GAEMkD,KAAmB,CAACjM,MAAqB;AAC7C,UAAMkM,IAAelM,EAAS;AAAA,MAC5B;AAAA,IAAA,GAIImM,KAFiBD,IAAeA,EAAa,CAAC,IAAIlM,GACnB,MAAM,IAAI,EACP,IAAI,CAACoM,OACpCA,GAAQ,QAAQ,wCAAwC,EAAE,EAAE,KAAA,CACpE;AAED,WADuB,CAAC,GAAG,IAAI,IAAID,CAAiB,CAAC,EAAE,OAAO,OAAO,EAC/C,KAAK,GAAG;AAAA,EAChC,GAEMH,KAAc,OAAOD,MAAgC;;AACzD,UAAMM,IAAO,OAAON,KAAa,WAAWA,EAAS,MAAM,GAAG,IAAIA;AAElE,IAAA9C,EAAkB,EAAI;AAEtB,QAAI;AAEF,YAAMqD,IAAY,MAAM,QAAQ;AAAA,QAC9BD,EAAK,IAAI,CAACE,MAAM9K,GAAiB8K,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;AAAA;AAAA,MAAA,GAI/CpG,KAAckG,EACjB,IAAI,CAACD,GAAStB,OAAS;AAAA,QACtB,SAAAsB;AAAA,QACA,OAAOE,EAAUxB,CAAG,KAAK,CAAA;AAAA,QACzB,SAAS;AAAA,MAAA,EACT,EACD,OAAO,CAAC0B,MAAMA,EAAE,MAAM,SAAS,CAAC,GAG7BC,MAAe7J,KAAA5B,IAAAmF,GAAY,CAAC,MAAb,gBAAAnF,EAAgB,UAAhB,gBAAA4B,EAAwB;AAC7C,UAAI6J,IAAc;AAChB,QAAAxE,EAAU,UAAUwE,GAAa,YACjC1E,EAAY,UAAU0E,GAAa,cACnCvE,EAAa,WAAUrF,IAAA4J,GAAa,UAAb,gBAAA5J,EAAoB;AAC3C,cAAM6J,IACJ,OAAOD,GAAa,SAAU,WAAWA,GAAa,QAAQ;AAChE,QAAAtE,EAAa,UAAUuE;AAAA,MACzB;AAyBA,UAtBAjD;AAAA,QAAe,CAACmB,MACdA,EAAK;AAAA,UAAI,CAACC,GAAKC,OACbA,OAAQF,EAAK,SAAS,IAClB;AAAA,YACE,GAAGC;AAAA,YACH,UAAU1E;AAAA,YACV,iBAAiBsG,KACb;AAAA,cACE,IAAIxE,EAAU;AAAA,cACd,MAAMF,EAAY;AAAA,cAClB,OAAOG,EAAa;AAAA,cACpB,OAAOC,EAAa;AAAA,cACpB,QAAQ;AAAA,cACR,UAAU;AAAA,YAAA,IAEZ0C,EAAI;AAAA,UAAA,IAEVA;AAAA,QAAA;AAAA,MACN,GAIE4B,IAAc;AAChB,cAAMnG,IAAe,KAAK;AAAA,UACxB,eAAe,QAAQ,cAAc,KAAK;AAAA,QAAA;AAE5C,QAAKA,KAAA,QAAAA,EAAc,YACjB,QAAQ,IAAI,0BAA0BhB,EAAO,GAC7CkF,GAAiBzC,EAAY,SAAS,CAAC;AAAA,MAE3C;AAAA,IACF,SAAS4E,GAAK;AACZ,cAAQ,MAAM,2BAA2BA,CAAG;AAAA,IAC9C,UAAA;AACE,MAAA1D,EAAkB,EAAK;AAAA,IACzB;AAAA,EACF,GAEM2D,KAAkB,OAAOC,GAAuBC,MAAqB;;AACzE,IAAAjE,EAAU,EAAI;AACd,QAAI;AACF,YAAM/E,IAAU,MAAM9B,GAAe6K,EAAiB,EAAE;AACxD,UACE,GACE/I,KAAAA,IAAAA,KAAAA,gBAAAA,EAAS,aAATA,gBAAAA,EAAoB,OAApBA,QAAAA,EAAwB,eACxBA,KAAAA,IAAAA,KAAAA,gBAAAA,EAAS,aAATA,gBAAAA,EAAoB,OAApBA,QAAAA,EAAwB,cAE1B,EAAEA,EAAQ,KAAK,QAAQA,EAAQ,KAAK,SACpC;AACA,QAAA+E,EAAU,EAAK,GACf3C,GAAM,MAAM,sBAAsB;AAAA,UAChC,UAAU;AAAA,UACV,WAAW;AAAA,QAAA,CACZ,GACD,QAAQ,MAAM,0BAA0B;AACxC;AAAA,MACF;AAEA,YAAMC,KAAc;AAAA,QAClB;AAAA,UACE,cACErC,KAAAA,EAAQ,aAARA,gBAAAA,GAAmB,GAAG,iBACtBA,KAAAA,EAAQ,aAARA,gBAAAA,GAAmB,GAAG,eACtBA,KAAAA,gBAAAA,EAAS;AAAA,UACX,UAAAgJ;AAAA,QAAA;AAAA,MACF;AAEF,cAAQ,IAAI3G,IAAa,gBAAgB,eAAeb,EAAO;AAE/D,YAAMgB,IAAe,KAAK;AAAA,QACxB,eAAe,QAAQ,cAAc,KAAK;AAAA,MAAA,GAEtCC,KACJD,KAAA,gBAAAA,EAAc,aAAY,aAAa,QAAQpB,EAAa,GACxD9C,IAAiB,IACjBjB,KAAc,aAAa,QAAQiE,EAAgB,GACnDoB,KAAc,KAAK,IAAA;AAGzB,UACE,CAACpE,KACD,CAACjB,MACDqF,MAAe,SAASrF,EAAW,GACnC;AACA,cAAMb,KAAe,MAAMR,GAAA;AAE3B,YAAI,EAAE,gBAAAsC,GAAAA,IAAmB,MAAM/B;AAAA,UAC7BC;AAAA,QAAA;AAKF,YAFE8B,KAAiB,YAAYgG,EAAY,cAEvC,CAAChG,IAAgB;AACnB,kBAAQ,MAAM,8BAA8B;AAC5C;AAAA,QACF;AACA,cAAMqE,KAAgBD,KAAc,MAAS;AAK7C,YAJAhB,GAAepD,EAAc,GAC7B,aAAa,QAAQgD,IAAkBqB,GAAc,SAAA,CAAU,GAC/D,QAAQ,IAAIF,GAAsB,sBAAsB,GAEpDA,GAAsB;AACxB,gBAAMG,KAAsB,MAAMzB,GAAY;AAAA,YAC5C,UAAUsB;AAAA,YACV,gBAAAnE;AAAAA,UAAAA,CACD;AACD,cAAIsE,GAAoB,WAAW,OAAOA,IAAqB;AAG7D,kBAAM1G,KAAW,MAAMgF;AAAA,cACrBuB;AAAA,cACAJ;AAAA,cACA/D;AAAAA,YAAAA;AAEF,cAAIpC,IAAAA,MAAAA,gBAAAA,GAAU,kBAAVA,gBAAAA,EAAyB,UAAS,MAEpCkG,GAAM,QAAQ,iBAAiB;AAAA,cAC7B,UAAU;AAAA,cACV,WAAW;AAAA,cACX,iBAAiB;AAAA,cACjB,cAAc;AAAA,cACd,cAAc;AAAA,cACd,WAAW;AAAA,YAAA,CACZ,GACD5G,GAAWiH,CAAoB,GAC/BsC,EAAU,EAAK;AAGjB;AAAA,UACF;AAAA,QACF;AAGA,cAAMvG,KAAO;AAAA,UACX,cAAc;AAAA,YACZ;AAAA,cACE,aACEwB,IAAAA,EAAQ,aAARA,gBAAAA,EAAmB,GAAG,iBACtBA,KAAAA,EAAQ,aAARA,gBAAAA,GAAmB,GAAG,eACtBA,KAAAA,gBAAAA,EAAS;AAAA,cACX,UAAU;AAAA,YAAA;AAAA,UACZ;AAAA,QACF,GAEI+C,IAAiB,MAAM9B,GAAa3C,IAAgBE,EAAI;AAO9D,YANA,QAAQ;AAAA,UACNuE;AAAA,UACAA,KAAA,gBAAAA,EAAgB;AAAA,UAChBA,KAAA,gBAAAA,EAAgB;AAAA,UAChB;AAAA,QAAA,GAEE,EAAEA,KAAA,QAAAA,EAAgB,aAAa,EAACA,KAAA,QAAAA,EAAgB,YAAW;AAC7D,UAAAgC,EAAU,EAAK,GACf,QAAQ,MAAM,yBAAyB;AACvC;AAAA,QACF;AAEA,QAAAtD;AAAA,WACEsB,KAAA,gBAAAA,EAAgB,eAAaA,KAAA,gBAAAA,EAAgB;AAAA,QAAA;AAS/C,cAAM7G,KAAW,MAAMiG;AAAA,UACrB;AAAA,YACE,WAAAgC;AAAA,YACA,UAAA6E;AAAA,UAAA;AAAA,WAEFjG,KAAA,gBAAAA,EAAgB,eAAaA,KAAA,gBAAAA,EAAgB;AAAA,QAAA;AAE/C,WACED,KAAA5G,MAAA,gBAAAA,GAAU,kBAAV,gBAAA4G,GAAyB,UAAS,OAClCE,KAAA9G,MAAA,gBAAAA,GAAU,iBAAV,gBAAA8G,GAAwB,UAAS,MAEjCZ,GAAM,QAAQ,iBAAiB;AAAA,UAC7B,UAAU;AAAA,UACV,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,cAAc;AAAA,UACd,WAAW;AAAA,QAAA,CACZ,GAEH5G,GAAWuH,EAAe,cAAaA,KAAA,gBAAAA,EAAgB,SAAQ;AAAA,MAEjE;AAAA,IA+BF,SAASzG,GAAY;AACnB,MAAAyI,EAAU,EAAK,GACf,QAAQ,MAAM,yBAAyBzI,CAAK,GAC5C8F,GAAM,MAAM,iCAAiC;AAAA,QAC3C,UAAU;AAAA,QACV,WAAW;AAAA,MAAA,CACZ,KAGCa,KAAA3G,KAAA,gBAAAA,EAAO,aAAP,gBAAA2G,GAAiB,YAAW;AAAA,QAC5BC,IAAA5G,KAAA,gBAAAA,EAAO,aAAP,gBAAA4G,EAAiB,YAAW,SAGxBC,KAAA7G,KAAA,gBAAAA,EAAO,aAAP,gBAAA6G,GAAiB,YAAW,OAC9B1B,GAAkB,IAAI,KAGpB2B,KAAA9G,KAAA,gBAAAA,EAAO,aAAP,gBAAA8G,GAAiB,YAAW,QAC9B3B,GAAkB,IAAI,GACtBC,GAAe,IAAI,OAGrB,QAAQ,MAAM,oCAAoCpF,EAAM,OAAO,GAC/D8F,GAAM,MAAM,iCAAiC;AAAA,QAC3C,UAAU;AAAA,QACV,WAAW;AAAA,MAAA,CACZ;AAAA,IAEL;AACA,IAAA2C,EAAU,EAAK;AAAA,EACjB;AAOA,SAAA1K,GAAU,MAAM;AACd,IAAIuK,IAAW,WAAW,MAAMD,EAAe,EAAI,GAAG,EAAE,MACpC,EAAK;AAAA,EAC3B,GAAG,CAACC,CAAS,CAAC,GAIZ,gBAAAtJ,EAAC,SAAI,WAAU,gCACb,4BAACK,IAAA,EAAQ,MAAM6I,GAAQ,cAAcC,GACnC,UAAA;AAAA,IAAA,gBAAAnJ;AAAA,MAACQ;AAAA,MAAA;AAAA,QACC,SAAS,MAAM2I,EAAU,EAAI;AAAA,QAC7B,OACE;AAAA;AAAA,QAAA;AAAA,QAIF,WAAU;AAAA,QAEV,UAAA,gBAAAnJ,EAAC,OAAA,EAAI,WAAU,iBACb,UAAA,gBAAAmF;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,OAAM;AAAA,YACN,QAAO;AAAA,YACP,SAAQ;AAAA,YACR,MAAK;AAAA,YACL,OAAM;AAAA,YAEN,UAAA;AAAA,cAAA,gBAAAA,EAAC,KAAA,EAAE,UAAS,uBACV,UAAA;AAAA,gBAAA,gBAAAnF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,GAAE;AAAA,oBACF,MAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEP,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,GAAE;AAAA,oBACF,MAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEP,gBAAAA;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,GAAE;AAAA,oBACF,MAAK;AAAA,kBAAA;AAAA,gBAAA;AAAA,cACP,GACF;AAAA,gCACC,QAAA,EACC,UAAA;AAAA,gBAAA,gBAAAmF;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBACC,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,IAAG;AAAA,oBACH,eAAc;AAAA,oBAEd,UAAA;AAAA,sBAAA,gBAAAnF,EAAC,QAAA,EAAK,WAAU,WAAU;AAAA,wCACzB,QAAA,EAAK,QAAO,KAAI,WAAU,WAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAAA;AAAA,kCAEtC,YAAA,EAAS,IAAG,iBACX,UAAA,gBAAAA,EAAC,QAAA,EAAK,OAAM,MAAK,QAAO,MAAK,MAAK,QAAA,CAAQ,GAC5C;AAAA,cAAA,GACF;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,GAEJ;AAAA,MAAA;AAAA,IAAA;AAAA,IAIDsJ,KACC,gBAAAnE,EAAA+C,IAAA,EAEE,UAAA;AAAA,MAAA,gBAAAlI;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAMmJ,EAAU,EAAK;AAAA,QAAA;AAAA,MAAA;AAAA,MAEhC,gBAAAhE;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYX,OAAO;AAAA,YACL,YACE;AAAA,UAAA;AAAA,UAIJ,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAW;AAAA,gBAEX,UAAA;AAAA,kBAAA,gBAAAnF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK;AAAA,sBAAA;AAAA,sBAGP,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA;AAAA,wBAAA,gBAAAA;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAU;AAAA,4BACV,OAAO;AAAA,8BACL,YACE;AAAA,4BAAA;AAAA,4BAGJ,UAAA;AAAA,8BAAA,gBAAAA;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,OAAM;AAAA,kCACN,QAAO;AAAA,kCACP,SAAQ;AAAA,kCACR,MAAK;AAAA,kCACL,OAAM;AAAA,kCAEN,UAAA;AAAA,oCAAA,gBAAAnF;AAAA,sCAAC;AAAA,sCAAA;AAAA,wCACC,GAAE;AAAA,wCACF,MAAK;AAAA,sCAAA;AAAA,oCAAA;AAAA,sDAEN,QAAA,EAAK,GAAE,8BAA6B,MAAK,SAAQ;AAAA,kCAAA;AAAA,gCAAA;AAAA,8BAAA;AAAA,gDAGnD,KAAA,EAAE,WAAU,gDAA+C,UAAA,SAE5D;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBAEF,gBAAAmF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAU;AAAA,4BACV,OAAO,EAAE,WAAW,SAAA;AAAA,4BAEnB,UAAA;AAAA,8BAAA;AAAA,8BAAI;AAAA,8BACwB;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAC/B,GACF;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEF,gBAAAnF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK;AAAA,wBACL,QAAQ;AAAA,sBAAA;AAAA,sBAIV,4BAAC,UAAA,EAAO,SAAS,MAAMmJ,EAAU,EAAK,GACpC,UAAA,gBAAAhE;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,SAAQ;AAAA,0BACR,MAAK;AAAA,0BACL,OAAM;AAAA,0BAEN,UAAA;AAAA,4BAAA,gBAAAA,EAAC,KAAA,EAAE,UAAS,wBACV,UAAA;AAAA,8BAAA,gBAAAnF;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,GAAE;AAAA,kCACF,QAAO;AAAA,kCACP,aAAY;AAAA,kCACZ,eAAc;AAAA,kCACd,gBAAe;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAEjB,gBAAAA;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,GAAE;AAAA,kCACF,QAAO;AAAA,kCACP,aAAY;AAAA,kCACZ,eAAc;AAAA,kCACd,gBAAe;AAAA,gCAAA;AAAA,8BAAA;AAAA,4BACjB,GACF;AAAA,4BACA,gBAAAA,EAAC,QAAA,EACC,4BAAC,YAAA,EAAS,IAAG,kBACX,UAAA,gBAAAA;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,OAAM;AAAA,gCACN,QAAO;AAAA,gCACP,MAAK;AAAA,gCACL,WAAU;AAAA,8BAAA;AAAA,4BAAA,EACZ,CACF,EAAA,CACF;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAAA,GAEJ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAIF,gBAAAmF,EAAC,OAAA,EAAI,WAAW,uCACd,UAAA;AAAA,cAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WAAW,wBACTT,KAAU,oBAAoB,QAChC;AAAA,kBAGA,UAAA;AAAA,oBAAA,gBAAAS;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAKmF;AAAA,wBACL,WAAU;AAAA,wBAGT,UAAA;AAAA,2BAAA9E,KAAA,gBAAAA,EAAc,iBACb,gBAAAL;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,WAAU;AAAA,8BAOV,UAAA;AAAA,gCAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,2BAOb,UAAA,gBAAAA,EAAC,OAAE,WAAU,4CAA2C,8CAExD,GACF;AAAA,kDAEC,OAAA,EAAI,WAAU,6BACZ,UAAAyI,EAAgB,IAAI,CAACkF,MACpB,gBAAA3N;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCAEC,SAAS,MAAM6K,GAAoB8C,CAAM;AAAA,oCACzC,WAAU;AAAA,oCACV,OAAO;AAAA,sCACL,iBACE3D,OAAStB,EAAeiF,CAAM,IAC1B,YACA;AAAA,sCACN,aACE3D,OAAStB,EAAeiF,CAAM,IAC1B,YACA;AAAA,oCAAA;AAAA,oCAGP,UAAAA;AAAA,kCAAA;AAAA,kCAdIA;AAAA,gCAAA,CAgBR,GACH;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAIHvD,GAAY,IAAI,CAAC7E,GAAMtB;;qDACrB,OAAA,EACC,UAAA;AAAA,8BAAA,gBAAAjE;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCAKV,4BAAC,KAAA,EAAE,WAAU,6IACV,YAAK,MAAA,CACR;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAEDuF,EAAK,YAAYA,EAAK,SAAS,SAAS,UAAU,sBAChD,OAAA,EACC,UAAA,gBAAAvF;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,yBAAyB;AAAA,oCACvB,QAAQ8D,GAAmByB,EAAK,QAAQ;AAAA,kCAAA;AAAA,gCAC1C;AAAA,8BAAA,GAEJ,IAEA,gBAAAvF,EAAC,OAAA,EACC,UAAA,gBAAAA;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,yBAAyB;AAAA,oCACvB,QAAQ8D,GAAmByB,EAAK,QAAQ;AAAA,kCAAA;AAAA,gCAC1C;AAAA,8BAAA,GAEJ;AAAA,8BAEDqE,MACC,CAACrE,EAAK,SAAS,SAAS,UAAU,OAClC3D,IAAA2D,EAAK,aAAL,gBAAA3D,EAAe,WAAU,uBACtB,OAAA,EACC,UAAA,gBAAA5B,EAAC,OAAE,WAAU,2JAA0J,2CAEvK,GACF;AAAA,+BAEHuF,KAAA,gBAAAA,EAAM,eAAY/B,IAAA+B,KAAA,gBAAAA,EAAM,aAAN,gBAAA/B,EAAgB,UAAS,KAC1C,gBAAAxD;AAAA,gCAACsF;AAAA,gCAAA;AAAA,kCACC,MAAMC,EAAK;AAAA,kCACX,cAAAC;AAAA,gCAAA;AAAA,8BAAA;AAAA,+BAKHD,KAAA,gBAAAA,EAAM,mBAAmB,UAAS,uBAChC,OAAA,EAAI,WAAU,mCACb,UAAA;AAAA,gCAAA,gBAAAvF;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCACC,WAAU;AAAA,oCACV,OAAO,EAAE,OAAOwF,EAAa,eAAA;AAAA,oCAC9B,UAAA;AAAA,kCAAA;AAAA,gCAAA;AAAA,gCAGAD,EAAK,mBACH,MAAM,GAAG,EACT,IAAI,CAACiH,GAAUd,MACd,gBAAA1L;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCAEC,WAAW,4FAA4FwF,EAAa,cAAc;AAAA,oCAClI,SAAS,MAAM+G,GAAkBC,CAAQ;AAAA,oCACzC,OAAO;AAAA,sCACL,iBACEhH,EAAa;AAAA,oCAAA;AAAA,oCAGhB,UAAAgH;AAAA,kCAAA;AAAA,kCARId;AAAA,gCAAA,CAUR;AAAA,8BAAA,GACL;AAAA,+BAGDnG,KAAA,gBAAAA,EAAM,qBACL,gBAAAvF,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA,gBAAAmF;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,OAAO;AAAA,oCACL,QAAQ;AAAA,kCAAA;AAAA,kCAGV,UAAA;AAAA,oCAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,wDAAC,OAAA,EAAI,WAAU,iCAAgC,UAAA,KAE/C;AAAA,wDACC,OAAA,EAAI,WAAU,iCAAgC,UAAA,KAE/C;AAAA,wDACC,OAAA,EAAI,WAAU,iCAAgC,UAAA,KAE/C;AAAA,oCAAA,GACF;AAAA,oCACA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iBAAgB;AAAA,oCAC/B,gBAAAA;AAAA,sCAAC;AAAA,sCAAA;AAAA,wCACC,WAAU;AAAA,wCACV,OAAO,EAAE,OAAOwF,EAAa,eAAA;AAAA,wCAC9B,UAAA;AAAA,sCAAA;AAAA,oCAAA;AAAA,oCAID,gBAAAxF;AAAA,sCAAC;AAAA,sCAAA;AAAA,wCACC,WAAU;AAAA,wCACV,OAAO,EAAE,OAAOwF,EAAa,eAAA;AAAA,wCAC9B,UAAA;AAAA,sCAAA;AAAA,oCAAA;AAAA,kCAED;AAAA,gCAAA;AAAA,8BAAA,GAEJ;AAAA,+BAIDD,KAAA,gBAAAA,EAAM,sBACL,gBAAAvF,EAAAkI,IAAA,EACE,UAAA,gBAAA/C,EAAC,OAAA,EAAI,WAAU,iDAEb,UAAA;AAAA,gCAAA,gBAAAnF;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCACC,WAAU;AAAA,oCACV,OAAO;AAAA,sCACL,iBACEwF,EAAa;AAAA,oCAAA;AAAA,oCAEjB,yBAAyB;AAAA,sCACvB,QAAQ1B;AAAA,wCACNyB,EAAK;AAAA,sCAAA;AAAA,oCACP;AAAA,kCACF;AAAA,gCAAA;AAAA,gCAEDA,EAAK;AAAA,gCAEJ,gBAAAvF,EAAC,OAAA,EAAI,WAAU,eACb,UAAA,gBAAAmF;AAAA,kCAAC;AAAA,kCAAA;AAAA,oCACC,WAAU;AAAA,oCACV,OAAO;AAAA,sCACL,iBACEK,EAAa;AAAA,oCAAA;AAAA,oCAGjB,UAAA;AAAA,sCAAA,gBAAAxF;AAAA,wCAAC;AAAA,wCAAA;AAAA,0CACC,WAAU;AAAA,0CACV,OAAO;AAAA,4CACL,OAAO;AAAA,4CACP,QAAQ;AAAA,4CACR,aAAa;AAAA,0CAAA;AAAA,0CAGd,UAAAuF,EAAK,gBAAgB,QACpB,gBAAAvF;AAAA,4CAAC;AAAA,4CAAA;AAAA,8CACC,KAAKuF,EAAK,gBAAgB;AAAA,8CAC1B,KAAKA,EAAK,gBAAgB;AAAA,8CAC1B,WAAU;AAAA,4CAAA;AAAA,0CAAA,sBAGX,OAAA,EAAI,WAAU,wEAAuE,UAAA,YAEtF;AAAA,wCAAA;AAAA,sCAAA;AAAA,sCAIJ,gBAAAJ,EAAC,OAAA,EAAI,WAAU,wCACb,UAAA;AAAA,wCAAA,gBAAAA,EAAC,OAAA,EACC,UAAA;AAAA,0CAAA,gBAAAnF,EAAC,KAAA,EAAE,WAAU,0CACV,UAAAuF,EAAK,gBAAgB,MACxB;AAAA,0CACA,gBAAAvF,EAAC,KAAA,EAAE,WAAU,gCACV,UAAAuF,EAAK,gBAAgB,SAAS,OAC3B,IAAI,KAAK,aAAa,QAAW;AAAA,4CAC/B,OAAO;AAAA,4CACP,WACEC,KAAA,gBAAAA,EAAc,aACd;AAAA,0CAAA,CACH,EAAE;AAAA,4CACDD,EAAK,gBAAgB;AAAA,0CAAA,IAEvB,IACN;AAAA,0CAECA,EAAK,gBAAgB,SAAS,uBAC5B,KAAA,EAAE,WAAU,2BAA0B,UAAA;AAAA,4CAAA;AAAA,4CACvB;AAAA,8DACb,UAAA,EACE,UAAA;AAAA,8CAAAA,EAAK,gBAAgB;AAAA,8CAAQ;AAAA,8CAAI;AAAA,4CAAA,GAEpC;AAAA,0CAAA,GACF;AAAA,wCAAA,GAEJ;AAAA,wCAEA,gBAAAJ,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,0CAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yDACb,UAAA;AAAA,4CAAA,gBAAAnF;AAAA,8CAAC;AAAA,8CAAA;AAAA,gDACC,WAAU;AAAA,gDACV,SAAS,MACPqK;AAAA,kDAAe,CAACmB,MACdA,EAAK;AAAA,oDAAI,CAACoC,GAAGlI,OACXA,OAAMzB,KACN2J,EAAE,kBACE;AAAA,sDACE,GAAGA;AAAA,sDACH,iBAAiB;AAAA,wDACf,GAAGA,EAAE;AAAA,wDACL,UAAU,KAAK;AAAA,0DACb;AAAA,0DACAA,EAAE,gBACC,WAAW;AAAA,wDAAA;AAAA,sDAChB;AAAA,oDACF,IAEFA;AAAA,kDAAA;AAAA,gDACN;AAAA,gDAGJ,OAAO;AAAA,kDACL,YAAY;AAAA,kDACZ,OACEpI,EAAa;AAAA,gDAAA;AAAA,gDAElB,UAAA;AAAA,8CAAA;AAAA,4CAAA;AAAA,8DAGA,OAAA,EAAI,WAAU,iCACZ,UAAAD,EAAK,gBAAgB,UACxB;AAAA,4CACA,gBAAAvF;AAAA,8CAAC;AAAA,8CAAA;AAAA,gDACC,WAAU;AAAA,gDACV,SAAS,MACPqK;AAAA,kDAAe,CAACmB,MACdA,EAAK;AAAA,oDAAI,CAACoC,GAAGlI,OACXA,OAAMzB,KACN2J,EAAE,kBACE;AAAA,sDACE,GAAGA;AAAA,sDACH,iBAAiB;AAAA,wDACf,GAAGA,EAAE;AAAA,wDACL,UACEA,EAAE,gBACC,WAAW;AAAA,sDAAA;AAAA,oDAClB,IAEFA;AAAA,kDAAA;AAAA,gDACN;AAAA,gDAGJ,OAAO;AAAA,kDACL,YAAY;AAAA,kDACZ,OACEpI,EAAa;AAAA,gDAAA;AAAA,gDAElB,UAAA;AAAA,8CAAA;AAAA,4CAAA;AAAA,0CAED,GACF;AAAA,0CACA,gBAAAxF;AAAA,4CAAC;AAAA,4CAAA;AAAA,8CACC,SAAS,MAAM;AACb,gDAAAwN;AAAA,kDACEtD;AAAA,oDACE3E,EAAK;AAAA,kDAAA;AAAA,kDAEPA,EAAK,gBAAiB;AAAA,gDAAA;AAAA,8CAE1B;AAAA,8CACA,UAAUiE;AAAA,8CACV,WAAU;AAAA,8CACV,OAAO;AAAA,gDACL,YACEhE,EAAa;AAAA,gDACf,QACEA,KAAA,gBAAAA,EAAc,4BACd;AAAA,gDACF,SAASgE,IAAS,MAAM;AAAA,8CAAA;AAAA,8CAGzB,cAAS,cAAc;AAAA,4CAAA;AAAA,0CAAA;AAAA,wCAC1B,GACF;AAAA,sCAAA,GACF;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCAAA,GAEJ;AAAA,8BAAA,EAAA,CAEJ,EAAA,CACF;AAAA,8BAEF,gBAAAxJ,EAAC,OAAA,EAAI,WAAU,SAAQ;AAAA,4BAAA,EAAA,GAzRfiE,CA0RV;AAAA,2BACD;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAIH,gBAAAjE,EAAC,OAAA,EAAI,WAAU,kFAEb,UAAA,gBAAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,OAAO;AAAA,0BACL,YACE;AAAA,wBAAA;AAAA,wBAIJ,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,8DACb,UAAA;AAAA,0BAAA,gBAAAnF;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,WAAU;AAAA,8BACV,aAAY;AAAA,8BACZ,OAAO8J;AAAA,8BACP,WAAS;AAAA,8BACT,UAAU,CAAC3B,MAAM4B,GAAa5B,EAAE,OAAO,KAAK;AAAA,8BAC5C,WAAW,CAACA,MAAM;AAChB,gCAAIA,EAAE,QAAQ,WAAW,CAACuB,KACxB6C,GAAA;AAAA,8BACJ;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAgDF,gBAAAvM;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,MAAK;AAAA,8BACL,UAAU0J;AAAA,8BACV,WAAU;AAAA,8BACV,SAAS,MAAM6C,GAAA;AAAA,8BAEd,UAAA7C,IACC,gBAAA1J;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,WAAU;AAAA,kCACV,OAAO;AAAA,oCACL,cAAc;AAAA,oCACd,OAAOwF,EAAa;AAAA,kCAAA;AAAA,gCACtB;AAAA,8BAAA,IAGF,gBAAAxF;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,OAAM;AAAA,kCACN,QAAO;AAAA,kCACP,SAAQ;AAAA,kCACR,MAAK;AAAA,kCACL,OAAM;AAAA,kCAEN,UAAA,gBAAAA;AAAA,oCAAC;AAAA,oCAAA;AAAA,sCACC,GAAE;AAAA,sCACF,MAAK;AAAA,oCAAA;AAAA,kCAAA;AAAA,gCACP;AAAA,8BAAA;AAAA,4BACF;AAAA,0BAAA;AAAA,wBAEJ,GACF;AAAA,sBAAA;AAAA,oBAAA,GAEJ;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGF,gBAAAA,EAACuG,IAAA,EAAmB,cAAcM,GAAW;AAAA,YAAA,GAC/C;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAEF,GACF;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;ACr0CA,IAAIgH,KAAgB,SAASC,GAAGC,GAAG;AACjC,SAAAF,KAAgB,OAAO,kBAClB,EAAE,WAAW,CAAA,eAAgB,SAAS,SAAUC,GAAGC,GAAG;AAAE,IAAAD,EAAE,YAAYC;AAAA,EAAG,KAC1E,SAAUD,GAAGC,GAAG;AAAE,aAASX,KAAKW,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAGX,CAAC,MAAGU,EAAEV,CAAC,IAAIW,EAAEX,CAAC;AAAA,EAAG,GAC7FS,GAAcC,GAAGC,CAAC;AAC3B;AAEO,SAASC,GAAUF,GAAGC,GAAG;AAC9B,MAAI,OAAOA,KAAM,cAAcA,MAAM;AACjC,UAAM,IAAI,UAAU,yBAAyB,OAAOA,CAAC,IAAI,+BAA+B;AAC5F,EAAAF,GAAcC,GAAGC,CAAC;AAClB,WAASE,IAAK;AAAE,SAAK,cAAcH;AAAA,EAAG;AACtC,EAAAA,EAAE,YAAYC,MAAM,OAAO,OAAO,OAAOA,CAAC,KAAKE,EAAG,YAAYF,EAAE,WAAW,IAAIE,EAAE;AACnF;AAEO,IAAIC,KAAW,WAAW;AAC/B,SAAAA,KAAW,OAAO,UAAU,SAAkB,GAAG;AAC7C,aAASxH,GAAGhB,IAAI,GAAGyI,IAAI,UAAU,QAAQzI,IAAIyI,GAAGzI,KAAK;AACjD,MAAAgB,IAAI,UAAUhB,CAAC;AACf,eAAS0H,KAAK1G,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAG0G,CAAC,MAAG,EAAEA,CAAC,IAAI1G,EAAE0G,CAAC;AAAA,IAC/E;AACA,WAAO;AAAA,EACX,GACOc,GAAS,MAAM,MAAM,SAAS;AACvC;AAEO,SAASE,GAAO1H,GAAGyB,GAAG;AAC3B,MAAIkG,IAAI,CAAA;AACR,WAASjB,KAAK1G,EAAG,CAAI,OAAO,UAAU,eAAe,KAAKA,GAAG0G,CAAC,KAAKjF,EAAE,QAAQiF,CAAC,IAAI,MAC9EiB,EAAEjB,CAAC,IAAI1G,EAAE0G,CAAC;AACd,MAAI1G,KAAK,QAAQ,OAAO,OAAO,yBAA0B;AACrD,aAAShB,IAAI,GAAG0H,IAAI,OAAO,sBAAsB1G,CAAC,GAAGhB,IAAI0H,EAAE,QAAQ1H;AAC/D,MAAIyC,EAAE,QAAQiF,EAAE1H,CAAC,CAAC,IAAI,KAAK,OAAO,UAAU,qBAAqB,KAAKgB,GAAG0G,EAAE1H,CAAC,CAAC,MACzE2I,EAAEjB,EAAE1H,CAAC,CAAC,IAAIgB,EAAE0G,EAAE1H,CAAC,CAAC;AAE5B,SAAO2I;AACT;ACnDA,IAAIC,KAAiB,uBACjB1M,KAAK,OAAO,gBAAgB2M,KAAiB3M,OAAO,SAAS,SAAU4M,GAAKC,GAAO;AACnF,SAAAD,EAAI,YAAYC,GACTD;AACX,IAAI5M,IACA8M;AAAA;AAAA,GAAgC,SAAUC,GAAQ;AAClD,IAAAX,GAAUU,GAAgBC,CAAM;AAChC,aAASD,EAAeE,GAAS;AAC7B,MAAIA,MAAY,WAAUA,IAAUN;AACpC,UAAIO,IAAQF,EAAO,KAAK,MAAM,OAAOC,KAAY,WAC3CN,KAAiB,OAAOM,IAAU,+DAClCA,CAAO,KAAK;AAClB,aAAAC,EAAM,cAAc,GACpBA,EAAM,OAAOP,IACbC,GAAeM,GAAOH,EAAe,SAAS,GACvCG;AAAA,IACX;AACA,WAAOH;AAAA,EACX,GAAE,KAAK;AAAA;AAEA,SAASI,GAAUC,GAAWH,GAAS;AAC1C,MAAI,CAACG;AACD,UAAM,IAAIL,GAAeE,CAAO;AAExC;AACA,IAAII,KAAkB,CAAC,SAAS,OAAO,QAAQ,SAAS,QAAQ,GAC5DC,KAAiBD,GAAgB,QAAQ,KAAK;AAClD,SAASE,GAAkBC,GAAM;AAC7B,SAAO,WAAY;AACf,QAAIH,GAAgB,QAAQG,CAAI,KAAKF,IAAgB;AAGjD,UAAIG,IAAS,QAAQD,CAAI,KAAK,QAAQ;AACtC,aAAOC,EAAO,MAAM,SAAS,SAAS;AAAA,IAC1C;AAAA,EACJ;AACJ;AAAA,CACC,SAAUN,GAAW;AAClB,EAAAA,EAAU,QAAQI,GAAkB,OAAO,GAC3CJ,EAAU,MAAMI,GAAkB,KAAK,GACvCJ,EAAU,OAAOI,GAAkB,MAAM,GACzCJ,EAAU,QAAQI,GAAkB,OAAO;AAC/C,GAAGJ,OAAcA,KAAY,CAAA,EAAG;AC3CzB,IAAIO,KAAU;ACAd,SAASC,GAAMC,GAAO;AACzB,MAAI;AACA,WAAOA,EAAK;AAAA,EAChB,QACW;AAAA,EAAE;AACjB;ACJA,MAAAC,KAAgBF,GAAM,WAAY;AAAE,SAAO;AAAY,CAAC,KACpDA,GAAM,WAAY;AAAE,SAAO;AAAQ,CAAC,KACpCA,GAAM,WAAY;AAAE,SAAO;AAAM,CAAC,KAClCA,GAAM,WAAY;AAAE,SAAO;AAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAMxCA,GAAM,WAAY;AACd,SAAOA,GAAM,YAAY,aAAa,EAAC;AAC3C,CAAC;ACZD,IAAIG,KAAe,oBAAI,IAAG;AAGnB,SAASC,GAAaC,GAAQ;AACjC,MAAIC,IAAQH,GAAa,IAAIE,CAAM,KAAK;AACxC,SAAAF,GAAa,IAAIE,GAAQC,IAAQ,CAAC,GAC3B,GAAG,OAAOD,GAAQ,GAAG,EAAE,OAAOC,GAAO,GAAG,EAAE,OAAO,KAAK,SAAS,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AAC/F;ACNO,SAASC,GAAoB1D,GAAO2D,GAAO;AAE9C,MAAIC,IAAUL,GAAa,qBAAqB;AAChD,SAAO,KAAK,UAAUvD,GAAO,SAAU6D,GAAK7D,GAAO;AAC/C,WAAOA,MAAU,SAAS4D,IAAU5D;AAAA,EACxC,GAAG2D,CAAK,EACH,MAAM,KAAK,UAAUC,CAAO,CAAC,EAC7B,KAAK,aAAa;AAC3B;ACLA,SAASE,GAAKC,GAAI;AACd,SAAO,SAAUtB,GAAS;AAEtB,aADIuB,IAAO,CAAA,GACF5I,IAAK,GAAGA,IAAK,UAAU,QAAQA;AACpC,MAAA4I,EAAK5I,IAAK,CAAC,IAAI,UAAUA,CAAE;AAE/B,QAAI,OAAOqH,KAAY,UAAU;AAC7B,UAAIwB,IAAOxB;AACX,MAAAA,IAAUyB,GAAmBD,CAAI,GAC5BxB,MACDA,IAAU0B,GAAoBF,GAAMD,CAAI,GACxCA,IAAO,CAAA;AAAA,IAEf;AACA,IAAAD,EAAG,MAAM,QAAQ,CAACtB,CAAO,EAAE,OAAOuB,CAAI,CAAC;AAAA,EAC3C;AACJ;AACA,IAAIrB,KAAY,OAAO,OAAO,SAAmBC,GAAWH,GAAS;AAEjE,WADIuB,IAAO,CAAA,GACF5I,IAAK,GAAGA,IAAK,UAAU,QAAQA;AACpC,IAAA4I,EAAK5I,IAAK,CAAC,IAAI,UAAUA,CAAE;AAE/B,EAAKwH,KACDwB,GAAkBxB,GAAWsB,GAAmBzB,GAASuB,CAAI,KAAKG,GAAoB1B,GAASuB,CAAI,CAAC;AAE5G,GAAG;AAAA,EACC,OAAOF,GAAKM,GAAkB,KAAK;AAAA,EACnC,KAAKN,GAAKM,GAAkB,GAAG;AAAA,EAC/B,MAAMN,GAAKM,GAAkB,IAAI;AAAA,EACjC,OAAON,GAAKM,GAAkB,KAAK;AACvC,CAAC;AAWD,SAASC,GAAkB5B,GAAS;AAEhC,WADI6B,IAAiB,CAAA,GACZlJ,IAAK,GAAGA,IAAK,UAAU,QAAQA;AACpC,IAAAkJ,EAAelJ,IAAK,CAAC,IAAI,UAAUA,CAAE;AAEzC,SAAO,IAAImH,GAAe2B,GAAmBzB,GAAS6B,CAAc,KAChEH,GAAoB1B,GAAS6B,CAAc,CAAC;AACpD;AACA,IAAIC,KAA4B,OAAO,IAAI,+BAA+BrB,EAAO;AACjF,SAASsB,GAAUC,GAAK;AACpB,MAAI,OAAOA,KAAO;AACd,WAAOA;AAEX,MAAI;AACA,WAAOf,GAAoBe,GAAK,CAAC,EAAE,MAAM,GAAG,GAAI;AAAA,EACpD,QACW;AACP,WAAO;AAAA,EACX;AACJ;AACA,SAASP,GAAmBzB,GAASiC,GAAa;AAE9C,MADIA,MAAgB,WAAUA,IAAc,CAAA,IACxC,EAACjC;AAEL,WAAQkC,GAAOJ,EAAyB,KACpCI,GAAOJ,EAAyB,EAAE9B,GAASiC,EAAY,IAAIF,EAAS,CAAC;AAC7E;AACA,SAASL,GAAoB1B,GAASiC,GAAa;AAE/C,MADIA,MAAgB,WAAUA,IAAc,CAAA,IACxC,EAACjC;AAEL,WAAO,+FAA+F,OAAO,mBAAmB,KAAK,UAAU;AAAA,MAC3I,SAASS;AAAA,MACT,SAAST;AAAA,MACT,MAAMiC,EAAY,IAAIF,EAAS;AAAA,IACvC,CAAK,CAAC,CAAC;AACP;AC3DO,SAASI,GAAiBC,GAAK;AAClC,SAAQA,EAAI,YACP,OAAO,SAAUC,GAAY;AAC9B,WAAOA,EAAW,SAAS,yBAAyB,CAAC,CAACA,EAAW;AAAA,EACrE,CAAC,EACI,IAAI,SAAUC,GAAG;AAAE,WAAOA,EAAE,KAAK;AAAA,EAAO,CAAC,EAAE,CAAC,KAAK;AAC1D;ACzBA,IAAIC,KAAiB;AAGrB,MAAMC,KAAgB,CAAA;AACtB,IAAIC,KAAY;AAIhB,MAAMC,KAAgB,MAAM,MAAW;AAAA,EACnC,cAAc;AAIV,SAAK,KAAK;AAAA,MACN;AAAA,MACAD;AAAAA,MACA,KAAK,IAAG;AAAA,MACR,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,CAAC;AAAA,IAC9C,EAAU,KAAK,GAAG;AAAA,EACd;AAAA,EACA,WAAW;AACP,aAASE,IAAUJ,IAAgBI,GAASA,IAAUA,EAAQ;AAG1D,UAAI,KAAK,MAAMA,EAAQ,OAAO;AAC1B,cAAMpF,IAAQoF,EAAQ,MAAM,KAAK,EAAE;AACnC,YAAIpF,MAAUiF;AACV;AACJ,eAAIG,MAAYJ,OAIZA,GAAe,MAAM,KAAK,EAAE,IAAIhF,IAE7B;AAAA,MACX;AAEJ,WAAIgF,OAIAA,GAAe,MAAM,KAAK,EAAE,IAAIC,KAE7B;AAAA,EACX;AAAA,EACA,WAAW;AACP,QAAI,KAAK;AACL,aAAOD,GAAe,MAAM,KAAK,EAAE;AAAA,EAE3C;AAAA,EACA,UAAUhF,GAAOqF,GAGjBrB,GAAMsB,GAAS;AACX,UAAMC,IAAQ;AAAA,MACV,WAAW;AAAA,MACX,CAAC,KAAK,EAAE,GAAGvF;AAAA,IACvB,GACcwF,IAASR;AACf,IAAAA,KAAiB,EAAE,QAAAQ,GAAQ,OAAAD,EAAK;AAChC,QAAI;AAGA,aAAOF,EAAS,MAAMC,GAAStB,CAAI;AAAA,IACvC,UACR;AACY,MAAAgB,KAAiBQ;AAAA,IACrB;AAAA,EACJ;AAAA;AAAA;AAAA,EAGA,OAAO,KAAKH,GAAU;AAClB,UAAMD,IAAUJ;AAChB,WAAO,WAAY;AACf,YAAMS,IAAQT;AACd,UAAI;AACA,eAAAA,KAAiBI,GACVC,EAAS,MAAM,MAAM,SAAS;AAAA,MACzC,UACZ;AACgB,QAAAL,KAAiBS;AAAA,MACrB;AAAA,IACJ;AAAA,EACJ;AAAA;AAAA,EAEA,OAAO,UAAUJ,GAGjBrB,GAAMsB,GAAS;AACX,QAAIN,IAAgB;AAChB,YAAMS,IAAQT;AACd,UAAI;AACA,eAAAA,KAAiB,MAGVK,EAAS,MAAMC,GAAStB,CAAI;AAAA,MACvC,UACZ;AACgB,QAAAgB,KAAiBS;AAAA,MACrB;AAAA,IACJ;AAEI,aAAOJ,EAAS,MAAMC,GAAStB,CAAI;AAAA,EAE3C;AACJ;AACA,SAASb,GAAMY,GAAI;AACf,MAAI;AACA,WAAOA,EAAE;AAAA,EACb,QACgB;AAAA,EAAE;AACtB;AASA,MAAM2B,KAAY,qBACZlP;AAAA;AAAA;AAAA,EAGN2M,GAAM,MAAM,UAAU;AAAA;AAAA;AAAA,EAIlBA,GAAM,MAAM,MAAM;AAAA;AAAA;AAAA,EAIlB,uBAAO,OAAO,IAAI;AAAA,GAGhBwC,KAAanP,IACNoP,KAAOD,GAAWD,EAAS;AAAA;AAGpC,MAAMA,EAAS,MACd,SAAUE,GAAM;AACb,MAAI;AACA,WAAO,eAAeD,IAAYD,IAAW;AAAA,MACzC,OAAOE;AAAA,MACP,YAAY;AAAA,MACZ,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOV,cAAc;AAAA,IAC9B,CAAa;AAAA,EACL,UACR;AACY,WAAOA;AAAA,EACX;AACJ,GAAGT,GAAa,CAAE,GC/JT,EAAE,MAAAU,IAAM,WAAAC,GAAS,IAAKF;ACDJ,IAAIA,GAAI;ACDvC,SAASG,GAAgCC,GAAGC,GAAgB;AAAE,MAAIC,IAAK,OAAO,SAAW,OAAeF,EAAE,OAAO,QAAQ,KAAKA,EAAE,YAAY;AAAG,MAAIE,EAAI,SAAQA,IAAKA,EAAG,KAAKF,CAAC,GAAG,KAAK,KAAKE,CAAE;AAAG,MAAI,MAAM,QAAQF,CAAC,MAAME,IAAKC,GAA4BH,CAAC,MAAMC,GAAqD;AAAE,IAAIC,MAAIF,IAAIE;AAAI,QAAI3M,IAAI;AAAG,WAAO,WAAY;AAAE,aAAIA,KAAKyM,EAAE,SAAe,EAAE,MAAM,GAAI,IAAW,EAAE,MAAM,IAAO,OAAOA,EAAEzM,GAAG,EAAC;AAAA,IAAI;AAAA,EAAG;AAAE,QAAM,IAAI,UAAU;AAAA,mFAAuI;AAAG;AAE3lB,SAAS4M,GAA4BH,GAAGI,GAAQ;AAAE,MAAKJ,GAAW;AAAA,QAAI,OAAOA,KAAM,SAAU,QAAOK,GAAkBL,GAAGI,CAAM;AAAG,QAAIpE,IAAI,OAAO,UAAU,SAAS,KAAKgE,CAAC,EAAE,MAAM,GAAG,EAAE;AAAgE,QAAzDhE,MAAM,YAAYgE,EAAE,gBAAahE,IAAIgE,EAAE,YAAY,OAAUhE,MAAM,SAASA,MAAM,MAAO,QAAO,MAAM,KAAKgE,CAAC;AAAG,QAAIhE,MAAM,eAAe,2CAA2C,KAAKA,CAAC,EAAG,QAAOqE,GAAkBL,GAAGI,CAAM;AAAA;AAAG;AAE/Z,SAASC,GAAkBC,GAAKC,GAAK;AAAE,GAAIA,KAAO,QAAQA,IAAMD,EAAI,YAAQC,IAAMD,EAAI;AAAQ,WAAS/M,IAAI,GAAGiN,IAAO,IAAI,MAAMD,CAAG,GAAGhN,IAAIgN,GAAKhN;AAAO,IAAAiN,EAAKjN,CAAC,IAAI+M,EAAI/M,CAAC;AAAK,SAAOiN;AAAM;AAEtL,SAASC,GAAkBC,GAAQvS,GAAO;AAAE,WAASoF,IAAI,GAAGA,IAAIpF,EAAM,QAAQoF,KAAK;AAAE,QAAIoN,IAAaxS,EAAMoF,CAAC;AAAG,IAAAoN,EAAW,aAAaA,EAAW,cAAc,IAAOA,EAAW,eAAe,IAAU,WAAWA,MAAYA,EAAW,WAAW,KAAM,OAAO,eAAeD,GAAQC,EAAW,KAAKA,CAAU;AAAA,EAAG;AAAE;AAE5T,SAASC,GAAaC,GAAaC,GAAYC,GAAa;AAAE,SAAID,KAAYL,GAAkBI,EAAY,WAAWC,CAAU,GAAOC,KAAaN,GAAkBI,GAAaE,CAAW,GAAG,OAAO,eAAeF,GAAa,aAAa,EAAE,UAAU,GAAK,CAAE,GAAUA;AAAa;AAG5R,IAAIG,KAAa,WAAY;AAC3B,SAAO,OAAO,UAAW;AAC3B,GAEIC,KAAY,SAAUjE,GAAM;AAC9B,SAAOgE,GAAU,KAAM,EAAQ,OAAOhE,CAAI;AAC5C,GAEIkE,KAAY,SAAUlE,GAAM;AAC9B,SAAOiE,GAAUjE,CAAI,IAAI,OAAOA,CAAI,IAAI,OAAOA;AACjD;AAEIgE,QAAgB,CAACC,GAAU,YAAY,MACzC,OAAO,aAAa,OAAO,YAAY;AAGzC,IAAIE,KAAiBD,GAAU,UAAU,GACrCE,KAAmBF,GAAU,YAAY,GACzCG,KAAgBH,GAAU,SAAS;AAEvC,SAASI,GAAUjF,GAAKwB,GAAK;AAC3B,MAAI7D,IAAQqC,EAAIwB,CAAG;AACnB,MAAI7D,KAAS,MACb;AAAA,QAAI,OAAOA,KAAU,WAAY,OAAM,IAAI,UAAUA,IAAQ,oBAAoB;AACjF,WAAOA;AAAA;AACT;AAEA,SAASuH,GAAWlF,GAAK;AACvB,MAAImF,IAAOnF,EAAI;AAEf,SAAImF,MAAS,WACXA,IAAOA,EAAKH,EAAa,GAErBG,MAAS,SACXA,IAAO,UAIJA,MAAS,SAAYA,IAAOC;AACrC;AAEA,SAASC,GAAa3C,GAAG;AACvB,SAAOA,aAAa0C;AACtB;AAEA,SAASE,GAAgB,GAAG;AAC1B,EAAIA,GAAgB,MAClBA,GAAgB,IAAI,CAAC,IAErB,WAAW,WAAY;AACrB,UAAM;AAAA,EACR,CAAC;AAEL;AAEA,SAASC,GAAQ7D,GAAI;AACnB,UAAQ,UAAU,KAAK,WAAY;AACjC,QAAI;AACF,MAAAA,EAAE;AAAA,IACJ,SAAS/H,GAAG;AACV,MAAA2L,GAAgB3L,CAAC;AAAA,IACnB;AAAA,EACF,CAAC;AACH;AAEA,SAAS6L,GAAoBC,GAAc;AACzC,MAAIC,IAAUD,EAAa;AAC3B,MAAIC,MAAY,WAChBD,EAAa,WAAW,QAEpB,EAACC;AAIL,QAAI;AACF,UAAI,OAAOA,KAAY;AACrB,QAAAA,EAAO;AAAA,WACF;AACL,YAAIC,IAAcV,GAAUS,GAAS,aAAa;AAElD,QAAIC,KACFA,EAAY,KAAKD,CAAO;AAAA,MAE5B;AAAA,IACF,SAAS/L,GAAG;AACV,MAAA2L,GAAgB3L,CAAC;AAAA,IACnB;AACF;AAEA,SAASiM,GAAkBH,GAAc;AACvC,EAAAA,EAAa,YAAY,QACzBA,EAAa,SAAS,QACtBA,EAAa,SAAS;AACxB;AAEA,SAASI,GAAkBJ,GAAc;AACvC,MAAIK,IAAQL,EAAa;AAEzB,MAAKK,GAIL;AAAA,IAAAL,EAAa,SAAS,QACtBA,EAAa,SAAS;AAEtB,aAASvO,IAAI,GAAGA,IAAI4O,EAAM,WACxBC,GAAmBN,GAAcK,EAAM5O,CAAC,EAAE,MAAM4O,EAAM5O,CAAC,EAAE,KAAK,GAC1DuO,EAAa,WAAW,WAFI,EAAEvO;AAElC;AAAA;AAEJ;AAEA,SAAS6O,GAAmBN,GAAcO,GAAMrI,GAAO;AACrD,EAAA8H,EAAa,SAAS;AACtB,MAAIQ,IAAWR,EAAa;AAE5B,MAAI;AACF,QAAIrG,IAAI6F,GAAUgB,GAAUD,CAAI;AAEhC,YAAQA,GAAI;AAAA,MACV,KAAK;AACH,QAAI5G,KAAGA,EAAE,KAAK6G,GAAUtI,CAAK;AAC7B;AAAA,MAEF,KAAK;AAEH,YADAiI,GAAkBH,CAAY,GAC1BrG,EAAG,CAAAA,EAAE,KAAK6G,GAAUtI,CAAK;AAAA,YAAO,OAAMA;AAC1C;AAAA,MAEF,KAAK;AACH,QAAAiI,GAAkBH,CAAY,GAC1BrG,KAAGA,EAAE,KAAK6G,CAAQ;AACtB;AAAA,IACR;AAAA,EACE,SAAStM,GAAG;AACV,IAAA2L,GAAgB3L,CAAC;AAAA,EACnB;AAEA,EAAI8L,EAAa,WAAW,WAAUD,GAAoBC,CAAY,IAAWA,EAAa,WAAW,cAAWA,EAAa,SAAS;AAC5I;AAEA,SAASS,GAAST,GAAcO,GAAMrI,GAAO;AAC3C,MAAI8H,EAAa,WAAW,UAE5B;AAAA,QAAIA,EAAa,WAAW,aAAa;AACvC,MAAAA,EAAa,OAAO,KAAK;AAAA,QACvB,MAAMO;AAAA,QACN,OAAOrI;AAAA,MACb,CAAK;AAED;AAAA,IACF;AAEA,QAAI8H,EAAa,WAAW,SAAS;AACnC,MAAAA,EAAa,SAAS,aACtBA,EAAa,SAAS,CAAC;AAAA,QACrB,MAAMO;AAAA,QACN,OAAOrI;AAAA,MACb,CAAK,GACD4H,GAAQ,WAAY;AAClB,eAAOM,GAAkBJ,CAAY;AAAA,MACvC,CAAC;AACD;AAAA,IACF;AAEA,IAAAM,GAAmBN,GAAcO,GAAMrI,CAAK;AAAA;AAC9C;AAEA,IAAIwI,KAA4B,4BAAY;AAC1C,WAASA,EAAaF,GAAUG,GAAY;AAG1C,SAAK,WAAW,QAChB,KAAK,YAAYH,GACjB,KAAK,SAAS,QACd,KAAK,SAAS;AACd,QAAII,IAAuB,IAAIC,GAAqB,IAAI;AAExD,QAAI;AACF,WAAK,WAAWF,EAAW,KAAK,QAAWC,CAAoB;AAAA,IACjE,SAAS1M,GAAG;AACV,MAAA0M,EAAqB,MAAM1M,CAAC;AAAA,IAC9B;AAEA,IAAI,KAAK,WAAW,mBAAgB,KAAK,SAAS;AAAA,EACpD;AAEA,MAAI4M,IAASJ,EAAa;AAE1B,SAAAI,EAAO,cAAc,WAAuB;AAC1C,IAAI,KAAK,WAAW,aAClBX,GAAkB,IAAI,GACtBJ,GAAoB,IAAI;AAAA,EAE5B,GAEAjB,GAAa4B,GAAc,CAAC;AAAA,IAC1B,KAAK;AAAA,IACL,KAAK,WAAY;AACf,aAAO,KAAK,WAAW;AAAA,IACzB;AAAA,EACJ,CAAG,CAAC,GAEKA;AACT,GAAC,GAEGG,KAAoC,4BAAY;AAClD,WAASA,EAAqBb,GAAc;AAC1C,SAAK,gBAAgBA;AAAA,EACvB;AAEA,MAAIe,IAAUF,EAAqB;AAEnC,SAAAE,EAAQ,OAAO,SAAc7I,GAAO;AAClC,IAAAuI,GAAS,KAAK,eAAe,QAAQvI,CAAK;AAAA,EAC5C,GAEA6I,EAAQ,QAAQ,SAAe7I,GAAO;AACpC,IAAAuI,GAAS,KAAK,eAAe,SAASvI,CAAK;AAAA,EAC7C,GAEA6I,EAAQ,WAAW,WAAoB;AACrC,IAAAN,GAAS,KAAK,eAAe,UAAU;AAAA,EACzC,GAEA3B,GAAa+B,GAAsB,CAAC;AAAA,IAClC,KAAK;AAAA,IACL,KAAK,WAAY;AACf,aAAO,KAAK,cAAc,WAAW;AAAA,IACvC;AAAA,EACJ,CAAG,CAAC,GAEKA;AACT,GAAC,GAEGlB,KAA0B,4BAAY;AACxC,WAASA,EAAWgB,GAAY;AAC9B,QAAI,EAAE,gBAAgBhB,GAAa,OAAM,IAAI,UAAU,2CAA2C;AAClG,QAAI,OAAOgB,KAAe,WAAY,OAAM,IAAI,UAAU,2CAA2C;AACrG,SAAK,cAAcA;AAAA,EACrB;AAEA,MAAIK,IAAUrB,EAAW;AAEzB,SAAAqB,EAAQ,YAAY,SAAmBR,GAAU;AAC/C,YAAI,OAAOA,KAAa,YAAYA,MAAa,UAC/CA,IAAW;AAAA,MACT,MAAMA;AAAA,MACN,OAAO,UAAU,CAAC;AAAA,MAClB,UAAU,UAAU,CAAC;AAAA,IAC7B,IAGW,IAAIE,GAAaF,GAAU,KAAK,WAAW;AAAA,EACpD,GAEAQ,EAAQ,UAAU,SAAiB/E,GAAI;AACrC,QAAIrB,IAAQ;AAEZ,WAAO,IAAI,QAAQ,SAAUqG,GAASC,GAAQ;AAC5C,UAAI,OAAOjF,KAAO,YAAY;AAC5B,QAAAiF,EAAO,IAAI,UAAUjF,IAAK,oBAAoB,CAAC;AAC/C;AAAA,MACF;AAEA,eAAShE,IAAO;AACd,QAAA+H,EAAa,YAAW,GACxBiB,EAAO;AAAA,MACT;AAEA,UAAIjB,IAAepF,EAAM,UAAU;AAAA,QACjC,MAAM,SAAU1C,GAAO;AACrB,cAAI;AACF,YAAA+D,EAAG/D,GAAOD,CAAI;AAAA,UAChB,SAAS/D,GAAG;AACV,YAAAgN,EAAOhN,CAAC,GACR8L,EAAa,YAAW;AAAA,UAC1B;AAAA,QACF;AAAA,QACA,OAAOkB;AAAA,QACP,UAAUD;AAAA,MAClB,CAAO;AAAA,IACH,CAAC;AAAA,EACH,GAEAD,EAAQ,MAAM,SAAa/E,GAAI;AAC7B,QAAIkF,IAAS;AAEb,QAAI,OAAOlF,KAAO,WAAY,OAAM,IAAI,UAAUA,IAAK,oBAAoB;AAC3E,QAAImF,IAAI3B,GAAW,IAAI;AACvB,WAAO,IAAI2B,EAAE,SAAUZ,GAAU;AAC/B,aAAOW,EAAO,UAAU;AAAA,QACtB,MAAM,SAAUjJ,GAAO;AACrB,cAAI;AACF,YAAAA,IAAQ+D,EAAG/D,CAAK;AAAA,UAClB,SAAShE,GAAG;AACV,mBAAOsM,EAAS,MAAMtM,CAAC;AAAA,UACzB;AAEA,UAAAsM,EAAS,KAAKtI,CAAK;AAAA,QACrB;AAAA,QACA,OAAO,SAAUhE,GAAG;AAClB,UAAAsM,EAAS,MAAMtM,CAAC;AAAA,QAClB;AAAA,QACA,UAAU,WAAY;AACpB,UAAAsM,EAAS,SAAQ;AAAA,QACnB;AAAA,MACR,CAAO;AAAA,IACH,CAAC;AAAA,EACH,GAEAQ,EAAQ,SAAS,SAAgB/E,GAAI;AACnC,QAAIoF,IAAS;AAEb,QAAI,OAAOpF,KAAO,WAAY,OAAM,IAAI,UAAUA,IAAK,oBAAoB;AAC3E,QAAImF,IAAI3B,GAAW,IAAI;AACvB,WAAO,IAAI2B,EAAE,SAAUZ,GAAU;AAC/B,aAAOa,EAAO,UAAU;AAAA,QACtB,MAAM,SAAUnJ,GAAO;AACrB,cAAI;AACF,gBAAI,CAAC+D,EAAG/D,CAAK,EAAG;AAAA,UAClB,SAAShE,GAAG;AACV,mBAAOsM,EAAS,MAAMtM,CAAC;AAAA,UACzB;AAEA,UAAAsM,EAAS,KAAKtI,CAAK;AAAA,QACrB;AAAA,QACA,OAAO,SAAUhE,GAAG;AAClB,UAAAsM,EAAS,MAAMtM,CAAC;AAAA,QAClB;AAAA,QACA,UAAU,WAAY;AACpB,UAAAsM,EAAS,SAAQ;AAAA,QACnB;AAAA,MACR,CAAO;AAAA,IACH,CAAC;AAAA,EACH,GAEAQ,EAAQ,SAAS,SAAgB/E,GAAI;AACnC,QAAIqF,IAAS;AAEb,QAAI,OAAOrF,KAAO,WAAY,OAAM,IAAI,UAAUA,IAAK,oBAAoB;AAC3E,QAAImF,IAAI3B,GAAW,IAAI,GACnB8B,IAAU,UAAU,SAAS,GAC7BC,IAAW,IACXC,IAAO,UAAU,CAAC,GAClBC,IAAMD;AACV,WAAO,IAAIL,EAAE,SAAUZ,GAAU;AAC/B,aAAOc,EAAO,UAAU;AAAA,QACtB,MAAM,SAAUpJ,GAAO;AACrB,cAAIyJ,IAAQ,CAACH;AAGb,cAFAA,IAAW,IAEP,CAACG,KAASJ;AACZ,gBAAI;AACF,cAAAG,IAAMzF,EAAGyF,GAAKxJ,CAAK;AAAA,YACrB,SAAShE,GAAG;AACV,qBAAOsM,EAAS,MAAMtM,CAAC;AAAA,YACzB;AAAA;AAEA,YAAAwN,IAAMxJ;AAAA,QAEV;AAAA,QACA,OAAO,SAAUhE,GAAG;AAClB,UAAAsM,EAAS,MAAMtM,CAAC;AAAA,QAClB;AAAA,QACA,UAAU,WAAY;AACpB,cAAI,CAACsN,KAAY,CAACD,EAAS,QAAOf,EAAS,MAAM,IAAI,UAAU,iCAAiC,CAAC;AACjG,UAAAA,EAAS,KAAKkB,CAAG,GACjBlB,EAAS,SAAQ;AAAA,QACnB;AAAA,MACR,CAAO;AAAA,IACH,CAAC;AAAA,EACH,GAEAQ,EAAQ,SAAS,WAAkB;AAGjC,aAFIY,IAAS,MAEJC,IAAO,UAAU,QAAQC,IAAU,IAAI,MAAMD,CAAI,GAAGE,IAAO,GAAGA,IAAOF,GAAME;AAClF,MAAAD,EAAQC,CAAI,IAAI,UAAUA,CAAI;AAGhC,QAAIX,IAAI3B,GAAW,IAAI;AACvB,WAAO,IAAI2B,EAAE,SAAUZ,GAAU;AAC/B,UAAIR,GACAhQ,IAAQ;AAEZ,eAASgS,EAAUC,GAAM;AACvB,QAAAjC,IAAeiC,EAAK,UAAU;AAAA,UAC5B,MAAM,SAAUC,GAAG;AACjB,YAAA1B,EAAS,KAAK0B,CAAC;AAAA,UACjB;AAAA,UACA,OAAO,SAAUhO,GAAG;AAClB,YAAAsM,EAAS,MAAMtM,CAAC;AAAA,UAClB;AAAA,UACA,UAAU,WAAY;AACpB,YAAIlE,MAAU8R,EAAQ,UACpB9B,IAAe,QACfQ,EAAS,SAAQ,KAEjBwB,EAAUZ,EAAE,KAAKU,EAAQ9R,GAAO,CAAC,CAAC;AAAA,UAEtC;AAAA,QACV,CAAS;AAAA,MACH;AAEA,aAAAgS,EAAUJ,CAAM,GACT,WAAY;AACjB,QAAI5B,MACFA,EAAa,YAAW,GACxBA,IAAe;AAAA,MAEnB;AAAA,IACF,CAAC;AAAA,EACH,GAEAgB,EAAQ,UAAU,SAAiB/E,GAAI;AACrC,QAAIkG,IAAS;AAEb,QAAI,OAAOlG,KAAO,WAAY,OAAM,IAAI,UAAUA,IAAK,oBAAoB;AAC3E,QAAImF,IAAI3B,GAAW,IAAI;AACvB,WAAO,IAAI2B,EAAE,SAAUZ,GAAU;AAC/B,UAAI4B,IAAgB,CAAA,GAEhBC,IAAQF,EAAO,UAAU;AAAA,QAC3B,MAAM,SAAUjK,GAAO;AACrB,cAAI+D;AACF,gBAAI;AACF,cAAA/D,IAAQ+D,EAAG/D,CAAK;AAAA,YAClB,SAAShE,GAAG;AACV,qBAAOsM,EAAS,MAAMtM,CAAC;AAAA,YACzB;AAGF,cAAIoO,IAAQlB,EAAE,KAAKlJ,CAAK,EAAE,UAAU;AAAA,YAClC,MAAM,SAAUA,GAAO;AACrB,cAAAsI,EAAS,KAAKtI,CAAK;AAAA,YACrB;AAAA,YACA,OAAO,SAAUhE,GAAG;AAClB,cAAAsM,EAAS,MAAMtM,CAAC;AAAA,YAClB;AAAA,YACA,UAAU,WAAY;AACpB,kBAAIzC,IAAI2Q,EAAc,QAAQE,CAAK;AACnC,cAAI7Q,KAAK,KAAG2Q,EAAc,OAAO3Q,GAAG,CAAC,GACrC8Q,EAAc;AAAA,YAChB;AAAA,UACZ,CAAW;AACD,UAAAH,EAAc,KAAKE,CAAK;AAAA,QAC1B;AAAA,QACA,OAAO,SAAUpO,GAAG;AAClB,UAAAsM,EAAS,MAAMtM,CAAC;AAAA,QAClB;AAAA,QACA,UAAU,WAAY;AACpB,UAAAqO,EAAc;AAAA,QAChB;AAAA,MACR,CAAO;AAED,eAASA,IAAiB;AACxB,QAAIF,EAAM,UAAUD,EAAc,WAAW,KAAG5B,EAAS,SAAQ;AAAA,MACnE;AAEA,aAAO,WAAY;AACjB,QAAA4B,EAAc,QAAQ,SAAU3P,GAAG;AACjC,iBAAOA,EAAE,YAAW;AAAA,QACtB,CAAC,GACD4P,EAAM,YAAW;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH,GAEArB,EAAQ1B,EAAgB,IAAI,WAAY;AACtC,WAAO;AAAA,EACT,GAEAK,EAAW,OAAO,SAAc1C,GAAG;AACjC,QAAImE,IAAI,OAAO,QAAS,aAAa,OAAOzB;AAC5C,QAAI1C,KAAK,KAAM,OAAM,IAAI,UAAUA,IAAI,mBAAmB;AAC1D,QAAI9B,IAASqE,GAAUvC,GAAGqC,EAAgB;AAE1C,QAAInE,GAAQ;AACV,UAAIqH,IAAarH,EAAO,KAAK8B,CAAC;AAC9B,UAAI,OAAOuF,CAAU,MAAMA,EAAY,OAAM,IAAI,UAAUA,IAAa,mBAAmB;AAC3F,aAAI5C,GAAa4C,CAAU,KAAKA,EAAW,gBAAgBpB,IAAUoB,IAC9D,IAAIpB,EAAE,SAAUZ,GAAU;AAC/B,eAAOgC,EAAW,UAAUhC,CAAQ;AAAA,MACtC,CAAC;AAAA,IACH;AAEA,QAAIrB,GAAU,UAAU,MACtBhE,IAASqE,GAAUvC,GAAGoC,EAAc,GAEhClE;AACF,aAAO,IAAIiG,EAAE,SAAUZ,GAAU;AAC/B,QAAAV,GAAQ,WAAY;AAClB,cAAI,CAAAU,EAAS,QAEb;AAAA,qBAASiC,IAAYxE,GAAgC9C,EAAO,KAAK8B,CAAC,CAAC,GAAGyF,GAAO,EAAEA,IAAQD,EAAS,GAAI,QAAO;AACzG,kBAAIE,IAAOD,EAAM;AAEjB,kBADAlC,EAAS,KAAKmC,CAAI,GACdnC,EAAS,OAAQ;AAAA,YACvB;AAEA,YAAAA,EAAS,SAAQ;AAAA;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AAIL,QAAI,MAAM,QAAQvD,CAAC;AACjB,aAAO,IAAImE,EAAE,SAAUZ,GAAU;AAC/B,QAAAV,GAAQ,WAAY;AAClB,cAAI,CAAAU,EAAS,QAEb;AAAA,qBAAS/O,IAAI,GAAGA,IAAIwL,EAAE,QAAQ,EAAExL;AAE9B,kBADA+O,EAAS,KAAKvD,EAAExL,CAAC,CAAC,GACd+O,EAAS,OAAQ;AAGvB,YAAAA,EAAS,SAAQ;AAAA;AAAA,QACnB,CAAC;AAAA,MACH,CAAC;AAGH,UAAM,IAAI,UAAUvD,IAAI,oBAAoB;AAAA,EAC9C,GAEA0C,EAAW,KAAK,WAAc;AAC5B,aAASiD,IAAQ,UAAU,QAAQC,IAAQ,IAAI,MAAMD,CAAK,GAAGE,IAAQ,GAAGA,IAAQF,GAAOE;AACrF,MAAAD,EAAMC,CAAK,IAAI,UAAUA,CAAK;AAGhC,QAAI1B,IAAI,OAAO,QAAS,aAAa,OAAOzB;AAC5C,WAAO,IAAIyB,EAAE,SAAUZ,GAAU;AAC/B,MAAAV,GAAQ,WAAY;AAClB,YAAI,CAAAU,EAAS,QAEb;AAAA,mBAAS/O,IAAI,GAAGA,IAAIoR,EAAM,QAAQ,EAAEpR;AAElC,gBADA+O,EAAS,KAAKqC,EAAMpR,CAAC,CAAC,GAClB+O,EAAS,OAAQ;AAGvB,UAAAA,EAAS,SAAQ;AAAA;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH,GAEA1B,GAAaa,GAAY,MAAM,CAAC;AAAA,IAC9B,KAAKJ;AAAA,IACL,KAAK,WAAY;AACf,aAAO;AAAA,IACT;AAAA,EACJ,CAAG,CAAC,GAEKI;AACT,GAAC;AAEGT,QACF,OAAO,eAAeS,IAAY,OAAO,YAAY,GAAG;AAAA,EACtD,OAAO;AAAA,IACL,QAAQL;AAAA,IACR,iBAAiBO;AAAA,EACvB;AAAA,EACI,cAAc;AAClB,CAAG;AC5jBY,SAASkD,GAAyBC,GAAM;AACtD,MAAIC,GACAC,IAASF,EAAK;AAElB,MAAI,OAAOE,KAAW;AACrB,QAAIA,EAAO;AACV,MAAAD,IAASC,EAAO;AAAA,SACV;AAEN,MAAI,OAAOA,EAAO,OAAQ,aAIzBD,IAASC,EAAO,IAAI,8CAA8C,IAKlED,IAASC,EAAO,8CAA8C;AAE/D,UAAI;AACH,QAAAA,EAAO,aAAaD;AAAA,MACrB,QAAc;AAAA,MAId;AAAA,IACD;AAAA;AAEA,IAAAA,IAAS;AAGV,SAAOA;AACR;AC9BA,IAAID;AAEA,OAAO,OAAS,MAClBA,KAAO,OACE,OAAO,SAAW,MAC3BA,KAAO,SACE,OAAO,SAAW,MAC3BA,KAAO,SACE,OAAO,SAAW,MAC3BA,KAAO,SAEPA,KAAO,SAAS,aAAa,EAAC;AAGnBG,GAASH,EAAI;ACV1B,IAAII,KAAYzD,GAAW,WACvB0D,KAAgB;AACfD,GAAUC,EAAa,MAExBD,GAAUC,EAAa,IAAI,WAAY;AACnC,SAAO;AACX;ACZG,SAASC,GAAkBC,GAAW;AAQzC,WAPIC,IAAmB;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACR,GACalQ,IAAK,GAAG3F,IAAK,OAAO,KAAK4V,CAAS,GAAGjQ,IAAK3F,EAAG,QAAQ2F,KAAM;AAChE,QAAIyI,IAAMpO,EAAG2F,CAAE;AACf,QAAIkQ,EAAiB,QAAQzH,CAAG,IAAI;AAChC,YAAMQ,GAAkB,IAAIR,CAAG;AAAA,EAEvC;AACA,SAAOwH;AACX;ACfO,SAASE,GAAgBC,GAAUH,GAAW;AACjD,MAAIjG,IAAUrD,GAAS,CAAA,GAAIyJ,CAAQ,GAC/BC,IAAa,SAAU1B,GAAM;AAC7B,IAAI,OAAOA,KAAS,aAChB3E,IAAUrD,GAASA,GAAS,CAAA,GAAIqD,CAAO,GAAG2E,EAAK3E,CAAO,CAAC,IAGvDA,IAAUrD,GAASA,GAAS,CAAA,GAAIqD,CAAO,GAAG2E,CAAI;AAAA,EAEtD,GACI2B,IAAa,WAAY;AAAE,WAAQ3J,GAAS,CAAA,GAAIqD,CAAO;AAAA,EAAI;AAC/D,gBAAO,eAAeiG,GAAW,cAAc;AAAA,IAC3C,YAAY;AAAA,IACZ,OAAOI;AAAA,EACf,CAAK,GACD,OAAO,eAAeJ,GAAW,cAAc;AAAA,IAC3C,YAAY;AAAA,IACZ,OAAOK;AAAA,EACf,CAAK,GACML;AACX;ACpBO,SAASM,GAAmBN,GAAW;AAC1C,MAAIO,IAAuB;AAAA,IACvB,WAAWP,EAAU,aAAa,CAAA;AAAA,IAClC,YAAYA,EAAU,cAAc,CAAA;AAAA,IACpC,eAAeA,EAAU;AAAA,IACzB,OAAOA,EAAU;AAAA,EACzB;AAEI,SAAKO,EAAqB,kBACtBA,EAAqB,gBACjB,OAAOA,EAAqB,SAAU,WAClChH,GAAiBgH,EAAqB,KAAK,KAAK,SAC9C,KAEPA;AACX;ACbA,IAAIC,KAAsB,OAAO,IAAI,qBAAqB,GACtDlH,KAAStB,IACTyI,KAAO,IAAIlG,GAAI;AACnB,SAASmG,GAAQ/I,GAAM;AACnB,SAAO2B,GAAOkH,EAAmB,MAAMC,GAAK,cAAc,CAAA,GAAI,SAAS9I,CAAI;AAC/E;AAgBO,SAASgJ,GAAehJ,GAAMiJ,GAAI;AACrC,EAAKF,GAAQ/I,CAAI,KACbiJ,EAAE;AAEV;ACxBA,SAASC,GAAYC,GAAIC,GAAS;AAC9B,SAAQA,IAAUA,EAAQD,CAAE,IAAI1E,GAAW,GAAE;AACjD;AACA,SAAS4E,GAAOC,GAAS;AACrB,SAAO,OAAOA,KAAY,aAAa,IAAIC,GAAWD,CAAO,IAAIA;AACrE;AACA,SAASE,GAAcC,GAAM;AACzB,SAAOA,EAAK,QAAQ,UAAU;AAClC;AACA,IAAIF;AAAA;AAAA,GAA4B,WAAY;AACxC,aAASA,EAAWG,GAAS;AACzB,MAAIA,MACA,KAAK,UAAUA;AAAA,IACvB;AACA,WAAAH,EAAW,QAAQ,WAAY;AAC3B,aAAO,IAAIA,EAAW,WAAY;AAAE,eAAO9E,GAAW,GAAE;AAAA,MAAI,CAAC;AAAA,IACjE,GACA8E,EAAW,OAAO,SAAUI,GAAO;AAC/B,aAAIA,EAAM,WAAW,IACVJ,EAAW,MAAK,IACpBI,EAAM,IAAIN,EAAM,EAAE,OAAO,SAAUtH,GAAG6H,GAAG;AAAE,eAAO7H,EAAE,OAAO6H,CAAC;AAAA,MAAG,CAAC;AAAA,IAC3E,GACAL,EAAW,QAAQ,SAAUM,GAAMC,GAAMC,GAAO;AAC5C,UAAIC,IAAWX,GAAOS,CAAI,GACtBG,IAAYZ,GAAOU,KAAS,IAAIR,EAAWL,EAAW,CAAC,GACvDgB;AACJ,aAAIV,GAAcQ,CAAQ,KAAKR,GAAcS,CAAS,IAClDC,IAAM,IAAIX,EAAW,SAAUlB,GAAW;AACtC,eAAOwB,EAAKxB,CAAS,IACjB2B,EAAS,QAAQ3B,CAAS,KAAK5D,GAAW,GAAE,IAC1CwF,EAAU,QAAQ5B,CAAS,KAAK5D,GAAW,GAAE;AAAA,MACvD,CAAC,IAGDyF,IAAM,IAAIX,EAAW,SAAUlB,GAAWe,GAAS;AAC/C,eAAOS,EAAKxB,CAAS,IACjB2B,EAAS,QAAQ3B,GAAWe,CAAO,KAAK3E,GAAW,GAAE,IACnDwF,EAAU,QAAQ5B,GAAWe,CAAO,KAAK3E,GAAW,GAAE;AAAA,MAChE,CAAC,GAEE,OAAO,OAAOyF,GAAK,EAAE,MAAMF,GAAU,OAAOC,GAAW;AAAA,IAClE,GACAV,EAAW,UAAU,SAAUE,GAAMpB,GAAW;AAC5C,aAAQoB,EAAK,QAAQlB,GAAgBF,EAAU,SAASM,GAAmBP,GAAkBC,CAAS,CAAC,CAAC,CAAC,KAAK5D,GAAW,GAAE;AAAA,IAC/H,GACA8E,EAAW,SAAS,SAAU9C,GAAO0D,GAAQ;AACzC,UAAIC,IAAYf,GAAO5C,CAAK;AAC5B,UAAI+C,GAAcY,CAAS;AACvB,0BAAW,YAAY,MAASzK,GAAU,KAAK,IAAIyK,CAAS,GACrDA;AAEX,UAAIC,IAAWhB,GAAOc,CAAM,GACxBD;AACJ,aAAIV,GAAca,CAAQ,IACtBH,IAAM,IAAIX,EAAW,SAAUlB,GAAW;AACtC,eAAO+B,EAAU,QAAQ/B,GAAW,SAAUc,GAAI;AAAE,iBAAOkB,EAAS,QAAQlB,CAAE,KAAK1E,GAAW,GAAE;AAAA,QAAI,CAAC,KAAKA,GAAW,GAAE;AAAA,MAC3H,CAAC,IAGDyF,IAAM,IAAIX,EAAW,SAAUlB,GAAWe,GAAS;AAC/C,eAAQgB,EAAU,QAAQ/B,GAAW,SAAUc,GAAI;AAC/C,iBAAOkB,EAAS,QAAQlB,GAAIC,CAAO,KAAK3E,GAAW,GAAE;AAAA,QACzD,CAAC,KAAKA,GAAW,GAAE;AAAA,MACvB,CAAC,GAEE,OAAO,OAAOyF,GAAK,EAAE,MAAME,GAAW,OAAOC,GAAU;AAAA,IAClE,GACAd,EAAW,UAAU,QAAQ,SAAUM,GAAMC,GAAMC,GAAO;AACtD,aAAO,KAAK,OAAOR,EAAW,MAAMM,GAAMC,GAAMC,KAAS,IAAIR,EAAWL,EAAW,CAAC,CAAC;AAAA,IACzF,GACAK,EAAW,UAAU,SAAS,SAAUxC,GAAM;AAC1C,aAAOwC,EAAW,OAAO,MAAMxC,CAAI;AAAA,IACvC,GACAwC,EAAW,UAAU,UAAU,SAAUlB,GAAWe,GAAS;AACzD,YAAM/H,GAAkB,EAAE;AAAA,IAC9B,GAKAkI,EAAW,UAAU,UAAU,SAAU1X,GAAOyT,GAAU;AAMtD,UALI,WAAW,YAAY,MACvB0D,GAAe,WAAW,WAAY;AAClC,mBAAW,YAAY,MAASrJ,GAAU,KAAK,EAAE;AAAA,MACrD,CAAC,GAED2F,KAAYA,EAAS;AACrB,eAAAA,EAAS,MAAMzT,CAAK,GAOb;AAGX,YAAMA;AAAA,IACV,GAKA0X,EAAW,UAAU,aAAa,SAAUxI,GAAI;AAC5C,aAAI,WAAW,YAAY,MACvB,WAAW,YAAY,MAASpB,GAAU,KAAK,EAAE,GAErD,KAAK,UAAUoB,GACR;AAAA,IACX,GACOwI;AAAA,EACX;;AChHO,SAASd,GAAW6B,GAAQ;AAC/B,SAAO,IAAIf,GAAW,SAAUlB,GAAWe,GAAS;AAChD,QAAIM,IAAUzK,GAAOoJ,GAAW,EAAE;AAClC,WAAO,IAAI5D,GAAW,SAAUa,GAAU;AACtC,UAAIiF,GACAC,IAAS;AACb,qBAAQ,QAAQd,CAAO,EAClB,KAAK,SAAUe,GAAK;AAAE,eAAOH,EAAOG,GAAKpC,EAAU,YAAY;AAAA,MAAG,CAAC,EACnE,KAAKA,EAAU,UAAU,EACzB,KAAK,WAAY;AAElB,QAAImC,MAEJD,IAASnB,EAAQf,CAAS,EAAE,UAAU;AAAA,UAClC,MAAM/C,EAAS,KAAK,KAAKA,CAAQ;AAAA,UACjC,OAAOA,EAAS,MAAM,KAAKA,CAAQ;AAAA,UACnC,UAAUA,EAAS,SAAS,KAAKA,CAAQ;AAAA,QAC7D,CAAiB;AAAA,MACL,CAAC,EACI,MAAMA,EAAS,MAAM,KAAKA,CAAQ,CAAC,GACjC,WAAY;AACf,QAAAkF,IAAS,IACLD,KACAA,EAAO,YAAW;AAAA,MAC1B;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL;AC7BO,MAAMG,KAAgB,YAAY;AACrC,QAAMlZ,IAAM,uEAONmZ,IAAa,WACf,KAAK,mBAPQ,0BAOmB,IAAI,MAAM,mBANzB,kCAMwD,CAAC;AAC9E,MAAI;AACA,UAAMlZ,IAAW,MAAMC,GAAM;AAAA,MAAKF;AAAA,MAAK,IAAI,gBAAgB,EAAE,YAAY,sBAAsB;AAAA;AAAA,MAC/F;AAAA,QACI,SAAS;AAAA,UACL,gBAAgB;AAAA,UAChB,eAAemZ;AAAA,QAAA;AAAA,MACnB;AAAA,IACJ;AACA,WAAIlZ,EAAS,WAAW,OAAOA,EAAS,KAAK,eAClCA,EAAS,KAAK,gBAGrB,QAAQ,MAAM,0BAA0BA,EAAS,IAAI,GAC9C;AAAA,EAEf,SACOI,GAAO;AACV,WAAIH,GAAM,aAAaG,CAAK,IACxB,QAAQ,MAAM,yBAAyBA,EAAM,YAAYA,EAAM,OAAO,IAGtE,QAAQ,MAAM,qBAAqBA,CAAK,GAErC;AAAA,EACX;AACJ,GChCM+Y,KAAW,0EAOXC,KAAWC,GAAe;AAAA,EAC9B,KAAK,GAAGF,EAAQ;AAClB,CAAC,GAEKG,KAAWtC,GAAW,OAAOvP,GAAG,EAAE,SAAA8R,QAAc;AAEpD,QAAM1X,IAAQ,MAAMoX,GAAA;AAEpB,SAAO;AAAA,IACL,SAAS;AAAA,MACP,GAAGM;AAAA,MACH,eAAe,UAAU1X,CAAK;AAAA,IAAA;AAAA,EAChC;AAEJ,CAAC,GAEY2X,KAAe,IAAIC,GAAa;AAAA,EAC3C,MAAMH,GAAS,OAAOF,EAAQ;AAAA,EAC9B,OAAO,IAAIM,GAAA;AAAA,EACX,gBAAgB;AAAA,IACd,YAAY;AAAA,MACV,aAAa;AAAA,IAAA;AAAA,EACf;AAEJ,CAAC,GC7BKC,KAAe,CAACja,MAAe;AAEpC,QAAM,EAAE,aAAAkI,MAAgBlI;AACvB,SACE,gBAAAN,EAACwa,IAAA,EAAe,QAAQJ,IACtB,UAAA,gBAAApa,EAACF,MACC,UAAA,gBAAAE,EAACuI,IAAA,EAA6B,aAAAC,EAAA,CAA0B,EAAA,CAC1D,GACF;AAEJ;ACPA,SAASiS,GAAavX,GAAMwX,GAAO;AAClC,QAAMC,IAAQzX,EAAK,OACb0X,IAAU1X,EAAK,WAAW,uBAAO,OAAO,IAAI,GAC5C2X,IAAW,uBAAO,OAAO,IAAI;AACnC,WAAS3F,EAAQ/F,GAAM;AACtB,QAAIwL,EAAMxL,CAAI,EAAG,QAAO0L,EAAS1L,CAAI,IAAI,CAAA;AACzC,QAAI,EAAEA,KAAQ0L,IAAW;AACxB,MAAAA,EAAS1L,CAAI,IAAI;AACjB,YAAMwC,IAASiJ,EAAQzL,CAAI,KAAKyL,EAAQzL,CAAI,EAAE,QACxChD,IAAQwF,KAAUuD,EAAQvD,CAAM;AACtC,MAAIxF,MAAO0O,EAAS1L,CAAI,IAAI,CAACwC,CAAM,EAAE,OAAOxF,CAAK;AAAA,IAClD;AACA,WAAO0O,EAAS1L,CAAI;AAAA,EACrB;AACA,SAAC,OAAO,KAAKwL,CAAK,EAAE,OAAO,OAAO,KAAKC,CAAO,CAAC,EAAG,QAAQ1F,CAAO,GAC1D2F;AACR;AAKA,MAAMC,KAAwB,OAAO,OAAO;AAAA,EAC3C,MAAM;AAAA,EACN,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AACT,CAAC,GAIKC,KAA6B,OAAO,OAAO;AAAA,EAChD,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,OAAO;AACR,CAAC,GAIKC,KAAmB,OAAO,OAAO;AAAA,EACtC,GAAGF;AAAA,EACH,GAAGC;AACJ,CAAC,GAIKE,KAA2B,OAAO,OAAO;AAAA,EAC9C,GAAGD;AAAA,EACH,MAAM;AAAA,EACN,QAAQ;AACT,CAAC;AAKD,SAASE,GAAyBC,GAAMC,GAAM;AAC7C,QAAMlE,IAAS,CAAA;AACf,EAAI,CAACiE,EAAK,SAAU,CAACC,EAAK,UAAOlE,EAAO,QAAQ,KAC5C,CAACiE,EAAK,SAAU,CAACC,EAAK,UAAOlE,EAAO,QAAQ;AAChD,QAAMmE,MAAWF,EAAK,UAAU,MAAMC,EAAK,UAAU,MAAM;AAC3D,SAAIC,MAAQnE,EAAO,SAASmE,IACrBnE;AACR;AAOA,SAASoE,GAAc3J,GAAQ4J,GAAO;AACrC,QAAMrE,IAASgE,GAAyBvJ,GAAQ4J,CAAK;AACrD,aAAWvL,KAAOiL,GAA0B,CAAIjL,KAAO+K,KAClD/K,KAAO2B,KAAU,EAAE3B,KAAOkH,OAASA,EAAOlH,CAAG,IAAI+K,GAA2B/K,CAAG,KACzEA,KAAOuL,IAAOrE,EAAOlH,CAAG,IAAIuL,EAAMvL,CAAG,IACvCA,KAAO2B,MAAQuF,EAAOlH,CAAG,IAAI2B,EAAO3B,CAAG;AAChD,SAAOkH;AACR;AAKA,SAASsE,GAAoBtY,GAAMiM,GAAMsM,GAAM;AAC9C,QAAMd,IAAQzX,EAAK,OACb0X,IAAU1X,EAAK,WAAW,uBAAO,OAAO,IAAI;AAClD,MAAIwY,IAAe,CAAA;AACnB,WAASC,EAAMC,GAAQ;AACtB,IAAAF,IAAeJ,GAAcX,EAAMiB,CAAM,KAAKhB,EAAQgB,CAAM,GAAGF,CAAY;AAAA,EAC5E;AACA,SAAAC,EAAMxM,CAAI,GACVsM,EAAK,QAAQE,CAAK,GACXL,GAAcpY,GAAMwY,CAAY;AACxC;AAOA,SAASG,GAAa3Y,GAAMsO,GAAU;AACrC,QAAMkJ,IAAQ,CAAA;AACd,MAAI,OAAOxX,KAAS,YAAY,OAAOA,EAAK,SAAU,SAAU,QAAOwX;AACvE,EAAIxX,EAAK,qBAAqB,SAAOA,EAAK,UAAU,QAAQ,CAACiM,MAAS;AACrE,IAAAqC,EAASrC,GAAM,IAAI,GACnBuL,EAAM,KAAKvL,CAAI;AAAA,EAChB,CAAC;AACD,QAAMsM,IAAOhB,GAAavX,CAAI;AAC9B,aAAWiM,KAAQsM,GAAM;AACxB,UAAM7E,IAAO6E,EAAKtM,CAAI;AACtB,IAAIyH,MACHpF,EAASrC,GAAMqM,GAAoBtY,GAAMiM,GAAMyH,CAAI,CAAC,GACpD8D,EAAM,KAAKvL,CAAI;AAAA,EAEjB;AACA,SAAOuL;AACR;AAKA,MAAMoB,KAA2B;AAAA,EAChC,UAAU;AAAA,EACV,SAAS,CAAA;AAAA,EACT,WAAW,CAAA;AAAA,EACX,GAAGhB;AACJ;AAIA,SAASiB,GAAmBnF,GAAMoF,GAAU;AAC3C,aAAWC,KAAQD,EAAU,KAAIC,KAAQrF,KAAQ,OAAOA,EAAKqF,CAAI,KAAM,OAAOD,EAASC,CAAI,EAAG,QAAO;AACrG,SAAO;AACR;AAOA,SAASC,GAAuB1N,GAAK;AACpC,MAAI,OAAOA,KAAQ,YAAYA,MAAQ,KAAM,QAAO;AACpD,QAAMtL,IAAOsL;AAEb,MADI,OAAOtL,EAAK,UAAW,YAAY,CAACsL,EAAI,SAAS,OAAOA,EAAI,SAAU,YACtE,CAACuN,GAAmBvN,GAAKsN,EAAwB,EAAG,QAAO;AAC/D,QAAMnB,IAAQzX,EAAK;AACnB,aAAWiM,KAAQwL,GAAO;AACzB,UAAMwB,IAAOxB,EAAMxL,CAAI;AACvB,QAAI,CAACA,KAAQ,OAAOgN,EAAK,QAAS,YAAY,CAACJ,GAAmBI,GAAMlB,EAAwB,EAAG,QAAO;AAAA,EAC3G;AACA,QAAML,IAAU1X,EAAK,WAAW,uBAAO,OAAO,IAAI;AAClD,aAAWiM,KAAQyL,GAAS;AAC3B,UAAMuB,IAAOvB,EAAQzL,CAAI,GACnBwC,IAASwK,EAAK;AACpB,QAAI,CAAChN,KAAQ,OAAOwC,KAAW,YAAY,CAACgJ,EAAMhJ,CAAM,KAAK,CAACiJ,EAAQjJ,CAAM,KAAK,CAACoK,GAAmBI,GAAMlB,EAAwB,EAAG,QAAO;AAAA,EAC9I;AACA,SAAO/X;AACR;AAKA,MAAMkZ,KAAc,uBAAO,OAAO,IAAI;AAItC,SAASC,GAAWC,GAAU3M,GAAQ;AACrC,SAAO;AAAA,IACN,UAAA2M;AAAA,IACA,QAAA3M;AAAA,IACA,OAAO,uBAAO,OAAO,IAAI;AAAA,IACzB,SAAyB,oBAAI,IAAG;AAAA,EAClC;AACA;AAIA,SAAS4M,GAAWD,GAAU3M,GAAQ;AACrC,QAAM6M,IAAkBJ,GAAYE,CAAQ,MAAMF,GAAYE,CAAQ,IAAI,uBAAO,OAAO,IAAI;AAC5F,SAAOE,EAAgB7M,CAAM,MAAM6M,EAAgB7M,CAAM,IAAI0M,GAAWC,GAAU3M,CAAM;AACzF;AAMA,SAAS8M,GAAWC,GAASxZ,GAAM;AAClC,SAAKgZ,GAAuBhZ,CAAI,IACzB2Y,GAAa3Y,GAAM,CAACiM,GAAMgN,MAAS;AACzC,IAAIA,IAAMO,EAAQ,MAAMvN,CAAI,IAAIgN,IAC3BO,EAAQ,QAAQ,IAAIvN,CAAI;AAAA,EAC9B,CAAC,IAJyC,CAAA;AAK3C;AAIA,SAASwN,GAAiBD,GAASvN,GAAMgN,GAAM;AAC9C,MAAI;AACH,QAAI,OAAOA,EAAK,QAAS;AACxB,aAAAO,EAAQ,MAAMvN,CAAI,IAAI,EAAE,GAAGgN,EAAI,GACxB;AAAA,EAET,QAAc;AAAA,EAAC;AACf,SAAO;AACR;AAuBA,MAAMS,KAAgB,4BAIhBC,KAAe,CAAC1Q,GAAO2Q,GAAUC,GAAiBT,IAAW,OAAO;AACzE,QAAMU,IAAiB7Q,EAAM,MAAM,GAAG;AACtC,MAAIA,EAAM,MAAM,GAAG,CAAC,MAAM,KAAK;AAC9B,QAAI6Q,EAAe,SAAS,KAAKA,EAAe,SAAS,EAAG,QAAO;AACnE,IAAAV,IAAWU,EAAe,QAAQ,MAAM,CAAC;AAAA,EAC1C;AACA,MAAIA,EAAe,SAAS,KAAK,CAACA,EAAe,OAAQ,QAAO;AAChE,MAAIA,EAAe,SAAS,GAAG;AAC9B,UAAMpB,IAASoB,EAAe,IAAG,GAC3BrN,IAASqN,EAAe,IAAG,GAC3B9F,IAAS;AAAA,MACd,UAAU8F,EAAe,SAAS,IAAIA,EAAe,CAAC,IAAIV;AAAA,MAC1D,QAAA3M;AAAA,MACA,MAAMiM;AAAA,IACT;AACE,WAAOkB,KAAY,CAACG,GAAiB/F,CAAM,IAAI,OAAOA;AAAA,EACvD;AACA,QAAM/H,IAAO6N,EAAe,CAAC,GACvBE,IAAgB/N,EAAK,MAAM,GAAG;AACpC,MAAI+N,EAAc,SAAS,GAAG;AAC7B,UAAMhG,IAAS;AAAA,MACd,UAAAoF;AAAA,MACA,QAAQY,EAAc,MAAK;AAAA,MAC3B,MAAMA,EAAc,KAAK,GAAG;AAAA,IAC/B;AACE,WAAOJ,KAAY,CAACG,GAAiB/F,CAAM,IAAI,OAAOA;AAAA,EACvD;AACA,MAAI6F,KAAmBT,MAAa,IAAI;AACvC,UAAMpF,IAAS;AAAA,MACd,UAAAoF;AAAA,MACA,QAAQ;AAAA,MACR,MAAAnN;AAAA,IACH;AACE,WAAO2N,KAAY,CAACG,GAAiB/F,GAAQ6F,CAAe,IAAI,OAAO7F;AAAA,EACxE;AACA,SAAO;AACR,GAMM+F,KAAmB,CAACd,GAAMY,MAC1BZ,IACE,CAAC,GAAGY,KAAmBZ,EAAK,WAAW,MAAQA,EAAK,WAAaA,EAAK,QAD3D;AAOnB,IAAIgB,KAAc;AAClB,SAASC,GAAiBC,GAAO;AAChC,SAAI,OAAOA,KAAU,cAAWF,KAAcE,IACvCF;AACR;AASA,SAASG,GAAYnO,GAAM;AAC1B,QAAMgN,IAAO,OAAOhN,KAAS,WAAW0N,GAAa1N,GAAM,IAAMgO,EAAW,IAAIhO;AAChF,MAAIgN,GAAM;AACT,UAAMO,IAAUH,GAAWJ,EAAK,UAAUA,EAAK,MAAM,GAC/CoB,IAAWpB,EAAK;AACtB,WAAOO,EAAQ,MAAMa,CAAQ,MAAMb,EAAQ,QAAQ,IAAIa,CAAQ,IAAI,OAAO;AAAA,EAC3E;AACD;AAIA,SAASC,GAAQrO,GAAMjM,GAAM;AAC5B,QAAMiZ,IAAOU,GAAa1N,GAAM,IAAMgO,EAAW;AACjD,MAAI,CAAChB,EAAM,QAAO;AAClB,QAAMO,IAAUH,GAAWJ,EAAK,UAAUA,EAAK,MAAM;AACrD,SAAIjZ,IAAayZ,GAAiBD,GAASP,EAAK,MAAMjZ,CAAI,KAEzDwZ,EAAQ,QAAQ,IAAIP,EAAK,IAAI,GACtB;AAET;AAIA,SAASsB,GAAcva,GAAMoZ,GAAU;AACtC,MAAI,OAAOpZ,KAAS,SAAU,QAAO;AAErC,MADI,OAAOoZ,KAAa,aAAUA,IAAWpZ,EAAK,YAAY,KAC1Dia,MAAe,CAACb,KAAY,CAACpZ,EAAK,QAAQ;AAC7C,QAAIwa,IAAQ;AACZ,WAAIxB,GAAuBhZ,CAAI,MAC9BA,EAAK,SAAS,IACd2Y,GAAa3Y,GAAM,CAACiM,GAAMgN,MAAS;AAClC,MAAIqB,GAAQrO,GAAMgN,CAAI,MAAGuB,IAAQ;AAAA,IAClC,CAAC,IAEKA;AAAA,EACR;AACA,QAAM/N,IAASzM,EAAK;AACpB,MAAI,CAAC+Z,GAAiB;AAAA,IACrB,QAAAtN;AAAA,IACA,MAAM;AAAA,EACR,CAAE,EAAG,QAAO;AACX,QAAM+M,IAAUH,GAAWD,GAAU3M,CAAM;AAC3C,SAAO,CAAC,CAAC8M,GAAWC,GAASxZ,CAAI;AAClC;AAqBA,MAAMya,KAAgC,OAAO,OAAO;AAAA,EACnD,OAAO;AAAA,EACP,QAAQ;AACT,CAAC,GACKC,KAA4B,OAAO,OAAO;AAAA,EAC/C,GAAGD;AAAA,EACH,GAAG5C;AACJ,CAAC,GAKK8C,KAAa,6BACbC,KAAY;AAClB,SAASC,GAAcC,GAAMC,GAAOC,GAAW;AAC9C,MAAID,MAAU,EAAG,QAAOD;AAExB,MADAE,IAAYA,KAAa,KACrB,OAAOF,KAAS,SAAU,QAAO,KAAK,KAAKA,IAAOC,IAAQC,CAAS,IAAIA;AAC3E,MAAI,OAAOF,KAAS,SAAU,QAAOA;AACrC,QAAMG,IAAWH,EAAK,MAAMH,EAAU;AACtC,MAAIM,MAAa,QAAQ,CAACA,EAAS,OAAQ,QAAOH;AAClD,QAAMI,IAAW,CAAA;AACjB,MAAIC,IAAOF,EAAS,MAAK,GACrBG,IAAWR,GAAU,KAAKO,CAAI;AAClC,aAAa;AACZ,QAAIC,GAAU;AACb,YAAMC,IAAM,WAAWF,CAAI;AAC3B,MAAI,MAAME,CAAG,IAAGH,EAAS,KAAKC,CAAI,IAC7BD,EAAS,KAAK,KAAK,KAAKG,IAAMN,IAAQC,CAAS,IAAIA,CAAS;AAAA,IAClE,MAAO,CAAAE,EAAS,KAAKC,CAAI;AAEzB,QADAA,IAAOF,EAAS,MAAK,GACjBE,MAAS,OAAQ,QAAOD,EAAS,KAAK,EAAE;AAC5C,IAAAE,IAAW,CAACA;AAAA,EACb;AACD;AAEA,SAASE,GAAaC,GAASC,IAAM,QAAQ;AAC5C,MAAIC,IAAO;AACX,QAAM1a,IAAQwa,EAAQ,QAAQ,MAAMC,CAAG;AACvC,SAAOza,KAAS,KAAG;AAClB,UAAM2a,IAAQH,EAAQ,QAAQ,KAAKxa,CAAK,GAClC4a,IAAMJ,EAAQ,QAAQ,OAAOC,CAAG;AACtC,QAAIE,MAAU,MAAMC,MAAQ,GAAI;AAChC,UAAMC,IAASL,EAAQ,QAAQ,KAAKI,CAAG;AACvC,QAAIC,MAAW,GAAI;AACnB,IAAAH,KAAQF,EAAQ,MAAMG,IAAQ,GAAGC,CAAG,EAAE,KAAI,GAC1CJ,IAAUA,EAAQ,MAAM,GAAGxa,CAAK,EAAE,KAAI,IAAKwa,EAAQ,MAAMK,IAAS,CAAC;AAAA,EACpE;AACA,SAAO;AAAA,IACN,MAAAH;AAAA,IACA,SAAAF;AAAA,EACF;AACA;AAIA,SAASM,GAAoBJ,GAAMF,GAAS;AAC3C,SAAOE,IAAO,WAAWA,IAAO,YAAYF,IAAUA;AACvD;AAIA,SAASO,GAAeC,GAAML,GAAOC,GAAK;AACzC,QAAMK,IAAQV,GAAaS,CAAI;AAC/B,SAAOF,GAAoBG,EAAM,MAAMN,IAAQM,EAAM,UAAUL,CAAG;AACnE;AAKA,MAAMM,KAAiB,CAAChT,MAAUA,MAAU,WAAWA,MAAU,eAAeA,MAAU;AAW1F,SAASiT,GAAUjD,GAAMkD,GAAgB;AACxC,QAAMC,IAAW;AAAA,IAChB,GAAGtE;AAAA,IACH,GAAGmB;AAAA,EACL,GACOoD,IAAqB;AAAA,IAC1B,GAAG3B;AAAA,IACH,GAAGyB;AAAA,EACL,GACOG,IAAM;AAAA,IACX,MAAMF,EAAS;AAAA,IACf,KAAKA,EAAS;AAAA,IACd,OAAOA,EAAS;AAAA,IAChB,QAAQA,EAAS;AAAA,EACnB;AACC,MAAIL,IAAOK,EAAS;AACpB,GAACA,GAAUC,CAAkB,EAAE,QAAQ,CAACjf,MAAU;AACjD,UAAMmf,IAAkB,CAAA,GAClBC,IAAQpf,EAAM,OACdqf,IAAQrf,EAAM;AACpB,QAAIsf,IAAWtf,EAAM;AACrB,IAAIof,IAAWC,IAAOC,KAAY,KAEjCH,EAAgB,KAAK,gBAAgBD,EAAI,QAAQA,EAAI,MAAM,SAAQ,IAAK,OAAO,IAAIA,EAAI,KAAK,SAAQ,IAAK,GAAG,GAC5GC,EAAgB,KAAK,aAAa,GAClCD,EAAI,MAAMA,EAAI,OAAO,KAEbG,MACRF,EAAgB,KAAK,gBAAgB,IAAID,EAAI,MAAM,SAAQ,IAAK,OAAOA,EAAI,SAASA,EAAI,KAAK,SAAQ,IAAK,GAAG,GAC7GC,EAAgB,KAAK,aAAa,GAClCD,EAAI,MAAMA,EAAI,OAAO;AAEtB,QAAIK;AAGJ,YAFID,IAAW,MAAGA,KAAY,KAAK,MAAMA,IAAW,CAAC,IAAI,IACzDA,IAAWA,IAAW,GACdA,GAAQ;AAAA,MACf,KAAK;AACJ,QAAAC,IAAYL,EAAI,SAAS,IAAIA,EAAI,KACjCC,EAAgB,QAAQ,eAAeI,EAAU,aAAa,MAAMA,EAAU,SAAQ,IAAK,GAAG;AAC9F;AAAA,MACD,KAAK;AACJ,QAAAJ,EAAgB,QAAQ,iBAAiBD,EAAI,QAAQ,IAAIA,EAAI,MAAM,SAAQ,IAAK,OAAOA,EAAI,SAAS,IAAIA,EAAI,KAAK,SAAQ,IAAK,GAAG;AACjI;AAAA,MACD,KAAK;AACJ,QAAAK,IAAYL,EAAI,QAAQ,IAAIA,EAAI,MAChCC,EAAgB,QAAQ,gBAAgBI,EAAU,aAAa,MAAMA,EAAU,SAAQ,IAAK,GAAG;AAC/F;AAAA,IACJ;AACE,IAAID,IAAW,MAAM,MAChBJ,EAAI,SAASA,EAAI,QACpBK,IAAYL,EAAI,MAChBA,EAAI,OAAOA,EAAI,KACfA,EAAI,MAAMK,IAEPL,EAAI,UAAUA,EAAI,WACrBK,IAAYL,EAAI,OAChBA,EAAI,QAAQA,EAAI,QAChBA,EAAI,SAASK,KAGXJ,EAAgB,WAAQR,IAAOD,GAAeC,GAAM,mBAAoBQ,EAAgB,KAAK,GAAG,IAAI,MAAO,MAAM;AAAA,EACtH,CAAC;AACD,QAAMK,IAAsBP,EAAmB,OACzCQ,IAAuBR,EAAmB,QAC1CS,IAAWR,EAAI,OACfS,IAAYT,EAAI;AACtB,MAAIU,GACAC;AACJ,EAAIL,MAAwB,QAC3BK,IAASJ,MAAyB,OAAO,QAAQA,MAAyB,SAASE,IAAYF,GAC/FG,IAAQnC,GAAcoC,GAAQH,IAAWC,CAAS,MAElDC,IAAQJ,MAAwB,SAASE,IAAWF,GACpDK,IAASJ,MAAyB,OAAOhC,GAAcmC,GAAOD,IAAYD,CAAQ,IAAID,MAAyB,SAASE,IAAYF;AAErI,QAAMK,IAAa,CAAA,GACbC,IAAU,CAACpE,GAAM9P,MAAU;AAChC,IAAKgT,GAAehT,CAAK,MAAGiU,EAAWnE,CAAI,IAAI9P,EAAM,SAAQ;AAAA,EAC9D;AACA,EAAAkU,EAAQ,SAASH,CAAK,GACtBG,EAAQ,UAAUF,CAAM;AACxB,QAAMG,IAAU;AAAA,IACfd,EAAI;AAAA,IACJA,EAAI;AAAA,IACJQ;AAAA,IACAC;AAAA,EACF;AACC,SAAAG,EAAW,UAAUE,EAAQ,KAAK,GAAG,GAC9B;AAAA,IACN,YAAAF;AAAA,IACA,SAAAE;AAAA,IACA,MAAArB;AAAA,EACF;AACA;AAkBA,MAAMsB,KAAQ,iBAMRC,KAAe,cAAc,KAAK,IAAG,EAAG,SAAS,EAAE,KAAK,KAAK,OAAM,IAAK,WAAW,GAAG,SAAS,EAAE;AAIvG,IAAIC,KAAU;AAId,SAASC,GAAWzB,GAAMtP,IAAS6Q,IAAc;AAChD,QAAMG,IAAM,CAAA;AACZ,MAAIC;AACJ,SAAOA,IAAQL,GAAM,KAAKtB,CAAI,IAAG,CAAA0B,EAAI,KAAKC,EAAM,CAAC,CAAC;AAClD,MAAI,CAACD,EAAI,OAAQ,QAAO1B;AACxB,QAAM4B,IAAS,YAAY,KAAK,OAAM,IAAK,WAAW,KAAK,OAAO,SAAS,EAAE;AAC7E,SAAAF,EAAI,QAAQ,CAAC9d,MAAO;AACnB,UAAMie,IAAQ,OAAOnR,KAAW,aAAaA,EAAO9M,CAAE,IAAI8M,KAAU8Q,MAAW,SAAQ,GACjFM,IAAYle,EAAG,QAAQ,uBAAuB,MAAM;AAC1D,IAAAoc,IAAOA,EAAK,QAAQ,IAAI,OAAO,aAAc8B,IAAY,oBAAqB,GAAG,GAAG,OAAOD,IAAQD,IAAS,IAAI;AAAA,EACjH,CAAC,GACD5B,IAAOA,EAAK,QAAQ,IAAI,OAAO4B,GAAQ,GAAG,GAAG,EAAE,GACxC5B;AACR;AAKA,MAAMvC,KAAU,uBAAO,OAAO,IAAI;AAIlC,SAASsE,GAAa1E,GAAU1F,GAAM;AACrC,EAAA8F,GAAQJ,CAAQ,IAAI1F;AACrB;AAIA,SAASqK,GAAa3E,GAAU;AAC/B,SAAOI,GAAQJ,CAAQ,KAAKI,GAAQ,EAAE;AACvC;AAKA,SAASwE,GAAgBC,GAAQ;AAChC,MAAIC;AACJ,MAAI,OAAOD,EAAO,aAAc,SAAU,CAAAC,IAAY,CAACD,EAAO,SAAS;AAAA,WAEtEC,IAAYD,EAAO,WACf,EAAEC,aAAqB,UAAU,CAACA,EAAU,OAAQ,QAAO;AAYhE,SAVe;AAAA,IACd,WAAAA;AAAA,IACA,MAAMD,EAAO,QAAQ;AAAA,IACrB,QAAQA,EAAO,UAAU;AAAA,IACzB,QAAQA,EAAO,UAAU;AAAA,IACzB,SAASA,EAAO,WAAW;AAAA,IAC3B,QAAQA,EAAO,WAAW;AAAA,IAC1B,OAAOA,EAAO,SAAS;AAAA,IACvB,kBAAkBA,EAAO,qBAAqB;AAAA,EAChD;AAEA;AAIA,MAAME,KAAgB,uBAAO,OAAO,IAAI,GAgBlCC,KAAqB,CAAC,6BAA6B,wBAAwB,GAC3EC,KAAc,CAAA;AACpB,OAAOD,GAAmB,SAAS,IAAG,CAAIA,GAAmB,WAAW,KAC/D,KAAK,OAAM,IAAK,MADkDC,GAAY,KAAKD,GAAmB,MAAK,CAAE,IAEjHC,GAAY,KAAKD,GAAmB,KAAK;AAC9CD,GAAc,EAAE,IAAIH,GAAgB,EAAE,WAAW,CAAC,4BAA4B,EAAE,OAAOK,EAAW,GAAG;AAIrG,SAASC,GAAelF,GAAUmF,GAAc;AAC/C,QAAMC,IAASR,GAAgBO,CAAY;AAC3C,SAAIC,MAAW,OAAa,MAC5BL,GAAc/E,CAAQ,IAAIoF,GACnB;AACR;AAIA,SAASC,GAAarF,GAAU;AAC/B,SAAO+E,GAAc/E,CAAQ;AAC9B;AAQA,MAAMsF,KAAc,MAAM;AACzB,MAAIpQ;AACJ,MAAI;AAEH,QADAA,IAAW,OACP,OAAOA,KAAa,WAAY,QAAOA;AAAA,EAC5C,QAAc;AAAA,EAAC;AAChB;AAIA,IAAIqQ,KAAcD,GAAW;AAgB7B,SAASE,GAAmBxF,GAAU3M,GAAQ;AAC7C,QAAM+R,IAASC,GAAarF,CAAQ;AACpC,MAAI,CAACoF,EAAQ,QAAO;AACpB,MAAIxK;AACJ,MAAI,CAACwK,EAAO,OAAQ,CAAAxK,IAAS;AAAA,OACxB;AACJ,QAAI6K,IAAgB;AACpB,IAAAL,EAAO,UAAU,QAAQ,CAAC9K,MAAS;AAElC,MAAAmL,IAAgB,KAAK,IAAIA,GADZnL,EACgC,MAAM;AAAA,IACpD,CAAC;AACD,UAAMoL,IAAMrS,IAAS;AACrB,IAAAuH,IAASwK,EAAO,SAASK,IAAgBL,EAAO,KAAK,SAASM,EAAI;AAAA,EACnE;AACA,SAAO9K;AACR;AAIA,SAAS+K,GAAYC,GAAQ;AAC5B,SAAOA,MAAW;AACnB;AAIA,MAAMC,KAAU,CAAC7F,GAAU3M,GAAQgL,MAAU;AAC5C,QAAMyH,IAAU,CAAA,GACVC,IAAYP,GAAmBxF,GAAU3M,CAAM,GAC/C6E,IAAO;AACb,MAAIoC,IAAO;AAAA,IACV,MAAApC;AAAA,IACA,UAAA8H;AAAA,IACA,QAAA3M;AAAA,IACA,OAAO,CAAA;AAAA,EACT,GACK9L,IAAS;AACb,SAAA8W,EAAM,QAAQ,CAACxL,GAAMlL,MAAU;AAC9B,IAAAJ,KAAUsL,EAAK,SAAS,GACpBtL,KAAUwe,KAAape,IAAQ,MAClCme,EAAQ,KAAKxL,CAAI,GACjBA,IAAO;AAAA,MACN,MAAApC;AAAA,MACA,UAAA8H;AAAA,MACA,QAAA3M;AAAA,MACA,OAAO,CAAA;AAAA,IACX,GACG9L,IAASsL,EAAK,SAEfyH,EAAK,MAAM,KAAKzH,CAAI;AAAA,EACrB,CAAC,GACDiT,EAAQ,KAAKxL,CAAI,GACVwL;AACR;AAIA,SAASE,GAAQhG,GAAU;AAC1B,MAAI,OAAOA,KAAa,UAAU;AACjC,UAAMoF,IAASC,GAAarF,CAAQ;AACpC,QAAIoF,EAAQ,QAAOA,EAAO;AAAA,EAC3B;AACA,SAAO;AACR;AAIA,MAAMa,KAAO,CAAC5f,GAAM6f,GAAQhR,MAAa;AACxC,MAAI,CAACqQ,IAAa;AACjB,IAAArQ,EAAS,SAAS,GAAG;AACrB;AAAA,EACD;AACA,MAAIvJ,IAAOqa,GAAQE,EAAO,QAAQ;AAClC,UAAQA,EAAO,MAAI;AAAA,IAClB,KAAK,SAAS;AACb,YAAM7S,IAAS6S,EAAO,QAEhBC,IADQD,EAAO,MACG,KAAK,GAAG,GAC1BE,IAAY,IAAI,gBAAgB,EAAE,OAAOD,EAAS,CAAE;AAC1D,MAAAxa,KAAQ0H,IAAS,WAAW+S,EAAU,SAAQ;AAC9C;AAAA,IACD;AAAA,IACA,KAAK,UAAU;AACd,YAAMC,IAAMH,EAAO;AACnB,MAAAva,KAAQ0a,EAAI,MAAM,GAAG,CAAC,MAAM,MAAMA,EAAI,MAAM,CAAC,IAAIA;AACjD;AAAA,IACD;AAAA,IACA;AACC,MAAAnR,EAAS,SAAS,GAAG;AACrB;AAAA,EACH;AACC,MAAIoR,IAAe;AACnB,EAAAf,GAAYlf,IAAOsF,CAAI,EAAE,KAAK,CAACrH,MAAa;AAC3C,UAAMshB,IAASthB,EAAS;AACxB,QAAIshB,MAAW,KAAK;AACnB,iBAAW,MAAM;AAChB,QAAA1Q,EAASyQ,GAAYC,CAAM,IAAI,UAAU,QAAQA,CAAM;AAAA,MACxD,CAAC;AACD;AAAA,IACD;AACA,WAAAU,IAAe,KACRhiB,EAAS,KAAI;AAAA,EACrB,CAAC,EAAE,KAAK,CAACsC,MAAS;AACjB,QAAI,OAAOA,KAAS,YAAYA,MAAS,MAAM;AAC9C,iBAAW,MAAM;AAChB,QAAIA,MAAS,MAAKsO,EAAS,SAAStO,CAAI,IACnCsO,EAAS,QAAQoR,CAAY;AAAA,MACnC,CAAC;AACD;AAAA,IACD;AACA,eAAW,MAAM;AAChB,MAAApR,EAAS,WAAWtO,CAAI;AAAA,IACzB,CAAC;AAAA,EACF,CAAC,EAAE,MAAM,MAAM;AACd,IAAAsO,EAAS,QAAQoR,CAAY;AAAA,EAC9B,CAAC;AACF,GAIMC,KAAiB;AAAA,EACtB,SAAAV;AAAA,EACA,MAAAI;AACD;AAKA,SAASO,GAAeC,GAAUlgB,GAAI;AACrC,EAAAkgB,EAAS,QAAQ,CAACrG,MAAY;AAC7B,UAAM5F,IAAQ4F,EAAQ;AACtB,IAAI5F,MAAO4F,EAAQ,kBAAkB5F,EAAM,OAAO,CAACkM,MAAQA,EAAI,OAAOngB,CAAE;AAAA,EACzE,CAAC;AACF;AAIA,SAASogB,GAAgBvG,GAAS;AACjC,EAAKA,EAAQ,yBACZA,EAAQ,uBAAuB,IAC/B,WAAW,MAAM;AAChB,IAAAA,EAAQ,uBAAuB;AAC/B,UAAM5F,IAAQ4F,EAAQ,kBAAkBA,EAAQ,gBAAgB,MAAM,CAAC,IAAI,CAAA;AAC3E,QAAI,CAAC5F,EAAM,OAAQ;AACnB,QAAIoM,IAAa;AACjB,UAAM5G,IAAWI,EAAQ,UACnB/M,IAAS+M,EAAQ;AACvB,IAAA5F,EAAM,QAAQ,CAACF,MAAS;AACvB,YAAM+D,IAAQ/D,EAAK,OACbuM,IAAYxI,EAAM,QAAQ;AAChC,MAAAA,EAAM,UAAUA,EAAM,QAAQ,OAAO,CAACwB,MAAS;AAC9C,YAAIA,EAAK,WAAWxM,EAAQ,QAAO;AACnC,cAAMR,IAAOgN,EAAK;AAClB,YAAIO,EAAQ,MAAMvN,CAAI,EAAG,CAAAwL,EAAM,OAAO,KAAK;AAAA,UAC1C,UAAA2B;AAAA,UACA,QAAA3M;AAAA,UACA,MAAAR;AAAA,QACN,CAAM;AAAA,iBACQuN,EAAQ,QAAQ,IAAIvN,CAAI,EAAG,CAAAwL,EAAM,QAAQ,KAAK;AAAA,UACtD,UAAA2B;AAAA,UACA,QAAA3M;AAAA,UACA,MAAAR;AAAA,QACN,CAAM;AAAA;AAEA,iBAAA+T,IAAa,IACN;AAER,eAAO;AAAA,MACR,CAAC,GACGvI,EAAM,QAAQ,WAAWwI,MACvBD,KAAYJ,GAAe,CAACpG,CAAO,GAAG9F,EAAK,EAAE,GAClDA,EAAK,SAAS+D,EAAM,OAAO,MAAM,CAAC,GAAGA,EAAM,QAAQ,MAAM,CAAC,GAAGA,EAAM,QAAQ,MAAM,CAAC,GAAG/D,EAAK,KAAK;AAAA,IAEjG,CAAC;AAAA,EACF,CAAC;AAEH;AAIA,IAAIvF,KAAY;AAIhB,SAAS+R,GAAc5R,GAAUmJ,GAAO0I,GAAgB;AACvD,QAAMxgB,IAAKwO,MACLiS,IAAQR,GAAe,KAAK,MAAMO,GAAgBxgB,CAAE;AAC1D,MAAI,CAAC8X,EAAM,QAAQ,OAAQ,QAAO2I;AAClC,QAAM1M,IAAO;AAAA,IACZ,IAAA/T;AAAA,IACA,OAAA8X;AAAA,IACA,UAAAnJ;AAAA,IACA,OAAA8R;AAAA,EACF;AACC,SAAAD,EAAe,QAAQ,CAAC3G,MAAY;AACnC,KAACA,EAAQ,oBAAoBA,EAAQ,kBAAkB,KAAK,KAAK9F,CAAI;AAAA,EACtE,CAAC,GACM0M;AACR;AAKA,SAASC,GAAU5I,GAAO;AACzB,QAAMzD,IAAS;AAAA,IACd,QAAQ,CAAA;AAAA,IACR,SAAS,CAAA;AAAA,IACT,SAAS,CAAA;AAAA,EACX,GACOwF,IAAU,uBAAO,OAAO,IAAI;AAClC,EAAA/B,EAAM,KAAK,CAAC6I,GAAGzV,MACVyV,EAAE,aAAazV,EAAE,WAAiByV,EAAE,SAAS,cAAczV,EAAE,QAAQ,IACrEyV,EAAE,WAAWzV,EAAE,SAAeyV,EAAE,OAAO,cAAczV,EAAE,MAAM,IAC1DyV,EAAE,KAAK,cAAczV,EAAE,IAAI,CAClC;AACD,MAAI0V,IAAW;AAAA,IACd,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,EACR;AACC,SAAA9I,EAAM,QAAQ,CAACwB,MAAS;AACvB,QAAIsH,EAAS,SAAStH,EAAK,QAAQsH,EAAS,WAAWtH,EAAK,UAAUsH,EAAS,aAAatH,EAAK,SAAU;AAC3G,IAAAsH,IAAWtH;AACX,UAAMG,IAAWH,EAAK,UAChBxM,IAASwM,EAAK,QACdhN,IAAOgN,EAAK,MACZK,IAAkBE,EAAQJ,CAAQ,MAAMI,EAAQJ,CAAQ,IAAI,uBAAO,OAAO,IAAI,IAC9EoH,IAAelH,EAAgB7M,CAAM,MAAM6M,EAAgB7M,CAAM,IAAI4M,GAAWD,GAAU3M,CAAM;AACtG,QAAIgU;AACJ,IAAIxU,KAAQuU,EAAa,QAAOC,IAAOzM,EAAO,SACrCvH,MAAW,MAAM+T,EAAa,QAAQ,IAAIvU,CAAI,IAAGwU,IAAOzM,EAAO,UACnEyM,IAAOzM,EAAO;AACnB,UAAMN,IAAO;AAAA,MACZ,UAAA0F;AAAA,MACA,QAAA3M;AAAA,MACA,MAAAR;AAAA,IACH;AACE,IAAAwU,EAAK,KAAK/M,CAAI;AAAA,EACf,CAAC,GACMM;AACR;AAKA,SAAS0M,GAAYD,GAAM7G,IAAW,IAAMK,IAAc,IAAO;AAChE,QAAMjG,IAAS,CAAA;AACf,SAAAyM,EAAK,QAAQ,CAAC/M,MAAS;AACtB,UAAMuF,IAAO,OAAOvF,KAAS,WAAWiG,GAAajG,GAAMkG,GAAUK,CAAW,IAAIvG;AACpF,IAAIuF,KAAMjF,EAAO,KAAKiF,CAAI;AAAA,EAC3B,CAAC,GACMjF;AACR;AAKA,MAAM2M,KAAgB;AAAA,EACrB,WAAW,CAAA;AAAA,EACX,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AACnB;AAKA,SAASC,GAAUpC,GAAQ5V,GAASxJ,GAAO4J,GAAM;AAChD,QAAM6X,IAAiBrC,EAAO,UAAU,QAClC7c,IAAa6c,EAAO,SAAS,KAAK,MAAM,KAAK,OAAM,IAAKqC,CAAc,IAAIrC,EAAO;AACvF,MAAIN;AACJ,MAAIM,EAAO,QAAQ;AAClB,QAAIiC,IAAOjC,EAAO,UAAU,MAAM,CAAC;AAEnC,SADAN,IAAY,CAAA,GACLuC,EAAK,SAAS,KAAG;AACvB,YAAMK,IAAY,KAAK,MAAM,KAAK,OAAM,IAAKL,EAAK,MAAM;AACxD,MAAAvC,EAAU,KAAKuC,EAAKK,CAAS,CAAC,GAC9BL,IAAOA,EAAK,MAAM,GAAGK,CAAS,EAAE,OAAOL,EAAK,MAAMK,IAAY,CAAC,CAAC;AAAA,IACjE;AACA,IAAA5C,IAAYA,EAAU,OAAOuC,CAAI;AAAA,EAClC,MAAO,CAAAvC,IAAYM,EAAO,UAAU,MAAM7c,CAAU,EAAE,OAAO6c,EAAO,UAAU,MAAM,GAAG7c,CAAU,CAAC;AAClG,QAAMof,IAAY,KAAK,IAAG;AAC1B,MAAI/B,IAAS,WACTgC,IAAc,GACdC,GACAC,IAAQ,MACR9P,IAAQ,CAAA,GACR+P,IAAgB,CAAA;AACpB,EAAI,OAAOnY,KAAS,cAAYmY,EAAc,KAAKnY,CAAI;AAIvD,WAASoY,IAAa;AACrB,IAAIF,MACH,aAAaA,CAAK,GAClBA,IAAQ;AAAA,EAEV;AAIA,WAASd,IAAQ;AAChB,IAAIpB,MAAW,cAAWA,IAAS,YACnCoC,EAAU,GACVhQ,EAAM,QAAQ,CAACsC,MAAS;AACvB,MAAIA,EAAK,WAAW,cAAWA,EAAK,SAAS;AAAA,IAC9C,CAAC,GACDtC,IAAQ,CAAA;AAAA,EACT;AAKA,WAASiQ,EAAU/S,GAAUgT,GAAW;AACvC,IAAIA,MAAWH,IAAgB,CAAA,IAC3B,OAAO7S,KAAa,cAAY6S,EAAc,KAAK7S,CAAQ;AAAA,EAChE;AAIA,WAASiT,IAAiB;AACzB,WAAO;AAAA,MACN,WAAAR;AAAA,MACA,SAAAnY;AAAA,MACA,QAAAoW;AAAA,MACA,aAAAgC;AAAA,MACA,gBAAgB5P,EAAM;AAAA,MACtB,WAAAiQ;AAAA,MACA,OAAAjB;AAAA,IACH;AAAA,EACC;AAIA,WAASoB,IAAY;AACpB,IAAAxC,IAAS,UACTmC,EAAc,QAAQ,CAAC7S,MAAa;AACnC,MAAAA,EAAS,QAAQ2S,CAAS;AAAA,IAC3B,CAAC;AAAA,EACF;AAIA,WAASQ,IAAa;AACrB,IAAArQ,EAAM,QAAQ,CAACsC,MAAS;AACvB,MAAIA,EAAK,WAAW,cAAWA,EAAK,SAAS;AAAA,IAC9C,CAAC,GACDtC,IAAQ,CAAA;AAAA,EACT;AAIA,WAASsQ,EAAehO,GAAMhW,GAAUsC,IAAM;AAC7C,UAAM2hB,KAAUjkB,MAAa;AAE7B,YADA0T,IAAQA,EAAM,OAAO,CAACwQ,MAAWA,MAAWlO,CAAI,GACxCsL,GAAM;AAAA,MACb,KAAK;AAAW;AAAA,MAChB,KAAK;AACJ,YAAI2C,MAAW,CAACnD,EAAO,iBAAkB;AACzC;AAAA,MACD;AAAS;AAAA,IACZ;AACE,QAAI9gB,MAAa,SAAS;AACzB,MAAAujB,IAAYjhB,IACZwhB,EAAS;AACT;AAAA,IACD;AACA,QAAIG,IAAS;AACZ,MAAAV,IAAYjhB,IACPoR,EAAM,WAAa8M,EAAU,SAC7B2D,GAAQ,IAD6BL,EAAS;AAEnD;AAAA,IACD;AAGA,QAFAJ,EAAU,GACVK,EAAU,GACN,CAACjD,EAAO,QAAQ;AACnB,YAAMzd,IAAQyd,EAAO,UAAU,QAAQ9K,EAAK,QAAQ;AACpD,MAAI3S,MAAU,MAAMA,MAAUyd,EAAO,UAAOA,EAAO,QAAQzd;AAAA,IAC5D;AACA,IAAAie,IAAS,aACTmC,EAAc,QAAQ,CAAC7S,MAAa;AACnC,MAAAA,EAAStO,EAAI;AAAA,IACd,CAAC;AAAA,EACF;AAIA,WAAS6hB,KAAW;AACnB,QAAI7C,MAAW,UAAW;AAC1B,IAAAoC,EAAU;AACV,UAAMU,IAAW5D,EAAU,MAAK;AAChC,QAAI4D,MAAa,QAAQ;AACxB,UAAI1Q,EAAM,QAAQ;AACjB,QAAA8P,IAAQ,WAAW,MAAM;AACxB,UAAAE,EAAU,GACNpC,MAAW,cACdyC,EAAU,GACVD,EAAS;AAAA,QAEX,GAAGhD,EAAO,OAAO;AACjB;AAAA,MACD;AACA,MAAAgD,EAAS;AACT;AAAA,IACD;AACA,UAAM9N,IAAO;AAAA,MACZ,QAAQ;AAAA,MACR,UAAAoO;AAAA,MACA,UAAU,CAACC,IAAU/hB,OAAS;AAC7B,QAAA0hB,EAAehO,GAAMqO,IAAU/hB,EAAI;AAAA,MACpC;AAAA,IACH;AACE,IAAAoR,EAAM,KAAKsC,CAAI,GACfsN,KACAE,IAAQ,WAAWW,IAAUrD,EAAO,MAAM,GAC1Cpf,EAAM0iB,GAAUlZ,GAAS8K,EAAK,QAAQ;AAAA,EACvC;AACA,oBAAWmO,EAAQ,GACZN;AACR;AAKA,SAASS,GAAeC,GAAK;AAC5B,QAAMzD,IAAS;AAAA,IACd,GAAGmC;AAAA,IACH,GAAGsB;AAAA,EACL;AACC,MAAIC,IAAU,CAAA;AAId,WAASlR,IAAU;AAClB,IAAAkR,IAAUA,EAAQ,OAAO,CAACxO,MAASA,EAAI,EAAG,WAAW,SAAS;AAAA,EAC/D;AAIA,WAAStU,EAAMwJ,GAASuZ,GAAeC,GAAc;AACpD,UAAMC,IAAUzB,GAAUpC,GAAQ5V,GAASuZ,GAAe,CAACniB,GAAMlC,MAAU;AAC1E,MAAAkT,EAAO,GACHoR,KAAcA,EAAapiB,GAAMlC,CAAK;AAAA,IAC3C,CAAC;AACD,WAAAokB,EAAQ,KAAKG,CAAO,GACbA;AAAA,EACR;AAIA,WAASC,EAAKhU,GAAU;AACvB,WAAO4T,EAAQ,KAAK,CAACjZ,MACbqF,EAASrF,CAAK,CACrB,KAAK;AAAA,EACP;AAUA,SATiB;AAAA,IAChB,OAAA7J;AAAA,IACA,MAAAkjB;AAAA,IACA,UAAU,CAACvhB,MAAU;AACpB,MAAAyd,EAAO,QAAQzd;AAAA,IAChB;AAAA,IACA,UAAU,MAAMyd,EAAO;AAAA,IACvB,SAAAxN;AAAA,EACF;AAEA;AAEA,SAASuR,KAAkB;AAAC;AAC5B,MAAMC,KAAkB,uBAAO,OAAO,IAAI;AAI1C,SAASC,GAAmBrJ,GAAU;AACrC,MAAI,CAACoJ,GAAgBpJ,CAAQ,GAAG;AAC/B,UAAMoF,IAASC,GAAarF,CAAQ;AACpC,QAAI,CAACoF,EAAQ;AACb,UAAMkE,IAAaV,GAAexD,CAAM,GAClCmE,IAAkB;AAAA,MACvB,QAAAnE;AAAA,MACA,YAAAkE;AAAA,IACH;AACE,IAAAF,GAAgBpJ,CAAQ,IAAIuJ;AAAA,EAC7B;AACA,SAAOH,GAAgBpJ,CAAQ;AAChC;AAIA,SAASwJ,GAAajT,GAAQvQ,GAAOkP,GAAU;AAC9C,MAAIoU,GACArD;AACJ,MAAI,OAAO1P,KAAW,UAAU;AAC/B,UAAMkT,IAAM9E,GAAapO,CAAM;AAC/B,QAAI,CAACkT;AACJ,aAAAvU,EAAS,QAAQ,GAAG,GACbiU;AAER,IAAAlD,IAAOwD,EAAI;AACX,UAAMC,IAASL,GAAmB9S,CAAM;AACxC,IAAImT,MAAQJ,IAAaI,EAAO;AAAA,EACjC,OAAO;AACN,UAAMtE,IAASR,GAAgBrO,CAAM;AACrC,QAAI6O,GAAQ;AACX,MAAAkE,IAAaV,GAAexD,CAAM;AAClC,YAAMuE,IAAYpT,EAAO,YAAYA,EAAO,UAAU,CAAC,IAAI,IACrDkT,IAAM9E,GAAagF,CAAS;AAClC,MAAIF,MAAKxD,IAAOwD,EAAI;AAAA,IACrB;AAAA,EACD;AACA,SAAI,CAACH,KAAc,CAACrD,KACnB/Q,EAAS,QAAQ,GAAG,GACbiU,MAEDG,EAAW,MAAMtjB,GAAOigB,GAAM/Q,CAAQ,EAAC,EAAG;AAClD;AAEA,SAAS0U,KAAgB;AAAC;AAI1B,SAASC,GAAezJ,GAAS;AAChC,EAAKA,EAAQ,oBACZA,EAAQ,kBAAkB,IAC1B,WAAW,MAAM;AAChB,IAAAA,EAAQ,kBAAkB,IAC1BuG,GAAgBvG,CAAO;AAAA,EACxB,CAAC;AAEH;AAIA,SAAS0J,GAAqBzL,GAAO;AACpC,QAAM0L,IAAQ,CAAA,GACRC,IAAU,CAAA;AAChB,SAAA3L,EAAM,QAAQ,CAACxL,MAAS;AACvB,KAACA,EAAK,MAAMyN,EAAa,IAAIyJ,IAAQC,GAAS,KAAKnX,CAAI;AAAA,EACxD,CAAC,GACM;AAAA,IACN,OAAAkX;AAAA,IACA,SAAAC;AAAA,EACF;AACA;AAIA,SAASC,GAAoB7J,GAAS/B,GAAOzX,GAAM;AAClD,WAASsjB,IAAe;AACvB,UAAMC,IAAU/J,EAAQ;AACxB,IAAA/B,EAAM,QAAQ,CAACxL,MAAS;AACvB,MAAIsX,KAASA,EAAQ,OAAOtX,CAAI,GAC3BuN,EAAQ,MAAMvN,CAAI,KAAGuN,EAAQ,QAAQ,IAAIvN,CAAI;AAAA,IACnD,CAAC;AAAA,EACF;AACA,MAAIjM,KAAQ,OAAOA,KAAS,SAAU,KAAI;AAEzC,QAAI,CADWuZ,GAAWC,GAASxZ,CAAI,EAC3B,QAAQ;AACnB,MAAAsjB,EAAY;AACZ;AAAA,IACD;AAAA,EACD,SAASjZ,GAAK;AACb,YAAQ,MAAMA,CAAG;AAAA,EAClB;AACA,EAAAiZ,EAAY,GACZL,GAAezJ,CAAO;AACvB;AAIA,SAASgK,GAA2B9lB,GAAU4Q,GAAU;AACvD,EAAI5Q,aAAoB,UAASA,EAAS,KAAK,CAACsC,MAAS;AACxD,IAAAsO,EAAStO,CAAI;AAAA,EACd,CAAC,EAAE,MAAM,MAAM;AACd,IAAAsO,EAAS,IAAI;AAAA,EACd,CAAC,IACIA,EAAS5Q,CAAQ;AACvB;AAIA,SAAS+lB,GAAajK,GAAS/B,GAAO;AACrC,EAAK+B,EAAQ,cACRA,EAAQ,cAAcA,EAAQ,YAAY,OAAO/B,CAAK,EAAE,KAAI,IADvC+B,EAAQ,cAAc/B,GAE3C+B,EAAQ,mBACZA,EAAQ,iBAAiB,IACzB,WAAW,MAAM;AAChB,IAAAA,EAAQ,iBAAiB;AACzB,UAAM,EAAE,UAAAJ,GAAU,QAAA3M,EAAM,IAAK+M,GACvBkK,IAAUlK,EAAQ;AAExB,QADA,OAAOA,EAAQ,aACX,CAACkK,KAAW,CAACA,EAAQ,OAAQ;AACjC,UAAMC,IAAmBnK,EAAQ;AACjC,QAAIA,EAAQ,cAAckK,EAAQ,SAAS,KAAK,CAACC,IAAmB;AACnE,MAAAH,GAA2BhK,EAAQ,UAAUkK,GAASjX,GAAQ2M,CAAQ,GAAG,CAACpZ,MAAS;AAClF,QAAAqjB,GAAoB7J,GAASkK,GAAS1jB,CAAI;AAAA,MAC3C,CAAC;AACD;AAAA,IACD;AACA,QAAI2jB,GAAkB;AACrB,MAAAD,EAAQ,QAAQ,CAACzX,MAAS;AACzB,cAAMvO,IAAWimB,EAAiB1X,GAAMQ,GAAQ2M,CAAQ;AACxD,QAAAoK,GAA2B9lB,GAAU,CAACsC,MAAS;AAC9C,gBAAM4jB,IAAU5jB,IAAO;AAAA,YACtB,QAAAyM;AAAA,YACA,OAAO,EAAE,CAACR,CAAI,GAAGjM,EAAI;AAAA,UAC5B,IAAU;AACJ,UAAAqjB,GAAoB7J,GAAS,CAACvN,CAAI,GAAG2X,CAAO;AAAA,QAC7C,CAAC;AAAA,MACF,CAAC;AACD;AAAA,IACD;AACA,UAAM,EAAE,OAAAT,GAAO,SAAAC,MAAYF,GAAqBQ,CAAO;AAEvD,QADIN,EAAQ,UAAQC,GAAoB7J,GAAS4J,GAAS,IAAI,GAC1D,CAACD,EAAM,OAAQ;AACnB,UAAMN,IAAMpW,EAAO,MAAMiN,EAAa,IAAIqE,GAAa3E,CAAQ,IAAI;AACnE,QAAI,CAACyJ,GAAK;AACT,MAAAQ,GAAoB7J,GAAS2J,GAAO,IAAI;AACxC;AAAA,IACD;AAEA,IADeN,EAAI,QAAQzJ,GAAU3M,GAAQ0W,CAAK,EAC3C,QAAQ,CAACzP,MAAS;AACxB,MAAAkP,GAAaxJ,GAAU1F,GAAM,CAAC1T,MAAS;AACtC,QAAAqjB,GAAoB7J,GAAS9F,EAAK,OAAO1T,CAAI;AAAA,MAC9C,CAAC;AAAA,IACF,CAAC;AAAA,EACF,CAAC;AAEH;AAIA,MAAM6jB,KAAY,CAACpM,GAAOnJ,MAAa;AACtC,QAAMwV,IAAepD,GAAYjJ,GAAO,IAAMyC,GAAgB,CAAE,GAC1D6J,IAAc1D,GAAUyD,CAAY;AAC1C,MAAI,CAACC,EAAY,QAAQ,QAAQ;AAChC,QAAIC,IAAe;AACnB,WAAI1V,KAAU,WAAW,MAAM;AAC9B,MAAI0V,KAAc1V,EAASyV,EAAY,QAAQA,EAAY,SAASA,EAAY,SAASf,EAAa;AAAA,IACvG,CAAC,GACM,MAAM;AACZ,MAAAgB,IAAe;AAAA,IAChB;AAAA,EACD;AACA,QAAMC,IAAW,uBAAO,OAAO,IAAI,GAC7BpR,IAAU,CAAA;AAChB,MAAIqR,GAAcC;AAClB,SAAAJ,EAAY,QAAQ,QAAQ,CAAC9K,MAAS;AACrC,UAAM,EAAE,UAAAG,GAAU,QAAA3M,EAAM,IAAKwM;AAC7B,QAAIxM,MAAW0X,KAAc/K,MAAa8K,EAAc;AACxD,IAAAA,IAAe9K,GACf+K,IAAa1X,GACboG,EAAQ,KAAKwG,GAAWD,GAAU3M,CAAM,CAAC;AACzC,UAAM2X,IAAmBH,EAAS7K,CAAQ,MAAM6K,EAAS7K,CAAQ,IAAI,uBAAO,OAAO,IAAI;AACvF,IAAKgL,EAAiB3X,CAAM,MAAG2X,EAAiB3X,CAAM,IAAI,CAAA;AAAA,EAC3D,CAAC,GACDsX,EAAY,QAAQ,QAAQ,CAAC9K,MAAS;AACrC,UAAM,EAAE,UAAAG,GAAU,QAAA3M,GAAQ,MAAAR,EAAI,IAAKgN,GAC7BO,IAAUH,GAAWD,GAAU3M,CAAM,GACrC4X,IAAe7K,EAAQ,iBAAiBA,EAAQ,eAA+B,oBAAI;AACzF,IAAK6K,EAAa,IAAIpY,CAAI,MACzBoY,EAAa,IAAIpY,CAAI,GACrBgY,EAAS7K,CAAQ,EAAE3M,CAAM,EAAE,KAAKR,CAAI;AAAA,EAEtC,CAAC,GACD4G,EAAQ,QAAQ,CAAC2G,MAAY;AAC5B,UAAMiH,IAAOwD,EAASzK,EAAQ,QAAQ,EAAEA,EAAQ,MAAM;AACtD,IAAIiH,EAAK,UAAQgD,GAAajK,GAASiH,CAAI;AAAA,EAC5C,CAAC,GACMnS,IAAW4R,GAAc5R,GAAUyV,GAAalR,CAAO,IAAImQ;AACnE;AA2CA,SAASsB,GAAoBxL,GAAUpF,GAAM;AAC5C,QAAMM,IAAS,EAAE,GAAG8E,EAAQ;AAC5B,aAAWhM,KAAO4G,GAAM;AACvB,UAAMzK,IAAQyK,EAAK5G,CAAG,GAChByX,IAAY,OAAOtb;AACzB,IAAI6D,KAAO2N,MACNxR,MAAU,QAAQA,MAAUsb,MAAc,YAAYA,MAAc,eAAWvQ,EAAOlH,CAAG,IAAI7D,KACvFsb,MAAc,OAAOvQ,EAAOlH,CAAG,MAAGkH,EAAOlH,CAAG,IAAIA,MAAQ,WAAW7D,IAAQ,IAAIA;AAAA,EAC3F;AACA,SAAO+K;AACR;AAEA,MAAMwQ,KAAY;AAIlB,SAASC,GAAeC,GAAQC,GAAM;AACrC,EAAAA,EAAK,MAAMH,EAAS,EAAE,QAAQ,CAAC3jB,MAAQ;AAEtC,YADcA,EAAI,KAAI,GACT;AAAA,MACZ,KAAK;AACJ,QAAA6jB,EAAO,QAAQ;AACf;AAAA,MACD,KAAK;AACJ,QAAAA,EAAO,QAAQ;AACf;AAAA,IACJ;AAAA,EACC,CAAC;AACF;AAKA,SAASE,GAAiB3b,GAAO4b,IAAe,GAAG;AAClD,QAAMC,IAAQ7b,EAAM,QAAQ,cAAc,EAAE;AAC5C,WAAS+H,EAAQ+T,GAAS;AACzB,WAAOA,IAAU,IAAG,CAAAA,KAAW;AAC/B,WAAOA,IAAU;AAAA,EAClB;AACA,MAAID,MAAU,IAAI;AACjB,UAAMzJ,IAAM,SAASpS,CAAK;AAC1B,WAAO,MAAMoS,CAAG,IAAI,IAAIrK,EAAQqK,CAAG;AAAA,EACpC,WAAWyJ,MAAU7b,GAAO;AAC3B,QAAI+S,IAAQ;AACZ,YAAQ8I,GAAK;AAAA,MACZ,KAAK;AACJ,QAAA9I,IAAQ;AACR;AAAA,MACD,KAAK;AAAO,QAAAA,IAAQ;AAAA,IACvB;AACE,QAAIA,GAAO;AACV,UAAIX,IAAM,WAAWpS,EAAM,MAAM,GAAGA,EAAM,SAAS6b,EAAM,MAAM,CAAC;AAChE,aAAI,MAAMzJ,CAAG,IAAU,KACvBA,IAAMA,IAAMW,GACLX,IAAM,MAAM,IAAIrK,EAAQqK,CAAG,IAAI;AAAA,IACvC;AAAA,EACD;AACA,SAAOwJ;AACR;AAKA,SAASG,GAAWjJ,GAAMmB,GAAY;AACrC,MAAI+H,IAAoBlJ,EAAK,QAAQ,QAAQ,MAAM,KAAK,KAAK;AAC7D,aAAWmJ,KAAQhI,EAAY,CAAA+H,KAAqB,MAAMC,IAAO,OAAQhI,EAAWgI,CAAI,IAAI;AAC5F,SAAO,4CAA8CD,IAAoB,MAAMlJ,IAAO;AACvF;AAQA,SAASoJ,GAAgBC,GAAK;AAC7B,SAAOA,EAAI,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,MAAM,KAAK,EAAE,QAAQ,QAAQ,GAAG;AACtI;AAIA,SAASC,GAAUD,GAAK;AACvB,SAAO,wBAAwBD,GAAgBC,CAAG;AACnD;AAIA,SAASE,GAASF,GAAK;AACtB,SAAO,UAAWC,GAAUD,CAAG,IAAI;AACpC;AAEA,IAAIG;AAIJ,SAASC,KAAe;AACvB,MAAI;AACH,IAAAD,KAAS,OAAO,aAAa,aAAa,WAAW,EAAE,YAAY,CAAC/hB,MAAMA,GAAG;AAAA,EAC9E,QAAc;AACb,IAAA+hB,KAAS;AAAA,EACV;AACD;AAOA,SAASE,GAAiBC,GAAM;AAC/B,SAAIH,OAAW,UAAQC,GAAY,GAC5BD,KAASA,GAAO,WAAWG,CAAI,IAAIA;AAC3C;AAEA,MAAMC,KAAoC;AAAA,EACtC,GAAGjL;AAAA,EACH,QAAQ;AACZ,GAKMkL,KAAc;AAAA,EAChB,OAAS;AAAA,EACT,YAAc;AAAA,EACd,eAAe;AAAA,EACf,MAAQ;AACZ,GAIMC,KAAc;AAAA,EAChB,SAAS;AACb,GACMC,KAAgB;AAAA,EAClB,iBAAiB;AACrB,GACMC,KAAe;AAAA,EACjB,iBAAiB;AACrB,GAEMC,KAAa;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AACV,GACMC,KAAe;AAAA,EACjB,YAAYH;AAAA,EACZ,MAAMA;AAAA,EACN,YAAYC;AAChB;AACA,WAAWtZ,KAAUwZ,IAAc;AAC/B,QAAMxF,IAAOwF,GAAaxZ,CAAM;AAChC,aAAWsM,KAAQiN;AACf,IAAAvF,EAAKhU,IAASsM,CAAI,IAAIiN,GAAWjN,CAAI;AAE7C;AAIA,MAAMmN,KAAiB;AAAA,EACnB,GAAGP;AAAA,EACH,QAAQ;AACZ;AAIA,SAASQ,GAAQld,GAAO;AACpB,SAAOA,KAASA,EAAM,MAAM,YAAY,IAAI,OAAO;AACvD;AAIA,MAAMmd,KAAS,CAEfnN,GAEA7b,GAEA6O,MAAS;AAEL,QAAMoa,IAAejpB,EAAM,SACrB8oB,KACAP,IAEAxJ,IAAiBmI,GAAoB+B,GAAcjpB,CAAK,GAExDkpB,IAAOlpB,EAAM,QAAQ,OAErBtB,IAAQ,CAAA,GACRyqB,IAAcnpB,EAAM,SAAS,CAAA,GAE7BopB,IAAiB;AAAA,IACnB,GAAIF,MAAS,QAAQV,KAAc;EAC3C;AACI,MAAI3Z,GAAM;AACN,UAAMoO,IAAWV,GAAa1N,GAAM,IAAO,EAAI;AAC/C,QAAIoO,GAAU;AACV,YAAMoM,IAAa,CAAC,SAAS,GACvBrpB,IAAQ;AAAA,QACV;AAAA,QACA;AAAA,MAChB;AACY,iBAAW2b,KAAQ3b;AACf,QAAIid,EAAStB,CAAI,KACb0N,EAAW,KAAK,cAAcpM,EAAStB,CAAI,CAAC;AAGpD,MAAAyN,EAAe,YAAYC,EAAW,KAAK,GAAG;AAAA,IAClD;AAAA,EACJ;AAEA,WAAS3Z,KAAO1P,GAAO;AACnB,UAAM6L,IAAQ7L,EAAM0P,CAAG;AACvB,QAAI7D,MAAU;AAGd,cAAQ6D,GAAG;AAAA;AAAA,QAEP,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD;AAAA;AAAA,QAEJ,KAAK;AACD,UAAA0Z,EAAe,MAAMvd;AACrB;AAAA;AAAA,QAEJ,KAAK;AACD,UAAAud,EAAe1Z,CAAG,KACb0Z,EAAe1Z,CAAG,IAAI0Z,EAAe1Z,CAAG,IAAI,MAAM,MAC/C7D;AACR;AAAA;AAAA,QAEJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACD,UAAAkT,EAAerP,CAAG,IACd7D,MAAU,MAAQA,MAAU,UAAUA,MAAU;AACpD;AAAA;AAAA,QAEJ,KAAK;AACD,UAAI,OAAOA,KAAU,YACjBwb,GAAetI,GAAgBlT,CAAK;AAExC;AAAA;AAAA,QAEJ,KAAK;AACD,UAAAnN,EAAM,QAAQmN;AACd;AAAA;AAAA,QAEJ,KAAK;AACD,UAAI,OAAOA,KAAU,WACjBkT,EAAerP,CAAG,IAAI8X,GAAiB3b,CAAK,IAEvC,OAAOA,KAAU,aACtBkT,EAAerP,CAAG,IAAI7D;AAE1B;AAAA;AAAA,QAEJ,KAAK;AAAA,QACL,KAAK;AACD,UAAIA,MAAU,MAAQA,MAAU,UAC5B,OAAOud,EAAe,aAAa;AAEvC;AAAA;AAAA,QAEJ;AACI,UAAIH,EAAavZ,CAAG,MAAM,WACtB0Z,EAAe1Z,CAAG,IAAI7D;AAAA,MAE1C;AAAA,EACI;AAEA,QAAMyK,IAAOwI,GAAUjD,GAAMkD,CAAc,GACrCuK,IAAgBhT,EAAK;AAK3B,MAHIyI,EAAe,WACfrgB,EAAM,gBAAgB,aAEtBwqB,MAAS,OAAO;AAEhB,IAAAE,EAAe,QAAQ;AAAA,MACnB,GAAG1qB;AAAA,MACH,GAAGyqB;AAAA,IACf,GAEQ,OAAO,OAAOC,GAAgBE,CAAa;AAE3C,QAAIC,IAAe,GACfhnB,IAAKvC,EAAM;AACf,WAAI,OAAOuC,KAAO,aAEdA,IAAKA,EAAG,QAAQ,MAAM,GAAG,IAG7B6mB,EAAe,0BAA0B;AAAA,MACrC,QAAQf,GAAiBjI,GAAW9J,EAAK,MAAM/T,IAAK,MAAMA,IAAK,OAAOgnB,MAAiB,cAAc,CAAC;AAAA,IAClH,GACeC,GAAc,OAAOJ,CAAc;AAAA,EAC9C;AAEA,QAAM,EAAE,MAAAzK,GAAM,OAAAiB,GAAO,QAAAC,EAAM,IAAKhE,GAC1B4N,IAAUP,MAAS,WACpBA,MAAS,OAAO,KAAQvK,EAAK,QAAQ,cAAc,MAAM,KAExD2J,IAAOV,GAAWjJ,GAAM;AAAA,IAC1B,GAAG2K;AAAA,IACH,OAAO1J,IAAQ;AAAA,IACf,QAAQC,IAAS;AAAA,EACzB,CAAK;AAED,SAAAuJ,EAAe,QAAQ;AAAA,IACnB,GAAG1qB;AAAA,IACH,SAASwpB,GAASI,CAAI;AAAA,IACtB,OAASS,GAAQO,EAAc,KAAK;AAAA,IACpC,QAAUP,GAAQO,EAAc,MAAM;AAAA,IACtC,GAAGb;AAAA,IACH,GAAIgB,IAAUf,KAAgBC;AAAA,IAC9B,GAAGQ;AAAA,EACX,GACWK,GAAc,QAAQJ,CAAc;AAC/C;AAMAtM,GAAiB,EAAI;AAErB4D,GAAa,IAAI6B,EAAc;AAI/B,IAAI,OAAO,WAAa,OAAe,OAAO,SAAW,KAAa;AAClE,QAAMmH,IAAU;AAEhB,MAAIA,EAAQ,mBAAmB,QAAQ;AACnC,UAAMC,IAAUD,EAAQ,gBAClBzc,IAAM;AACZ,IAAI,OAAO0c,KAAY,YAAYA,MAAY,SAC1CA,aAAmB,QAAQA,IAAU,CAACA,CAAO,GAAG,QAAQ,CAACrT,MAAS;AAC/D,UAAI;AACA;AAAA,SAEA,OAAOA,KAAS,YACZA,MAAS,QACTA,aAAgB;AAAA,QAEhB,OAAOA,EAAK,SAAU,YACtB,OAAOA,EAAK,UAAW;AAAA,QAEvB,CAAC6G,GAAc7G,CAAI,MACnB,QAAQ,MAAMrJ,CAAG;AAAA,MAEzB,QACU;AACN,gBAAQ,MAAMA,CAAG;AAAA,MACrB;AAAA,IACJ,CAAC;AAAA,EAET;AAEA,MAAIyc,EAAQ,qBAAqB,QAAQ;AACrC,UAAME,IAAYF,EAAQ;AAC1B,QAAI,OAAOE,KAAc,YAAYA,MAAc;AAC/C,eAASla,KAAOka,GAAW;AACvB,cAAM3c,IAAM,sBAAsByC,IAAM;AACxC,YAAI;AACA,gBAAM7D,IAAQ+d,EAAUla,CAAG;AAC3B,cAAI,OAAO7D,KAAU,YACjB,CAACA,KACDA,EAAM,cAAc;AACpB;AAEJ,UAAKqV,GAAexR,GAAK7D,CAAK,KAC1B,QAAQ,MAAMoB,CAAG;AAAA,QAEzB,QACU;AACN,kBAAQ,MAAMA,CAAG;AAAA,QACrB;AAAA,MACJ;AAAA,EAER;AACJ;AACA,SAAS4c,GAAc7pB,GAAO;AAC1B,QAAM,CAAC8pB,GAASC,CAAU,IAAI9lB,EAAS,CAAC,CAACjE,EAAM,GAAG,GAC5C,CAACgjB,GAAOgH,CAAQ,IAAI/lB,EAAS,CAAA,CAAE;AAErC,WAASgmB,EAAgBH,GAAS;AAC9B,QAAIA,GAAS;AACT,YAAMjb,IAAO7O,EAAM;AACnB,UAAI,OAAO6O,KAAS;AAEhB,eAAO;AAAA,UACH,MAAM;AAAA,UACN,MAAMA;AAAA,QAC1B;AAEY,YAAMjM,IAAOoa,GAAYnO,CAAI;AAC7B,UAAIjM;AACA,eAAO;AAAA,UACH,MAAAiM;AAAA,UACA,MAAAjM;AAAA,QACpB;AAAA,IAEQ;AACA,WAAO;AAAA,MACH,MAAM;AAAA,IAClB;AAAA,EACI;AACA,QAAM,CAAC7D,GAAOmrB,CAAQ,IAAIjmB,EAASgmB,EAAgB,CAAC,CAACjqB,EAAM,GAAG,CAAC;AAE/D,WAAS4T,IAAU;AACf,UAAM1C,IAAW8R,EAAM;AACvB,IAAI9R,MACAA,EAAQ,GACR8Y,EAAS,CAAA,CAAE;AAAA,EAEnB;AAEA,WAASG,EAAYC,GAAU;AAC3B,QAAI,KAAK,UAAUrrB,CAAK,MAAM,KAAK,UAAUqrB,CAAQ;AACjD,aAAAxW,EAAO,GACPsW,EAASE,CAAQ,GACV;AAAA,EAEf;AAEA,WAASC,IAAc;AACnB,QAAI/oB;AACJ,UAAMuN,IAAO7O,EAAM;AACnB,QAAI,OAAO6O,KAAS,UAAU;AAE1B,MAAAsb,EAAY;AAAA,QACR,MAAM;AAAA,QACN,MAAMtb;AAAA,MACtB,CAAa;AACD;AAAA,IACJ;AAEA,UAAMjM,IAAOoa,GAAYnO,CAAI;AAC7B,QAAIsb,EAAY;AAAA,MACZ,MAAAtb;AAAA,MACA,MAAAjM;AAAA,IACZ,CAAS;AACG,UAAIA,MAAS,QAAW;AAEpB,cAAMsO,IAAWuV,GAAU,CAAC5X,CAAI,GAAGwb,CAAW;AAC9C,QAAAL,EAAS;AAAA,UACL,UAAA9Y;AAAA,QACpB,CAAiB;AAAA,MACL,MACK,CAAItO,OAEJtB,IAAKtB,EAAM,YAAY,QAAQsB,MAAO,UAAkBA,EAAG,KAAKtB,GAAO6O,CAAI;AAAA,EAGxF;AAEA,EAAApQ,GAAU,OACNsrB,EAAW,EAAI,GACRnW,IACR,CAAA,CAAE,GAELnV,GAAU,MAAM;AACZ,IAAIqrB,KACAO,EAAW;AAAA,EAEnB,GAAG,CAACrqB,EAAM,MAAM8pB,CAAO,CAAC;AAExB,QAAM,EAAE,MAAAjb,GAAM,MAAAjM,EAAI,IAAK7D;AACvB,SAAK6D,IAOEomB,GAAO;AAAA,IACV,GAAGtO;AAAA,IACH,GAAG9X;AAAA,EACX,GAAO5C,GAAO6O,CAAI,IATH7O,EAAM,WACPA,EAAM,WACNA,EAAM,WACFA,EAAM,WACNwpB,GAAc,QAAQ,EAAE;AAM1C;AAMA,MAAMxhB,KAAOsiB,GAAW,CAACtqB,GAAOuqB,MAAQV,GAAc;AAAA,EAClD,GAAG7pB;AAAA,EACH,MAAMuqB;AACV,CAAC,CAAC;AAMiBD,GAAW,CAACtqB,GAAOuqB,MAAQV,GAAc;AAAA,EACxD,QAAQ;AAAA,EACR,GAAG7pB;AAAA,EACH,MAAMuqB;AACV,CAAC,CAAC;AC33DK,MAAMC,KAAgB,OAoBhBC,KAAmB,CAACC,GAAcC,IAAeH,OAAkB;AAC9E,QAAMI,KAASF,KAAA,gBAAAA,EAAS,WAAU,CAAA;AAClC,MAAI,CAACE,EAAO,OAAQ,QAAO;AAE3B,QAAMC,IAAS,CAACxH,MAAqB;;AACnC,UAAMyH,IAAkBzH,EAAK,KAAK,CAACvW;;AAAM,cAAC,GAACxL,IAAAwL,EAAE,eAAF,QAAAxL,EAAc;AAAA,KAAK;AAC9D,QAAIwpB;AACF,aAAO;AAAA,QACL,MAAMA,EAAgB,WAAW,MAAM;AAAA,QACvC,KAAKA,EAAgB,WAAW,MAAM;AAAA,QACtC,cAAaxpB,IAAAwpB,EAAgB,UAAhB,gBAAAxpB,EAAuB;AAAA,MAAA;AAGxC,UAAMypB,KAAS7nB,IAAAmgB,EAAK,CAAC,MAAN,gBAAAngB,EAAS;AACxB,WAAO6nB,IAAS,EAAE,MAAMA,EAAO,YAAY,KAAKA,EAAO,iBAAiB;AAAA,EAC1E,GAEMC,IAASJ,EAAO;AAAA,IACpB,CAAC9d,MAAA;;AAAY,eAAA5J,MAAA5B,IAAAwL,EAAE,eAAF,gBAAAxL,EAAc,UAASwL,EAAE,UAAzB,gBAAA5J,EAAiC,kBAAiBynB;AAAA;AAAA,EAAA,GAE3DM,IAASJ,EAAOG,CAAM;AAC5B,SAAIC,KACGJ,EAAOD,CAAM,KAAK;AAC3B,GAGaM,KAA2B,CAACpL,GAAmBjR,MAAyB;AACnF,MAAI,CAAC,MAAM,QAAQiR,CAAU,EAAG,QAAO;AACvC,QAAMgI,IACJhI,EAAW,KAAK,CAACoD,MAAMA,EAAE,SAASrU,CAAI,KACtCiR,EAAW,KAAK,CAACoD;;AAAM,aAAA5hB,IAAA4hB,EAAE,SAAF,gBAAA5hB,EAAQ,mBAAkBuN,EAAK;GAAa;AACrE,SAAI,CAACiZ,KAAQ,CAACA,EAAK,QAAc,KAC1B,OAAOA,EAAK,SAAU,WAAWA,EAAK,MAAM,SAAS,KAAKA,EAAK;AACxE,GAEaqD,KAA0B,CAACrL,MAAsB;AAC5D,MAAIsL,IAAY;AAChB,MAAI,MAAM,QAAQtL,CAAU,GAAG;AAC7B,UAAMuL,IACJvL,EAAW,KAAK,CAACoD,MAAMA,EAAE,SAAS,MAAM,KACxCpD,EAAW,KAAK,CAACoD,MAAMA,EAAE,SAAS,MAAM;AAC1C,IAAImI,KAAYA,EAAS,UACvBD,IACE,OAAOC,EAAS,SAAU,WACtBA,EAAS,MAAM,SAAS,KACxBA,EAAS;AAAA,EAEnB;AACA,SAAO,EAAE,WAAAD,EAAA;AACX,GAEaE,KAAkB,CAACzV,MAC9BqV,IAAyBrV,KAAA,gBAAAA,EAAG,kBAAiB,CAAA,GAAI,OAAO,GAE7C0V,KAAiB,CAAC1V,MAC7BsV,IAAwBtV,KAAA,gBAAAA,EAAG,kBAAiB,CAAA,CAAE,EAAE,WClD5CzS,KAAiB,CAACK,MACfA,EAAI,OAAO,CAAC,EAAE,gBAAgBA,EAAI,MAAM,CAAC,GAK5C+nB,KAGF;AAAA,EACF,UAAU;AAAA,IACR,OAAO;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,OAAO;AAAA,IACP,KAAK;AAAA,IACL,UAAU;AAAA,IACV,MAAM;AAAA,EAAA;AAEV,GAEMC,KAAyD;AAAA,EAC7D,UAAU;AAAA,EACV,SAAS;AAAA,EACT,SAAS;AACX,GAEMC,KAAiB,CAACC,GAAgBC,MAAqB;AAC3D,MAAI;AACF,WAAOD,EAAO,eAAe,SAAS;AAAA,MACpC,OAAO;AAAA,MACP,UAAUC,KAAY;AAAA,IAAA,CACvB;AAAA,EACH,QAAQ;AACN,WAAO,GAAGA,CAAQ,IAAID,EAAO,QAAQ,CAAC,CAAC;AAAA,EACzC;AACF,GAGME,KAAW,CAAC/e,MAA6BA,KAAA,gBAAAA,EAAG,eAC5Cgf,KAAa,CAAChf,MAClB,MAAM,QAAQA,KAAA,gBAAAA,EAAG,QAAQ,IAAIA,EAAG,WAAW,CAAA,GACvCif,KAAQ,CAACjf,MAAmB;AAChC,QAAMQ,IAAIue,GAAS/e,CAAC;AACpB,SAAOQ,IAAI,CAACA,GAAG,GAAGwe,GAAWhf,CAAC,CAAC,IAAIgf,GAAWhf,CAAC;AACjD,GAEMkf,KAAoB,CAAClf,GAAQ1B,IAAM,MAAuB2gB,GAAMjf,CAAC,EAAE1B,CAAG,GAEtE6gB,KAAkB,CAACpW;;AAAY,WAAA3S,KAAA5B,IAAAuU,KAAA,gBAAAA,EAAG,WAAH,gBAAAvU,EAAY,OAAZ,gBAAA4B,EAAgB,QAAO;AAAA,GAGtDgpB,KAAkB,CAACpf,GAAS+I;;AAChC,SAAAoW,GAAgBpW,CAAC,OACjB9Q,KAAA5B,KAAAD,KAAA5B,IAAAwL,EAAE,gBAAF,gBAAAxL,EAAgB,OAAhB,gBAAA4B,EAAoB,WAApB,gBAAAC,EAA6B,OAA7B,gBAAA4B,EAAiC,WACjConB,KAAAC,KAAAzlB,KAAAD,IAAAoG,EAAE,iBAAF,gBAAApG,EAAiB,OAAjB,gBAAAC,EAAqB,WAArB,gBAAAylB,EAA8B,OAA9B,gBAAAD,EAAkC,SAClC;AAAA,GAEIE,KAAkB,CAACvf,OACvBA,KAAA,gBAAAA,EAAG,UAASA,KAAA,gBAAAA,EAAW,WAAUA,KAAA,gBAAAA,EAAW,gBAAe,OAGvDwf,KAAkB,CAACzW,MAAY;;AACnC,QAAMoV,IAASpV,IAAI4U,GAAiB5U,GAAG2U,EAAa,IAAI;AACxD,MAAIS,KAAA,QAAAA,EAAQ,SAAQA,KAAA,QAAAA,EAAQ;AAC1B,WAAO;AAAA,MACL,QAAQ,EAAEA,EAAO,OAAO;AAAA,MACxB,UAAUA,EAAO;AAAA,MACjB,eAAeA,EAAO,cAAcA,EAAO,cAAc,MAAM;AAAA,IAAA;AAGnE,QAAMsB,KAAQppB,KAAAD,KAAA5B,IAAAuU,KAAA,gBAAAA,EAAG,WAAH,gBAAAvU,EAAY,OAAZ,gBAAA4B,EAAgB,UAAhB,gBAAAC,EAAuB,YAC/BqpB,MAAM7lB,KAAAD,KAAA3B,IAAA8Q,KAAA,gBAAAA,EAAG,WAAH,gBAAA9Q,EAAY,OAAZ,gBAAA2B,EAAgB,UAAhB,gBAAAC,EAAuB,iBAAgB6jB;AAEnD,SAAO,EAAE,QADM,OAAO,SAAS+B,CAAK,IAAI,EAAE,OAAOA,CAAK,IAAI,OAAO,GAChD,UAAUC,EAAA;AAC7B,GAEMC,KAAkB,CAAC3f,GAAS+I,MAAY;AAC5C,QAAM,EAAE,QAAA8V,EAAA,IAAWW,GAAgBzW,CAAC;AACpC,MAAI8V,EAAQ,QAAOA;AACnB,QAAMe,KACH5f,KAAA,gBAAAA,EAAW,WACXA,KAAA,gBAAAA,EAAW,kBACXA,KAAA,gBAAAA,EAAW,eACXA,KAAA,gBAAAA,EAAW,QACZ,GACIe,IAAI,OAAO6e,CAAG;AACpB,SAAO,OAAO,SAAS7e,CAAC,IAAIA,IAAI;AAClC,GAEM8e,KAAgB,CAAC7f,MAAA;;AACpB,UAAAA,KAAA,gBAAAA,EAAW,UAAQxL,IAAAwL,KAAA,gBAAAA,EAAW,YAAX,gBAAAxL,EAAoB,SAAQwL,KAAA,gBAAAA,EAAW,gBAAe;AAAA,GACtE8f,KAAkB,CAAC9f,MAAA;;AACtB,UAAAA,KAAA,gBAAAA,EAAW,WACXA,KAAA,gBAAAA,EAAW,oBACXxL,IAAAwL,KAAA,gBAAAA,EAAW,YAAX,gBAAAxL,EAAoB,UACrB;AAAA,GACIurB,KAAiB,CAAC/f,MAAA;;AACrB,UAAAA,KAAA,gBAAAA,EAAW,UACXA,KAAA,gBAAAA,EAAW,mBACXxL,IAAAwL,KAAA,gBAAAA,EAAW,YAAX,gBAAAxL,EAAoB,SACrB;AAAA,GA6CIwrB,KAAoB,IAIpBC,KAAkB,CAAC;AAAA,EACvB,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,SAAA7oB;AAAA,EACA,OAAAT;AAAA,EACA,iBAAAupB;AAAA,EACA,gBAAAC;AAAA,EACA,qBAAAC;AACF,MAA4B;AAI1B,QAAMC,IAActB,GAAM3nB,CAAO,GAC3BkpB,IAAiB,KAAK;AAAA,IAC1B,KAAK,IAAI,GAAG3pB,KAAS,CAAC;AAAA,IACtB,KAAK,IAAI,GAAG0pB,EAAY,SAAS,CAAC;AAAA,EAAA,GAE9B,CAACE,GAAiBC,CAAkB,IAAIvpB,EAAS,CAAA,CAAE,GACnD,CAACwpB,GAAsBC,CAAuB,IAAIzpB,EAAS,CAAC;AAElE,EAAAxF,GAAU,MAAM;AACd,QAAI2F,KAAA,QAAAA,EAAS,UAAU;AACrB,YAAMupB,IAAUC;AAAA,QACdxpB,EAAQ;AAAA,QACRA,EAAQ;AAAA,QACRgpB;AAAA,MAAA;AAEF,MAAAI,EAAmBG,CAAO;AAAA,IAC5B;AAAA,EACF,GAAG,CAACvpB,CAAO,CAAC;AAEZ,QAAMwpB,IAAuB,CAC3BC,GACAC,GACAV,MACG;AACH,UAAM,EAAE,UAAAW,GAAU,SAAAC,MAAYC,EAAmBb,CAAmB,GAG9Dc,IAAqB,CAAA;AAE3B,IAAAJ,KAAA,QAAAA,EAAa,QAAQ,CAAChmB,MAAU;;AAC9B,YAAMqmB,KAAY7sB,KAAAwG,EAAM,wBAAN,gBAAAxG,GAA2B;AAAA,QAC3C,CAAC4hB,OAAMA,GAAE,OAAO;AAAA,SAGZkL,KAAYjrB,MAAAD,KAAAirB,KAAA,gBAAAA,EAAW,WAAX,gBAAAjrB,GAAoB,OAApB,gBAAAC,GAAwB;AAC1C,MAAKirB,MAEAF,EAAcE,CAAS,MAC1BF,EAAcE,CAAS,IAAI,CAAA,IAG7BF,EAAcE,CAAS,EAAEtmB,EAAM,QAAQ,IAAIA,EAAM;AAAA,IACnD;AAGA,UAAMumB,IAAMR,EAAS,OAAO,CAACxY,GAAUiB,MAAc;AACnD,YAAM8X,IAAY9X,EAAK,gBAAgB,OACjCgY,KAAWhY,EAAK,gBAAgB;AAEtC,aAAKjB,EAAI+Y,CAAS,MAChB/Y,EAAI+Y,CAAS,IAAI;AAAA,QACf,OAAOA;AAAA,QACP,MAAML,EAASK,CAAS,KAAKA;AAAA;AAAA,QAC7B,QAAQF,EAAcE,CAAS,KAAK,CAAA;AAAA,QACpC,UAAU,CAAA;AAAA,MAAC,IAIf/Y,EAAI+Y,CAAS,EAAE,SAAS,KAAK;AAAA,QAC3B,MAAME;AAAA,QACN,MAAMN,EAAQM,EAAQ,KAAKA;AAAA;AAAA,QAC3B,GAAGhY;AAAA,MAAA,CACJ,GAEMjB;AAAA,IACT,GAAG,CAAA,CAAE;AAGL,WAAO,OAAO,OAAOgZ,CAAG,EACrB,KAAK,CAACnL,GAAQzV,MAAW;AACxB,YAAM8gB,IAAQrL,EAAE,aAAaA,EAAE,SAAS,IAClCsL,KAAQ/gB,EAAE,aAAaA,EAAE,SAAS;AACxC,aAAO8gB,EAAM,cAAcC,EAAK;AAAA,IAClC,CAAC,EACA,IAAI,CAACC,OAAgB;AAAA,MACpB,GAAGA;AAAA,MACH,UAAUA,EAAM,SAAS;AAAA,QACvB,CAACvL,GAAQzV,MAAW,OAAOyV,EAAE,IAAI,IAAI,OAAOzV,EAAE,IAAI;AAAA,MAAA;AAAA,IACpD,EACA;AAAA,EACN,GAEMwgB,IAAqB,CAACb,MAA+B;AACzD,UAAMW,IAAmC,CAAA,GACnCC,IAAkC,CAAA;AAExCZ,WAAAA,KAAAA,QAAAA,EAAqB,QAAQ,CAACtF,MAAS;AACrC,MAAIA,EAAK,OAAO,WACdA,EAAK,OAAO,QAAQ,CAACjS,MAAM;AACzB,QAAAkY,EAASlY,EAAE,KAAK,IAAIA,EAAE;AAAA,MACxB,CAAC,GAGCiS,EAAK,OAAO,UACdA,EAAK,OAAO,QAAQ,CAACjS,MAAM;AACzB,QAAAmY,EAAQnY,EAAE,KAAK,IAAIA,EAAE;AAAA,MACvB,CAAC;AAAA,IAEL,IAEO,EAAE,UAAAkY,GAAU,SAAAC,EAAA;AAAA,EACrB,GAEMU,IAAerB,EAAY,QAE3B,CAACsB,GAAoBC,CAAqB,IAC9C3qB,EAAiBqpB,CAAc,GAG3B,CAACuB,GAAaC,EAAc,IAAI7qB,EAAwB,IAAI,GAC5D,CAAC8qB,GAAYC,CAAa,IAAI/qB,EAAwB,IAAI,GAC1DgrB,KAAiB3mB,GAAsB,IAAI,GAC3C4mB,KAAgB5mB,GAAsB,IAAI,GAE1C6mB,IAAkBnD,GAAkB5nB,GAASuqB,CAAkB,GAG/D,CAACS,IAAcC,EAAe,IAAIprB,EAAiB,EAAE,GACrD,CAACqrB,IAAoBC,CAAqB,IAAItrB,EAAkB,EAAK,GACrE,CAACurB,GAAmBC,EAAoB,IAAIxrB,EAAkB,EAAK,GAGnE,CAACmF,IAAWC,EAAY,IAAIpF,EAAS,EAAK,GAC1C,CAACuF,IAAWC,EAAY,IAAIxF,EAAS,EAAE,GACvC,CAACyrB,IAAYC,EAAa,IAAI1rB,EAAS,EAAK,GAC5C,CAAC2rB,GAAkBC,EAAmB,IAAI5rB,EAAqB,IAAI,GAEnE,CAAC6F,IAAaC,EAAc,IAAI9F,EAAqB,CAAA,CAAE,GACvD,CAAC6rB,IAAgBC,EAAiB,IAAI9rB,EAAwB,CAAA,CAAE,GAGhE,CAAC+rB,GAAaC,CAAc,IAAIhsB,EAAgB,CAAA,CAAE,GAClD,CAACisB,GAAsBC,CAAuB,IAAIlsB,EAAS,EAAK,GAChE,CAACmsB,GAAmBC,CAAoB,IAAIpsB,EAAA,GAG5C,CAACqsB,IAAeC,EAAgB,IAAItsB,EAAS,EAAI,GACjD,CAACusB,GAAkBC,CAAmB,IAAIxsB,EAAS,EAAK,GAExD,CAACysB,IAAqBC,EAAsB,IAAI1sB,EAAS,EAAK,GAC9D,CAAC2sB,IAAkBC,EAAmB,IAC1C5sB,EAA4B,UAAU,GAClC,CAAC6sB,GAAmBC,EAAoB,IAAI9sB,EAAS,EAAK,GAI1D,CAAC+sB,IAAoBC,CAAqB,IAAIhtB,EAAS,EAAK,GAC5D,CAACitB,IAAiBC,CAAkB,IACxCltB,EAA2B,MAAM,GAC7B,CAACmtB,GAAkBC,CAAmB,IAAIptB,EAAS,EAAK,GAExD,CAACqtB,IAAkBC,EAAmB,IAAIttB,EAAS,EAAK,GACxD,CAACutB,IAAgBC,EAAiB,IAAIxtB,EAAS,EAAK,GACpD,CAACytB,IAAiBC,EAAkB,IAAI1tB,EAAwB,IAAI,GAEpE,CAAC2tB,GAAgBC,EAAiB,IAAI5tB,EAAwB,IAAI,GAClE,CAAC6tB,IAAiBC,EAAkB,IAAI9tB,EAAS,EAAE,GACnD,CAAC+tB,IAAmBC,EAAoB,IAAIhuB,EAAS,EAAK,GAC1D,CAACiuB,IAA0BC,EAA2B,IAAIluB,EAE9DG,KAAA,gBAAAA,EAAS,EAAE,GAEP4F,KAAY1B,GAAuB,IAAI;AA6B7C,EAAA7J,GAAU,MAAM;AACd,UAAM2zB,IAAMrG,GAAM3nB,CAAO,GACnBiuB,IAAU,KAAK;AAAA,MACnB,KAAK,IAAI,GAAG1uB,KAAS,CAAC;AAAA,MACtB,KAAK,IAAI,GAAGyuB,EAAI,SAAS,CAAC;AAAA,IAAA;AAE5B,IAAAxD,EAAsByD,CAAO;AAE7B,UAAM/kB,IAAIue,GAASznB,CAAO,GACpBkuB,IAAShH,GAAgBhe,CAAC,GAC1BilB,IAAQhH,GAAeje,CAAC;AAE9B,IAAA2hB,GAAe,UAAUqD,KAAU,MACnCpD,GAAc,UAAUqD,KAAS,MACjCzD,GAAewD,KAAU,IAAI,GAC7BtD,EAAcuD,KAAS,IAAI;AAAA,EAC7B,GAAG,CAAC5uB,GAAOS,CAAO,CAAC,GAGnB3F,GAAU,MAAM;AACd,IAAIuL,GAAU,YACZA,GAAU,QAAQ,YAAYA,GAAU,QAAQ;AAAA,EAEpD,GAAG;AAAA,IACDF;AAAA,IACAomB;AAAA,IACAM;AAAA,IACAE;AAAA,IACAI;AAAA,IACAE;AAAA,IACAI;AAAA,IACAE;AAAA,IACAE;AAAA,IACAlC;AAAA,IACAE;AAAA,EAAA,CACD;AAGD,QAAMgD,KAAa,gBACbC,KAAY,yBACZC,KAAQF,IACRG,KAAgB,WAEhBC,KAAuB,MAAM;AACjC,YAAQ,IAAI,6BAA6B;AAAA,MACvC,QAAQhB;AAAA,MACR,SAASE;AAAA,IAAA,CACV,GACDG,GAAqB,EAAI;AAAA,EAC3B,GAEMY,KAAuB,MAAM;AACjC,IAAAhB,GAAkB,IAAI,GACtBE,GAAmB,EAAE,GACrBE,GAAqB,EAAI;AAAA,EAC3B,GAGMa,KAAwB,CAACtnB,MAAkB;AAO/C,UAAMjJ,MALJiJ,KAAA,gBAAAA,EAAS,qBACTA,KAAA,gBAAAA,EAAS,uBACTA,KAAA,gBAAAA,EAAS,OACT,SAE0BkmB;AAC5B,WAAK1E,IAGH,gBAAAnoB,EAAC,OAAA,EAAI,WAAU,iGACb,UAAA;AAAA,MAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA,gBAAAA,EAACsI,IAAA,EAAK,MAAK,oBAAmB,OAAM,MAAK,OAAM,UAAA,CAAU,GAC3D;AAAA,MACA,gBAAAnD,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,QAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iBAAgB,UAAA,YAAQ;AAAA,QACvC,gBAAAA,EAAC,SAAI,UAAA,uGAAA,CAGL;AAAA,QAEC6C,KACC,gBAAAsC,EAAC,OAAA,EAAI,WAAU,4BAA2B,UAAA;AAAA,UAAA;AAAA,UAExC,gBAAAnF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cAGT,UAAA6C;AAAA,YAAA;AAAA,UAAA;AAAA,QACH,GACF;AAAA,QAGD,CAACyvB,MACA,gBAAAntB,EAAC,OAAA,EAAI,WAAU,iDACb,UAAA;AAAA,UAAA,gBAAAnF,EAAC,MAAA,EAAG,WAAU,sBAAqB,UAAA,kCAEnC;AAAA,UAEA,gBAAAA,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,gDAE1C;AAAA,UAEA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACZ,UAAA,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,IAAI,CAACqzB,MACpB,gBAAArzB;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,SAAS,MAAMmyB,GAAkBkB,CAAI;AAAA,cACrC,WAAU;AAAA,cAEV,UAAA,gBAAArzB;AAAA,gBAACsI;AAAA,gBAAA;AAAA,kBACC,MACE4pB,KAAkBA,KAAkBmB,IAChC,aACA;AAAA,kBAEN,OAAM;AAAA,kBACN,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,YACZ;AAAA,YAbKA;AAAA,UAAA,CAeR,GACH;AAAA,UAEA,gBAAArzB,EAAC,SAAA,EAAM,WAAU,oCAAmC,UAAA,mCAEpD;AAAA,UACA,gBAAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,OAAOoyB;AAAA,cACP,UAAU,CAACjqB,MAAMkqB,GAAmBlqB,EAAE,OAAO,KAAK;AAAA,cAClD,MAAM;AAAA,cACN,WAAU;AAAA,cACV,aAAY;AAAA,YAAA;AAAA,UAAA;AAAA,UAGd,gBAAAhD,EAAC,OAAA,EAAI,WAAU,+BACb,UAAA;AAAA,YAAA,gBAAAnF;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAASmzB;AAAA,gBACT,WAAU;AAAA,gBACX,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD,gBAAAnzB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAASkzB;AAAA,gBACT,WAAU;AAAA,gBACV,OAAO,EAAE,YAAYJ,GAAA;AAAA,gBACrB,UAAU,CAACZ,KAAkB,CAACE,GAAgB,KAAA;AAAA,gBAC/C,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,UAED,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGDE,MACC,gBAAAtyB,EAAC,OAAA,EAAI,WAAU,2CAA0C,UAAA,+BAAA,CAEzD;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GACF,IA/FgB;AAAA,EAiGpB,GAEMszB,KAAkB,YAAY;AAClC,QAAI;AAGF,MAAA/C,EAAe/C,CAAe;AAAA,IAChC,SAASxsB,GAAO;AACd,cAAQ,MAAM,6BAA6BA,CAAK;AAAA,IAClD;AAAA,EACF,GAEMuyB,KAAoB,CAACC,GAAc1nB,MAAiB;AACxD,IAAAzB,GAAe,CAACmB,MAAS;AAAA,MACvB,GAAGA;AAAA,MACH;AAAA,QACE,OAAO;AAAA,QACP,UAAU;AAAA,QACV,eAAegoB;AAAA,QACf,iBAAiB1nB;AAAA,MAAA;AAAA,IACnB,CACD;AAAA,EACH,GAEM2nB,KAAoB,CAACD,GAAe1nB,MAAkB;AAC1D,IAAAzB;AAAA,MAAe,CAACmB,MACdA,EAAK;AAAA,QAAI,CAACoC,MACRA,EAAE,aAAa,aACX;AAAA,UACE,GAAGA;AAAA,UACH,UAAU;AAAA,UACV,eAAe4lB,KAAS5lB,EAAE;AAAA,UAC1B,iBAAiB9B,KAAW8B,EAAE;AAAA,QAAA,IAEhCA;AAAA,MAAA;AAAA,IACN;AAAA,EAEJ,GAEM8lB,KAA6B,MAAM;AACvC,IAAArpB;AAAA,MAAe,CAACmB,MACdA,EAAK;AAAA,QACH,CAACoC,MACC,EACEA,EAAE,UAAU,MACZA,EAAE,aAAa,kBACfA,EAAE,aAAa;AAAA,MAAA;AAAA,IAErB;AAAA,EAEJ,GAEM+lB,KAAgB,MAAM;AAC1B,IAAA9B,GAAoB,EAAK,GACzBpB,EAAwB,EAAK,GAC7BQ,GAAuB,EAAK,GAC5BM,EAAsB,EAAK,GAC3BR,EAAoB,EAAK,GACzBM,GAAqB,EAAK,GAC1BM,EAAoB,EAAK,GACzBI,GAAkB,EAAK,GACvB9B,GAAc,EAAK,GACnBE,GAAoB,IAAI,GACxBuD,GAAA,GACA7D,EAAsB,EAAK,GAC3BE,GAAqB,EAAK;AAAA,EAC5B,GAEM6D,KAA4B,MAAM;AACtC,IAAAnD,EAAwB,EAAK,GAC7BM,EAAoB,EAAK,GACzBE,GAAuB,EAAK,GAC5BE,GAAoB,UAAU,GAC9BE,GAAqB,EAAK,GAC1BE,EAAsB,EAAK,GAC3BE,EAAmB,MAAM,GACzBE,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvBlB,GAAiB,EAAI,GACrBV,GAAoB,IAAI,GAExB,aAAa,WAAW,eAAe,GACvC,aAAa,WAAW,uBAAuB,GAC/C,aAAa,WAAW,wBAAwB,GAChD,aAAa,WAAW,uBAAuB,GAC/C,aAAa,WAAW,qBAAqB;AAAA,EAC/C,GAEM0D,KAAiCC,GAAQ,MACjCzH,GAAM3nB,CAAO,EACd,IAAI,CAACyR,GAAGzQ,OAAO;AAAA,IACxB,OAAOA;AAAA,IACP,SAASyQ;AAAA,IACT,UAASA,KAAA,gBAAAA,EAAG,WAAU,CAAA,GACnB,IAAI,CAAC4d,OAAaA,KAAA,gBAAAA,EAAK,QAAO,EAAE,EAChC,OAAO,OAAO;AAAA,EAAA,EACjB,GACD,CAACrvB,CAAO,CAAC,GAENsvB,KAAqBF,GAAQ,MAC5BD,GAAe,SAkBhB,IAhBU1E,KAAe,YAChBE,KAAc,WAHQ,IAoBlC,CAACwE,IAAgB1E,GAAaE,GAAYI,CAAe,CAAC,GAEvDwE,KAAkBvqB,MAAasmB,MAAc,CAACgE,IAG9CE,KAAc,CAACC,MAAkB;AACrC,UAAMC,IAAI,QAAOD,KAAA,gBAAAA,EAAS,aAAY,CAAC;AACvC,WAAO,OAAO,SAASC,CAAC,KAAKA,IAAI,IAAIA,IAAI;AAAA,EAC3C,GAEMC,KAAkC,CAACF,MAAkB;AACzD,UAAMzmB,IAAWwmB,GAAYC,CAAO,GAC9BG,IAAQ,QAAOH,KAAA,gBAAAA,EAAS,oBAAmB,CAAC;AAElD,WADsB,OAAO,SAASG,CAAK,KAAKA,IAAQ,IAE/C,EAAEA,IAAQ,OAGZ,EADWvH,GAAgBroB,GAAS+qB,CAAe,IACrC/hB;AAAA,EACvB,GAEM6mB,KAAiB,CAACC,MAAyB;;AAC/C,UAAMrT,IAAS+O,GACTuE,IAAe7H,GAAgB6C,CAAe,GAC9CvD,IACJsI,MAAerT,KAAA,gBAAAA,EAAQ,aAAYsT,EAAa,YAAY3J,IACxD4J,IAAgBL,GAAgClT,CAAM,GACtDwT,IAAM,EAAED,IAAgB,MAAM,QAAQ,CAAC,GACvCE,MAAehzB,IAAAkqB,GAAiBoF,EAAgB,MAAjC,gBAAAtvB,EAAoC,QAAO;AAChE,WAAO,EAAE,eAAA8yB,GAAe,KAAAC,GAAK,cAAAC,GAAc,UAAA1I,EAAA;AAAA,EAC7C,GAEM2I,KAAmB,OACvBvyB,GACAwyB,GACAC,MACG;AACH,IAAAtB,GAAA,GACAG,GAAA,GAEAjqB,GAAa,EAAI,GACjBsmB,GAAc,EAAI,GAClBJ,EAAsB,EAAK,GAC3BE,GAAqB,EAAK;AAE1B,UAAMiF,IAAgB5E,GAAe,MAAM,CAAChD,EAAiB;AAE7D,QAAI;AACF,YAAM3qB,IAAQ,MAAMZ,GAAY,MAAa,IAAW;AACxD,UAAI,CAACY,EAAO,OAAM,IAAI,MAAM,uBAAuB;AAEnD,YAAMkJ,IAAO,aAAa,QAAQ,gBAAgB,GAC5CC,IAAa,aAAa,QAAQ,YAAY,GAK9CC,IAAY,6DAJE,IAAI,gBAAgB;AAAA,QACtC,YAAY,OAAOD,KAAc,EAAK;AAAA,QACtC,QAAQ,OAAOD,0BAAY,KAAA,GAAO,SAAS;AAAA,MAAA,CAC5C,EAC0F,SAAA,CAAU,IAE/F/K,IAAW,MAAM,MAAM,GAAGiL,CAAS,IAAI;AAAA,QAC3C,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAUpJ,CAAK;AAAA,QAAA;AAAA,QAEhC,MAAM,KAAK,UAAU;AAAA,UACnB,QAAQ;AAAA,UACR,aAAa;AAAA,UACb,OAAO;AAAA,YACL,aAAa,WAAWqyB,CAAG,sBAAsBxyB,CAAK;AAAA,YACtD,UAAU;AAAA,cACR,YAAYoC,KAAA,gBAAAA,EAAiB,OAAM;AAAA,cACnC,OAAOowB,KAAO;AAAA,cACd,cAAAC;AAAA,YAAA;AAAA,YAEF,SAASC;AAAA,UAAA;AAAA,QACX,CACD;AAAA,MAAA,CACF;AAED,UAAI,CAACp0B,EAAS,KAAM,OAAM,IAAI,MAAM,+BAA+B;AAEnE,YAAMmL,KAASnL,EAAS,KAAK,UAAA,GACvBoL,KAAU,IAAI,YAAA;AACpB,UAAIC,KAAS,IAETgpB,KAAgB,IAChBC,KAAgB;AAEpB,iBAAa;AACX,cAAM,EAAE,MAAAhpB,IAAM,OAAAC,GAAA,IAAU,MAAMJ,GAAO,KAAA;AACrC,YAAIG,GAAM;AACV,QAAAD,MAAUD,GAAQ,OAAOG,IAAO,EAAE,QAAQ,IAAM;AAChD,cAAMC,KAAQH,GAAO,MAAM;AAAA,CAAI;AAC/B,QAAAA,KAASG,GAAM,SAAS;AAExB,mBAAWpI,MAAQoI,IAAO;AACxB,cAAI,CAACpI,GAAK,WAAW,OAAO,EAAG;AAC/B,gBAAMqI,KAAWrI,GAAK,MAAM,CAAC,EAAE,KAAA;AAC/B,cAAI;AACF,kBAAMmxB,KAAS,KAAK,MAAM9oB,EAAQ,GAC5BX,KAAMypB,GAAO,OACbjyB,KAAOiyB,GAAO;AAEpB,YAAIzpB,OAAQ,IACVupB,KAAgB,OAAO/xB,MAAQ,EAAE,IACxBwI,OAAQ,MACjBwpB,KAAgB,OAAOhyB,MAAQ,EAAE;AAAA,UAErC,SAASqK,IAAK;AACZ,oBAAQ,MAAM,6BAA6BA,EAAG;AAAA,UAChD;AAAA,QACF;AAAA,MACF;AAEA,UAAI6nB,KAAwB;AAC5B,UAAIH,IAAe;AACjB,cAAMI,KAAY,OAAOJ,EAAa,EAAE,QAAQ,QAAQ,EAAE,EAAE,KAAA;AAC5D,YAAII,GAAU,WAAW,GAAG,KAAKA,GAAU,SAAS,GAAG;AACrD,cAAI;AACF,YAAAD,KAAY,KAAK,MAAMC,EAAS,GAChCD,GAAU,aAAaN,GACvBM,GAAU,SAASN,GACnB,aAAa,QAAQ,iBAAiB,KAAK,UAAUM,EAAS,CAAC;AAAA,UACjE,SAAS7nB,IAAU;AACjB,oBAAQ,IAAIA,EAAG;AAAA,UACjB;AAAA,MAEJ;AAEA,MAAA4iB,GAAoBiF,EAAS,GAEzBA,MACF/qB,GAAe,CAACmB,OAAS;AAAA,QACvB,GAAGA;AAAA,QACH;AAAA,UACE,OAAO;AAAA,UACP,UAAU;AAAA,UACV,iBAAiB,EAAE,kBAAkB4pB,GAAA;AAAA,QAAU;AAAA,MACjD,CACD,GAGH/E,GAAkB,CAAC7kB,OACJ;AAAA,QACX,GAAGA;AAAA,QACH;AAAA,UACE,WAAWlJ;AAAA,UACX,cAAc2yB,MAAiB;AAAA,UAC/B,UAAUC,MAAiB;AAAA,QAAA;AAAA,MAC7B,EAEU,MAAM,CAAC9H,EAAiB,CACrC;AAAA,IACH,SAASpsB,GAAO;AACd,cAAQ,MAAM,mCAAmCA,CAAK,GACtDivB,GAAc,EAAK;AAAA,IACrB,UAAA;AACE,MAAAtmB,GAAa,EAAK;AAAA,IACpB;AAAA,EACF,GAGM4C,KAAoB,OAAOC,MAAsB;AACrD,QAAIwjB,MAActmB,MAAa,CAACsqB,GAAoB;AACpD,UAAMvnB,IAAuB3C,GAAU,KAAA;AACvC,QAAI,CAAC2C,EAAU;AAEf,IAAApC,GAAe,CAACmB,MAAS,CAAC,GAAGA,GAAM,EAAE,OAAOiB,GAAU,UAAU,GAAA,CAAI,CAAC,GACrE1C,GAAa,EAAE,GAEf4lB,GAAgBljB,CAAQ;AACxB,UAAMqoB,IAAMtC,MAA4B;AAGxC,QAAIxD,KAAgB,GAAG;AACrB,UAAI8F,GAAK;AACP,QAAAD,GAAiBpoB,GAAUqoB,GAAK7F,CAAkB;AAClD;AAAA,MACF;AACA,MAAAc,GAAqB,EAAI,GACzBE,GAAc,EAAI;AAClB;AAAA,IACF;AAGA,IAAI6E,KACFjF,EAAsB,EAAI,GAC1BI,GAAc,EAAI,MAElBF,GAAqB,EAAI,GACzBE,GAAc,EAAI;AAAA,EAEtB,GAEMqF,KAA0B,MAAM;AACpC,UAAMR,IAAMtC;AACZ,IAAKsC,KACLD,GAAiBnF,IAAcoF,GAAK7F,CAAkB;AAAA,EACxD,GAEMsG,KAAyB,MAAM;AACnC,IAAA1F,EAAsB,EAAK,GAC3BE,GAAqB,EAAI,GACzBE,GAAc,EAAI;AAAA,EACpB,GAEMuF,KAA6B,MAAM;AACvC,QAAI,CAAChD,GAA0B;AAE/B,IAAAqC,GAAiBnF,IADL8C,IACwBvD,CAAkB;AAAA,EACxD,GAGMwG,KAAoB,YAAY;AACpC,IAAAhF,EAAwB,EAAI,GAC5BQ,GAAuB,EAAK,GAC5BM,EAAsB,EAAK,GAC3BM,GAAoB,EAAK,GACzBd,EAAoB,EAAK,GACzBM,GAAqB,EAAK,GAC1BM,EAAoB,EAAK,GACzBI,GAAkB,EAAK,GACvB,MAAMuB,GAAA,GAENG,GAAkB,WAAW;AAAA,MAC3B,kBAAkBvD,KAAoB;AAAA,IAAA,CACvC;AAAA,EACH,GAEMwF,KAAsB,MAAM;AAChC,QAAI,CAAChF,EAAmB;AACxB,UAAM5lB,IACJwlB,EAAY;AAAA,MACV,CAAC9M,MACC,OAAQA,EAAU,aAAcA,EAAU,EAAE,MAAMkN;AAAA,IAAA,KACjD;AACP,IAAK5lB,MAEL,aAAa,QAAQ,yBAAyB,KAAK,UAAUA,CAAQ,CAAC,GACtEimB,EAAoB,EAAI,GACxBE,GAAuB,EAAI,GAC3BI,GAAqB,EAAK,GAC1BE,EAAsB,EAAK,GAC3BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GAEvBwB,GAAkB,WAAWzoB,CAAQ;AAAA,EACvC,GAEM6qB,KAAsB,MAAM;AAChC,IAAA5E,EAAoB,EAAK,GACzBE,GAAuB,EAAK,GAC5BI,GAAqB,EAAK,GAC1BE,EAAsB,EAAK,GAC3BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvB,aAAa,WAAW,uBAAuB;AAAA,EACjD,GAEM6D,KAAuB,MAAM;AACjC,IAAK1E,OACL,aAAa,QAAQ,0BAA0BA,EAAgB,GAC/DG,GAAqB,EAAI,GACzBE,EAAsB,EAAI,GAC1BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GAEvBwB,GAAkB,YAAY;AAAA,MAC5B,QAAQrC;AAAA,MACR,GAAGpF,GAAiBoF,EAAgB;AAAA,IAAA,CACrC;AAAA,EACH,GAEM2E,KAAuB,MAAM;AACjC,IAAA5E,GAAuB,EAAK,GAC5BI,GAAqB,EAAK,GAC1BE,EAAsB,EAAK,GAC3BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvB9B,GAAc,EAAK,GACnB0D,GAAA,GACAtpB,GAAe,CAACmB,MAAS;AAAA,MACvB,GAAGA;AAAA,MACH;AAAA,QACE,OAAO;AAAA,QACP,UAAU;AAAA,QACV,iBAAiB;AAAA,UACf,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF,CACD;AAAA,EACH,GAEMsqB,KAAuB,MAAM;AACjC,IAAAzE,GAAqB,EAAK,GAC1BE,EAAsB,EAAK,GAC3BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvB,aAAa,WAAW,wBAAwB;AAAA,EAClD,GAEMgE,KAAsB,MAAM;AAChC,IAAKvE,OACL,aAAa,QAAQ,yBAAyBA,EAAe,GAC7DG,EAAoB,EAAI,GACxBE,GAAoB,EAAI,GACxBE,GAAkB,EAAK,GAEvBwB,GAAkB,WAAW,EAAE,QAAQ/B,GAAA,CAAiB;AAAA,EAC1D,GAEMwE,KAAsB,MAAM;AAChC,IAAAzE,EAAsB,EAAK,GAC3BI,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvB9B,GAAc,EAAK,GACnB0D,GAAA,GACAtpB,GAAe,CAACmB,MAAS;AAAA,MACvB,GAAGA;AAAA,MACH;AAAA,QACE,OAAO;AAAA,QACP,UAAU;AAAA,QACV,iBAAiB;AAAA,UACf,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF,CACD;AAAA,EACH,GAEMyqB,KAAsB,MAAM;AAChC,IAAAtE,EAAoB,EAAK,GACzBE,GAAoB,EAAK,GACzBE,GAAkB,EAAK,GACvB,aAAa,WAAW,uBAAuB;AAAA,EACjD,GAEMmE,KAAqB,YAAY;AACrC,QAAI;AACF,MAAAvsB,GAAa,EAAI;AAEjB,YAAMwsB,IAAQjG,KAAoB,CAAA,GAC5BkG,IAAgB,KAAK;AAAA,QACzB,aAAa,QAAQ,uBAAuB,KAAK;AAAA,MAAA,GAE7CC,IAAiB,aAAa;AAAA,QAClC;AAAA,MAAA,GAEIC,IACJ,aAAa,QAAQ,uBAAuB,KAAK,QAE7C,EAAE,eAAA5B,GAAe,KAAAC,GAAK,cAAAC,GAAc,UAAA1I,EAAA,IAAaqI,GAAA,GAEjDgC,IACJJ,EAAM,cAAc,aAAa,QAAQ,YAAY,KAAK,QAEtDK,KACJJ,KAAA,gBAAAA,EAAe,eAAaA,KAAA,gBAAAA,EAAe,OAAM,QAE7CK,KAAmBJ,IACrBtK,GAAoBsK,CAAc,IAClC,UAEEK,KAAkB,aAElB5B,KAAMrF,KAAA,gBAAAA,EAAiB,KACvB5mB,MAAanE,KAAA,gBAAAA,EAAiB,OAAM,IAEpCgJ,KAAWwmB,GAAYiC,CAAK,GAC5BQ,KACJ,OAAOR,EAAM,mBAAoB,WAC7BA,EAAM,kBACN,KAAK,MAAMzB,IAAgB,GAAG,GAK9BkC,KAAuB;AAAA,QAC3B,YAAYL;AAAA,QACZ,qBAAqBC;AAAA,QACrB,oBAAoBC;AAAA,QACpB,mBAAmBC;AAAA,QACnB,KAAA5B;AAAA,QACA,UATe;AAAA,QAUf,WATgB;AAAA,QAUhB,YAAYjsB;AAAA,QACZ,UAAA6E;AAAA,QACA,iBAAiBipB;AAAA,QACjB,UAAAzK;AAAA,QACA,kBAAkBwD;AAAA,MAAA;AAGpB,UAAI,CAAC6G,KAAa,CAACC,GAAmB;AACpC,gBAAQ;AAAA,UACN;AAAA,UACA;AAAA,YACE,WAAAD;AAAA,YACA,mBAAAC;AAAA,UAAA;AAAA,QACF,GAEF;AAAA,UACE;AAAA,QAAA,GAEF7sB,GAAa,EAAK;AAClB;AAAA,MACF;AAGA,YAAMlH,MADY,MAAMlB,GAAA,GACA;AACxB,UAAI,CAACkB;AACH,cAAM,IAAI,MAAM,+CAA+C;AAEjE,YAAM,EAAE,WAAAF,GAAA,IAAc9B,GAAA,GAChBG,KAAW,MAAM,MAAM,GAAG2B,EAAS,uBAAuB;AAAA,QAC9D,QAAQ;AAAA,QACR,SAAS;AAAA,UACP,gBAAgB;AAAA,UAChB,eAAe,UAAUE,EAAK;AAAA,QAAA;AAAA,QAEhC,MAAM,KAAK,UAAUm0B,EAAoB;AAAA,MAAA,CAC1C;AAED,UAAI,CAACh2B,GAAS,IAAI;AAChB,cAAMi2B,KAAY,MAAMj2B,GAAS,OAAO,MAAM,MAAM,EAAE;AACtD,gBAAQ,MAAM,yBAAyBA,GAAS,QAAQi2B,EAAS,GACjE;AAAA,UACE;AAAA,QAAA,GAEFltB,GAAa,EAAK;AAClB;AAAA,MACF;AAEA,YAAMmtB,KAAY,MAAMl2B,GAAS,OAAO,MAAM,MAAM,IAAI;AACxD,cAAQ,IAAI,2BAA2Bk2B,EAAS;AAEhD,YAAMC,MACJD,MAAA,gBAAAA,GAAW,uBACXA,MAAA,gBAAAA,GAAW,sBACXA,MAAA,gBAAAA,GAAW,QACX;AAEF,MAAIC,MACF9E,GAAmB8E,EAAS;AAG9B,YAAMC,KAAe;AAAA,QACnB,GAAGb;AAAA,QACH,SAASC;AAAA,QACT,UAAUC;AAAA,QACV,SAASC;AAAA,QACT,SAAS,EAAE,eAAA5B,GAAe,KAAAC,GAAK,cAAAC,GAAc,UAAA1I,EAAA;AAAA,QAC7C,mBAAmB6K;AAAA,MAAA;AAGrB,mBAAa,QAAQ,uBAAuB,KAAK,UAAUC,EAAY,CAAC,GAExEjF,GAAkB,EAAI,GACtBlB,GAAiB,EAAK,GAEtB0C,GAAkB,SAASyD,EAAY,GACvCzD,GAAkB,WAAW,EAAE,iBAAiBwD,GAAA,CAAW,GAC3DpD,GAAA;AAAA,IACF,SAASpmB,GAAK;AACZ,cAAQ,MAAM,iDAAiDA,CAAG,GAClE;AAAA,QACE;AAAA,MAAA;AAAA,IAEJ,UAAA;AACE,MAAA5D,GAAa,EAAK;AAAA,IACpB;AAAA,EACF,GAEMstB,KAAoB,MAAM;AAC9B,IAAAtD,GAAA,GACAtpB,GAAe,CAACmB,MAAS;AAAA,MACvB,GAAGA;AAAA,MACH;AAAA,QACE,OAAO;AAAA,QACP,UAAU;AAAA,QACV,iBAAiB;AAAA,UACf,MAAM;AAAA,QAAA;AAAA,MACR;AAAA,IACF,CACD;AAAA,EACH,GAGM0rB,KAAqB,CAAC,EAAE,eAAAC,QAAoB;;AAChD,UAAMpD,MACJnyB,IAAAisB,EAAgBsJ,CAAa,MAA7B,gBAAAv1B,EAAgC,OAAO,MAAM,GAAG,SAChD4qB,GAAgB9nB,GAAS+qB,CAAe,GACpC2H,IAAQzK,GAAgBjoB,CAAO,GAE/B2yB,IAAU7E,MAA4B,IACtC8E,IAAQ1L,GAAgB6D,CAAe,KAAK,IAC5CzR,IAAO6N,GAAe4D,CAAe,KAAK,IAE1C,EAAE,QAAQ8H,MAAc3K,GAAgB6C,CAAe,GACvD+H,IAAS,GAAQ9yB,KAAA,QAAAA,EAAS,KAC1B+yB,IAAUD;AAGhB,6BACG,OAAA,EAAI,WAAU,4DACb,UAAA,gBAAAryB,EAAC,OAAA,EAAI,WAAU,gEACb,UAAA;AAAA,MAAA,gBAAAnF,EAAC,SAAI,WAAU,sDACb,4BAAC,OAAA,EAAI,WAAU,qHACZ,UAAA+zB,IACC,gBAAA/zB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK+zB;AAAA,UACL,KAAKqD;AAAA,UACL,WAAU;AAAA,QAAA;AAAA,MAAA,IAGZ,gBAAAp3B;AAAA,QAACsI;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAM;AAAA,UACN,WAAU;AAAA,QAAA;AAAA,MAAA,GAGhB,EAAA,CACF;AAAA,MAEA,gBAAAnD,EAAC,OAAA,EAAI,WAAU,sDACb,UAAA;AAAA,QAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,yCAAyC,UAAAo3B,GAAM;AAAA,QAC9D,gBAAAp3B,EAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,UACCq3B,KAAW,QAAQA,CAAO;AAAA,UAC1BC,KAAS,UAAUA,CAAK;AAAA,UACxBtZ,KAAQ,SAASA,CAAI;AAAA,QAAA,EAEpB,OAAO,OAAO,EACd,KAAK,KAAK,KAAK,KACpB;AAAA,QACA,gBAAAhe,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAAw3B;AAAA;AAAA,UAEG,IAAI9yB,EAAQ,KAAK;AAAA,YACjB,yBACN;AAAA,QACC8yB,KAAU,CAACC,uBACT,OAAA,EAAI,WAAU,yCAAwC,UAAA,yBAAA,CAEvD;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,EAAA,CACF,EAAA,CACF;AAAA,EAEJ,GAGMC,KAAsB,CAAC;AAAA,IAC3B,YAAAC,IAAa;AAAA,EAAA,MAGT;AACJ,UAAMC,IAAgC,CAAA;AACvB,IAAA/D,GACZ,IAAI,CAAC1rB,MAAMyjB,GAAgBzjB,EAAE,OAAO,CAAC,EACrC,OAAO,CAAC0vB,MAAmB,CAAC,CAACA,KAAK,CAACD,EAAQC,CAAC,MAAMD,EAAQC,CAAC,IAAI,GAAK;AAEvE,UAAMC,IAA+B,CAAA;AACvB,WAAAjE,GACX,IAAI,CAAC1rB,MAAM0jB,GAAe1jB,EAAE,OAAO,CAAC,EACpC,OAAO,CAACzB,MAAmB,CAAC,CAACA,KAAK,CAACoxB,EAAOpxB,CAAC,MAAMoxB,EAAOpxB,CAAC,IAAI,GAAK,GAGnE,gBAAAvB,EAAC,OAAA,EAAI,WAAU,iFACb,UAAA;AAAA,MAAA,gBAAAnF,EAAC,MAAA,EAAG,WAAU,+BAA8B,UAAA,oBAAgB;AAAA,MAE5D,gBAAAmF,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,qBAAoB,UAAA,WAAO;AAAA,UACzCmvB,KACC,gBAAAnvB,EAAC,OAAA,EAAI,WAAU,yBAAyB,UAAAmvB,EAAA,CAAY;AAAA,QAAA,GAExD;AAAA,QAEA,gBAAAnvB,EAAC,SAAI,WAAU,6BACZ,YAAgB,IAAI,CAACoI,GAAOnE,MAAU;AACrC,gBAAMqzB,IAAQlvB,EAAM,MACd2vB,IAAa5I,MAAgBmI,GAC7BU,IACJ5vB,EAAM,OAAO,MAAM,CAAC,EAAE,eAAeA,EAAM,OAAO,MAAM,CAAC,EAAE;AAE7D,iBACE,gBAAApI;AAAA,YAAC;AAAA,YAAA;AAAA,cAEC,WAAW;AAAA,cACf+3B,IAAa,8BAA8B,iBAAiB;AAAA,cAExD,UAAA,gBAAA/3B;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,oBAAAovB,GAAekI,CAAK,GACpBhI,EAAc,IAAI,GAClBJ,EAAsB,IAAI,GAC1BlB,EAAwB/pB,CAAK;AAAA,kBAC/B;AAAA,kBACA,WAAU;AAAA,kBACV,OAAOqzB;AAAA,kBAEN,UAAAU,IACC,gBAAAh4B;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAKg4B;AAAA,sBACL,KAAKV;AAAA,sBACL,WAAU;AAAA,oBAAA;AAAA,kBAAA,IAGZ,gBAAAt3B,EAAC,OAAA,EAAI,WAAU,+DACZ,UAAAs3B,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ;AAAA,YAzBKA;AAAA,UAAA;AAAA,QA4BX,CAAC,EAAA,CACH;AAAA,MAAA,GACF;AAAA,MAGCnI,KACC,gBAAAhqB,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,UAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,qBAAoB,UAAA,UAAM;AAAA,UACxCqvB,KACC,gBAAArvB,EAAC,OAAA,EAAI,WAAU,yBAAyB,UAAAqvB,EAAA,CAAW;AAAA,QAAA,GAEvD;AAAA,QAEA,gBAAArvB,EAAC,OAAA,EAAI,WAAU,6BACX,WAAA,MAAM;AACN,gBAAMoI,IAAQylB,EAAgB;AAAA,YAC5B,CAACoK,MAAMA,EAAE,SAAS9I;AAAA,UAAA;AAEpB,iBAAK/mB,IAEEA,EAAM,SAAS,IAAI,CAAC+N,GAAGzK,MAAQ;AACpC,kBAAMsS,IAAO7H,EAAE;AAEf,mBACE,gBAAAnW;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,SAAS,MAAM;AACb,kBAAAsvB,EAActR,CAAI,GAClBkR,EAAsBxjB,CAAG,GACzB+mB,GAA4Btc,EAAE,SAAS;AAAA,gBACzC;AAAA,gBACA,WAAW,uCATIkZ,MAAerR,IAWxB,4CACA,iBACN;AAAA,gBACA,OAAOA;AAAA,gBAEN,UAAAA;AAAA,cAAA;AAAA,cAbI,QAAQA,CAAI;AAAA,YAAA;AAAA,UAgBvB,CAAC,IAvBkB;AAAA,QAwBrB,KAAG,CACL;AAAA,MAAA,GACF;AAAA,MAGD2Z,KACC,gBAAA33B,EAAC,OAAA,EAAI,WAAU,yBACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,SAASw1B;AAAA,UACT,WAAU;AAAA,UACV,OAAO,EAAE,YAAYvC,GAAA;AAAA,UACrB,UAAU,CAACe;AAAA,UACZ,UAAA;AAAA,QAAA;AAAA,MAAA,EAED,CACF;AAAA,IAAA,GAEJ;AAAA,EAEJ,GAGMkE,KAA8B,CAAC/D,GAAcgE,IAAW,OAAS;AACrE,IAAI,EAAChE,KAAA,QAAAA,EAAS,qBAAoBA,MAChCA,IAAU,EAAE,kBAAkBA,EAAA;AAChC,UAAMrmB,KAAIqmB,KAAA,gBAAAA,EAAS,qBAAoBjE;AACvC,QAAI,CAACpiB,EAAG,QAAO;AACf,UAAMsmB,IAAIF,GAAYpmB,CAAC,GAEjB,EAAE,UAAUsqB,MAAkBxL,GAAgB6C,CAAe,GAC7D8H,IAAYxK,GAAgBroB,GAAS+qB,CAAe,GACpD6E,IAAQ,QAAOxmB,KAAA,gBAAAA,EAAG,oBAAmB,CAAC,GAEtCuqB,IADgB,OAAO,SAAS/D,CAAK,KAAKA,IAAQ,IACrB,EAAEA,IAAQ,OAAO,EAAEiD,IAAYnD,IAC5DlI,KAAWpe,KAAA,gBAAAA,EAAG,aAAYsqB,KAAiBtN,IAC3CwN,KAAU7I,KAAA,QAAAA,EAAiB,MAAMA,EAAgB,MAAM3hB,EAAE;AAE/D,WACE,gBAAA3I;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,UAAA;AAAA,QAE1B,UAAA;AAAA,UAAA,gBAAAnF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,OAAO+yB,GAAA;AAAA,cACjB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAID,gBAAA5tB,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,oCACb,UAAA;AAAA,cAAA,gBAAAnF,EAAC,KAAA,EAAE,WAAU,+BAA8B,UAAA,QAAI;AAAA,cAC/C,gBAAAA,EAAC,KAAA,EAAE,WAAU,iBAAiB,UAAAs4B,IAAQ;AAAA,cAEtC,gBAAAt4B,EAAC,KAAA,EAAE,WAAU,+BAA8B,UAAA,aAAS;AAAA,gCACnD,KAAA,EAAE,WAAU,iBAAiB,UAAAk0B,GAAYpmB,CAAC,GAAE;AAAA,cAE7C,gBAAA9N,EAAC,KAAA,EAAE,WAAU,+BAA8B,UAAA,aAAS;AAAA,cACpD,gBAAAA,EAAC,KAAA,EAAE,WAAU,iBAAiB,UAAAksB,GAAS;AAAA,cAEvC,gBAAAlsB,EAAC,KAAA,EAAE,WAAU,+BAA8B,UAAA,wBAAoB;AAAA,gCAC9D,KAAA,EAAE,WAAU,iBACV,UAAAgsB,GAAeqM,GAAYnM,CAAQ,EAAA,CACtC;AAAA,YAAA,GACF;AAAA,YAEA,gBAAA/mB,EAAC,OAAA,EAAI,WAAU,qCACZ,UAAA;AAAA,cAAAymB,GAAgB6D,CAAe,KAC9B,gBAAAtqB,EAAC,QAAA,EAAK,WAAU,sCAAqC,UAAA;AAAA,gBAAA;AAAA,gBAC3CymB,GAAgB6D,CAAe;AAAA,cAAA,GACzC;AAAA,cAED5D,GAAe4D,CAAe,KAC7B,gBAAAtqB,EAAC,QAAA,EAAK,WAAU,sCAAqC,UAAA;AAAA,gBAAA;AAAA,gBAC5C0mB,GAAe4D,CAAe;AAAA,cAAA,GACvC;AAAA,eAEDA,KAAA,gBAAAA,EAAiB,QAChB,gBAAAtqB,EAAC,QAAA,EAAK,WAAU,sCAAqC,UAAA;AAAA,gBAAA;AAAA,gBAC7CsqB,EAAgB;AAAA,cAAA,EAAA,CACxB;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GACF;AAAA,UAEC,CAAC0I,KACA,gBAAAhzB,EAAA+C,IAAA,EACE,UAAA;AAAA,YAAA,gBAAA/C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,OAAO,EAAE,OAAO4tB,GAAA;AAAA,gBACjB,UAAA;AAAA,kBAAA;AAAA,kBACsB,gBAAA/yB,EAAC,YAAO,UAAA,eAAA,CAAY;AAAA,kBAAS;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAIpD,gBAAAmF,EAAC,OAAA,EAAI,WAAU,uCACb,UAAA;AAAA,cAAA,gBAAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAASswB;AAAA,kBACT,UAAUjF;AAAA,kBACV,WAAW,4IACTA,IACI,kCACA,wCACN;AAAA,kBACA,OAAO,EAAE,YAAYyC,GAAA;AAAA,kBAErB,UAAA;AAAA,oBAAA,gBAAAjzB;AAAA,sBAACsI;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,OAAM;AAAA,wBACN,QAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBACP;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,cAIJ,gBAAAnD;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,SAAS8xB;AAAA,kBACT,UAAUzG;AAAA,kBACV,WAAW,8HACTA,IACI,kCACA,wCACN;AAAA,kBACA,OAAO,EAAE,aAAayC,IAAe,OAAOA,GAAA;AAAA,kBAE5C,UAAA;AAAA,oBAAA,gBAAAjzB;AAAA,sBAACsI;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,wBACV,OAAM;AAAA,wBACN,QAAO;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBACP;AAAA,kBAAA;AAAA,gBAAA;AAAA,cAAA;AAAA,YAEJ,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR,GAGMiwB,KAAyB,CAACzsB,GAAcqsB,IAAW,OAAS;;AAChE,UAAMrqB,IAAIhC,KAAW,CAAA,GACfogB,MACJtqB,KAAAkM,KAAA,gBAAAA,EAAG,YAAH,gBAAAlM,GAAY,cAAYsuB,KAAA,gBAAAA,EAAkB,aAAYpF,IAElDiJ,IAAMvH,GAAgB9nB,GAAS+qB,CAAe,GAC9C2H,IAAQzK,GAAgBjoB,CAAO,GAC/B8zB,IAAM/I,KAAA,QAAAA,EAAiB,MACzBA,EAAgB,OAChB/qB,KAAA,gBAAAA,EAAS,QAAMwrB,KAAA,gBAAAA,EAAkB,aAC/B4E,KAAMrF,KAAA,gBAAAA,EAAiB,QAAOxC,GAAcvoB,CAAO,GACnD4yB,IAAQ1L,GAAgB6D,CAAe,KAAKvC,GAAgBxoB,CAAO,GACnEsZ,IAAO6N,GAAe4D,CAAe,KAAKtC,GAAezoB,CAAO,GAChEgJ,KAAWwmB,GAAYpmB,CAAC,GACxB4mB,OACJlxB,KAAAsK,KAAA,gBAAAA,EAAG,YAAH,gBAAAtK,GAAY,kBAAiB,OACzB,CAACsK,EAAE,QAAQ,gBACXumB,GAAgCvmB,CAAC,GACjCypB,KAAY7pB,KAAW,IAAI,EAAEgnB,KAAgBhnB,IAAU,QAAQ,CAAC,IAAI,GACpE+qB,KAAW/D,IACXC,OAAMlxB,KAAAqK,KAAA,gBAAAA,EAAG,YAAH,gBAAArK,GAAY,QAAO,EAAEixB,KAAgB,MAAM,QAAQ,CAAC,GAC1DE,OACJvvB,KAAAyI,KAAA,gBAAAA,EAAG,YAAH,gBAAAzI,GAAY,oBACX2B,KAAA8kB,GAAiBoF,EAAgB,MAAjC,gBAAAlqB,GAAoC,QAAO,IAExC0xB,KAAiB5qB,KAAA,QAAAA,EAAG,UACtB;AAAA,MACEA,EAAE,QAAQ;AAAA,MACVA,EAAE,QAAQ;AAAA,MACVA,EAAE,QAAQ;AAAA,MACV,CAACA,EAAE,QAAQ,MAAMA,EAAE,QAAQ,OAAOA,EAAE,QAAQ,UAAU,EACnD,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,MACZA,EAAE,QAAQ;AAAA,IAAA,EAET,OAAO,OAAO,EACd,IAAI,CAACpH,OAAchD,GAAe,OAAOgD,EAAC,CAAC,CAAC,EAC5C,KAAK,IAAI,IACZ,KAEE4vB,MAAgBxoB,KAAA,gBAAAA,EAAG,YAAW,QAC9B6qB,KACJrC,OAAkB,SAChB,gBAAAnxB,EAAA+C,IAAA,EAAE,UAAA;AAAA,MAAA;AAAA,wBAEC,MAAA,EAAG;AAAA,MAAE;AAAA,IAAA,EAAA,CAER,IAEA,gBAAAlI,EAAAkI,IAAA,EAAG,UAAAxE,GAAe4yB,EAAa,GAAE;AAGrC,WACE,gBAAAnxB,EAAC,OAAA,EAAI,WAAU,0CACb,UAAA;AAAA,MAAA,gBAAAnF,EAAC,SAAI,WAAU,kBACb,UAAA,gBAAAmF,EAAC,MAAA,EAAG,WAAU,oEACZ,UAAA;AAAA,QAAA,gBAAAnF;AAAA,UAACsI;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,OAAOwqB;AAAA,UAAA;AAAA,QAAA;AAAA,QACP;AAAA,MAAA,EAAA,CAEJ,EAAA,CACF;AAAA,wBAEC,OAAA,EAAI,WAAU,aACb,UAAA,gBAAA3tB,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,QAAA,gBAAAnF,EAAC,SAAI,WAAU,sBACb,4BAAC,OAAA,EAAI,WAAU,yIACZ,UAAA+zB,IACC,gBAAA/zB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK+zB;AAAA,YACL,KAAKqD;AAAA,YACL,WAAU;AAAA,UAAA;AAAA,QAAA,IAGZ,gBAAAp3B;AAAA,UAACsI;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACL,OAAM;AAAA,YACN,WAAU;AAAA,UAAA;AAAA,QAAA,GAGhB,EAAA,CACF;AAAA,QAEA,gBAAAnD,EAAC,OAAA,EAAI,WAAU,kBACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,QACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,+CACZ,UAAAo3B,GACH;AAAA,YACA,gBAAAjyB,EAAC,OAAA,EAAI,WAAU,+CACb,UAAA;AAAA,cAAA,gBAAAnF,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,QAAI;AAAA,cAAO;AAAA,cAAEw4B,KAAO;AAAA,YAAA,GACpD;AAAA,aACE1D,KAAOwC,KAAStZ,MAChB,gBAAA7Y,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA;AAAA,cAAA2vB,KACC,gBAAA3vB,EAAA+C,IAAA,EACE,UAAA;AAAA,gBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,QAAI;AAAA,gBAAO;AAAA,gBAAE80B;AAAA,gBAAI;AAAA,cAAA,GAEjD;AAAA,cAEDwC,KACC,gBAAAnyB,EAAA+C,IAAA,EACE,UAAA;AAAA,gBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,UAAM;AAAA,gBAAO;AAAA,gBAAEs3B;AAAA,gBAAM;AAAA,cAAA,GAErD;AAAA,cAEDtZ,KACC,gBAAA7Y,EAAA+C,IAAA,EACE,UAAA;AAAA,gBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,eAAc,UAAA,SAAK;AAAA,gBAAO;AAAA,gBAAEge;AAAA,cAAA,EAAA,CAC9C;AAAA,YAAA,EAAA,CAEJ;AAAA,UAAA,GAEJ;AAAA,UAEA,gBAAA7Y,EAAC,OAAA,EAAI,WAAU,wDACb,UAAA;AAAA,YAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,cAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,qDAAoD,UAAA,cAEnE;AAAA,gCACC,OAAA,EAAI,WAAU,4CACZ,UAAAgsB,GAAeuL,IAAWrL,CAAQ,EAAA,CACrC;AAAA,YAAA,GACF;AAAA,YACA,gBAAA/mB,EAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,cAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,qDAAoD,UAAA,YAEnE;AAAA,cACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACZ,UAAA0N,GAAA,CACH;AAAA,YAAA,GACF;AAAA,YACA,gBAAAvI,EAAC,OAAA,EAAI,WAAU,yFACb,UAAA;AAAA,cAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,qDAAoD,UAAA,YAEnE;AAAA,gCACC,OAAA,EAAI,WAAU,4CACZ,UAAAgsB,GAAeyM,IAAUvM,CAAQ,EAAA,CACpC;AAAA,YAAA,EAAA,CACF;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,EAAA,CACF;AAAA,MAAA,EAAA,CACF,EAAA,CACF;AAAA,MAGA,gBAAA/mB,EAAC,OAAA,EAAI,WAAU,aACb,UAAA;AAAA,QAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,8CACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,cAE/D;AAAA,YACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wDACZ,UAAA04B,GAAA,CACH;AAAA,UAAA,GACF;AAAA,UACA,gBAAAvzB,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,cAE/D;AAAA,YACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wDACZ,UAAA24B,GAAA,CACH;AAAA,UAAA,GACF;AAAA,UACA,gBAAAxzB,EAAC,OAAA,EAAI,WAAU,+EACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,eAE/D;AAAA,YACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,wDACZ,UAAA8N,KAAA,QAAAA,EAAG,cACA7G,KAAA6kB,GAAiBhe,EAAE,QAA6B,MAAhD,gBAAA7G,GAAmD,UACnD,IACA,CACN;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAA9B,EAAC,OAAA,EAAI,WAAU,yCACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,0GACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,aAE/D;AAAA,8BACC,OAAA,EAAI,WAAU,yCACZ,UAAAgsB,GAAe0I,IAAexI,CAAQ,EAAA,CACzC;AAAA,UAAA,GACF;AAAA,UACA,gBAAA/mB,EAAC,OAAA,EAAI,WAAU,0GACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,aAE/D;AAAA,8BACC,OAAA,EAAI,WAAU,yCACZ,UAAAgsB,GAAe2I,IAAKzI,CAAQ,EAAA,CAC/B;AAAA,UAAA,GACF;AAAA,UACA,gBAAA/mB,EAAC,OAAA,EAAI,WAAU,0GACb,UAAA;AAAA,YAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,iDAAgD,UAAA,eAE/D;AAAA,8BACC,OAAA,EAAI,WAAU,yCACZ,UAAAgsB,GAAe4I,IAAc1I,CAAQ,EAAA,CACxC;AAAA,UAAA,EAAA,CACF;AAAA,QAAA,GACF;AAAA,QAGA,gBAAA/mB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,YAAY6tB,GAAA;AAAA,YAErB,UAAA;AAAA,cAAA,gBAAAhzB,EAAC,OAAA,EAAI,WAAU,wBAAuB,UAAA,oBAAgB;AAAA,cACtD,gBAAAA,EAAC,SAAI,WAAU,+CACZ,aAAe00B,KAAgBC,KAAMC,IAAc1I,CAAQ,EAAA,CAC9D;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF,GACF;AAAA,MAEC,CAACiM,KACA,gBAAAhzB,EAAC,OAAA,EAAI,WAAU,aACZ,UAAA;AAAA,QAAA,CAAC2sB,MACA,gBAAA9xB,EAAC,KAAA,EAAE,WAAU,0CAAyC,UAAA,sHAGtD;AAAA,QAED8xB,MAAkBsB,GAAsB,EAAE,iBAAApB,IAAiB;AAAA,QAC3DpB,MAAiB,CAACkB,MACjB,gBAAA3sB,EAAC,OAAA,EAAI,WAAU,yDACb,UAAA;AAAA,UAAA,gBAAAnF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASk2B;AAAA,cACT,WAAU;AAAA,cACV,OAAO,EAAE,YAAYlD,GAAA;AAAA,cACtB,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,UAGD,gBAAAhzB;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,SAASi3B;AAAA,cACT,WAAU;AAAA,cACV,OAAO,EAAE,aAAajE,IAAO,OAAOA,GAAA;AAAA,cACrC,UAAA;AAAA,YAAA;AAAA,UAAA;AAAA,QAED,EAAA,CACF;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ,GAEM4F,KAAwB,CAACC,MAAc;AAC3C,QAAI,CAACA,EAAM,QAAO;AAClB,UAAMH,IAAiB;AAAA,MACpBG,EAAa;AAAA,MACbA,EAAa;AAAA,MACbA,EAAa;AAAA,MACd,CAAEA,EAAa,MAAOA,EAAa,OAAQA,EAAa,UAAU,EAC/D,OAAO,OAAO,EACd,KAAK,IAAI;AAAA,MACXA,EAAa;AAAA,IAAA,EAEb,OAAO,CAACnyB,MAAmB,EAAQA,CAAE,EACrC,IAAI,CAACA,MAAMhD,GAAegD,CAAC,CAAC,EAC5B,KAAK,IAAI;AAEZ,WACE,gBAAA1G;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,QAE1B,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,YAAA,gBAAAnF,EAACsI,MAAK,MAAK,uBAAsB,OAAM,MAAK,OAAOwqB,IAAY;AAAA,YAC/D,gBAAA9yB,EAAC,OAAA,EAAI,WAAU,+BAA8B,UAAA,mBAAA,CAAgB;AAAA,UAAA,GAC/D;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yBAAyB,UAAA04B,EAAA,CAAe;AAAA,QAAA,EAAA,CACzD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GAEMI,KAAyB,CAAChtB,MAAiB;AAC/C,UAAMsD,IAAStD,KAAA,gBAAAA,EAAS,QAClBitB,IAAM3pB,IAAS0c,GAAiB1c,CAAM,IAAI;AAChD,WACE,gBAAApP;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,QAE1B,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,YAAA,gBAAAnF,EAACsI,MAAK,MAAK,sBAAqB,OAAM,MAAK,OAAOwqB,IAAY;AAAA,YAC9D,gBAAA9yB,EAAC,OAAA,EAAI,WAAU,+BAA8B,UAAA,kBAAA,CAAe;AAAA,UAAA,GAC9D;AAAA,UACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yBACZ,cACC,gBAAAmF,EAAA+C,IAAA,EACE,UAAA;AAAA,YAAA,gBAAA/C,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,cAAA,gBAAAnF,EAACsI,IAAA,EAAK,MAAMywB,EAAI,MAAM,OAAM,MAAK;AAAA,cACjC,gBAAA/4B,EAAC,QAAA,EAAK,WAAU,eAAe,YAAI,MAAA,CAAM;AAAA,YAAA,GAC3C;AAAA,YACA,gBAAAA,EAAC,OAAA,EAAI,WAAU,iBAAiB,YAAI,SAAA,CAAS;AAAA,UAAA,EAAA,CAC/C,IAEA,IAAA,CAEJ;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GAEMg5B,KAAwB,CAACltB,MAAiB;AAC9C,UAAMsD,KAAStD,KAAA,gBAAAA,EAAS,WAAU;AAClC,WACE,gBAAA9L;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,iBAAiB,qBAAA;AAAA,QAE1B,UAAA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,kDACb,UAAA;AAAA,UAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,YAAA,gBAAAnF;AAAA,cAACsI;AAAA,cAAA;AAAA,gBACC,MAAK;AAAA,gBACL,OAAM;AAAA,gBACN,OAAOwqB;AAAA,cAAA;AAAA,YAAA;AAAA,YAET,gBAAA9yB,EAAC,OAAA,EAAI,WAAU,+BAA8B,UAAA,iBAAA,CAAc;AAAA,UAAA,GAC7D;AAAA,4BACC,OAAA,EAAI,WAAU,yBACZ,UAAAoP,MAAW,SACV,gBAAAjK,EAAA+C,IAAA,EAAE,UAAA;AAAA,YAAA;AAAA,8BAEC,MAAA,EAAG;AAAA,YAAE;AAAA,UAAA,GAER,IAEAxE,GAAe0L,CAAM,EAAA,CAEzB;AAAA,QAAA,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN,GAEM6pB,KAAqB,CAAC1zB,GAAgB2zB,MAAsB;AAChE,UAAM1F,IAAQjuB,EAAK;AAGnB,QAFI,CAACiuB,KAGFA,MAAU,aAAahD,KACvBgD,MAAU,cAAcxC,MACxBwC,MAAU,aAAalC,MACvBkC,MAAU,WAAW5B;AAEtB,aAAO;AAGT,YAAQ4B,GAAA;AAAA,MACN,KAAK;AACH,eAAO0E,GAA4B3yB,EAAK,iBAAiB,CAAC2zB,CAAQ;AAAA,MACpE,KAAK;AACH,eAAON,GAAsBrzB,EAAK,eAAsB;AAAA,MAC1D,KAAK;AACH,eAAOuzB,GAAuBvzB,EAAK,eAAe;AAAA,MACpD,KAAK;AACH,eAAOyzB,GAAsBzzB,EAAK,eAAe;AAAA,MACnD,KAAK;AACH,eAAOgzB,GAAuBhzB,EAAK,iBAAiB,CAAC2zB,CAAQ;AAAA,MAC/D,KAAK;AACH,eAAO9F,GAAsB7tB,EAAK,eAAe;AAAA,MACnD;AACE,eAAO;AAAA,IAAA;AAAA,EAEb;AAEA,SAAO4zB;AAAA,IACL,gBAAAh0B;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,QAAQ,WAAA;AAAA,QACjB,cAAW;AAAA,QACX,MAAK;AAAA,QAGL,UAAA;AAAA,UAAA,gBAAAnF;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,WAAU;AAAA,cACV,OAAO,EAAE,YAAY,mBAAA;AAAA,cACrB,SAASutB;AAAA,YAAA;AAAA,UAAA;AAAA,4BAIV,OAAA,EAAI,WAAU,qBACb,UAAA,gBAAApoB,EAAC,OAAA,EAAI,WAAU,mFAEb,UAAA;AAAA,YAAA,gBAAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,OAAO;AAAA,kBACL,SAAS;AAAA,kBACT,gBAAgB;AAAA,kBAChB,qBAAqB;AAAA,kBACrB,wBAAwB;AAAA,kBACxB,SAAS;AAAA,kBACT,YAAY8tB;AAAA,gBAAA;AAAA,gBAGd,UAAA;AAAA,kBAAA,gBAAA9tB;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,SAAS;AAAA,wBACT,OAAO;AAAA,wBACP,YAAY;AAAA,wBACZ,KAAK;AAAA,sBAAA;AAAA,sBAGP,UAAA;AAAA,wBAAA,gBAAAnF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,OAAM;AAAA,4BACN,OAAM;AAAA,4BACN,QAAO;AAAA,4BACP,SAAQ;AAAA,4BAER,UAAA,gBAAAmF,EAAC,KAAA,EAAE,MAAK,gBACN,UAAA;AAAA,8BAAA,gBAAAnF;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,GAAE;AAAA,kCACF,SAAQ;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAEV,gBAAAA,EAAC,QAAA,EAAK,GAAE,ijBAAA,CAAijB;AAAA,4BAAA,EAAA,CAC3jB;AAAA,0BAAA;AAAA,wBAAA;AAAA,0CAED,OAAA,EACC,UAAA,gBAAAA,EAAC,OAAE,WAAU,aAAY,yCAA2B,EAAA,CACtD;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEF,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,OAAO;AAAA,wBACL,SAAS;AAAA,wBACT,YAAY;AAAA,wBACZ,KAAK;AAAA,wBACL,QAAQ;AAAA,sBAAA;AAAA,sBAGV,UAAA,gBAAAA;AAAA,wBAACsI;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,OAAO;AAAA,0BACP,OAAM;AAAA,0BACN,QAAO;AAAA,0BACP,WAAU;AAAA,0BACV,SAASilB;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACX;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAGF,gBAAApoB;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,KAAKmF;AAAA,gBACL,WAAU;AAAA,gBAGV,UAAA;AAAA,kBAAA,gBAAAnF;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,iBAAiB,UAAA;AAAA,sBAC3B,UAAA;AAAA,wBAAA;AAAA,0CAEE,KAAA,EAAE,UAAA;AAAA,0BAAA;AAAA,0BAEC,SAAST,EAAQ,KAAK,IAAI;AAAA,0BAAE;AAAA,wBAAA,GAChC;AAAA,wBACA,gBAAA1E,EAAC,OAAE,UAAA,6FAAA,CAGH;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAIF,gBAAAA,EAACk3B,IAAA,EAAmB,eAAenJ,EAAA,CAAsB;AAAA,kBAGxDiB,IAAe,KAAK,gBAAAhvB,EAAC03B,IAAA,EAAoB,YAAY,IAAO;AAAA,kBAG5DttB,GAAY,IAAI,CAAC7E,GAAMtB,MAAU;;AAChC,0BAAMi1B,IAAWj1B,MAAUmG,GAAY,SAAS,GAC1CgvB,IAAa,CAAC,CAAC7zB,EAAK;AAE1B,6CACG,OAAA,EAEE,UAAA;AAAA,sBAAAA,EAAK,SACJ,gBAAAvF,EAAC,OAAA,EAAI,WAAU,oBACb,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,OAAO;AAAA,4BACP,iBAAiB;AAAA,0BAAA;AAAA,0BAGlB,UAAAuF,EAAK;AAAA,wBAAA;AAAA,sBAAA,GAEV;AAAA,sBAIDA,EAAK,aAAa,gBACjB3D,IAAA2D,EAAK,oBAAL,gBAAA3D,EAAsB,SACpB,gBAAA5B,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,iBAAiB;AAAA,4BACjB,QAAQ;AAAA,0BAAA;AAAA,0BAGV,UAAA,gBAAAA,EAAC,SAAI,WAAU,2BACb,4BAAC,KAAA,EAAG,UAAAuF,EAAK,gBAAgB,KAAA,CAAK,EAAA,CAChC;AAAA,wBAAA;AAAA,sBAAA,GAEJ;AAAA,sBAIH2zB,KAAYtJ,MAAsBZ,IAAe,KAChD,gBAAA7pB,EAAC,OAAA,EAAI,WAAU,4EACb,UAAA;AAAA,wBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,yBAAwB,UAAA;AAAA,0BAAA;AAAA,0BACjB;AAAA,0BACpB,gBAAAnF,EAAC,QAAA,EAAK,WAAU,iBACb,eAAe,KAClB;AAAA,0BAAO;AAAA,0BACC;AAAA,0BACR,gBAAAA,EAAC,QAAA,EAAK,WAAU,iBACb,eAAc,KACjB;AAAA,0BAAO;AAAA,wBAAA,GAET;AAAA,wBACA,gBAAAmF,EAAC,OAAA,EAAI,WAAU,mBACb,UAAA;AAAA,0BAAA,gBAAAnF;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,SAASs1B;AAAA,8BACT,WAAU;AAAA,8BACV,OAAO,EAAE,YAAYrC,GAAA;AAAA,8BACtB,UAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAGD,gBAAAjzB;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,SAASu1B;AAAA,8BACT,WAAU;AAAA,8BACV,OAAO;AAAA,gCACL,aAAatC;AAAA,gCACb,OAAOA;AAAA,8BAAA;AAAA,8BAEV,UAAA;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAED,EAAA,CACF;AAAA,sBAAA,GACF;AAAA,sBAIDiG,KAAYpJ,KACX,gBAAA9vB,EAAC03B,IAAA,EAAoB,YAAU,IAAC;AAAA,sBAIjCwB,KAAYxvB,MACX,gBAAA1J,EAAC,OAAA,EAAI,WAAU,QACb,UAAA,gBAAAA;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,iBAAiB;AAAA,4BACjB,QAAQ;AAAA,0BAAA;AAAA,0BAGV,4BAAC,OAAA,EAAI,WAAU,4CACb,UAAA,gBAAAA,EAAC,KAAA,EAAE,6DAA+C,EAAA,CACpD;AAAA,wBAAA;AAAA,sBAAA,GAEJ;AAAA,uBAIAo5B,KAAc7zB,EAAK,aAAa,gBAC/B,CAACmE,MAAa,CAACwvB,MACd,gBAAAl5B;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,iBAAiB;AAAA,4BACjB,cAAc;AAAA,4BACd,WAAW;AAAA,4BACX,UAAU;AAAA,0BAAA;AAAA,0BAGX,UAAAo5B,IACGH,GAAmB1zB,GAAM2zB,CAAQ,IACjChB;AAAA,4BACE3yB,EAAK;AAAA,4BACL;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBACN,EAAA,GA9GItB,CAgHV;AAAA,kBAEJ,CAAC;AAAA,kBAGAusB,KACC,gBAAArrB,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,+DACZ,UAAA;AAAA,wBAAA,gBAAAnF;AAAA,0BAACsI;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,OAAM;AAAA,4BACN,OAAM;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBACN;AAAA,sBAAA,GAEJ;AAAA,sBACCwoB,KACC,gBAAA3rB,EAAA+C,IAAA,EACE,UAAA;AAAA,wBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,iFAAgF,UAAA,YAEhG;AAAA,wBACC,CAAC8xB,MACA,gBAAA9xB;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAS21B;AAAA,4BACT,WAAU;AAAA,4BACV,OAAO;AAAA,8BACL,aAAa;AAAA,8BACb,OAAO;AAAA,4BAAA;AAAA,4BAET,OAAM;AAAA,4BACP,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED,EAAA,CAEJ;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAA31B,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,oDAE1C;AAAA,oBAECytB,IACC,gBAAAtoB,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,sBAAA,gBAAAnF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAU;AAAA,0BACV,OAAO,EAAE,mBAAmB,qBAAA;AAAA,wBAAqB;AAAA,sBAAA;AAAA,sBAEnD,gBAAAA,EAAC,KAAA,EAAE,WAAU,sBAAqB,UAAA,6BAAA,CAElC;AAAA,oBAAA,EAAA,CACF,KACEswB,KAAA,gBAAAA,EAAa,UAAS,IACxB,gBAAAnrB;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,aACT2rB,IAAmB,eAAe,EACpC;AAAA,wBAEC,UAAA;AAAA,0BAAAR,EAAY,IAAI,CAACuI,MAAc;AAC9B,kCAAMQ,IAAU,CAACR,EAAK,cAAcA,EAAK,YAAY,EAClD,OAAO,OAAO,EACd,IAAI,CAACnyB,MAAchD,GAAegD,KAAK,EAAE,CAAC,EAC1C,KAAK,GAAG,GACL4yB,IAAW51B,GAAem1B,EAAK,QAAQ,EAAE,GACzCU,IAAc,GAAG71B,GAAem1B,EAAK,SAAS,EAAE,CAAC,GACrDA,EAAK,SAASA,EAAK,aAAa,OAAO,EACzC,GAAGA,EAAK,cAAc,EAAE,IAClBW,IAAc91B,GAAem1B,EAAK,WAAW,EAAE,GAC/CY,IAAQ,OAAOZ,EAAK,aAAaA,EAAK,EAAE,GACxCd,IAAarH,MAAsB+I;AACzC,mCACE,gBAAAt0B;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCAEC,WAAW,0FACT4yB,IACI,uBACA,iBACN,IAAIjH,IAAmB,wBAAwB,EAAE;AAAA,gCACjD,OACEA,IAAmB,8BAA8B;AAAA,gCAGnD,UAAA;AAAA,kCAAA,gBAAA9wB;AAAA,oCAAC;AAAA,oCAAA;AAAA,sCACC,MAAK;AAAA,sCACL,MAAK;AAAA,sCACL,WAAU;AAAA,sCACV,SAAS+3B;AAAA,sCACT,UAAUjH;AAAA,sCACV,UAAU,MAAMH,EAAqB8I,CAAK;AAAA,sCAC1C,OAAOA;AAAA,oCAAA;AAAA,kCAAA;AAAA,kCAET,gBAAAt0B,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,oCAAA,gBAAAnF,EAAC,OAAA,EAAI,WAAU,+BACZ,UAAAq5B,KAAW,WACd;AAAA,oCACA,gBAAAl0B,EAAC,OAAA,EAAI,WAAU,yBACZ,UAAA;AAAA,sCAAAm0B;AAAA,wDACA,MAAA,EAAG;AAAA,sCACHC;AAAA,wDACA,MAAA,EAAG;AAAA,sCACHC;AAAA,oCAAA,EAAA,CACH;AAAA,kCAAA,EAAA,CACF;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BA9BKC;AAAA,4BAAA;AAAA,0BAiCX,CAAC;AAAA,0BACD,gBAAAt0B,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,4BAAA,gBAAAnF;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,SAAS61B;AAAA,gCACT,WAAU;AAAA,gCACV,OAAO;AAAA,kCACL,aAAa;AAAA,kCACb,OAAO;AAAA,gCAAA;AAAA,gCAEV,UAAA;AAAA,8BAAA;AAAA,4BAAA;AAAA,4BAGD,gBAAA71B;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCACC,SAAS01B;AAAA,gCACT,UAAU5E;AAAA,gCACV,WAAW,2FACTA,IACI,kCACA,wCACN;AAAA,gCACA,OAAO,EAAE,YAAYmC,GAAA;AAAA,gCAEpB,cACG,sBACA;AAAA,8BAAA;AAAA,4BAAA;AAAA,0BACN,EAAA,CACF;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAAA,IAGF,gBAAAjzB,EAAC,OAAA,EAAI,WAAU,kCAAiC,UAAA,4DAAA,CAEhD;AAAA,kBAAA,GAEJ;AAAA,kBAIDgxB,MACC,gBAAA7rB,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,+DACZ,UAAA;AAAA,wBAAA,gBAAAnF;AAAA,0BAACsI;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,OAAM;AAAA,4BACN,OAAM;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBACN;AAAA,sBAAA,GAEJ;AAAA,sBACC8oB,KACC,gBAAAjsB,EAAA+C,IAAA,EACE,UAAA;AAAA,wBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,iFAAgF,UAAA,YAEhG;AAAA,wBACC,CAAC8xB,MACA,gBAAA9xB;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAAS81B;AAAA,4BACT,WAAU;AAAA,4BACV,OAAO;AAAA,8BACL,aAAa;AAAA,8BACb,OAAO;AAAA,4BAAA;AAAA,4BAET,OAAM;AAAA,4BACP,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED,EAAA,CAEJ;AAAA,oBAAA,GAEJ;AAAA,oBACA,gBAAA91B,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,sDAE1C;AAAA,oBAEA,gBAAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,aACToxB,IAAoB,eAAe,EACrC;AAAA,wBAEE,UAAA,OAAO,KAAKtF,EAAgB,EAA0B;AAAA,0BACtD,CAAC9b,MAAQ;AACP,kCAAM+oB,IAAMjN,GAAiB9b,CAAG,GAC1B+nB,IAAa7G,OAAqBlhB;AACxC,mCACE,gBAAA7K;AAAA,8BAAC;AAAA,8BAAA;AAAA,gCAEC,WAAW,0FACT4yB,IACI,uBACA,iBACN,IAAI3G,IAAoB,wBAAwB,EAAE;AAAA,gCAClD,OACEA,IACI,+BACA;AAAA,gCAGN,UAAA;AAAA,kCAAA,gBAAApxB;AAAA,oCAAC;AAAA,oCAAA;AAAA,sCACC,MAAK;AAAA,sCACL,MAAK;AAAA,sCACL,WAAU;AAAA,sCACV,SAAS+3B;AAAA,sCACT,UAAU3G;AAAA,sCACV,UAAU,MAAMD,GAAoBnhB,CAAG;AAAA,oCAAA;AAAA,kCAAA;AAAA,kCAEzC,gBAAA7K,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,oCAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uDACb,UAAA;AAAA,sCAAA,gBAAAnF,EAACsI,IAAA,EAAK,MAAMywB,EAAI,MAAM,OAAM,MAAK;AAAA,sCAAE;AAAA,sCAAEA,EAAI;AAAA,oCAAA,GAC3C;AAAA,oCACA,gBAAA/4B,EAAC,OAAA,EAAI,WAAU,yBACZ,YAAI,SAAA,CACP;AAAA,kCAAA,GACF;AAAA,oDACC,OAAA,EAAI,WAAU,uCACZ,UAAA+4B,EAAI,QAAQ,IACT,SACA/M;AAAA,oCACE+M,EAAI;AAAA,qCACJ7I,KAAA,gBAAAA,EAAkB,aAAYpF;AAAA,kCAAA,EAChC,CACN;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAnCK9a;AAAA,4BAAA;AAAA,0BAsCX;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA;AAAA,oBAGF,gBAAA7K,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,sBAAA,gBAAAnF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS61B;AAAA,0BACT,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,aAAa;AAAA,4BACb,OAAO;AAAA,0BAAA;AAAA,0BAEV,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAGD,gBAAA71B;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS41B;AAAA,0BACT,UAAUxE;AAAA,0BACV,WAAW,2FACTA,IACI,kCACA,wCACN;AAAA,0BACA,OAAO,EAAE,YAAY,eAAA;AAAA,0BAEpB,cACG,uBACA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACN,EAAA,CACF;AAAA,kBAAA,GACF;AAAA,kBAIDE,MACC,gBAAAnsB,EAAC,OAAA,EAAI,WAAU,2FACb,UAAA;AAAA,oBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA;AAAA,sBAAA,gBAAAA,EAAC,MAAA,EAAG,WAAU,+DACZ,UAAA;AAAA,wBAAA,gBAAAnF;AAAA,0BAACsI;AAAA,0BAAA;AAAA,4BACC,MAAK;AAAA,4BACL,OAAM;AAAA,4BACN,OAAO;AAAA,0BAAA;AAAA,wBAAA;AAAA,wBACP;AAAA,sBAAA,GAEJ;AAAA,sBACCopB,KACC,gBAAAvsB,EAAA+C,IAAA,EACE,UAAA;AAAA,wBAAA,gBAAAlI,EAAC,QAAA,EAAK,WAAU,iFAAgF,UAAA,YAEhG;AAAA,wBACC,CAAC8xB,MACA,gBAAA9xB;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,SAASi2B;AAAA,4BACT,WAAU;AAAA,4BACV,OAAO;AAAA,8BACL,aAAa;AAAA,8BACb,OAAO;AAAA,4BAAA;AAAA,4BAET,OAAM;AAAA,4BACP,UAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBAED,EAAA,CAEJ;AAAA,oBAAA,GAEJ;AAAA,oBAEA,gBAAAj2B,EAAC,KAAA,EAAE,WAAU,8BAA6B,UAAA,kDAE1C;AAAA,oBAEA,gBAAAA;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAW,aACT0xB,IAAmB,eAAe,EACpC;AAAA,wBAEA,UAAA,gBAAAvsB;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAW,0FACTqsB,OAAoB,SAChB,uBACA,iBACN,IAAIE,IAAmB,wBAAwB,EAAE;AAAA,4BACjD,OAAOA,IAAmB,8BAA8B;AAAA,4BAExD,UAAA;AAAA,8BAAA,gBAAA1xB;AAAA,gCAAC;AAAA,gCAAA;AAAA,kCACC,MAAK;AAAA,kCACL,MAAK;AAAA,kCACL,WAAU;AAAA,kCACV,SAASwxB,OAAoB;AAAA,kCAC7B,UAAUE;AAAA,kCACV,UAAU,MAAMD,EAAmB,MAAM;AAAA,gCAAA;AAAA,8BAAA;AAAA,8BAE3C,gBAAAtsB,EAAC,OAAA,EAAI,WAAU,UACb,UAAA;AAAA,gCAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,uDACb,UAAA;AAAA,kCAAA,gBAAAnF,EAACsI,IAAA,EAAK,MAAK,gCAA+B,OAAM,MAAK;AAAA,kCAAG;AAAA,kCAAI;AAAA,gCAAA,GAE9D;AAAA,gCACCkpB,OAAoB,UACnB,gBAAArsB,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA;AAAA,kCAAA;AAAA,oDAEzC,MAAA,EAAG;AAAA,kCAAE;AAAA,gCAAA,EAAA,CAER;AAAA,8BAAA,EAAA,CAEJ;AAAA,4BAAA;AAAA,0BAAA;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA;AAAA,oBAGF,gBAAAA,EAAC,OAAA,EAAI,WAAU,6BACb,UAAA;AAAA,sBAAA,gBAAAnF;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAASg2B;AAAA,0BACT,WAAU;AAAA,0BACV,OAAO;AAAA,4BACL,aAAa;AAAA,4BACb,OAAO;AAAA,0BAAA;AAAA,0BAEV,UAAA;AAAA,wBAAA;AAAA,sBAAA;AAAA,sBAGD,gBAAAh2B;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,SAAS+1B;AAAA,0BACT,UAAUrE;AAAA,0BACV,WAAW,2FACTA,IACI,kCACA,wCACN;AAAA,0BACA,OAAO,EAAE,YAAY,eAAA;AAAA,0BAEpB,cACG,sBACA;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACN,EAAA,CACF;AAAA,kBAAA,GACF;AAAA,kBAIDE,MACC2G;AAAA,oBACE;AAAA,sBACE,GAAGrI;AAAA,sBACH,SAAS,KAAK;AAAA,wBACZ,aAAa,QAAQ,uBAAuB,KAAK;AAAA,sBAAA;AAAA,sBAEnD,UAAU,aAAa,QAAQ,wBAAwB;AAAA,sBACvD,SAAS,aAAa,QAAQ,uBAAuB;AAAA,sBACrD,SAASqE,GAAerE,KAAA,gBAAAA,EAAkB,QAAQ;AAAA,oBAAA;AAAA,oBAEpD;AAAA,kBAAA;AAAA,gBACF;AAAA,cAAA;AAAA,YAAA;AAAA,YAIJ,gBAAA/qB,EAAC,OAAA,EAAI,WAAU,kHACb,UAAA;AAAA,cAAA,gBAAAnF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,aACEgwB,KACI,+BACCgE,KAED,oEACE,SAAStvB,EAAQ,KAAK,IAAI,CAC5B,uBAHA;AAAA,kBAKN,UAAUuvB;AAAA,kBACV,WAAW;AAAA,kBAEND,KAEG,KADA,uCAEN;AAAA,kBACF,OAAOlqB;AAAA,kBACP,WAAW,CAAC3B,MAAM;AAChB,oBAAIA,EAAE,QAAQ,WAAW,CAACuB,MAAa,CAACsmB,MACtCzjB,GAAA;AAAA,kBACJ;AAAA,kBACA,UAAU,CAACpE,MAAM4B,GAAa5B,EAAE,OAAO,KAAK;AAAA,gBAAA;AAAA,cAAA;AAAA,cAE9C,gBAAAnI;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,UAAU0J,MAAasmB;AAAA,kBACvB,WAAU;AAAA,kBACV,OAAO,EAAE,OAAO,qBAAA;AAAA,kBAChB,SAAS,MAAMzjB,GAAA;AAAA,kBAEd,UAAA7C,KACC,gBAAA1J;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,cAAc,YAAA;AAAA,oBAAY;AAAA,kBAAA,IAGrC,gBAAAA;AAAA,oBAACsI;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,OAAO;AAAA,sBACP,OAAM;AAAA,sBACN,QAAO;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACT;AAAA,cAAA;AAAA,YAEJ,EAAA,CACF;AAAA,UAAA,EAAA,CACF,EAAA,CACF;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,SAAS;AAAA,EAAA;AAEb;","x_google_ignoreList":[20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,45]}