@returnflows/shop-overlay 1.0.7 → 1.0.8

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":"index.esm.js","sources":["../src/widget/lib/types/index.ts","../src/widget/lib/utils/cart-provider-store.ts","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/widget/lib/utils/storage.ts","../src/widget/lib/utils/logger.ts","../src/widget/lib/utils/helpers.ts","../src/widget/lib/utils/shopify.ts","../src/widget/lib/utils/cart.ts","../src/api/storefront-cart.ts","../src/api/state-bridge.ts","../src/api/widget-api.ts","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/dist/preact.module.js","../src/widget/lib/constants.ts","../src/widget/lib/utils/custom-events.ts","../src/widget/lib/utils/i18n.ts","../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/dist/index.mjs","../src/widget/lib/utils/api-client.ts","../src/widget/lib/utils/initialization/settings.ts","../src/widget/lib/utils/initialization/dataset.ts","../src/widget/lib/utils/session.ts","../src/widget/lib/utils/initialization/font.ts","../src/widget/lib/utils/initialization/styles.ts","../src/widget/lib/utils/initialization/index.ts","../node_modules/.pnpm/@formatjs+fast-memoize@3.1.3/node_modules/@formatjs/fast-memoize/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/formatters-CJcico0N.js","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/hooks/dist/hooks.module.js","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/compat/dist/compat.module.js","../node_modules/.pnpm/@formatjs+icu-skeleton-parser@2.1.6/node_modules/@formatjs/icu-skeleton-parser/index.js","../node_modules/.pnpm/@formatjs+icu-messageformat-parser@3.5.6/node_modules/@formatjs/icu-messageformat-parser/index.js","../node_modules/.pnpm/intl-messageformat@11.2.3/node_modules/intl-messageformat/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/format-message/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/initializeConfig-CHgjheii.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/react.js","../src/widget/lib/context/dialog-queue-context.ts","../src/widget/lib/hooks/common/use-value-state.ts","../src/widget/lib/hooks/common/use-dialog.ts","../src/widget/lib/context/widget-context.ts","../src/widget/lib/hooks/context/use-widget-context.ts","../src/widget/lib/utils/navigation.ts","../src/widget/lib/utils/return-decision.ts","../src/widget/lib/context/return-context.ts","../src/widget/lib/hooks/context/use-return-context.ts","../src/widget/components/ui/image.tsx","../src/widget/components/ui/skeleton/skeleton-container.tsx","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/widget/components/ui/avatar/avatar.tsx","../src/widget/components/ui/skeleton/skeleton.tsx","../src/widget/components/ui/avatar/avatar-stack-skeleton.tsx","../src/widget/components/ui/avatar/avatar-stack.tsx","../src/widget/components/return-avatar-stack.tsx","../src/widget/lib/context/dialog-context.ts","../src/widget/components/icons/arrow-right.tsx","../src/widget/components/icons/x.tsx","../src/widget/components/icons/spinner.tsx","../src/widget/components/ui/button.tsx","../src/widget/components/dialog/common/dialog-button.tsx","../src/widget/components/icons/icon.tsx","../src/widget/components/ui/reject-button.tsx","../src/widget/lib/hooks/common/use-dialog-slot.ts","../src/widget/lib/hooks/context/use-dialog-queue.ts","../src/widget/lib/hooks/common/use-is-mounted.ts","../src/widget/lib/context/root-context.ts","../src/widget/components/dialog/common/dialog-backdrop.tsx","../src/widget/components/dialog/common/index.ts","../src/widget/components/dialog/common/dialog-modal.tsx","../src/widget/lib/hooks/context/use-root.ts","../src/widget/components/dialog/common/dialog-title.tsx","../src/widget/components/dialog/common/dialog-subtitle.tsx","../src/widget/components/dialog/common/dialog-exit.tsx","../src/widget/components/dialog/return-decision-dialog.tsx","../src/widget/lib/context/tutorial-context.ts","../src/widget/lib/hooks/context/use-tutorial.ts","../src/widget/lib/tutorials.ts","../src/widget/components/tutorial/intro/tutorial-intro-animation.tsx","../src/widget/components/tutorial/intro/tutorial-intro-dialog.tsx","../src/widget/components/handlers/dialog-handler.tsx","../src/widget/lib/context/toast-context.ts","../src/widget/lib/hooks/context/use-toast.ts","../src/widget/lib/hooks/feature/use-api-bridge.ts","../src/widget/lib/utils/errors.ts","../src/widget/lib/utils/interceptor/fetch.ts","../src/widget/lib/utils/interceptor/xhr.ts","../src/widget/lib/utils/interceptor/index.ts","../src/widget/lib/context/error-context.ts","../src/widget/lib/hooks/context/use-errors.ts","../src/widget/lib/hooks/feature/use-cart-actions.tsx","../src/widget/lib/hooks/feature/use-fetch-interceptor.tsx","../src/widget/lib/hooks/feature/use-override-scroll-blocking.ts","../src/widget/lib/hooks/feature/use-cart-activator.ts","../src/widget/lib/utils/dom.ts","../src/widget/components/handlers/initialization-handler.tsx","../src/widget/lib/hooks/feature/use-external-events.ts","../src/widget/lib/hooks/feature/use-tutorial-autostart.ts","../src/widget/components/is-mounted.tsx","../src/widget/components/providers/dialog-queue-provider.tsx","../src/widget/components/providers/error-provider.tsx","../src/widget/lib/hooks/common/use-array.ts","../src/widget/lib/hooks/common/use-async-state.ts","../src/widget/lib/utils/persistence.ts","../src/widget/lib/utils/queries.ts","../src/widget/components/providers/return-context-provider.tsx","../src/widget/lib/hooks/common/use-once.ts","../src/api/types.ts","../src/widget/lib/hooks/context/use-theme.ts","../src/widget/components/providers/root-provider.tsx","../src/widget/components/providers/tutorial-provider.tsx","../src/widget/components/providers/widget-context-provider.tsx","../src/widget/components/toast/toast-provider.tsx","../src/widget/components/icons/banner/action.tsx","../src/widget/components/icons/banner/info.tsx","../src/widget/components/icons/giftcard.tsx","../src/widget/components/icons/warning.tsx","../src/widget/components/ui/banner/banner-skeleton.tsx","../src/widget/components/ui/banner/banner.tsx","../src/widget/components/drawer/adjustments/exchange-banner.tsx","../src/widget/lib/hooks/context/use-currency.ts","../src/widget/lib/hooks/context/use-calculation.ts","../src/widget/components/icons/star.tsx","../src/widget/components/ui/price.tsx","../src/widget/components/drawer/adjustments/table/adjustments-table-skeleton.tsx","../src/widget/components/drawer/adjustments/table/adjustments-table.tsx","../src/widget/components/drawer/adjustments/exchange-adjustments.tsx","../src/widget/components/drawer/annoucement-bar.tsx","../src/widget/components/drawer/error-screen.tsx","../src/widget/lib/hooks/context/use-navigation.ts","../src/widget/components/dialog/empty-exchange-dialog.tsx","../src/widget/components/drawer/exchange-confirmation.tsx","../src/widget/components/drawer/exchange-header.tsx","../src/widget/components/icons/cart.tsx","../src/widget/components/drawer/exchange-placeholder.tsx","../src/widget/components/drawer/product/product-errors.tsx","../src/widget/components/drawer/product/product.utils.ts","../src/widget/components/drawer/product/quantity-picker.tsx","../src/widget/components/drawer/product/product-actions.tsx","../src/widget/components/ui/link.tsx","../src/widget/components/drawer/product/product-attributes.tsx","../src/widget/components/drawer/product/product-image.tsx","../src/widget/components/drawer/product/product.tsx","../src/widget/components/drawer/product/product-list.tsx","../src/widget/lib/hooks/context/use-cart-items.ts","../src/widget/components/icons/arrow-down.tsx","../src/widget/components/icons/chevron.tsx","../src/widget/components/ui/expander.tsx","../src/widget/components/drawer/return/return-product-badge.tsx","../src/widget/components/drawer/return/return-product-actions.tsx","../src/widget/components/drawer/return/return-product.tsx","../src/widget/components/drawer/return/return-product-skeleton.tsx","../src/widget/components/drawer/return/return-product-list.tsx","../src/widget/components/drawer/scroll-indicator.tsx","../src/widget/lib/hooks/common/use-y-scrollable.ts","../src/widget/components/drawer/exchange-drawer.tsx","../src/widget/components/toast/toast.tsx","../src/widget/components/toast/toast-container.tsx","../src/widget/components/icons/arrow-left.tsx","../src/widget/components/summary/back-button.tsx","../src/widget/components/tutorial/tutorial-arrow-curve-right.tsx","../src/widget/components/tutorial/intro/tutorial-intro-pointer-total.tsx","../src/widget/components/summary/exchange-total-skeleton.tsx","../src/widget/components/summary/exchange-total.tsx","../src/widget/components/icons/bag.tsx","../src/widget/components/tutorial/tutorial-arrow-straight-down.tsx","../src/widget/components/tutorial/intro/tutorial-intro-pointer-cart.tsx","../src/widget/components/summary/view-cart-button.tsx","../src/widget/components/summary/exchange-summary.tsx","../src/widget/components/ui/backdrop.tsx","../src/widget/components/widget.tsx","../src/widget/components/widget-container.tsx"],"sourcesContent":["import { ShopOverlayDataResponse } from \"../utils/queries\";\n\nexport type ProductRule = ShopOverlayDataResponse[\"productRules\"][number];\n\nexport type OrderProduct = {\n\tid: string;\n\tshopifyLineId: string;\n\ttitle: string;\n\tvariantTitle: string;\n\timage: string;\n\thandle: string;\n\tprice: number;\n\tquantity: number;\n};\n\nexport type {\n\tShopifyCart,\n\tShopifyCartAddResponse,\n\tShopifyCartChangeResponse,\n\tShopifyCartItem,\n\tShopifyErrorResponse\n} from \"./shopify\";\n\nexport enum WidgetViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n\nexport enum ReturnViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n","import type { CartInput, CartProvider, ShopifyCart } from \"../../../api/types\";\n\ninterface ReturnflowsGlobal {\n\t_cartProvider?: CartProvider | null;\n}\n\nexport function getInternalCartProvider<\n\tT extends CartInput = ShopifyCart\n>(): CartProvider<T> | null {\n\tif (typeof window === \"undefined\") {\n\t\treturn null;\n\t}\n\treturn ((window as unknown as { Returnflows?: ReturnflowsGlobal }).Returnflows\n\t\t?._cartProvider ?? null) as CartProvider<T> | null;\n}\n\nexport function hasCartProvider(): boolean {\n\tif (typeof window === \"undefined\") {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(window as unknown as { Returnflows?: ReturnflowsGlobal }).Returnflows\n\t\t\t?._cartProvider != null\n\t);\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","function hoursToMilliseconds(hours: number): number {\n\treturn hours * 60 * 60 * 1000;\n}\nfunction minutesToMilliseconds(minutes: number): number {\n\treturn minutes * 60 * 1000;\n}\n\nexport type StorageType = \"sessionStorage\" | \"localStorage\";\n\ninterface StorageData<T = unknown> {\n\tvalue: T;\n\texpiration?: number; // Timestamp in milliseconds\n}\n\nexport interface StorageKey {\n\tkey: string;\n\ttype: StorageType;\n\texpiration?: number; // Expiration time in milliseconds\n}\n\n// Storage keys and expiration times\nexport const STORAGE_SESSION_KEY = {\n\tkey: \"session_id\",\n\ttype: \"sessionStorage\",\n\texpiration: hoursToMilliseconds(1)\n} satisfies StorageKey;\n\nexport const STORAGE_OVERLAY_DIALOG_EXPIRY_KEY = {\n\tkey: \"dialog_expiration\",\n\ttype: \"sessionStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_OVERLAY_DIALOG_EXPIRATION = minutesToMilliseconds(10);\n\nexport const STORAGE_CART_KEY = {\n\tkey: \"cart\",\n\ttype: \"sessionStorage\",\n\texpiration: minutesToMilliseconds(5) // 5 minutes\n} satisfies StorageKey;\n\nexport const STORAGE_DEBUG_MODE_KEY = {\n\tkey: \"debug_mode\",\n\ttype: \"sessionStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_TUTORIALS_SEEN_KEY = {\n\tkey: \"tutorials_seen\",\n\ttype: \"localStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_PREFIX = \"rflows_\";\n\nfunction getStorageKey(key: string): string {\n\treturn `${STORAGE_PREFIX}${key}`;\n}\n\nexport const storage = {\n\tset: <T>({ key, type, expiration }: StorageKey, value: T) => {\n\t\tconst data: StorageData = {\n\t\t\tvalue,\n\t\t\texpiration: expiration ? Date.now() + expiration : undefined\n\t\t};\n\t\tconst storage = getStorage(type);\n\t\tstorage.setItem(getStorageKey(key), JSON.stringify(data));\n\t},\n\n\tget: <T>({ key, type }: StorageKey): T | null => {\n\t\tconst storage = getStorage(type);\n\n\t\tconst storageItem = storage.getItem(getStorageKey(key));\n\n\t\tif (!storageItem) return null;\n\n\t\ttry {\n\t\t\tconst parsedData = JSON.parse(storageItem) as StorageData<T>;\n\t\t\tif (parsedData.expiration && Date.now() > parsedData.expiration) {\n\t\t\t\t// Expired\n\t\t\t\tstorage.removeItem(getStorageKey(key));\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn parsedData.value;\n\t\t} catch (_) {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\thas: ({ key, type }: StorageKey): boolean => {\n\t\treturn storage.get({ key, type }) !== null;\n\t},\n\n\tremove: ({ key, type }: StorageKey) => {\n\t\tgetStorage(type).removeItem(getStorageKey(key));\n\t}\n};\n\nfunction getStorage(type: StorageType): Storage {\n\tif (type === \"sessionStorage\") {\n\t\treturn sessionStorage;\n\t} else if (type === \"localStorage\") {\n\t\treturn localStorage;\n\t} else {\n\t\tthrow new Error(`Invalid storage type: ${type}`);\n\t}\n}\n\nexport default storage;\n","/* eslint-disable no-restricted-syntax */\nimport storage, { STORAGE_DEBUG_MODE_KEY } from \"./storage\";\n\nconst LOG_PREFIX = \"[RF]\";\n\nenum LogLevel {\n\tDEBUG = 0,\n\tINFO = 1,\n\tWARN = 2,\n\tERROR = 3\n}\n\nclass Logger {\n\tprivate static instance: Logger;\n\n\tprivate constructor() {}\n\n\tpublic static getInstance(): Logger {\n\t\tif (!Logger.instance) {\n\t\t\tLogger.instance = new Logger();\n\t\t}\n\t\treturn Logger.instance;\n\t}\n\n\tprivate checkDebugMode(): boolean {\n\t\tconst storedDebugModeValue = storage.get<boolean>(STORAGE_DEBUG_MODE_KEY);\n\t\treturn Boolean(storedDebugModeValue);\n\t}\n\n\tprivate log(level: LogLevel, message: string, ...args: unknown[]): void {\n\t\tif (!this.checkDebugMode()) {\n\t\t\treturn; // Skip logs if the script data attribute is not set\n\t\t}\n\t\tswitch (level) {\n\t\t\tcase LogLevel.DEBUG:\n\t\t\t\tconsole.debug(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.INFO:\n\t\t\t\tconsole.info(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.WARN:\n\t\t\t\tconsole.warn(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.ERROR:\n\t\t\t\tconsole.error(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdebug(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.DEBUG, message, ...args);\n\t}\n\n\tinfo(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.INFO, message, ...args);\n\t}\n\n\twarn(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.WARN, message, ...args);\n\t}\n\n\terror(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.ERROR, message, ...args);\n\t}\n}\n\nexport const logger = Logger.getInstance();\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { logger } from \"./logger\";\nimport { CalculationParams } from \"./queries\";\nimport { SessionCache } from \"./session\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n\nexport function assert(variable: unknown, message: string): asserts variable {\n\tif (isNil(variable) || variable === \"\") {\n\t\tthrow new Error(message);\n\t}\n}\n\nexport async function wait(ms: number) {\n\treturn new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function isNil(value: unknown): value is null | undefined {\n\treturn value === null || value === undefined;\n}\n\nexport function ensureHttpUrl(url: string, secure: boolean = true): string {\n\tif (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n\t\tif (secure) {\n\t\t\treturn `https://${url}`;\n\t\t}\n\t\treturn `http://${url}`;\n\t}\n\treturn url;\n}\n\nexport function isNumber(value: unknown): value is number {\n\tif (typeof value === \"number\") {\n\t\treturn true;\n\t}\n\treturn !isNaN(Number(value)) && isFinite(Number(value));\n}\n\nexport function hexToHsl(hex: string): string {\n\t// Remove the hash if present\n\thex = hex.replace(\"#\", \"\");\n\n\t// Parse hex values\n\tconst r = parseInt(hex.substring(0, 2), 16) / 255;\n\tconst g = parseInt(hex.substring(2, 4), 16) / 255;\n\tconst b = parseInt(hex.substring(4, 6), 16) / 255;\n\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst diff = max - min;\n\n\t// Calculate lightness\n\tconst l = (max + min) / 2;\n\n\tlet h = 0;\n\tlet s = 0;\n\n\tif (diff !== 0) {\n\t\t// Calculate saturation\n\t\ts = l > 0.5 ? diff / (2 - max - min) : diff / (max + min);\n\n\t\t// Calculate hue\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = ((g - b) / diff + (g < b ? 6 : 0)) / 6;\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = ((b - r) / diff + 2) / 6;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = ((r - g) / diff + 4) / 6;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Convert to degrees and percentages\n\tconst hDeg = Math.round(h * 360);\n\tconst sPercent = Math.round(s * 100);\n\tconst lPercent = Math.round(l * 100);\n\n\treturn `${hDeg}, ${sPercent}%, ${lPercent}%`;\n}\n\nexport function camelToKebab(str: string): string {\n\treturn str\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1-$2\")\n\t\t.toLowerCase();\n}\n\nexport function isOnCartPage(): boolean {\n\tconst path = window.location.pathname;\n\treturn path.includes(\"/cart\") || path.includes(\"/checkout\");\n}\n\ninterface WrapperOptions {\n\tshouldThrow?: boolean;\n\tlogError?: boolean;\n\tfallbackValue?: unknown;\n}\n\nexport function attempt<T, TThrow extends boolean = false>(\n\tfn: () => T,\n\terrorMessage: string,\n\toptions: WrapperOptions & { shouldThrow?: TThrow } = {}\n): TThrow extends true ? T : T | undefined {\n\tconst {\n\t\tshouldThrow = false as TThrow,\n\t\tlogError = true,\n\t\tfallbackValue\n\t} = options;\n\n\ttry {\n\t\treturn fn() as TThrow extends true ? T : T | undefined;\n\t} catch (err) {\n\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\n\t\tif (logError) {\n\t\t\tlogger.error(`${errorMessage} (${error.message})`);\n\t\t}\n\n\t\tif (shouldThrow) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn ((fallbackValue as T) ?? undefined) as TThrow extends true\n\t\t\t? T\n\t\t\t: T | undefined;\n\t}\n}\n\nexport function parseToNumber(\n\tvalue: string | number | null | undefined,\n\tfallback = 0\n): number {\n\tif (isNil(value) || value === \"\") return fallback;\n\tif (typeof value !== \"number\") value = parseFloat(value);\n\tif (isNaN(value) || value.toString() === \"Infinity\") return fallback;\n\treturn value;\n}\n\n// Conversion functions for time units to milliseconds\nexport function daysToMilliseconds(days: number): number {\n\treturn days * 24 * 60 * 60 * 1000;\n}\nexport function secondsToMilliseconds(seconds: number): number {\n\treturn seconds * 1000;\n}\n\nexport function setNestedValue<T>(\n\tobj: Record<string, unknown>,\n\tpath: string,\n\tvalue: T\n): T {\n\tconst keys = path.split(\".\");\n\tconst lastKey = keys.pop();\n\n\tif (!lastKey) {\n\t\tthrow new Error(\"Invalid path\");\n\t}\n\n\tconst target = keys.reduce(\n\t\t(current: unknown, key: string): Record<string, unknown> => {\n\t\t\tif (current && typeof current === \"object\" && key in current) {\n\t\t\t\tconst next = (current as Record<string, unknown>)[key];\n\t\t\t\tif (next && typeof next === \"object\") {\n\t\t\t\t\treturn next as Record<string, unknown>;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error(`Cannot access property '${key}' on path '${path}'`);\n\t\t},\n\t\tobj\n\t);\n\n\ttarget[lastKey] = value;\n\treturn value;\n}\n\nexport function getResolvedSearchParams(): URLSearchParams {\n\tconst searchString = window.__rf_original_search ?? window.location.search;\n\treturn new URLSearchParams(searchString);\n}\n\nexport function resolveSetStateAction<T>(\n\taction: React.SetStateAction<T>,\n\tcurrentState: T\n): T {\n\tif (typeof action === \"function\") {\n\t\t// TypeScript needs a type assertion here because SetStateAction<T>\n\t\t// could be T | ((prevState: T) => T), and TS can't narrow the function type automatically\n\t\treturn (action as (prevState: T) => T)(currentState);\n\t}\n\treturn action;\n}\n\nexport default function deepClone<T>(value: T): T {\n\ttry {\n\t\tif (typeof value !== \"object\" || value === null) {\n\t\t\treturn value;\n\t\t}\n\t\treturn structuredClone(value);\n\t} catch {\n\t\tlogger.warn(\"structuredClone failed, falling back to JSON clone\");\n\t\ttry {\n\t\t\treturn JSON.parse(JSON.stringify(value));\n\t\t} catch (jsonError) {\n\t\t\tlogger.error(\n\t\t\t\t\"JSON clone also failed (circular reference or non-serializable value)\"\n\t\t\t);\n\t\t\tthrow jsonError;\n\t\t}\n\t}\n}\n\ntype ReturnAction = \"exchange\" | \"giftcard\" | \"refund\";\n\nexport function formatSelectedAction<T extends ReturnAction>(\n\taction: T\n): Uppercase<T>;\nexport function formatSelectedAction(\n\taction: ReturnAction | undefined\n): Uppercase<ReturnAction>;\nexport function formatSelectedAction(\n\taction: ReturnAction | undefined\n): Uppercase<ReturnAction> {\n\treturn (action ?? \"refund\").toUpperCase() as Uppercase<ReturnAction>;\n}\n\nexport function formatSelectedItems(\n\tcacheData: SessionCache[\"data\"][\"formData\"]\n): NonNullable<CalculationParams[\"lineItems\"]> {\n\tconst selectedItems = cacheData?.selectedItems;\n\tconst selectedActions = cacheData?.selectedActions;\n\n\tif (!selectedItems || !Array.isArray(selectedItems)) {\n\t\tlogger.warn(\"No selected items found in cache data\");\n\t\treturn [];\n\t}\n\n\treturn selectedItems.map(item => {\n\t\tconst matchedAction = selectedActions?.find(\n\t\t\ta => a.itemId === item.id\n\t\t)?.action;\n\t\tconst formattedAction = formatSelectedAction(matchedAction);\n\t\treturn {\n\t\t\tid: item.id,\n\t\t\tlineItemId: item.lineItemId,\n\t\t\taction: formattedAction\n\t\t};\n\t});\n}\n","import { ShopifyCartItem, ShopifyErrorResponse } from \"../types\";\nimport { assert, ensureHttpUrl, isNil } from \"./helpers\";\nimport storage, {\n\tSTORAGE_CART_KEY,\n\tSTORAGE_DEBUG_MODE_KEY,\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"./storage\";\n\nexport function constructShopifyUrl(\n\tendpoint: string,\n\tqueryParams?: Record<string, string>\n) {\n\tconst root = ensureHttpUrl(window.location.host);\n\n\tassert(root, \"Shopify root URL is not defined\");\n\n\tconst searchParams = new URLSearchParams();\n\n\tif (queryParams) {\n\t\tObject.entries(queryParams).forEach(([key, value]) => {\n\t\t\tsearchParams.set(key, value);\n\t\t});\n\t}\n\n\tlet url = root;\n\n\tif (!endpoint.startsWith(\"/\")) {\n\t\turl += \"/\";\n\t}\n\turl += endpoint;\n\n\tif (searchParams.toString()) {\n\t\turl += `?${searchParams.toString()}`;\n\t}\n\n\treturn url;\n}\n\nexport async function handleShopifyFetch<T = unknown>(\n\tendpoint: string,\n\tinit?: RequestInit\n): Promise<T> {\n\tconst fetchUrl = constructShopifyUrl(endpoint, {\n\t\trf: \"true\"\n\t});\n\tconst response = await fetch(fetchUrl, {\n\t\tmethod: init?.method ?? (init?.body ? \"POST\" : \"GET\"),\n\t\tcache: \"no-cache\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\"\n\t\t},\n\t\t...init\n\t});\n\n\tif (!response.ok) {\n\t\tconst errorResponse = (await response.json()) as ShopifyErrorResponse;\n\t\tif (errorResponse && \"message\" in errorResponse) {\n\t\t\tthrow errorResponse;\n\t\t}\n\t\tthrow new Error(\"Unknown error\");\n\t}\n\n\tconst json = (await response.json()) as T;\n\treturn json;\n}\n\nexport function clearSession() {\n\tstorage.remove(STORAGE_CART_KEY);\n\tstorage.remove(STORAGE_SESSION_KEY);\n\tstorage.remove(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\tstorage.remove(STORAGE_DEBUG_MODE_KEY);\n}\n\nexport function normalizeShopifyPrice(\n\tvalue: number | null | undefined\n): number {\n\tif (isNil(value)) {\n\t\treturn 0;\n\t}\n\treturn value / 100;\n}\n\nexport function formatShopifyId(id: number | string, type: string): string {\n\tif (typeof id === \"string\" && id.startsWith(\"gid://\")) return id;\n\treturn `gid://shopify/${type}/${id}`;\n}\n\nexport function stripShopifyId(id: string | number | null | undefined): string {\n\tif (!id) return \"\";\n\n\tconst segment = id.toString().split(\"/\").pop();\n\tif (!segment) return \"\";\n\n\treturn segment;\n}\n\nexport function formatShopifyCartItem(item: ShopifyCartItem) {\n\treturn {\n\t\tvariantId: item.variant_id,\n\t\thandle: item.handle,\n\t\tprice: normalizeShopifyPrice(item.price), // Convert cents to dollars\n\t\ttitle: item.product_title,\n\t\tvariantTitle: item.variant_title ?? \"\",\n\t\timage: item.image,\n\t\tquantity: item.quantity ?? 1\n\t};\n}\n","import { ProductRule, ShopifyCart, ShopifyCartChangeResponse } from \"../types\";\nimport {\n\tgetInternalCartProvider,\n\thasCartProvider\n} from \"./cart-provider-store\";\nimport { isNil, parseToNumber } from \"./helpers\";\nimport { logger } from \"./logger\";\nimport { formatShopifyId, handleShopifyFetch, stripShopifyId } from \"./shopify\";\nimport storage, { STORAGE_CART_KEY } from \"./storage\";\n\nfunction toMerchandiseGid(variantId: number | string): string {\n\treturn formatShopifyId(variantId, \"ProductVariant\");\n}\n\nexport function getRuleProductIds(\n\trules: ProductRule[],\n\ttype: ProductRule[\"type\"]\n) {\n\treturn rules\n\t\t.filter(rule => rule.type === type)\n\t\t.flatMap(rule =>\n\t\t\trule.products\n\t\t\t\t.filter(p => p !== null)\n\t\t\t\t.map(product => Number(stripShopifyId(product.shopifyProductId)))\n\t\t);\n}\n\nexport interface NormalizeCartResult<T extends ShopifyCart> {\n\tcart: T;\n\texcludedItems: T[\"items\"];\n\tbundleItems: T[\"items\"];\n}\n\n// Normalizes the cart by merging items with the same variant_id\nexport function normalizeCart<T extends ShopifyCart>(\n\tcart: T,\n\trules: ProductRule[]\n): NormalizeCartResult<T> {\n\tconst noExchangeTo = getRuleProductIds(rules, \"NO_EXCHANGE_TO\");\n\n\tconst excludedItems: T[\"items\"] = [];\n\tconst bundleItems: T[\"items\"] = [];\n\n\tconst { items, itemCount } = (cart.items || []).reduce<{\n\t\titems: ShopifyCart[\"items\"];\n\t\titemCount: number;\n\t}>(\n\t\t(acc, item) => {\n\t\t\t// Blocked product id exclusion\n\t\t\tif (noExchangeTo.includes(item.product_id)) {\n\t\t\t\texcludedItems.push(item);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// Bundle product exclusion\n\t\t\tif (item.has_components) {\n\t\t\t\tbundleItems.push(item);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// Find existing item in the accumulated items\n\t\t\tconst existingItem = acc.items.find(\n\t\t\t\ti => i.variant_id === item.variant_id\n\t\t\t);\n\n\t\t\tacc.itemCount += item.quantity || 0;\n\n\t\t\tif (existingItem) {\n\t\t\t\t// If the item already exists, merge the quantities\n\t\t\t\texistingItem.quantity += item.quantity;\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// If the item does not exist, add it to the list\n\t\t\tacc.items.push({ ...item });\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\titems: [],\n\t\t\titemCount: 0\n\t\t}\n\t);\n\n\tconst normalizedCart: T = {\n\t\t...cart,\n\t\titems,\n\t\titem_count: itemCount\n\t};\n\n\treturn {\n\t\tcart: normalizedCart,\n\t\texcludedItems,\n\t\tbundleItems\n\t};\n}\n\n// Compares two Shopify carts to see if they are the same\nexport function compareCarts({\n\tcart1,\n\tcart2,\n\trules\n}: {\n\tcart1: ShopifyCart;\n\tcart2: ShopifyCart;\n\trules: ProductRule[];\n}): boolean {\n\tconst { cart: normalizedCart1 } = normalizeCart(cart1, rules);\n\tconst { cart: normalizedCart2 } = normalizeCart(cart2, rules);\n\n\tconst items1 = normalizedCart1.items || [];\n\tconst items2 = normalizedCart2.items || [];\n\n\tif (items1.length !== items2.length) {\n\t\treturn false;\n\t}\n\n\tconst quantityMap1 = new Map(\n\t\titems1.map(item => [item.variant_id, item.quantity])\n\t);\n\n\tfor (const item of items2) {\n\t\tif (quantityMap1.get(item.variant_id) !== item.quantity) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport async function getCart(\n\tpreferStorage: boolean = true\n): Promise<ShopifyCart> {\n\tlet cart: ShopifyCart | undefined = undefined;\n\tlet usedStore: boolean = false;\n\tlet usedProvider: boolean = false;\n\n\tif (preferStorage) {\n\t\tconst storedCart = getCartStorage();\n\t\tif (storedCart) {\n\t\t\tusedStore = true;\n\t\t\tcart = storedCart;\n\t\t}\n\t}\n\n\tif (!cart) {\n\t\t// Use cart provider if configured (for headless/external setups)\n\t\tif (hasCartProvider()) {\n\t\t\tconst provider = getInternalCartProvider();\n\t\t\tif (provider) {\n\t\t\t\tlogger.info(\"[CartProvider] Using provider.getCart()\");\n\t\t\t\tcart = await provider.getCart();\n\t\t\t\tusedProvider = true;\n\t\t\t}\n\t\t}\n\n\t\t// Fall back to direct Shopify fetch if no provider\n\t\tif (!cart) {\n\t\t\tlogger.info(\"[CartProvider] No provider, falling back to /cart.js\");\n\t\t\tcart = await handleShopifyFetch<ShopifyCart>(\"/cart.js\");\n\t\t}\n\n\t\tupdateCartStorage(cart);\n\t}\n\n\tconst source = usedStore ? \"Storage\" : usedProvider ? \"Provider\" : \"API\";\n\tlogger.info(`Fetched cart (${source})`, cart);\n\n\treturn cart;\n}\n\nexport async function clearCart(): Promise<ShopifyCart> {\n\t// Use cart provider if configured and has clearCart method\n\tif (hasCartProvider()) {\n\t\tconst provider = getInternalCartProvider();\n\t\tif (provider?.clearCart) {\n\t\t\tlogger.info(\"[CartProvider] Using provider.clearCart()\");\n\t\t\tconst cart = await provider.clearCart();\n\t\t\tupdateCartStorage(cart);\n\t\t\treturn cart;\n\t\t}\n\t\tlogger.info(\n\t\t\t\"[CartProvider] Provider exists but clearCart not implemented, falling back to /cart/clear.js\"\n\t\t);\n\t}\n\n\t// Fall back to direct Shopify fetch\n\tconst cart = await handleShopifyFetch<ShopifyCart>(\"/cart/clear.js\", {\n\t\tmethod: \"POST\"\n\t});\n\tupdateCartStorage(cart);\n\treturn cart;\n}\n\nexport async function setCartItems(\n\titems: Array<{\n\t\tid: number;\n\t\tquantity: number;\n\t}>\n): Promise<ShopifyCart> {\n\tconst clearedCart = await clearCart();\n\n\tif (items.length === 0) {\n\t\treturn clearedCart;\n\t}\n\n\t// Use cart provider if configured and has addItems method\n\tif (hasCartProvider()) {\n\t\tconst provider = getInternalCartProvider();\n\t\tif (provider?.addItems) {\n\t\t\tconst cartItems = items.map(item => {\n\t\t\t\tconst merchandiseId = toMerchandiseGid(item.id);\n\t\t\t\treturn {\n\t\t\t\t\tmerchandiseId,\n\t\t\t\t\tquantity: item.quantity\n\t\t\t\t};\n\t\t\t});\n\t\t\tlogger.info(\n\t\t\t\t\"[CartProvider] Using provider.addItems() (setCartItems)\",\n\t\t\t\tcartItems\n\t\t\t);\n\t\t\tconst cart = await provider.addItems(cartItems);\n\t\t\tupdateCartStorage(cart);\n\t\t\treturn cart;\n\t\t}\n\t\tlogger.info(\n\t\t\t\"[CartProvider] Provider exists but addItems not implemented, falling back to /cart/add.js\"\n\t\t);\n\t}\n\n\t// Fall back to direct Shopify fetch\n\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/add.js\", {\n\t\tmethod: \"POST\",\n\t\tbody: JSON.stringify({\n\t\t\titems\n\t\t})\n\t});\n\n\treturn getCart(false);\n}\n\nexport async function updateCartItemQuantity({\n\tvariantId,\n\tquantity,\n\tisRetry = false\n}: {\n\tvariantId: number;\n\tquantity: number;\n\tisRetry?: boolean;\n}): Promise<ShopifyCart> {\n\ttry {\n\t\tif (isNil(quantity)) {\n\t\t\tthrow new Error(\"Quantity cannot be null or undefined\");\n\t\t}\n\n\t\t// Use cart provider if configured\n\t\tif (hasCartProvider()) {\n\t\t\tconst provider = getInternalCartProvider();\n\t\t\tif (provider) {\n\t\t\t\t// Get current cart (storage is synced by wrapped provider)\n\t\t\t\t// On retry, bypass storage to get fresh cart data\n\t\t\t\tconst currentCart = await getCart(!isRetry);\n\t\t\t\tconst item = currentCart.items.find(i => i.variant_id === variantId);\n\n\t\t\t\tif (!item) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`[CartProvider] Item with variantId ${variantId} not found in cart`\n\t\t\t\t\t);\n\t\t\t\t\t// If first attempt and item not found, retry with fresh cart\n\t\t\t\t\tif (!isRetry) {\n\t\t\t\t\t\tlogger.info(\"[CartProvider] Retrying with fresh cart data...\");\n\t\t\t\t\t\treturn updateCartItemQuantity({\n\t\t\t\t\t\t\tvariantId,\n\t\t\t\t\t\t\tquantity,\n\t\t\t\t\t\t\tisRetry: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t\treturn getCart(false);\n\t\t\t\t}\n\n\t\t\t\tconst lineId = item.line_id;\n\t\t\t\tconst merchandiseId =\n\t\t\t\t\titem.merchandise_id || toMerchandiseGid(variantId);\n\n\t\t\t\tif (!lineId) {\n\t\t\t\t\tlogger.warn(\"[CartProvider] No line_id on cart item\");\n\t\t\t\t\t// If first attempt and no line_id, retry with fresh cart\n\t\t\t\t\tif (!isRetry) {\n\t\t\t\t\t\tlogger.info(\"[CartProvider] Retrying with fresh cart data...\");\n\t\t\t\t\t\treturn updateCartItemQuantity({\n\t\t\t\t\t\t\tvariantId,\n\t\t\t\t\t\t\tquantity,\n\t\t\t\t\t\t\tisRetry: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\"[CartProvider] Still no line_id after retry, falling back to /cart/change.js\"\n\t\t\t\t\t);\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t\treturn getCart(false);\n\t\t\t\t}\n\n\t\t\t\tif (quantity === 0 && provider.removeItems) {\n\t\t\t\t\tlogger.info(`[CartProvider] Using provider.removeItems([${lineId}])`);\n\t\t\t\t\tawait provider.removeItems([lineId]);\n\t\t\t\t} else if (provider.updateItems) {\n\t\t\t\t\tconst updateItem = { id: lineId, merchandiseId, quantity };\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\"[CartProvider] Using provider.updateItems()\",\n\t\t\t\t\t\tupdateItem\n\t\t\t\t\t);\n\t\t\t\t\tawait provider.updateItems([updateItem]);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\"[CartProvider] Provider exists but removeItems/updateItems not implemented, falling back to /cart/change.js\"\n\t\t\t\t\t);\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t}\n\n\t\t\t\t// Always fetch fresh cart to get complete data (e.g. has_components)\n\t\t\t\treturn getCart(false);\n\t\t\t}\n\t\t}\n\n\t\t// Fall back to direct Shopify fetch\n\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\treturn getCart(false);\n\t} catch (err) {\n\t\tconst error = err as Error | { status: number; message: string };\n\t\tlogger.error(\"Error updating cart item quantity:\", error);\n\t\tif (\"status\" in error) {\n\t\t\tthrow new Error(error.status.toString());\n\t\t}\n\t\tthrow new Error(error.message);\n\t}\n}\n\n/**\n * Internal: Update cart item quantity via direct Shopify API calls.\n * Used when no cart provider is configured.\n */\nasync function updateCartItemQuantityViaShopify(\n\tvariantId: number,\n\tquantity: number\n): Promise<void> {\n\tif (quantity === 0) {\n\t\t// If quantity is 0, remove the item from the cart\n\t\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/change.js\", {\n\t\t\tbody: JSON.stringify({\n\t\t\t\tid: String(variantId), // Shopify expects variantId as a string\n\t\t\t\tquantity\n\t\t\t})\n\t\t});\n\t\treturn;\n\t}\n\n\t// This calculation is necessary to handle cases where there are multiple identical items in the cart.\n\tconst existingCart = await getCart();\n\n\tconst existingItems = existingCart.items || [];\n\n\tconst itemsWtihSameVariantId = existingItems.filter(\n\t\titem => item.variant_id === variantId\n\t);\n\tconst totalQuantity = itemsWtihSameVariantId.reduce(\n\t\t(acc, item) => acc + (item.quantity || 0),\n\t\t0\n\t);\n\tconst existingItemIndex = existingItems.findIndex(\n\t\titem => item.variant_id === variantId\n\t);\n\n\tconst increment = quantity - totalQuantity;\n\n\tconst existingQuantity = parseToNumber(\n\t\texistingItems[existingItemIndex]?.quantity\n\t);\n\tconst calculatedQuantity = existingQuantity + increment;\n\n\tif (existingItemIndex !== -1) {\n\t\tconst cartChange = {\n\t\t\tline: String(existingItemIndex + 1), // Shopify uses 1-based index\n\t\t\tquantity: calculatedQuantity\n\t\t};\n\t\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/change.js\", {\n\t\t\tbody: JSON.stringify(cartChange)\n\t\t});\n\t}\n}\n\nexport function updateCartStorage(cart: ShopifyCart | null): void {\n\tif (cart) {\n\t\tstorage.set(STORAGE_CART_KEY, cart);\n\t\treturn;\n\t}\n\tstorage.remove(STORAGE_CART_KEY);\n}\n\nexport function getCartStorage(): ShopifyCart | null {\n\treturn storage.get<ShopifyCart>(STORAGE_CART_KEY);\n}\n","import { updateCartStorage } from \"../widget/lib/utils/cart\";\nimport { stripShopifyId } from \"../widget/lib/utils/shopify\";\nimport type {\n\tCartInput,\n\tCartProvider,\n\tConnection,\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart,\n\tStorefrontCartLine\n} from \"./types\";\n\nfunction resolveConnection<T extends object>(connections: Connection<T>): T[] {\n\tif (\"edges\" in connections) {\n\t\treturn connections.edges.map(edge => edge.node);\n\t}\n\treturn connections.map(edge => {\n\t\tif (\"node\" in edge) {\n\t\t\treturn edge.node;\n\t\t}\n\t\treturn edge;\n\t});\n}\n\nfunction isStorefrontCart(cart: CartInput): cart is StorefrontCart {\n\tif (!(\"lines\" in cart)) return false;\n\tconst lines = (cart as StorefrontCart).lines;\n\treturn (\n\t\tArray.isArray(lines) ||\n\t\t(lines != null && typeof lines === \"object\" && \"edges\" in lines)\n\t);\n}\n\nfunction toCents(amount: string): number {\n\tconst parsed = parseFloat(amount);\n\treturn Number.isNaN(parsed) ? 0 : Math.round(parsed * 100);\n}\n\nfunction resolveLineImage(line: StorefrontCartLine): string {\n\tif (line.merchandise.image?.url) {\n\t\treturn line.merchandise.image.url;\n\t}\n\tif (line.merchandise.product.featuredImage?.url) {\n\t\treturn line.merchandise.product.featuredImage.url;\n\t}\n\tconst productImages = resolveConnection(\n\t\tline.merchandise.product.images ?? []\n\t);\n\tif (productImages.length > 0) {\n\t\treturn productImages[0].url;\n\t}\n\treturn \"\";\n}\n\nfunction normalizeStorefrontLine(line: StorefrontCartLine): ShopifyCartItem {\n\tconst { merchandise, quantity } = line;\n\tconst { product } = merchandise;\n\n\tconst variantId = Number(stripShopifyId(merchandise.id));\n\tconst productId = Number(stripShopifyId(product.id));\n\n\t// Prefer line.cost, fall back to merchandise.price\n\tlet unitPrice: number;\n\tlet lineTotal: number;\n\n\tif (line.cost?.amountPerQuantity) {\n\t\tunitPrice = toCents(line.cost.amountPerQuantity.amount);\n\t\tlineTotal = line.cost.totalAmount\n\t\t\t? toCents(line.cost.totalAmount.amount)\n\t\t\t: unitPrice * quantity;\n\t} else if (merchandise.price) {\n\t\tunitPrice = toCents(merchandise.price.amount);\n\t\tlineTotal = unitPrice * quantity;\n\t} else {\n\t\tunitPrice = 0;\n\t\tlineTotal = 0;\n\t}\n\n\tconst variantTitle = merchandise.title;\n\tconst productTitle = product.title;\n\n\tconst isDefaultVariant =\n\t\t!variantTitle ||\n\t\tvariantTitle === \"Default Title\" ||\n\t\tvariantTitle === \"Default\";\n\n\tconst title = isDefaultVariant\n\t\t? productTitle\n\t\t: `${productTitle} - ${variantTitle}`;\n\n\treturn {\n\t\tvariant_id: variantId,\n\t\tquantity,\n\t\ttitle,\n\t\tprice: unitPrice,\n\t\tproduct_id: productId,\n\t\tproduct_title: productTitle,\n\t\thandle: product.handle,\n\t\timage: resolveLineImage(line),\n\t\tgrams: 0,\n\t\tline_price: lineTotal,\n\t\tfinal_price: unitPrice,\n\t\tfinal_line_price: lineTotal,\n\t\tline_id: line.id,\n\t\tmerchandise_id: merchandise.id,\n\t\tvariant_title: isDefaultVariant ? undefined : variantTitle,\n\t\tsku: merchandise.sku,\n\t\tvendor: product.vendor,\n\t\tproduct_type: product.productType,\n\t\trequires_shipping: merchandise.requiresShipping\n\t};\n}\n\nfunction normalizeStorefrontCart(cart: StorefrontCart): ShopifyCart {\n\tconst lines = resolveConnection(cart.lines);\n\tconst items = lines.map(normalizeStorefrontLine);\n\tconst itemCount =\n\t\tcart.totalQuantity ?? items.reduce((sum, i) => sum + i.quantity, 0);\n\n\treturn {\n\t\titems,\n\t\titem_count: itemCount,\n\t\ttoken: cart.id,\n\t\tnote: cart.note ?? \"\"\n\t};\n}\n\nexport function normalizeCartInput(cart: CartInput): ShopifyCart {\n\tif (isStorefrontCart(cart)) {\n\t\treturn normalizeStorefrontCart(cart);\n\t}\n\treturn cart;\n}\n\nfunction normalizeAndStore(cart: CartInput): ShopifyCart {\n\tconst normalized = normalizeCartInput(cart);\n\tupdateCartStorage(normalized);\n\treturn normalized;\n}\n\nexport function wrapCartProvider(provider: CartProvider): CartProvider {\n\treturn {\n\t\tasync getCart(): Promise<ShopifyCart | undefined> {\n\t\t\tconst cart = await provider.getCart();\n\t\t\treturn cart ? normalizeAndStore(cart) : undefined;\n\t\t},\n\t\tclearCart: async () => normalizeAndStore(await provider.clearCart()),\n\t\taddItems: async items => normalizeAndStore(await provider.addItems(items)),\n\t\tupdateItems: async items =>\n\t\t\tnormalizeAndStore(await provider.updateItems(items)),\n\t\tremoveItems: async ids => normalizeAndStore(await provider.removeItems(ids))\n\t};\n}\n","import type { IReturnContext } from \"../widget/lib/context/return-context\";\nimport type { IToastContext } from \"../widget/lib/context/toast-context\";\nimport type { ValueState } from \"../widget/lib/hooks/common/use-value-state\";\nimport { WidgetViewState } from \"../widget/lib/types\";\nimport {\n\tcompareCarts,\n\tnormalizeCart,\n\tupdateCartStorage\n} from \"../widget/lib/utils/cart\";\nimport { formatSelectedItems } from \"../widget/lib/utils/helpers\";\nimport type { WidgetConfiguration } from \"../widget/lib/utils/initialization/types\";\nimport { CalculationResponse } from \"../widget/lib/utils/queries\";\nimport { normalizeCartInput, wrapCartProvider } from \"./storefront-cart\";\nimport type {\n\tCartInput,\n\tCartProvider,\n\tEventCallback,\n\tEventName,\n\tOrderData,\n\tSetCartOutput,\n\tShopifyCart\n} from \"./types\";\n\ninterface StateBridge {\n\twidgetViewState: ValueState<WidgetViewState> | null;\n\tconfig: WidgetConfiguration | null;\n\treturnContext: IReturnContext | null;\n\ttoastContext: IToastContext | null;\n\tcartProvider: CartProvider | null;\n\tisInitialized: boolean;\n\teventListeners: Map<string, Set<EventCallback<EventName>>>;\n}\n\nconst bridge: StateBridge = {\n\twidgetViewState: null,\n\tconfig: null,\n\treturnContext: null,\n\ttoastContext: null,\n\tcartProvider: null,\n\tisInitialized: false,\n\teventListeners: new Map()\n};\n\nexport function registerBridge({\n\twidgetViewState,\n\treturnContext,\n\ttoastContext,\n\tconfig\n}: {\n\twidgetViewState: ValueState<WidgetViewState>;\n\treturnContext: IReturnContext;\n\ttoastContext: IToastContext;\n\tconfig: WidgetConfiguration;\n}): void {\n\tbridge.widgetViewState = widgetViewState;\n\tbridge.returnContext = returnContext;\n\tbridge.toastContext = toastContext;\n\tbridge.config = config;\n\tbridge.isInitialized = true;\n\n\temitEvent(\"ready\");\n}\n\nexport function unregisterBridge(): void {\n\tbridge.widgetViewState = null;\n\tbridge.returnContext = null;\n\tbridge.toastContext = null;\n\tbridge.config = null;\n\tbridge.cartProvider = null;\n\tbridge.isInitialized = false;\n\tbridge.eventListeners.clear();\n}\n\nexport function setCartProvider(provider: CartProvider | null): void {\n\tconst wrapped = provider ? wrapCartProvider(provider) : null;\n\n\tbridge.cartProvider = wrapped;\n\n\tif (typeof window !== \"undefined\") {\n\t\tconst rf = (\n\t\t\twindow as Window & {\n\t\t\t\tReturnflows?: { _cartProvider?: CartProvider | null };\n\t\t\t}\n\t\t).Returnflows;\n\t\tif (rf) {\n\t\t\trf._cartProvider = wrapped;\n\t\t}\n\t}\n\n\tif (provider) {\n\t\tconsole.info(`[RF] Cart provider registered.`);\n\t} else {\n\t\tconsole.info(\"[RF] Cart provider cleared.\");\n\t}\n}\n\nexport function getCartProvider(): CartProvider | null {\n\treturn bridge.cartProvider;\n}\n\nexport function isInitialized(): boolean {\n\treturn bridge.isInitialized;\n}\n\nexport function getDrawerState(): WidgetViewState | null {\n\treturn bridge.widgetViewState?.value ?? null;\n}\n\nexport function setDrawerState(state: WidgetViewState): void {\n\tif (!bridge.widgetViewState) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn;\n\t}\n\tbridge.widgetViewState.set(state);\n}\n\nexport function isDrawerOpen(): boolean {\n\treturn bridge.widgetViewState?.value === WidgetViewState.Open;\n}\n\nexport function getCart(): ShopifyCart | null {\n\tconst cartState = bridge.returnContext?.cartState;\n\tif (!cartState?.value.data) return null;\n\treturn cartState.value.data.original as ShopifyCart;\n}\n\nexport function getCalculation(): CalculationResponse | null {\n\treturn bridge.returnContext?.calculationState.value.data ?? null;\n}\n\nexport function getOrder(): OrderData | null {\n\tconst orderData = bridge.returnContext?.orderState.value.data?.orderData;\n\tif (!orderData) return null;\n\n\treturn {\n\t\tid: orderData.id,\n\t\torderId: orderData.orderId,\n\t\torderName: orderData.orderName,\n\t\tinstantExchange: orderData.instantExchange,\n\t\tfreeExchangeLabel: orderData.freeExchangeLabel,\n\t\tproductsToExchange: orderData.productsToExchange,\n\t\ttotalPrice: orderData.totalPrice\n\t};\n}\n\nexport function isLoading(): boolean {\n\treturn bridge.returnContext?.isPending ?? true;\n}\n\nexport async function setCart(cart: CartInput): Promise<SetCartOutput> {\n\tconst cartState = bridge.returnContext?.cartState;\n\tconst orderState = bridge.returnContext?.orderState;\n\tconst calculationState = bridge.returnContext?.calculationState;\n\n\tif (!cartState || !orderState?.value.data) {\n\t\tconsole.warn(\"[RF] Widget not initialized or order not loaded.\");\n\t\treturn {\n\t\t\tcart: null,\n\t\t\tcalculation: null,\n\t\t\thasChanged: false\n\t\t};\n\t}\n\n\tconst order = orderState.value.data;\n\n\tconst normalizedInput = normalizeCartInput(cart);\n\tconst productRules = order.orderData.productRules || [];\n\n\t// Check if cart has actually changed\n\tconst currentCart = cartState.value.data?.original as ShopifyCart | undefined;\n\tif (\n\t\tcurrentCart &&\n\t\tcompareCarts({\n\t\t\tcart1: currentCart,\n\t\t\tcart2: normalizedInput,\n\t\t\trules: productRules\n\t\t})\n\t) {\n\t\treturn {\n\t\t\tcart: currentCart,\n\t\t\tcalculation: calculationState?.value.data ?? null,\n\t\t\thasChanged: false\n\t\t};\n\t}\n\n\tconst { cart: transformedCart } = normalizeCart(\n\t\tnormalizedInput,\n\t\tproductRules\n\t);\n\n\tcartState.set({\n\t\tdata: {\n\t\t\toriginal: normalizedInput,\n\t\t\ttransformed: transformedCart\n\t\t},\n\t\tpending: false,\n\t\terror: null\n\t});\n\n\tupdateCartStorage(normalizedInput);\n\n\temitEvent(\"cart:updated\", normalizedInput);\n\n\tconst calculationResponse = await calculationState?.query({\n\t\tcart: transformedCart,\n\t\torderId: order.orderData.id,\n\t\tlineItems: formatSelectedItems(bridge.config?.data.formData)\n\t});\n\n\treturn {\n\t\tcart: transformedCart,\n\t\tcalculation: calculationResponse ?? null,\n\t\thasChanged: true\n\t};\n}\n\nexport async function refetchCart(): Promise<SetCartOutput | void> {\n\tconst cartState = bridge.returnContext?.cartState;\n\tconst orderState = bridge.returnContext?.orderState;\n\n\tif (!cartState || !orderState?.value.data) {\n\t\tconsole.warn(\"[RF] Widget not initialized or order not loaded.\");\n\t\treturn;\n\t}\n\n\tif (bridge.cartProvider) {\n\t\ttry {\n\t\t\tconst cart = await bridge.cartProvider.getCart();\n\t\t\tif (!cart) return;\n\t\t\treturn setCart(cart);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[RF] Cart provider getCart failed:\", error);\n\t\t\temitEvent(\n\t\t\t\t\"error\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error))\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tawait cartState.query(orderState.value.data);\n}\n\nexport async function clearCart(): Promise<SetCartOutput | void> {\n\tif (!bridge.isInitialized) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn;\n\t}\n\n\tif (bridge.cartProvider?.clearCart) {\n\t\ttry {\n\t\t\tconst cart = await bridge.cartProvider.clearCart();\n\t\t\treturn setCart(cart);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[RF] Cart provider clearCart failed:\", error);\n\t\t\temitEvent(\n\t\t\t\t\"error\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error))\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdocument.dispatchEvent(new CustomEvent(\"RF_CART_AND_CALCULATION_REFETCH\"));\n}\n\nexport function showToast(options: {\n\tmessage: string;\n\ttone?: \"info\" | \"tip\" | \"action\" | \"error\" | \"giftcard\";\n\tduration?: number;\n\tonClose?: () => void;\n}): string {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn \"\";\n\t}\n\n\treturn bridge.toastContext.add({\n\t\tmessage: options.message,\n\t\ttone: options.tone,\n\t\tduration: options.duration,\n\t\tonClose: options.onClose\n\t});\n}\n\nexport function dismissToast(id: string): void {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized.\");\n\t\treturn;\n\t}\n\tbridge.toastContext.remove(id);\n}\n\nexport function clearToasts(): void {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized.\");\n\t\treturn;\n\t}\n\tbridge.toastContext.clear();\n}\n\nexport function addEventListener<K extends EventName>(\n\tevent: K,\n\tcallback: EventCallback<K>\n): void {\n\tif (!bridge.eventListeners.has(event)) {\n\t\tbridge.eventListeners.set(event, new Set());\n\t}\n\tbridge.eventListeners.get(event)!.add(callback as EventCallback<EventName>);\n}\n\nexport function removeEventListener<K extends EventName>(\n\tevent: K,\n\tcallback: EventCallback<K>\n): void {\n\tbridge.eventListeners\n\t\t.get(event)\n\t\t?.delete(callback as EventCallback<EventName>);\n}\n\nexport function emitEvent<K extends EventName>(\n\tevent: K,\n\t...args: K extends \"error\"\n\t\t? [Error]\n\t\t: K extends \"calculation:updated\"\n\t\t\t? [CalculationResponse]\n\t\t\t: K extends \"cart:updated\"\n\t\t\t\t? [ShopifyCart]\n\t\t\t\t: []\n): void {\n\tconst listeners = bridge.eventListeners.get(event);\n\tif (!listeners) return;\n\n\tlisteners.forEach(callback => {\n\t\ttry {\n\t\t\t// @ts-expect-error - TypeScript can't verify the callback signature matches the args\n\t\t\tcallback(...args);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[RF] Error in ${event} event handler:`, error);\n\t\t}\n\t});\n}\n","import { WidgetViewState } from \"../widget/lib/types\";\nimport * as bridge from \"./state-bridge\";\nimport type {\n\tCartAPI,\n\tCartInput,\n\tCartProvider,\n\tDataAPI,\n\tDrawerAPI,\n\tEventCallback,\n\tEventName,\n\tReturnflowsAPI,\n\tReturnflowsConfig,\n\tToastAPI,\n\tToastOptions\n} from \"./types\";\n\ndeclare const __VERSION__: string;\n\nclass ReturnflowsWidget implements ReturnflowsAPI {\n\tprivate _initPromise: Promise<void> | null = null;\n\n\t/** @internal */\n\t_cartProvider: CartProvider | null = null;\n\n\tpublic readonly version =\n\t\ttypeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"0.0.0\";\n\n\tpublic readonly drawer: DrawerAPI = {\n\t\topen: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.setDrawerState(WidgetViewState.Open);\n\t\t},\n\n\t\tclose: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.setDrawerState(WidgetViewState.Collapsed);\n\t\t},\n\n\t\ttoggle: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tconst current = bridge.getDrawerState();\n\t\t\tbridge.setDrawerState(\n\t\t\t\tcurrent === WidgetViewState.Open\n\t\t\t\t\t? WidgetViewState.Collapsed\n\t\t\t\t\t: WidgetViewState.Open\n\t\t\t);\n\t\t},\n\n\t\tisOpen: (): boolean => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.isDrawerOpen();\n\t\t}\n\t};\n\n\tpublic readonly data: DataAPI = {\n\t\tgetCart: () => bridge.getCart(),\n\t\tgetCalculation: () => bridge.getCalculation(),\n\t\tgetOrder: () => bridge.getOrder(),\n\t\tisLoading: () => bridge.isLoading()\n\t};\n\n\tpublic readonly cart: CartAPI = {\n\t\tsetCart: async (cart: CartInput): ReturnType<CartAPI[\"setCart\"]> => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.setCart(cart);\n\t\t},\n\n\t\trefetch: async (): Promise<void> => {\n\t\t\tthis._ensureInitialized();\n\t\t\tawait bridge.refetchCart();\n\t\t},\n\n\t\tclear: async (): Promise<void> => {\n\t\t\tthis._ensureInitialized();\n\t\t\tawait bridge.clearCart();\n\t\t}\n\t};\n\n\tpublic readonly toast: ToastAPI = {\n\t\tshow: (options: ToastOptions): string => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.showToast(options);\n\t\t},\n\n\t\tdismiss: (id: string): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.dismissToast(id);\n\t\t},\n\n\t\tclear: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.clearToasts();\n\t\t}\n\t};\n\n\tasync init(config: ReturnflowsConfig = {}): Promise<void> {\n\t\tif (this._initPromise) {\n\t\t\tconsole.warn(\"[RF] Already initializing. Returning existing promise.\");\n\t\t\treturn this._initPromise;\n\t\t}\n\n\t\tif (bridge.isInitialized()) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[RF] Already initialized. Call destroy() first to reinitialize.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._initPromise = new Promise<void>((resolve, reject) => {\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { onReady, onError, cartProvider, ...rest } = config;\n\n\t\t\t\t\tif (cartProvider) {\n\t\t\t\t\t\tbridge.setCartProvider(cartProvider);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { default: initialize } =\n\t\t\t\t\t\tawait import(\"../widget/lib/utils/initialization\");\n\t\t\t\t\tconst { default: WidgetContainer } =\n\t\t\t\t\t\tawait import(\"../widget/components/widget-container\");\n\t\t\t\t\tconst { h } = await import(\"preact\");\n\n\t\t\t\t\tconst result = await initialize(\n\t\t\t\t\t\twidgetConfig => h(WidgetContainer, widgetConfig),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnetworkInterceptionMethod: \"none\",\n\t\t\t\t\t\t\t...rest\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (result.reason === \"CONTAINER_EXISTS\") {\n\t\t\t\t\t\t\tawait this._waitForBridge();\n\t\t\t\t\t\t\tconfig.onReady?.();\n\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.reason === \"MISSING_SESSION_ID\") {\n\t\t\t\t\t\t\tthis._initPromise = null;\n\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Widget initialization failed: ${result.message} (${result.reason})`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this._waitForBridge();\n\t\t\t\t\tconfig.onReady?.();\n\t\t\t\t\tresolve();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\t\tconfig.onError?.(error);\n\t\t\t\t\tbridge.setCartProvider(null);\n\t\t\t\t\tthis._initPromise = null;\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t})();\n\t\t});\n\n\t\treturn this._initPromise;\n\t}\n\n\tdestroy(): void {\n\t\tbridge.setCartProvider(null);\n\t\tbridge.unregisterBridge();\n\n\t\tif (typeof document !== \"undefined\") {\n\t\t\tconst container = document.getElementById(\"rf-overlay-widget\");\n\t\t\tif (container) {\n\t\t\t\tcontainer.remove();\n\t\t\t}\n\t\t}\n\n\t\tthis._initPromise = null;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn bridge.isInitialized();\n\t}\n\n\ton<K extends EventName>(event: K, callback: EventCallback<K>): () => void {\n\t\tbridge.addEventListener(event, callback);\n\t\treturn () => bridge.removeEventListener(event, callback);\n\t}\n\n\toff<K extends EventName>(event: K, callback: EventCallback<K>): void {\n\t\tbridge.removeEventListener(event, callback);\n\t}\n\n\tprivate _ensureInitialized(): void {\n\t\tif (!bridge.isInitialized()) {\n\t\t\tthrow new Error(\"[RF] Widget not initialized. Call init() first.\");\n\t\t}\n\t}\n\n\tprivate async _waitForBridge(timeout = 10000): Promise<void> {\n\t\tconst start = Date.now();\n\t\twhile (!bridge.isInitialized()) {\n\t\t\tif (Date.now() - start > timeout) {\n\t\t\t\tthrow new Error(\"[RF] Initialization timeout\");\n\t\t\t}\n\t\t\tawait new Promise(r => setTimeout(r, 50));\n\t\t}\n\t}\n}\n\nexport const Returnflows = new ReturnflowsWidget();\n\nif (typeof window !== \"undefined\") {\n\t(window as Window & { Returnflows?: ReturnflowsWidget }).Returnflows =\n\t\tReturnflows;\n}\n\nexport default Returnflows;\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,w=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)($)}function $(){for(var n,u,t,r,o,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,o=(r=(u=n).__v).__e,f=[],c=[],u.__P&&((t=d({},r)).__v=r.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,r,u.__n,u.__P.namespaceURI,32&r.__u?[o]:null,f,null==o?S(r):o,!!(32&r.__u),c),t.__v=r.__v,t.__.__k[t.__i]=t,z(f,t,c),t.__e!=o&&C(t)));$.__r=0}function I(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,w,d,g,_=t&&t.__k||v,m=l.length;for(f=P(u,l,_,f,m),a=0;a<m;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:_[y.__i]||p,y.__i=a,g=O(n,y,h,i,r,o,e,f,c,s),w=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&q(h.ref,null,y),s.push(y.ref,y.__c||w,y)),null==d&&null!=w&&(d=w),4&y.__u||h.__k===y.__k?f=A(y,f,n):\"function\"==typeof y.type&&void 0!==g?f=g:w&&(f=w.nextSibling),y.__u&=-7);return u.__e=d,f}function P(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(f=r+h,(o=n.__k[r]=\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?m(null,o,null,null,null):w(o)?m(k,{children:o},null,null,null):null==o.constructor&&o.__b>0?m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o).__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=L(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),B(e,e));return t}function A(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=A(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=S(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(w(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,r,o=n.key,e=n.type,f=l[u];if(null===f&&null==n.key||f&&o==f.key&&e==f.type&&0==(2&f.__u))return u;if(t>(null!=f&&0==(2&f.__u)?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;){if(i>=0){if((f=l[i])&&0==(2&f.__u)&&o==f.key&&e==f.type)return i;i--}if(r<l.length){if((f=l[r])&&0==(2&f.__u)&&o==f.key&&e==f.type)return r;r++}}return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(null!=u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=D),C&&C.sub(h),h.props=b,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)||u.__v==t.__v){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=N(a.props.children)),f=I(n,w(L)?L:[L],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else for(T=o.length;T--;)g(o[T]);else u.__e=t.__e,u.__k=t.__k;l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=V(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n,u,t){for(var i=0;i<t.length;i++)q(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function N(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:w(n)?n.map(N):d({},n)}function V(u,t,i,r,o,e,f,c,s){var a,h,v,y,d,_,m,b=i.props,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((d=e[a])&&\"setAttribute\"in d==!!x&&(x?d.localName==x:3==d.nodeType)){u=d,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),b=i.props||p,!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(d=u.attributes[a]).name]=d.value;for(a in b)if(d=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=d;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,d,o)}for(a in k)d=k[a],\"children\"==a?y=d:\"dangerouslySetInnerHTML\"==a?h=d:\"value\"==a?_=d:\"checked\"==a?m=d:c&&\"function\"!=typeof d||b[a]===d||j(u,a,d,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,w(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],o))}return u}function q(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function B(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||q(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&B(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function D(n,l,u){return this.constructor(n,u)}function E(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),z(e,u,f)}function G(n,l){E(n,l,G)}function J(l,u,t){var i,r,o,e,f=d({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function K(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=d({},this.state),\"function\"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,J as cloneElement,K as createContext,_ as createElement,b as createRef,_ as h,G as hydrate,t as isValidElement,l as options,E as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","export function resolveEnvVar<T = undefined>(\n\tvarKey: string,\n\tfallback?: T\n): string | T {\n\tlet value;\n\ttry {\n\t\tvalue = process.env?.[varKey];\n\t} catch (err) {\n\t\tvalue = import.meta.env?.[varKey];\n\t\tvoid err;\n\t}\n\tvalue ??= fallback;\n\treturn value;\n}\n\n// General\nexport const IMAGE_FALLBACK_URL =\n\t\"https://cdn.shopify.com/s/files/1/0849/6526/1638/files/RF-SO-Placeholder2.png?v=1735826638\";\n\n// URLs\nexport const API_URL = resolveEnvVar(\"VITE_API_URL\", \"http://localhost:8080\");\nexport const PLATFORM_URL = resolveEnvVar(\n\t\"VITE_PLATFORM_URL\",\n\t\"http://localhost:3000\"\n);\nexport const WIDGET_BASE_URL = resolveEnvVar(\n\t\"VITE_WIDGET_BASE_URL\",\n\t\"http://localhost:3334\"\n);\n\n/* Consistent Search Params */\nexport const SEARCH_PARAM_ID_NAME = \"rflowsId\";\n\n/* Legacy Search Params */\nexport const LEGACY_PARAMS = [\"lineItems\", \"slug\", \"locale\", \"currency\"];\n\n/* Element Indendifiers */\nexport const ROOT_ELEMENT_ID = \"root\";\nexport const SHADOW_ROOT_ELEMENT_ID = \"shadow-root\";\nexport const CONTAINER_ELEMENT_ID = \"rf-overlay-widget\";\nexport const CUSTOM_CSS_DATA_ATTR = \"rf-custom-css\";\n\nexport const SCRIPT_ID = \"rf-embedded-script\";\nexport const SETTINGS_SCRIPT_ID = \"rf-settings-json\";\n","import { WidgetViewState } from \"../types\";\nimport { WidgetConfiguration } from \"./initialization/types\";\n\n// Define a union of allowed event names\nexport const enum InternalCustomEvent {\n\tFetchInterception = \"RF_FETCH_INTERCEPTION\",\n\tXHRInterception = \"RF_XHR_INTERCEPTION\",\n\tDrawerStateChange = \"RF_DRAWER_STATE_CHANGE\",\n\tWidgetInitialization = \"RF_WIDGET_INITIALIZATION\"\n}\n\nexport const enum ExternalCustomEvent {\n\tDrawerOpen = \"RF_DRAWER_OPEN\",\n\tDrawerClose = \"RF_DRAWER_CLOSE\",\n\tDrawerToggle = \"RF_DRAWER_TOGGLE\",\n\tCalculationRefetch = \"RF_CALCULATION_REFETCH\",\n\tCartRefetch = \"RF_CART_REFETCH\",\n\tCartAndCalculationRefetch = \"RF_CART_AND_CALCULATION_REFETCH\",\n\tDrawerOpenAndRefetch = \"RF_DRAWER_OPEN_AND_REFETCH\"\n}\n\nexport type XHRResponse = string | Record<string, unknown> | undefined;\nexport type FetchResponse = Response | undefined;\n\nexport type InterceptionResponse = XHRResponse | FetchResponse;\n\nexport interface InterceptionPayload {\n\tresponse: InterceptionResponse;\n\trequestUrl: string | URL;\n}\n\n// Define the expected data types for each event\nexport type CustomEventPayloadMap = {\n\t[InternalCustomEvent.FetchInterception]: InterceptionPayload;\n\t[InternalCustomEvent.XHRInterception]: InterceptionPayload;\n\t[InternalCustomEvent.DrawerStateChange]: { state: WidgetViewState };\n\t[InternalCustomEvent.WidgetInitialization]: WidgetConfiguration;\n\t[ExternalCustomEvent.DrawerOpen]: undefined;\n\t[ExternalCustomEvent.DrawerClose]: undefined;\n\t[ExternalCustomEvent.DrawerToggle]: undefined;\n\t[ExternalCustomEvent.CalculationRefetch]: undefined;\n\t[ExternalCustomEvent.CartRefetch]: undefined;\n\t[ExternalCustomEvent.CartAndCalculationRefetch]: undefined;\n\t[ExternalCustomEvent.DrawerOpenAndRefetch]: undefined;\n};\n\n// Subscribe function with typed event name and payload\nfunction subscribe<K extends keyof CustomEventPayloadMap>(\n\teventName: K,\n\tcallback: (event: CustomEvent<CustomEventPayloadMap[K]>) => void\n): () => void {\n\tconst handler = (event: CustomEvent<CustomEventPayloadMap[K]>) =>\n\t\tcallback(event);\n\tdocument.addEventListener(eventName, handler as EventListener);\n\treturn () => {\n\t\tdocument.removeEventListener(eventName, handler as EventListener);\n\t};\n}\n\n// Publish function with typed event name and payload\nfunction publish<K extends InternalCustomEvent>(\n\teventName: K,\n\t...args: K extends keyof CustomEventPayloadMap\n\t\t? [detail: CustomEventPayloadMap[K]]\n\t\t: [detail?: undefined]\n): void {\n\tconst event = new CustomEvent(eventName, {\n\t\tdetail: args[0]\n\t});\n\tdocument.dispatchEvent(event);\n}\n\n// Unsubscribe function\nfunction unsubscribe<K extends keyof CustomEventPayloadMap>(\n\teventName: K,\n\tcallback: (event: CustomEvent<CustomEventPayloadMap[K]>) => void\n): void {\n\tdocument.removeEventListener(eventName, callback as EventListener);\n}\n\n// Exported object\nconst customEvents = {\n\tsubscribe,\n\tpublish,\n\tunsubscribe\n};\n\nexport default customEvents;\n","import { Messages } from \"use-intl\";\nimport { WIDGET_BASE_URL } from \"../constants\";\nimport { logger } from \"./logger\";\n\nexport type Locale = string;\n\nexport const DEFAULT_LOCALE: Locale = \"en\";\nexport const DEFAULT_CURRENCY: string = \"DKK\";\n\nexport async function loadMessages(\n\t...locales: Locale[]\n): Promise<{ messages: Messages; locale: Locale }> {\n\t// If no locales provided, use default\n\tconst localesList = locales.length > 0 ? locales : [DEFAULT_LOCALE];\n\n\tfor (const locale of localesList) {\n\t\ttry {\n\t\t\tconst response = await fetch(\n\t\t\t\t`${WIDGET_BASE_URL}/messages/${locale}.json`\n\t\t\t);\n\t\t\tif (response.ok) {\n\t\t\t\tconst messages = await response.json();\n\t\t\t\treturn { messages, locale };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error(`Error loading messages for locale ${locale}:`, error);\n\t\t}\n\t}\n\n\t// If all locales fail, throw an error\n\tthrow new Error(\n\t\t`No messages found for any of the locales: ${localesList.join(\", \")}`\n\t);\n}\n","const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 && process.versions.undici;\n};\nfunction randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\nfunction createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = void 0,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : void 0;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n let querySerializer = typeof globalQuerySerializer === \"function\" ? globalQuerySerializer : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer = typeof requestQuerySerializer === \"function\" ? requestQuerySerializer : createQuerySerializer({\n ...typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {},\n ...requestQuerySerializer\n });\n }\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const serializedBody = body === void 0 ? void 0 : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header)\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === void 0 || // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData ? {} : {\n \"Content-Type\": \"application/json\"\n },\n baseHeaders,\n headers,\n params.header\n );\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders\n };\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit\n );\n let response;\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n if (finalMiddlewares.length) {\n id = randomID();\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n if (!response) {\n try {\n response = await fetch(request, requestInitExt);\n } catch (error2) {\n let errorAfterMiddleware = error2;\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (result instanceof Response) {\n errorAfterMiddleware = void 0;\n response = result;\n break;\n }\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n const contentLength = response.headers.get(\"Content-Length\");\n if (response.status === 204 || request.method === \"HEAD\" || contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\")) {\n return response.ok ? { data: void 0, response } : { error: void 0, response };\n }\n if (response.ok) {\n const getResponseData = async () => {\n if (parseAs === \"stream\") {\n return response.body;\n }\n if (parseAs === \"json\" && !contentLength) {\n const raw = await response.text();\n return raw ? JSON.parse(raw) : void 0;\n }\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n let error = await response.text();\n try {\n error = JSON.parse(error);\n } catch {\n }\n return { error, response };\n }\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n }\n };\n}\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\nfunction wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n function Client() {\n }\n Client.prototype = proxy;\n const client = new Client();\n handler.client = client;\n return client;\n}\nfunction createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\nfunction serializePrimitiveParam(name, value, options) {\n if (value === void 0 || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren\\u2019t supported. Provide your own `querySerializer()` to handle these.\"\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\nfunction serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner = {\n simple: \",\",\n label: \".\",\n matrix: \";\"\n }[options.style] || \"&\";\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final2 = values.join(\",\");\n switch (options.style) {\n case \"form\": {\n return `${name}=${final2}`;\n }\n case \"label\": {\n return `.${final2}`;\n }\n case \"matrix\": {\n return `;${name}=${final2}`;\n }\n default: {\n return final2;\n }\n }\n }\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\nfunction serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n if (options.explode === false) {\n const joiner2 = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner2);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${values.join(joiner)}` : values.join(joiner);\n}\nfunction createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === void 0 || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false\n })\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false\n })\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\nfunction defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\nfunction defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType = headers.get instanceof Function ? headers.get(\"Content-Type\") ?? headers.get(\"content-type\") : headers[\"Content-Type\"] ?? headers[\"content-type\"];\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\nfunction createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\nfunction mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== void 0) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\nfunction removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n\nexport { createFinalURL, createPathBasedClient, createQuerySerializer, createClient as default, defaultBodySerializer, defaultPathSerializer, mergeHeaders, randomID, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient };\n//# sourceMappingURL=index.mjs.map\n","// lib/api-client.ts\nimport createClient from \"openapi-fetch\";\nimport type { paths } from \"../../lib/types/schema\";\nimport { API_URL } from \"../constants\";\n\ntype ApiPath = keyof paths;\nexport type HttpMethod =\n\t| \"get\"\n\t| \"put\"\n\t| \"post\"\n\t| \"delete\"\n\t| \"options\"\n\t| \"head\"\n\t| \"patch\"\n\t| \"trace\";\ntype ApiMethod<Path extends ApiPath> = Extract<keyof paths[Path], HttpMethod>;\n\n// Request parameter types\ntype ApiQueryParams<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { query?: infer Q } } ? Q : never;\n\ntype ApiPathParams<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { path?: infer P } } ? P : never;\n\ntype ApiHeaders<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { header?: infer H } }\n\t? H\n\t: never;\n\ntype ApiRequestBody<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends {\n\trequestBody?: { content: { \"application/json\": infer B } };\n}\n\t? B\n\t: never;\n\n// Response types\ntype SuccessStatus = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;\ntype JsonContent<T> = T extends { content: { \"application/json\": infer R } }\n\t? R\n\t: never;\ntype SuccessJson<Responses> =\n\tResponses extends Record<number, unknown>\n\t\t? {\n\t\t\t\t[K in Extract<keyof Responses, SuccessStatus>]: JsonContent<\n\t\t\t\t\tResponses[K]\n\t\t\t\t>;\n\t\t\t}[Extract<keyof Responses, SuccessStatus>]\n\t\t: never;\n\ntype ApiResponse<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends {\n\tresponses: infer R;\n}\n\t? SuccessJson<R>\n\t: never;\n\ntype ApiResponseObject<Path extends ApiPath, Method extends ApiMethod<Path>> =\n\tApiResponse<Path, Method> extends { responseObject?: infer O } ? O : never;\n\ntype ApiErrorResponse<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>,\n\tStatusCode extends number = 400\n> = paths[Path][Method] extends {\n\tresponses: {\n\t\t[K in StatusCode]: { content: { \"application/json\": infer E } };\n\t};\n}\n\t? E\n\t: never;\n\nconst api = createClient<paths>({\n\tbaseUrl: API_URL,\n\theaders: {\n\t\t\"Content-Type\": \"application/json\"\n\t}\n});\n\n// Export the API client instance\nexport default api;\n\n// Export utility types\nexport type {\n\tApiErrorResponse,\n\tApiHeaders,\n\tApiMethod,\n\tApiPath,\n\tApiPathParams,\n\tApiQueryParams,\n\tApiRequestBody,\n\tApiResponse,\n\tApiResponseObject\n};\n","import { SETTINGS_SCRIPT_ID } from \"../../constants\";\nimport api from \"../api-client\";\nimport { Locale } from \"../i18n\";\nimport { logger } from \"../logger\";\nimport {\n\tRemoteWidgetSettingsResponse,\n\tResolvedWidgetSettings,\n\tUnresolvedWidgetSettings\n} from \"./types\";\n\nexport async function getWidgetSettings({\n\tlocale,\n\tslug,\n\tisFirstLoad = false\n}: {\n\tlocale: Locale;\n\tslug: string | undefined;\n\tisFirstLoad: boolean;\n}): Promise<ResolvedWidgetSettings | null> {\n\tlet settings: ResolvedWidgetSettings | null = getSettingsFromScript(locale);\n\n\tif (!settings) {\n\t\tconst remoteSettings = await getRemoteSettings({\n\t\t\tlocale,\n\t\t\tslug,\n\t\t\tshouldUseCachedResult: !isFirstLoad\n\t\t});\n\t\tif (remoteSettings) {\n\t\t\tlogger.info(\"Using remote settings:\", remoteSettings);\n\t\t\tsettings = remoteSettings;\n\t\t} else {\n\t\t\tlogger.warn(\"No settings found in script or remotely\");\n\t\t}\n\t}\n\n\treturn settings;\n}\n\nfunction getSettingsFromScript(locale: Locale): ResolvedWidgetSettings | null {\n\tconst scriptElement = document.getElementById(\n\t\tSETTINGS_SCRIPT_ID\n\t) as HTMLScriptElement | null;\n\n\tif (!scriptElement) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst settings: UnresolvedWidgetSettings = JSON.parse(\n\t\t\tscriptElement.innerHTML\n\t\t);\n\n\t\tconst localizedMessages = settings.translations?.messages?.[locale];\n\n\t\t// Translations in the Shopify metafield are formatted as { \"messages\": { \"en\": { \"key\": \"value\" } } }\n\t\t// We only need the messages within the current locale, so we extract those and format them as { \"key\": \"value\" } before returning the settings\n\t\tconst formattedMessages = localizedMessages\n\t\t\t? { messages: localizedMessages }\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\t...settings,\n\t\t\ttranslations: formattedMessages\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to parse widget settings JSON\", error);\n\t\treturn null;\n\t}\n}\n\nasync function getRemoteSettings({\n\tlocale,\n\tslug,\n\tshouldUseCachedResult = true\n}: {\n\tlocale: Locale;\n\tslug: string | undefined;\n\tshouldUseCachedResult?: boolean;\n}): Promise<RemoteWidgetSettingsResponse | null> {\n\tif (!slug) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst configResponse = await api.GET(\"/shop-overlay/config\", {\n\t\t\tparams: {\n\t\t\t\tquery: { locale, slug }\n\t\t\t},\n\t\t\tclientStorage: {\n\t\t\t\tkey: `remote_settings_${slug}_${locale}`,\n\t\t\t\ttype: \"sessionStorage\",\n\t\t\t\tshouldUseCachedResult\n\t\t\t}\n\t\t});\n\n\t\tconst responseObject = configResponse.data?.responseObject;\n\t\tif (configResponse.error || !responseObject) {\n\t\t\tlogger.error(\n\t\t\t\t\"Error response from config endpoint:\",\n\t\t\t\tconfigResponse.error ?? \"No data returned\"\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\treturn responseObject;\n\t} catch (error) {\n\t\tlogger.error(`Error fetching remote settings for locale ${locale}:`, error);\n\t\treturn null;\n\t}\n}\n","import { SEARCH_PARAM_ID_NAME } from \"../../constants\";\nimport deepClone, {\n\tgetResolvedSearchParams,\n\tisNil,\n\tisNumber,\n\tsetNestedValue\n} from \"../helpers\";\nimport { DEFAULT_CURRENCY, DEFAULT_LOCALE, loadMessages } from \"../i18n\";\nimport { logger } from \"../logger\";\nimport { getSessionCache } from \"../session\";\nimport storage, {\n\tSTORAGE_DEBUG_MODE_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"../storage\";\nimport { getWidgetSettings } from \"./settings\";\nimport { InitResult, ModuleInitOptions, WidgetConfiguration } from \"./types\";\n\nexport function isDOMStringMap(\n\tvalue: DOMStringMap | ModuleInitOptions\n): value is DOMStringMap {\n\treturn (\n\t\t(typeof DOMStringMap !== \"undefined\" && value instanceof DOMStringMap) ||\n\t\tObject.prototype.toString.call(value) === \"[object DOMStringMap]\"\n\t);\n}\n\n// Get and parse dataset options from the script element\nexport function parseScriptDataset(dataset: DOMStringMap): ModuleInitOptions {\n\tconst datasetRecord: Record<PropertyKey, unknown> = {};\n\n\tObject.entries(dataset).forEach(([key, value]) => {\n\t\tif (isNil(value)) return value;\n\n\t\tlet resolvedValue: unknown = value;\n\n\t\tif (value === \"true\") {\n\t\t\tresolvedValue = true;\n\t\t} else if (value === \"false\") {\n\t\t\tresolvedValue = false;\n\t\t} else if (isNumber(value)) {\n\t\t\tresolvedValue = Number(value);\n\t\t} else if (value === \"null\") {\n\t\t\tresolvedValue = null;\n\t\t} else if (value === \"undefined\") {\n\t\t\tresolvedValue = undefined;\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tresolvedValue = JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\t// Keep as string if JSON parsing fails\n\t\t\t}\n\t\t}\n\n\t\tdatasetRecord[key] = resolvedValue;\n\t});\n\n\treturn datasetRecord;\n}\n\nfunction determineDebugMode({\n\toptions,\n\tsearchParams\n}: {\n\toptions: ModuleInitOptions;\n\tsearchParams: URLSearchParams;\n}) {\n\tconst isDevEnvironment =\n\t\toptions.env === \"development\" || options.env === \"test\";\n\tconst hasDebugParameter = searchParams.get(\"debug\") === \"true\";\n\n\tconst storedDebugModeValue = storage.get<boolean>(STORAGE_DEBUG_MODE_KEY);\n\n\tif (isDevEnvironment || hasDebugParameter) {\n\t\tstorage.set(STORAGE_DEBUG_MODE_KEY, true);\n\t}\n\n\tconst isDebugModeEnabled = Boolean(\n\t\tisDevEnvironment || hasDebugParameter || storedDebugModeValue\n\t);\n\n\treturn isDebugModeEnabled;\n}\n\nexport async function prepareInitializationOptions(\n\tdataset: DOMStringMap | ModuleInitOptions\n): Promise<InitResult> {\n\tconst options = isDOMStringMap(dataset)\n\t\t? parseScriptDataset(dataset)\n\t\t: dataset;\n\n\tconst searchParams = getResolvedSearchParams();\n\n\tconst searchParamsId = searchParams.get(SEARCH_PARAM_ID_NAME);\n\tconst isFirstLoad = Boolean(searchParamsId);\n\n\tconst internalId = searchParamsId || storage.get(STORAGE_SESSION_KEY);\n\n\tif (!internalId) {\n\t\tconst message = \"Session ID is missing from URL and storage\";\n\t\tlogger.warn(message);\n\t\treturn { success: false, reason: \"MISSING_SESSION_ID\", message };\n\t}\n\n\tconst isDebugModeEnabled = determineDebugMode({ options, searchParams });\n\n\tconst cache = await getSessionCache(internalId);\n\n\tif (!cache) {\n\t\tconst message = `No session cache found for id: ${internalId}`;\n\t\tlogger.warn(message);\n\t\treturn { success: false, reason: \"SESSION_NOT_FOUND\", message };\n\t}\n\n\tconst resolvedCurrency =\n\t\tcache.data.currency || options.defaultCurrency || DEFAULT_CURRENCY;\n\n\tconst localesList = [\n\t\tcache.data.locale,\n\t\toptions.defaultLocale,\n\t\tDEFAULT_LOCALE\n\t].filter(val => val !== undefined);\n\n\tconst { locale: resolvedLocale, messages } = await loadMessages(\n\t\t...localesList\n\t);\n\n\tconst settings = await getWidgetSettings({\n\t\tlocale: resolvedLocale,\n\t\tslug: cache.data.slug,\n\t\tisFirstLoad\n\t});\n\n\tconst customMessages = deepClone(settings?.translations?.messages);\n\n\tif (customMessages) {\n\t\tlogger.info(\"Merging custom translations into messages...\");\n\t\tObject.entries(customMessages).forEach(([key, value]) => {\n\t\t\ttry {\n\t\t\t\tsetNestedValue(messages, key, value);\n\t\t\t} catch (error) {\n\t\t\t\tlogger.warn(`Skipping unknown custom translation key \"${key}\"`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tconst config: WidgetConfiguration = {\n\t\tlocale: resolvedLocale,\n\t\tcurrency: resolvedCurrency,\n\t\tdebugMode: isDebugModeEnabled,\n\t\tisFirstLoad,\n\t\tmessages,\n\t\toptions,\n\t\ttheme: settings?.theme ?? null,\n\t\t...cache\n\t};\n\n\treturn { success: true, config };\n}\n","import api, { ApiRequestBody, ApiResponseObject } from \"./api-client\";\nimport { logger } from \"./logger\";\n\nexport interface SessionExchangeItem {\n\tvariantId: number;\n\thandle: string;\n\tprice: number;\n\ttitle: string;\n\tvariantTitle: string;\n\timage: string;\n\tquantity: number;\n}\n\nexport type SessionPayload = ApiRequestBody<\n\t\"/userflow/session/{id}\",\n\t\"post\"\n>[\"data\"];\n\nexport type SessionPatchPayload = ApiRequestBody<\n\t\"/userflow/session/{id}\",\n\t\"patch\"\n>[\"data\"];\n\nexport interface SessionMetadata {\n\tcreatedAt: string; // ISO date string\n\tupdatedAt: string; // ISO date string\n\tttl: number; // Time to live in seconds\n}\n\nexport type SessionCache = NonNullable<\n\tApiResponseObject<\"/userflow/session/{id}\", \"get\">\n>;\n\nexport async function updateSessionCache(\n\tinternalId: string,\n\tdata: SessionPatchPayload\n) {\n\ttry {\n\t\tlogger.info(\"Setting session cache for internalId:\", internalId, data);\n\t\tconst response = await api.PATCH(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } },\n\t\t\tbody: { data }\n\t\t});\n\n\t\tlogger.info(\"Session cache set successfully:\", response);\n\n\t\treturn response.data?.responseObject;\n\t} catch (error) {\n\t\tlogger.error(\"Error setting session cache:\", error);\n\t\tthrow error;\n\t}\n}\n\nexport async function getSessionCache(\n\tinternalId?: string\n): Promise<SessionCache | null> {\n\tif (!internalId) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst response = await api.GET(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } }\n\t\t});\n\n\t\tlogger.info(\"Session cache retrieved successfully:\", response);\n\n\t\treturn response.data?.responseObject ?? null;\n\t} catch (error) {\n\t\tlogger.error(\"Error getting session cache:\", error);\n\t\treturn null;\n\t}\n}\n\nexport async function clearSessionCache(internalId: string) {\n\ttry {\n\t\treturn await api.DELETE(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } }\n\t\t});\n\t} catch (error) {\n\t\tlogger.error(\"Error clearing session cache:\", error);\n\t\tthrow error;\n\t}\n}\n","import { logger } from \"../logger\";\n\ntype InjectFontReturn = Promise<\n\t[HTMLLinkElement, HTMLLinkElement, HTMLLinkElement]\n>;\n\n// Function responsible for injecting font styles into the document head\nexport function injectFont(): InjectFontReturn {\n\treturn new Promise((resolve, reject) => {\n\t\t// Preconnect to the font provider\n\t\tconst preconnect = createSafeLinkElement({\n\t\t\trel: \"preconnect\",\n\t\t\thref: \"https://fonts.googleapis.com\"\n\t\t});\n\n\t\t// Preconnect to the font provider (gstatic)\n\t\tconst preconnect2 = createSafeLinkElement({\n\t\t\trel: \"preconnect\",\n\t\t\thref: \"https://fonts.gstatic.com\",\n\t\t\tcrossOrigin: \"anonymous\"\n\t\t});\n\n\t\tconst fontLink = createSafeLinkElement({\n\t\t\trel: \"stylesheet\",\n\t\t\thref: \"https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\"\n\t\t});\n\n\t\tfontLink.onload = () => {\n\t\t\tlogger.info(\"Font stylesheet loaded successfully\");\n\t\t\tresolve([preconnect, preconnect2, fontLink]);\n\t\t};\n\t\tfontLink.onerror = () => {\n\t\t\tlogger.error(\"Failed to load font stylesheet\");\n\t\t\treject(new Error(\"Failed to load font stylesheet\"));\n\t\t};\n\n\t\tdocument.head.appendChild(fontLink);\n\t});\n}\n\n// Creates a link element only if a same link does not already exist in the document head\nfunction createSafeLinkElement<T extends Partial<HTMLLinkElement>>(\n\tattributes: T\n): HTMLLinkElement {\n\tconst selector = Object.entries(attributes)\n\t\t.filter(\n\t\t\t([_, value]) => typeof value === \"string\" || typeof value === \"number\"\n\t\t)\n\t\t.map(([key, value]) => `[${key}=\"${value}\"]`)\n\t\t.join(\"\");\n\n\tconst existing = document.querySelector<HTMLLinkElement>(`link${selector}`);\n\n\tif (existing) {\n\t\tlogger.warn(\n\t\t\t`Link element with attributes ${JSON.stringify(attributes)} already exists.`\n\t\t);\n\t\treturn existing;\n\t}\n\n\tconst link = document.createElement(\"link\");\n\tObject.assign(link, attributes);\n\tdocument.head.appendChild(link);\n\n\treturn link;\n}\n","import {\n\tCUSTOM_CSS_DATA_ATTR,\n\tresolveEnvVar,\n\tWIDGET_BASE_URL\n} from \"../../constants\";\nimport { logger } from \"../logger\";\n\n// Lightweight CSS validation without heavy parsing library\nexport function validateCSS(css: string): boolean {\n\t// Basic CSS validation - check for balanced braces and common patterns\n\tconst openBraces = (css.match(/{/g) || []).length;\n\tconst closeBraces = (css.match(/}/g) || []).length;\n\n\tif (openBraces !== closeBraces) {\n\t\treturn false;\n\t}\n\n\t// Check for dangerous patterns (script injection, etc.)\n\tconst dangerousPatterns = [\n\t\t/javascript:/gi,\n\t\t/expression\\s*\\(/gi,\n\t\t/behavior\\s*:/gi,\n\t\t/binding\\s*:/gi,\n\t\t/@import.*url\\s*\\(\\s*[\"']?javascript:/gi\n\t];\n\n\treturn !dangerousPatterns.some(pattern => pattern.test(css));\n}\n\nexport function injectCustomCSS(\n\tcss: string | undefined,\n\tcontainer: HTMLElement = document.head\n) {\n\tif (!css) return;\n\n\tif (!validateCSS(css)) {\n\t\tthrow new Error(\n\t\t\t\"Invalid CSS detected. Please check your CSS syntax and remove any dangerous patterns.\"\n\t\t);\n\t}\n\n\t// Create a style element and inject the custom CSS directly\n\tconst styleElement = document.createElement(\"style\");\n\tstyleElement.setAttribute(`data-${CUSTOM_CSS_DATA_ATTR}`, \"true\");\n\tstyleElement.textContent = css;\n\n\tlogger.info(\"Injecting custom CSS...\");\n\t// Append the style element to parent document body\n\tcontainer.appendChild(styleElement);\n\n\treturn styleElement;\n}\n\n// Dev-only: inject a Vite/Tailwind-compiled CSS string directly into the shadow\n// DOM, so newly added utility classes apply without rebuilding widget.css.\nexport function injectInlineStyle(\n\tshadowRoot: HTMLElement,\n\tcss: string\n): HTMLStyleElement {\n\tconst styleElement = document.createElement(\"style\");\n\tstyleElement.textContent = css;\n\tshadowRoot.appendChild(styleElement);\n\treturn styleElement;\n}\n\n// Function responsible for injecting the styles into the shadow DOM\nexport function injectStyle(shadowRoot: HTMLElement): HTMLLinkElement {\n\tconst link = document.createElement(\"link\");\n\tlink.rel = \"stylesheet\";\n\n\tconst fileName = resolveEnvVar(\"WIDGET_NAME\") || \"widget\";\n\tlink.href = `${WIDGET_BASE_URL}/${fileName}.css`;\n\n\tlink.onload = () => {\n\t\tlogger.info(\"Stylesheet loaded successfully\");\n\t};\n\n\tshadowRoot.appendChild(link);\n\n\treturn link;\n}\n\n// Function responsible for injecting public CSS variables into the document head\nexport function injectPublicVariables(): HTMLLinkElement {\n\tconst link = document.createElement(\"link\");\n\tlink.rel = \"stylesheet\";\n\n\tlink.href = `${WIDGET_BASE_URL}/variables.css`;\n\n\tlink.onload = () => {\n\t\tlogger.info(\"Public CSS variables loaded successfully\");\n\t};\n\n\tlink.onerror = () => {\n\t\tlogger.warn(\"Failed to load public CSS variables\");\n\t};\n\n\tdocument.head.appendChild(link);\n\n\treturn link;\n}\n","import { ComponentChild, render } from \"preact\";\nimport { CONTAINER_ELEMENT_ID, SHADOW_ROOT_ELEMENT_ID } from \"../../constants\";\nimport customEvents, { InternalCustomEvent } from \"../custom-events\";\nimport { logger } from \"../logger\";\nimport { prepareInitializationOptions } from \"./dataset\";\nimport { injectFont } from \"./font\";\nimport {\n\tinjectCustomCSS,\n\tinjectInlineStyle,\n\tinjectPublicVariables,\n\tinjectStyle\n} from \"./styles\";\nimport { InitResult, ModuleInitOptions, WidgetConfiguration } from \"./types\";\n\ntype ContainerElement = HTMLDivElement;\ntype ShadowRootElement = HTMLDivElement;\ntype ShadowRootResult =\n\t| { success: true; value: [ContainerElement, ShadowRootElement] }\n\t| { success: false; reason: \"CONTAINER_EXISTS\"; message: string };\n\nfunction createShadowRoot(): ShadowRootResult {\n\tconst existingContainer = document.getElementById(CONTAINER_ELEMENT_ID);\n\n\tif (existingContainer) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\treason: \"CONTAINER_EXISTS\",\n\t\t\tmessage: `Container with ID \"${CONTAINER_ELEMENT_ID}\" already exists`\n\t\t};\n\t}\n\n\tconst container = document.createElement(\"div\");\n\tcontainer.id = CONTAINER_ELEMENT_ID;\n\tcontainer.style.display = \"block\";\n\n\tconst shadow = container.attachShadow({ mode: \"closed\" });\n\tconst shadowRoot = document.createElement(\"div\");\n\n\tshadowRoot.className = \"rf-container\";\n\tshadowRoot.id = SHADOW_ROOT_ELEMENT_ID;\n\tshadowRoot.style.display = \"none\";\n\n\tshadow.appendChild(shadowRoot);\n\n\treturn { success: true, value: [container, shadowRoot] };\n}\n\ntype RenderNode = (config: WidgetConfiguration) => ComponentChild;\n\nfunction injectWidget(\n\trenderNode: RenderNode,\n\tshadowRoot: HTMLElement,\n\tconfig: WidgetConfiguration\n) {\n\tlogger.info(\"Injecting widget with options...\", config);\n\trender(renderNode(config), shadowRoot);\n}\n\nasync function initialize(\n\trenderNode: RenderNode,\n\toptions: DOMStringMap | ModuleInitOptions\n): Promise<InitResult> {\n\ttry {\n\t\tconst result = await prepareInitializationOptions(options);\n\n\t\tif (!result.success) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst containerResult = createShadowRoot();\n\t\tif (!containerResult.success) {\n\t\t\treturn containerResult;\n\t\t}\n\n\t\tconst [container, shadowRoot] = containerResult.value;\n\n\t\tconst { config } = result;\n\t\tconst {\n\t\t\toptions: { customCssOverlay, customCssPage }\n\t\t} = config;\n\n\t\tconst devStyles = \"devStyles\" in options ? options.devStyles : undefined;\n\t\tif (devStyles) {\n\t\t\tinjectInlineStyle(shadowRoot, devStyles);\n\t\t} else {\n\t\t\tinjectStyle(shadowRoot);\n\t\t}\n\t\tinjectPublicVariables();\n\t\tinjectFont();\n\t\tinjectCustomCSS(customCssPage);\n\t\tinjectCustomCSS(customCssOverlay, shadowRoot);\n\t\tinjectWidget(renderNode, shadowRoot, config);\n\n\t\tdocument.body.appendChild(container);\n\t\tcustomEvents.publish(InternalCustomEvent.WidgetInitialization, config);\n\n\t\treturn { success: true, config };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tlogger.error(\"Initialization failed\", err);\n\t\treturn { success: false, reason: \"UNKNOWN_ERROR\", message };\n\t}\n}\n\nexport type { InitResult };\nexport default initialize;\n","//#region packages/fast-memoize/index.ts\nfunction memoize(fn, options) {\n\tconst cache = options && options.cache ? options.cache : cacheDefault;\n\tconst serializer = options && options.serializer ? options.serializer : serializerDefault;\n\treturn (options && options.strategy ? options.strategy : strategyDefault)(fn, {\n\t\tcache,\n\t\tserializer\n\t});\n}\nfunction isPrimitive(value) {\n\treturn value == null || typeof value === \"number\" || typeof value === \"boolean\";\n}\nfunction monadic(fn, cache, serializer, arg) {\n\tconst cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.call(this, arg);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n\tconst args = Array.prototype.slice.call(arguments, 3);\n\tconst cacheKey = serializer(args);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.apply(this, args);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n\treturn strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n\tconst strategy = fn.length === 1 ? monadic : variadic;\n\treturn assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n\treturn assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n\treturn assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\nconst serializerDefault = function() {\n\treturn JSON.stringify(arguments);\n};\nvar ObjectWithoutPrototypeCache = class {\n\tconstructor() {\n\t\tthis.cache = Object.create(null);\n\t}\n\tget(key) {\n\t\treturn this.cache[key];\n\t}\n\tset(key, value) {\n\t\tthis.cache[key] = value;\n\t}\n};\nconst cacheDefault = { create: function create() {\n\treturn new ObjectWithoutPrototypeCache();\n} };\nconst strategies = {\n\tvariadic: strategyVariadic,\n\tmonadic: strategyMonadic\n};\n//#endregion\nexport { memoize, strategies };\n\n//# sourceMappingURL=index.js.map","import{memoize as e,strategies as t}from\"@formatjs/fast-memoize\";class a extends Error{constructor(e,t){let a=e;t&&(a+=\": \"+t),super(a),this.code=e,t&&(this.originalMessage=t)}}var r=function(e){return e.MISSING_MESSAGE=\"MISSING_MESSAGE\",e.MISSING_FORMAT=\"MISSING_FORMAT\",e.ENVIRONMENT_FALLBACK=\"ENVIRONMENT_FALLBACK\",e.INSUFFICIENT_PATH=\"INSUFFICIENT_PATH\",e.INVALID_MESSAGE=\"INVALID_MESSAGE\",e.INVALID_KEY=\"INVALID_KEY\",e.FORMATTING_ERROR=\"FORMATTING_ERROR\",e}(r||{});function s(){return{dateTime:{},number:{},message:{},relativeTime:{},pluralRules:{},list:{},displayNames:{}}}function i(a,r){return e(a,{cache:(s=r,{create:()=>({get:e=>s[e],set(e,t){s[e]=t}})}),strategy:t.variadic});var s}function I(e,t){return i(((...t)=>new e(...t)),t)}function l(e){return{getDateTimeFormat:I(Intl.DateTimeFormat,e.dateTime),getNumberFormat:I(Intl.NumberFormat,e.number),getPluralRules:I(Intl.PluralRules,e.pluralRules),getRelativeTimeFormat:I(Intl.RelativeTimeFormat,e.relativeTime),getListFormat:I(Intl.ListFormat,e.list),getDisplayNames:I(Intl.DisplayNames,e.displayNames)}}export{a as I,r as a,s as b,l as c,i as m};\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,x(u)&&o({t:u})},[n,e,t]),h(function(){return x(u)&&o({t:u}),n(function(){x(u)&&o({t:u})})},[n]),e}function x(n){var t,e,r=n.u,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}function R(n){n()}function w(n){return n}function k(){return[!1,R]}var I=s;function N(n,t){this.props=n,this.context=t}function M(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(N.prototype=new n).isPureReactComponent=!0,N.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var L=function(n,t){return null==n?null:r(r(n).map(t))},O={map:L,forEach:L,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},F=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);F(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return t(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;function rn(){}function un(){return this.cancelBubble}function on(){return this.defaultPrevented}e.event=function(n){return en&&(n=en(n)),n.persist=rn,n.isPropagationStopped=un,n.isDefaultPrevented=on,n.nativeEvent=n};var ln,cn={enumerable:!1,configurable:!0,get:function(){return this.class}},fn=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",cn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,fn&&fn(n)};var an=e.__r;e.__r=function(n){an&&an(n),ln=n.__c};var sn=e.diffed;e.diffed=function(n){sn&&sn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),ln=null};var hn={ReactCurrentDispatcher:{current:{readContext:function(n){return ln.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},vn=\"18.3.1\";function dn(n){return t.bind(null,n)}function mn(n){return!!n&&n.$$typeof===q}function pn(n){return mn(n)&&n.type===u}function yn(n){return!!n&&!!n.displayName&&(\"string\"==typeof n.displayName||n.displayName instanceof String)&&n.displayName.startsWith(\"Memo(\")}function _n(n){return mn(n)?f.apply(null,arguments):n}function bn(n){return!!n.__k&&(o(null,n),!0)}function Sn(n){return n&&(n.base||1===n.nodeType&&n)||null}var gn=function(n,t){return n(t)},En=function(n,t){return n(t)},Cn=u,xn=mn,Rn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:R,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:O,render:nn,hydrate:tn,unmountComponentAtNode:bn,createPortal:$,createElement:t,createContext:l,createFactory:dn,cloneElement:_n,createRef:c,Fragment:u,isValidElement:mn,isElement:xn,isFragment:pn,isMemo:yn,findDOMNode:Sn,Component:n,PureComponent:N,memo:M,forwardRef:D,flushSync:En,unstable_batchedUpdates:gn,StrictMode:Cn,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:hn};export{O as Children,N as PureComponent,Cn as StrictMode,P as Suspense,B as SuspenseList,hn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_n as cloneElement,dn as createFactory,$ as createPortal,Rn as default,Sn as findDOMNode,En as flushSync,D as forwardRef,tn as hydrate,xn as isElement,pn as isFragment,yn as isMemo,mn as isValidElement,z as lazy,M as memo,nn as render,R as startTransition,bn as unmountComponentAtNode,gn as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,vn as version};\n//# sourceMappingURL=compat.module.js.map\n","//#region packages/icu-skeleton-parser/date-time.ts\n/**\n* https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n* with some tweaks\n*/\nconst DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n* Parse Date time skeleton into Intl.DateTimeFormatOptions\n* Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* @public\n* @param skeleton skeleton string\n*/\nfunction parseDateTimeSkeleton(skeleton) {\n\tconst result = {};\n\tskeleton.replace(DATE_TIME_REGEX, (match) => {\n\t\tconst len = match.length;\n\t\tswitch (match[0]) {\n\t\t\tcase \"G\":\n\t\t\t\tresult.era = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"y\":\n\t\t\t\tresult.year = len === 2 ? \"2-digit\" : \"numeric\";\n\t\t\t\tbreak;\n\t\t\tcase \"Y\":\n\t\t\tcase \"u\":\n\t\t\tcase \"U\":\n\t\t\tcase \"r\": throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");\n\t\t\tcase \"q\":\n\t\t\tcase \"Q\": throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tresult.month = [\n\t\t\t\t\t\"numeric\",\n\t\t\t\t\t\"2-digit\",\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\"\n\t\t\t\t][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"w\":\n\t\t\tcase \"W\": throw new RangeError(\"`w/W` (week) patterns are not supported\");\n\t\t\tcase \"d\":\n\t\t\t\tresult.day = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\tcase \"g\": throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");\n\t\t\tcase \"E\":\n\t\t\t\tresult.weekday = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"e\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 4];\n\t\t\t\tbreak;\n\t\t\tcase \"c\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 4];\n\t\t\t\tbreak;\n\t\t\tcase \"a\":\n\t\t\t\tresult.hour12 = true;\n\t\t\t\tbreak;\n\t\t\tcase \"b\":\n\t\t\tcase \"B\": throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");\n\t\t\tcase \"h\":\n\t\t\t\tresult.hourCycle = \"h12\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\tresult.hourCycle = \"h23\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"K\":\n\t\t\t\tresult.hourCycle = \"h11\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"k\":\n\t\t\t\tresult.hourCycle = \"h24\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"j\":\n\t\t\tcase \"J\":\n\t\t\tcase \"C\": throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");\n\t\t\tcase \"m\":\n\t\t\t\tresult.minute = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"s\":\n\t\t\t\tresult.second = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\tcase \"A\": throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");\n\t\t\tcase \"z\":\n\t\t\t\tresult.timeZoneName = len < 4 ? \"short\" : \"long\";\n\t\t\t\tbreak;\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\": throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\");\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-skeleton-parser-regex.js\nconst WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n//#endregion\n//#region packages/icu-skeleton-parser/number.ts\nfunction parseNumberSkeletonFromString(skeleton) {\n\tif (skeleton.length === 0) throw new Error(\"Number skeleton cannot be empty\");\n\tconst stringTokens = skeleton.split(WHITE_SPACE_REGEX).filter((x) => x.length > 0);\n\tconst tokens = [];\n\tfor (const stringToken of stringTokens) {\n\t\tlet stemAndOptions = stringToken.split(\"/\");\n\t\tif (stemAndOptions.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\tconst [stem, ...options] = stemAndOptions;\n\t\tfor (const option of options) if (option.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\ttokens.push({\n\t\t\tstem,\n\t\t\toptions\n\t\t});\n\t}\n\treturn tokens;\n}\nfunction icuUnitToEcma(unit) {\n\treturn unit.replace(/^(.*?)-/, \"\");\n}\nconst FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nconst SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nconst INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nconst CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n\tconst result = {};\n\tif (str[str.length - 1] === \"r\") result.roundingPriority = \"morePrecision\";\n\telse if (str[str.length - 1] === \"s\") result.roundingPriority = \"lessPrecision\";\n\tstr.replace(SIGNIFICANT_PRECISION_REGEX, function(_, g1, g2) {\n\t\tif (typeof g2 !== \"string\") {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length;\n\t\t} else if (g2 === \"+\") result.minimumSignificantDigits = g1.length;\n\t\telse if (g1[0] === \"#\") result.maximumSignificantDigits = g1.length;\n\t\telse {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length + (typeof g2 === \"string\" ? g2.length : 0);\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\nfunction parseSign(str) {\n\tswitch (str) {\n\t\tcase \"sign-auto\": return { signDisplay: \"auto\" };\n\t\tcase \"sign-accounting\":\n\t\tcase \"()\": return { currencySign: \"accounting\" };\n\t\tcase \"sign-always\":\n\t\tcase \"+!\": return { signDisplay: \"always\" };\n\t\tcase \"sign-accounting-always\":\n\t\tcase \"()!\": return {\n\t\t\tsignDisplay: \"always\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-except-zero\":\n\t\tcase \"+?\": return { signDisplay: \"exceptZero\" };\n\t\tcase \"sign-accounting-except-zero\":\n\t\tcase \"()?\": return {\n\t\t\tsignDisplay: \"exceptZero\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-never\":\n\t\tcase \"+_\": return { signDisplay: \"never\" };\n\t}\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n\tlet result;\n\tif (stem[0] === \"E\" && stem[1] === \"E\") {\n\t\tresult = { notation: \"engineering\" };\n\t\tstem = stem.slice(2);\n\t} else if (stem[0] === \"E\") {\n\t\tresult = { notation: \"scientific\" };\n\t\tstem = stem.slice(1);\n\t}\n\tif (result) {\n\t\tconst signDisplay = stem.slice(0, 2);\n\t\tif (signDisplay === \"+!\") {\n\t\t\tresult.signDisplay = \"always\";\n\t\t\tstem = stem.slice(2);\n\t\t} else if (signDisplay === \"+?\") {\n\t\t\tresult.signDisplay = \"exceptZero\";\n\t\t\tstem = stem.slice(2);\n\t\t}\n\t\tif (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) throw new Error(\"Malformed concise eng/scientific notation\");\n\t\tresult.minimumIntegerDigits = stem.length;\n\t}\n\treturn result;\n}\nfunction parseNotationOptions(opt) {\n\tconst result = {};\n\tconst signOpts = parseSign(opt);\n\tif (signOpts) return signOpts;\n\treturn result;\n}\n/**\n* https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n*/\nfunction parseNumberSkeleton(tokens) {\n\tlet result = {};\n\tfor (const token of tokens) {\n\t\tswitch (token.stem) {\n\t\t\tcase \"percent\":\n\t\t\tcase \"%\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tcontinue;\n\t\t\tcase \"%x100\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tresult.scale = 100;\n\t\t\t\tcontinue;\n\t\t\tcase \"currency\":\n\t\t\t\tresult.style = \"currency\";\n\t\t\t\tresult.currency = token.options[0];\n\t\t\t\tcontinue;\n\t\t\tcase \"group-off\":\n\t\t\tcase \",_\":\n\t\t\t\tresult.useGrouping = false;\n\t\t\t\tcontinue;\n\t\t\tcase \"precision-integer\":\n\t\t\tcase \".\":\n\t\t\t\tresult.maximumFractionDigits = 0;\n\t\t\t\tcontinue;\n\t\t\tcase \"measure-unit\":\n\t\t\tcase \"unit\":\n\t\t\t\tresult.style = \"unit\";\n\t\t\t\tresult.unit = icuUnitToEcma(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-short\":\n\t\t\tcase \"K\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-long\":\n\t\t\tcase \"KK\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scientific\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"scientific\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"engineering\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"engineering\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"notation-simple\":\n\t\t\t\tresult.notation = \"standard\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-narrow\":\n\t\t\t\tresult.currencyDisplay = \"narrowSymbol\";\n\t\t\t\tresult.unitDisplay = \"narrow\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-short\":\n\t\t\t\tresult.currencyDisplay = \"code\";\n\t\t\t\tresult.unitDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-full-name\":\n\t\t\t\tresult.currencyDisplay = \"name\";\n\t\t\t\tresult.unitDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-iso-code\":\n\t\t\t\tresult.currencyDisplay = \"symbol\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scale\":\n\t\t\t\tresult.scale = parseFloat(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-floor\":\n\t\t\t\tresult.roundingMode = \"floor\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-ceiling\":\n\t\t\t\tresult.roundingMode = \"ceil\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-down\":\n\t\t\t\tresult.roundingMode = \"trunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-up\":\n\t\t\t\tresult.roundingMode = \"expand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-even\":\n\t\t\t\tresult.roundingMode = \"halfEven\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-down\":\n\t\t\t\tresult.roundingMode = \"halfTrunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-up\":\n\t\t\t\tresult.roundingMode = \"halfExpand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"integer-width\":\n\t\t\t\tif (token.options.length > 1) throw new RangeError(\"integer-width stems only accept a single optional option\");\n\t\t\t\ttoken.options[0].replace(INTEGER_WIDTH_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\t\tif (g1) result.minimumIntegerDigits = g2.length;\n\t\t\t\t\telse if (g3 && g4) throw new Error(\"We currently do not support maximum integer digits\");\n\t\t\t\t\telse if (g5) throw new Error(\"We currently do not support exact integer digits\");\n\t\t\t\t\treturn \"\";\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t}\n\t\tif (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n\t\t\tresult.minimumIntegerDigits = token.stem.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (FRACTION_PRECISION_REGEX.test(token.stem)) {\n\t\t\tif (token.options.length > 1) throw new RangeError(\"Fraction-precision stems only accept a single optional option\");\n\t\t\ttoken.stem.replace(FRACTION_PRECISION_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\tif (g2 === \"*\") result.minimumFractionDigits = g1.length;\n\t\t\t\telse if (g3 && g3[0] === \"#\") result.maximumFractionDigits = g3.length;\n\t\t\t\telse if (g4 && g5) {\n\t\t\t\t\tresult.minimumFractionDigits = g4.length;\n\t\t\t\t\tresult.maximumFractionDigits = g4.length + g5.length;\n\t\t\t\t} else {\n\t\t\t\t\tresult.minimumFractionDigits = g1.length;\n\t\t\t\t\tresult.maximumFractionDigits = g1.length;\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t});\n\t\t\tconst opt = token.options[0];\n\t\t\tif (opt === \"w\") result = {\n\t\t\t\t...result,\n\t\t\t\ttrailingZeroDisplay: \"stripIfInteger\"\n\t\t\t};\n\t\t\telse if (opt) result = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(opt)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tif (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(token.stem)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tconst signOpts = parseSign(token.stem);\n\t\tif (signOpts) result = {\n\t\t\t...result,\n\t\t\t...signOpts\n\t\t};\n\t\tconst conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n\t\tif (conciseScientificAndEngineeringOpts) result = {\n\t\t\t...result,\n\t\t\t...conciseScientificAndEngineeringOpts\n\t\t};\n\t}\n\treturn result;\n}\n//#endregion\nexport { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString };\n\n//# sourceMappingURL=index.js.map","import { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString } from \"@formatjs/icu-skeleton-parser\";\n//#region packages/icu-messageformat-parser/error.ts\nlet ErrorKind = /* @__PURE__ */ function(ErrorKind) {\n\t/** Argument is unclosed (e.g. `{0`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n\t/** Argument is empty (e.g. `{}`). */\n\tErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n\t/** Argument is malformed (e.g. `{foo!}``) */\n\tErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n\t/** Expect an argument type (e.g. `{foo,}`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n\t/** Unsupported argument type (e.g. `{foo,foo}`) */\n\tErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n\t/** Expect an argument style (e.g. `{foo, number, }`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n\t/** The number skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n\t/** The date time skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n\t/** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n\t/** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n\t/** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n\t/** Missing select argument options (e.g. `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n\t/** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n\t/** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/**\n\t* Expecting a message fragment after the `plural` or `selectordinal` selector\n\t* (e.g. `{foo, plural, one}`)\n\t*/\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n\t/**\n\t* Duplicate selectors in `plural` or `selectordinal` argument.\n\t* (e.g. {foo, plural, one {#} one {#}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Duplicate selectors in `select` argument.\n\t* (e.g. {foo, select, apple {apple} apple {apple}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n\t/** Plural or select argument option must have `other` clause. */\n\tErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n\t/** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n\tErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n\t/** The tag name is invalid. (e.g. `<123>foo</123>`) */\n\tErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n\t/** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n\tErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n\t/** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n\treturn ErrorKind;\n}({});\n//#endregion\n//#region packages/icu-messageformat-parser/types.ts\nlet TYPE = /* @__PURE__ */ function(TYPE) {\n\t/**\n\t* Raw text\n\t*/\n\tTYPE[TYPE[\"literal\"] = 0] = \"literal\";\n\t/**\n\t* Variable w/o any format, e.g `var` in `this is a {var}`\n\t*/\n\tTYPE[TYPE[\"argument\"] = 1] = \"argument\";\n\t/**\n\t* Variable w/ number format\n\t*/\n\tTYPE[TYPE[\"number\"] = 2] = \"number\";\n\t/**\n\t* Variable w/ date format\n\t*/\n\tTYPE[TYPE[\"date\"] = 3] = \"date\";\n\t/**\n\t* Variable w/ time format\n\t*/\n\tTYPE[TYPE[\"time\"] = 4] = \"time\";\n\t/**\n\t* Variable w/ select format\n\t*/\n\tTYPE[TYPE[\"select\"] = 5] = \"select\";\n\t/**\n\t* Variable w/ plural format\n\t*/\n\tTYPE[TYPE[\"plural\"] = 6] = \"plural\";\n\t/**\n\t* Only possible within plural argument.\n\t* This is the `#` symbol that will be substituted with the count.\n\t*/\n\tTYPE[TYPE[\"pound\"] = 7] = \"pound\";\n\t/**\n\t* XML-like tag\n\t*/\n\tTYPE[TYPE[\"tag\"] = 8] = \"tag\";\n\treturn TYPE;\n}({});\nlet SKELETON_TYPE = /* @__PURE__ */ function(SKELETON_TYPE) {\n\tSKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n\tSKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n\treturn SKELETON_TYPE;\n}({});\n/**\n* Type Guards\n*/\nfunction isLiteralElement(el) {\n\treturn el.type === TYPE.literal;\n}\nfunction isArgumentElement(el) {\n\treturn el.type === TYPE.argument;\n}\nfunction isNumberElement(el) {\n\treturn el.type === TYPE.number;\n}\nfunction isDateElement(el) {\n\treturn el.type === TYPE.date;\n}\nfunction isTimeElement(el) {\n\treturn el.type === TYPE.time;\n}\nfunction isSelectElement(el) {\n\treturn el.type === TYPE.select;\n}\nfunction isPluralElement(el) {\n\treturn el.type === TYPE.plural;\n}\nfunction isPoundElement(el) {\n\treturn el.type === TYPE.pound;\n}\nfunction isTagElement(el) {\n\treturn el.type === TYPE.tag;\n}\nfunction isNumberSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === SKELETON_TYPE.number);\n}\nfunction isDateTimeSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === SKELETON_TYPE.dateTime);\n}\nfunction createLiteralElement(value) {\n\treturn {\n\t\ttype: TYPE.literal,\n\t\tvalue\n\t};\n}\nfunction createNumberElement(value, style) {\n\treturn {\n\t\ttype: TYPE.number,\n\t\tvalue,\n\t\tstyle\n\t};\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-messageformat-parser-regex.js\nconst SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+cldr.core@0.0.0/node_modules/@formatjs_generated/cldr.core/time-data.js\nconst timeData = {\n\t\"001\": [\"H\", \"h\"],\n\t\"419\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AD\": [\"H\", \"hB\"],\n\t\"AE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"AF\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"AG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AM\": [\"H\", \"hB\"],\n\t\"AO\": [\"H\", \"hB\"],\n\t\"AR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AS\": [\"h\", \"H\"],\n\t\"AT\": [\"H\", \"hB\"],\n\t\"AU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AW\": [\"H\", \"hB\"],\n\t\"AX\": [\"H\"],\n\t\"AZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"BE\": [\"H\", \"hB\"],\n\t\"BF\": [\"H\", \"hB\"],\n\t\"BG\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"BI\": [\"H\", \"h\"],\n\t\"BJ\": [\"H\", \"hB\"],\n\t\"BL\": [\"H\", \"hB\"],\n\t\"BM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BN\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"BO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"BQ\": [\"H\"],\n\t\"BR\": [\"H\", \"hB\"],\n\t\"BS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BT\": [\"h\", \"H\"],\n\t\"BW\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"BY\": [\"H\", \"h\"],\n\t\"BZ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CA\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"CC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CD\": [\"hB\", \"H\"],\n\t\"CF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CG\": [\"H\", \"hB\"],\n\t\"CH\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"CI\": [\"H\", \"hB\"],\n\t\"CK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CN\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"CO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CP\": [\"H\"],\n\t\"CR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CU\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CV\": [\"H\", \"hB\"],\n\t\"CW\": [\"H\", \"hB\"],\n\t\"CX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CZ\": [\"H\"],\n\t\"DE\": [\"H\", \"hB\"],\n\t\"DG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"DJ\": [\"h\", \"H\"],\n\t\"DK\": [\"H\"],\n\t\"DM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"DO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"DZ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EC\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EE\": [\"H\", \"hB\"],\n\t\"EG\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ER\": [\"h\", \"H\"],\n\t\"ES\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"ET\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"FI\": [\"H\"],\n\t\"FJ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"FM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FO\": [\"H\", \"h\"],\n\t\"FR\": [\"H\", \"hB\"],\n\t\"GA\": [\"H\", \"hB\"],\n\t\"GB\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GD\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GE\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"GF\": [\"H\", \"hB\"],\n\t\"GG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GH\": [\"h\", \"H\"],\n\t\"GI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GL\": [\"H\", \"h\"],\n\t\"GM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GN\": [\"H\", \"hB\"],\n\t\"GP\": [\"H\", \"hB\"],\n\t\"GQ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"GR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GT\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"GU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GW\": [\"H\", \"hB\"],\n\t\"GY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"HK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"HN\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"HR\": [\"H\", \"hB\"],\n\t\"HU\": [\"H\", \"h\"],\n\t\"IC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ID\": [\"H\"],\n\t\"IE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IL\": [\"H\", \"hB\"],\n\t\"IM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IN\": [\"h\", \"H\"],\n\t\"IO\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IQ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"IR\": [\"hB\", \"H\"],\n\t\"IS\": [\"H\"],\n\t\"IT\": [\"H\", \"hB\"],\n\t\"JE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"JM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"JO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"JP\": [\n\t\t\"H\",\n\t\t\"K\",\n\t\t\"h\"\n\t],\n\t\"KE\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"KG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KH\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\"\n\t],\n\t\"KI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KN\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KP\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KW\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"KY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KZ\": [\"H\", \"hB\"],\n\t\"LA\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LB\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"LC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LI\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"LR\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LS\": [\"h\", \"H\"],\n\t\"LT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"LU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"LV\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"LY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MC\": [\"H\", \"hB\"],\n\t\"MD\": [\"H\", \"hB\"],\n\t\"ME\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"MF\": [\"H\", \"hB\"],\n\t\"MG\": [\"H\", \"h\"],\n\t\"MH\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ML\": [\"H\"],\n\t\"MM\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"MN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MP\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MQ\": [\"H\", \"hB\"],\n\t\"MR\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MT\": [\"H\", \"h\"],\n\t\"MU\": [\"H\", \"h\"],\n\t\"MV\": [\"H\", \"h\"],\n\t\"MW\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MX\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MY\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"MZ\": [\"H\", \"hB\"],\n\t\"NA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NC\": [\"H\", \"hB\"],\n\t\"NE\": [\"H\"],\n\t\"NF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NI\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NL\": [\"H\", \"hB\"],\n\t\"NO\": [\"H\", \"h\"],\n\t\"NP\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"NR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"OM\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"PG\": [\"h\", \"H\"],\n\t\"PH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"PL\": [\"H\", \"h\"],\n\t\"PM\": [\"H\", \"hB\"],\n\t\"PN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"PR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PS\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PT\": [\"H\", \"hB\"],\n\t\"PW\": [\"h\", \"H\"],\n\t\"PY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"QA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"RE\": [\"H\", \"hB\"],\n\t\"RO\": [\"H\", \"hB\"],\n\t\"RS\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"RU\": [\"H\"],\n\t\"RW\": [\"H\", \"h\"],\n\t\"SA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SE\": [\"H\"],\n\t\"SG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SI\": [\"H\", \"hB\"],\n\t\"SJ\": [\"H\"],\n\t\"SK\": [\"H\"],\n\t\"SL\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SO\": [\"h\", \"H\"],\n\t\"SR\": [\"H\", \"hB\"],\n\t\"SS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ST\": [\"H\", \"hB\"],\n\t\"SV\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"SX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"TC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TD\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"TG\": [\"H\", \"hB\"],\n\t\"TH\": [\"H\", \"h\"],\n\t\"TJ\": [\"H\", \"h\"],\n\t\"TL\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"TM\": [\"H\", \"h\"],\n\t\"TN\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"TO\": [\"h\", \"H\"],\n\t\"TR\": [\"H\", \"hB\"],\n\t\"TT\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TW\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"TZ\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"UG\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"US\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"UY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"UZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"VA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"VC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"VG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VN\": [\"H\", \"h\"],\n\t\"VU\": [\"h\", \"H\"],\n\t\"WF\": [\"H\", \"hB\"],\n\t\"WS\": [\"h\", \"H\"],\n\t\"XK\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"YE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"YT\": [\"H\", \"hB\"],\n\t\"ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ZM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ZW\": [\"H\", \"h\"],\n\t\"af-ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ar-001\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ca-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"en-001\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-HK\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-IL\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"en-MY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"es-BR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-GQ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"fr-CA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gl-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gu-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"hi-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"it-CH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"it-IT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"kn-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ku-SY\": [\"H\", \"hB\"],\n\t\"ml-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"mr-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"pa-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ta-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"te-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"zu-ZA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t]\n};\n//#endregion\n//#region packages/icu-messageformat-parser/date-time-pattern-generator.ts\n/**\n* Returns the best matching date time pattern if a date time skeleton\n* pattern is provided with a locale. Follows the Unicode specification:\n* https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n* @param skeleton date time skeleton pattern that possibly includes j, J or C\n* @param locale\n*/\nfunction getBestPattern(skeleton, locale) {\n\tlet skeletonCopy = \"\";\n\tfor (let patternPos = 0; patternPos < skeleton.length; patternPos++) {\n\t\tconst patternChar = skeleton.charAt(patternPos);\n\t\tif (patternChar === \"j\") {\n\t\t\tlet extraLength = 0;\n\t\t\twhile (patternPos + 1 < skeleton.length && skeleton.charAt(patternPos + 1) === patternChar) {\n\t\t\t\textraLength++;\n\t\t\t\tpatternPos++;\n\t\t\t}\n\t\t\tlet hourLen = 1 + (extraLength & 1);\n\t\t\tlet dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n\t\t\tlet dayPeriodChar = \"a\";\n\t\t\tlet hourChar = getDefaultHourSymbolFromLocale(locale);\n\t\t\tif (hourChar == \"H\" || hourChar == \"k\") dayPeriodLen = 0;\n\t\t\twhile (dayPeriodLen-- > 0) skeletonCopy += dayPeriodChar;\n\t\t\twhile (hourLen-- > 0) skeletonCopy = hourChar + skeletonCopy;\n\t\t} else if (patternChar === \"J\") skeletonCopy += \"H\";\n\t\telse skeletonCopy += patternChar;\n\t}\n\treturn skeletonCopy;\n}\n/**\n* Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n* of the given `locale` to the corresponding time pattern.\n* @param locale\n*/\nfunction getDefaultHourSymbolFromLocale(locale) {\n\tlet hourCycle = locale.hourCycle;\n\tif (hourCycle === void 0 && locale.hourCycles && locale.hourCycles.length) hourCycle = locale.hourCycles[0];\n\tif (hourCycle) switch (hourCycle) {\n\t\tcase \"h24\": return \"k\";\n\t\tcase \"h23\": return \"H\";\n\t\tcase \"h12\": return \"h\";\n\t\tcase \"h11\": return \"K\";\n\t\tdefault: throw new Error(\"Invalid hourCycle\");\n\t}\n\tconst languageTag = locale.language;\n\tlet regionTag;\n\tif (languageTag !== \"root\") regionTag = locale.maximize().region;\n\treturn (timeData[regionTag || \"\"] || timeData[languageTag || \"\"] || timeData[`${languageTag}-001`] || timeData[\"001\"])[0];\n}\n//#endregion\n//#region packages/icu-messageformat-parser/parser.ts\nconst SPACE_SEPARATOR_START_REGEX = new RegExp(`^${SPACE_SEPARATOR_REGEX.source}*`);\nconst SPACE_SEPARATOR_END_REGEX = new RegExp(`${SPACE_SEPARATOR_REGEX.source}*$`);\nfunction createLocation(start, end) {\n\treturn {\n\t\tstart,\n\t\tend\n\t};\n}\nconst hasNativeFromEntries = !!Object.fromEntries;\nconst hasTrimStart = !!String.prototype.trimStart;\nconst hasTrimEnd = !!String.prototype.trimEnd;\nconst fromEntries = hasNativeFromEntries ? Object.fromEntries : function fromEntries(entries) {\n\tconst obj = {};\n\tfor (const [k, v] of entries) obj[k] = v;\n\treturn obj;\n};\nconst trimStart = hasTrimStart ? function trimStart(s) {\n\treturn s.trimStart();\n} : function trimStart(s) {\n\treturn s.replace(SPACE_SEPARATOR_START_REGEX, \"\");\n};\nconst trimEnd = hasTrimEnd ? function trimEnd(s) {\n\treturn s.trimEnd();\n} : function trimEnd(s) {\n\treturn s.replace(SPACE_SEPARATOR_END_REGEX, \"\");\n};\nconst IDENTIFIER_PREFIX_RE = /* @__PURE__ */ new RegExp(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\", \"yu\");\nfunction matchIdentifierAtIndex(s, index) {\n\tIDENTIFIER_PREFIX_RE.lastIndex = index;\n\treturn IDENTIFIER_PREFIX_RE.exec(s)[1] ?? \"\";\n}\nvar Parser = class {\n\tconstructor(message, options = {}) {\n\t\tthis.message = message;\n\t\tthis.position = {\n\t\t\toffset: 0,\n\t\t\tline: 1,\n\t\t\tcolumn: 1\n\t\t};\n\t\tthis.ignoreTag = !!options.ignoreTag;\n\t\tthis.locale = options.locale;\n\t\tthis.requiresOtherClause = !!options.requiresOtherClause;\n\t\tthis.shouldParseSkeletons = !!options.shouldParseSkeletons;\n\t}\n\tparse() {\n\t\tif (this.offset() !== 0) throw Error(\"parser can only be used once\");\n\t\treturn this.parseMessage(0, \"\", false);\n\t}\n\tparseMessage(nestingLevel, parentArgType, expectingCloseTag) {\n\t\tlet elements = [];\n\t\twhile (!this.isEOF()) {\n\t\t\tconst char = this.char();\n\t\t\tif (char === 123) {\n\t\t\t\tconst result = this.parseArgument(nestingLevel, expectingCloseTag);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else if (char === 125 && nestingLevel > 0) break;\n\t\t\telse if (char === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\")) {\n\t\t\t\tconst position = this.clonePosition();\n\t\t\t\tthis.bump();\n\t\t\t\telements.push({\n\t\t\t\t\ttype: TYPE.pound,\n\t\t\t\t\tlocation: createLocation(position, this.clonePosition())\n\t\t\t\t});\n\t\t\t} else if (char === 60 && !this.ignoreTag && this.peek() === 47) if (expectingCloseTag) break;\n\t\t\telse return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\telse if (char === 60 && !this.ignoreTag && _isAlpha(this.peek() || 0)) {\n\t\t\t\tconst result = this.parseTag(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else {\n\t\t\t\tconst result = this.parseLiteral(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tval: elements,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n\t* [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n\t* are accepted:\n\t*\n\t* ```\n\t* tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n\t* tagName ::= [a-z] (PENChar)*\n\t* PENChar ::=\n\t* \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n\t* [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n\t* [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n\t* ```\n\t*\n\t* [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n\t* NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n\t* since other tag-based engines like React allow it\n\t*/\n\tparseTag(nestingLevel, parentArgType) {\n\t\tconst startPosition = this.clonePosition();\n\t\tthis.bump();\n\t\tconst tagName = this.parseTagName();\n\t\tthis.bumpSpace();\n\t\tif (this.bumpIf(\"/>\")) return {\n\t\t\tval: {\n\t\t\t\ttype: TYPE.literal,\n\t\t\t\tvalue: `<${tagName}/>`,\n\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t\telse if (this.bumpIf(\">\")) {\n\t\t\tconst childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n\t\t\tif (childrenResult.err) return childrenResult;\n\t\t\tconst children = childrenResult.val;\n\t\t\tconst endTagStartPosition = this.clonePosition();\n\t\t\tif (this.bumpIf(\"</\")) {\n\t\t\t\tif (this.isEOF() || !_isAlpha(this.char())) return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\tconst closingTagNameStartPosition = this.clonePosition();\n\t\t\t\tif (tagName !== this.parseTagName()) return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\">\")) return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.tag,\n\t\t\t\t\t\tvalue: tagName,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t} else return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n\t\t} else return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n\t}\n\t/**\n\t* This method assumes that the caller has peeked ahead for the first tag character.\n\t*/\n\tparseTagName() {\n\t\tconst startOffset = this.offset();\n\t\tthis.bump();\n\t\twhile (!this.isEOF() && _isPotentialElementNameChar(this.char())) this.bump();\n\t\treturn this.message.slice(startOffset, this.offset());\n\t}\n\tparseLiteral(nestingLevel, parentArgType) {\n\t\tconst start = this.clonePosition();\n\t\tlet value = \"\";\n\t\twhile (true) {\n\t\t\tconst parseQuoteResult = this.tryParseQuote(parentArgType);\n\t\t\tif (parseQuoteResult) {\n\t\t\t\tvalue += parseQuoteResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n\t\t\tif (parseUnquotedResult) {\n\t\t\t\tvalue += parseUnquotedResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseLeftAngleResult = this.tryParseLeftAngleBracket();\n\t\t\tif (parseLeftAngleResult) {\n\t\t\t\tvalue += parseLeftAngleResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst location = createLocation(start, this.clonePosition());\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: TYPE.literal,\n\t\t\t\tvalue,\n\t\t\t\tlocation\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseLeftAngleBracket() {\n\t\tif (!this.isEOF() && this.char() === 60 && (this.ignoreTag || !_isAlphaOrSlash(this.peek() || 0))) {\n\t\t\tthis.bump();\n\t\t\treturn \"<\";\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n\t* a character that requires quoting (that is, \"only where needed\"), and works the same in\n\t* nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n\t*/\n\ttryParseQuote(parentArgType) {\n\t\tif (this.isEOF() || this.char() !== 39) return null;\n\t\tswitch (this.peek()) {\n\t\t\tcase 39:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bump();\n\t\t\t\treturn \"'\";\n\t\t\tcase 123:\n\t\t\tcase 60:\n\t\t\tcase 62:\n\t\t\tcase 125: break;\n\t\t\tcase 35:\n\t\t\t\tif (parentArgType === \"plural\" || parentArgType === \"selectordinal\") break;\n\t\t\t\treturn null;\n\t\t\tdefault: return null;\n\t\t}\n\t\tthis.bump();\n\t\tconst codePoints = [this.char()];\n\t\tthis.bump();\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch === 39) if (this.peek() === 39) {\n\t\t\t\tcodePoints.push(39);\n\t\t\t\tthis.bump();\n\t\t\t} else {\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse codePoints.push(ch);\n\t\t\tthis.bump();\n\t\t}\n\t\treturn String.fromCodePoint(...codePoints);\n\t}\n\ttryParseUnquoted(nestingLevel, parentArgType) {\n\t\tif (this.isEOF()) return null;\n\t\tconst ch = this.char();\n\t\tif (ch === 60 || ch === 123 || ch === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\") || ch === 125 && nestingLevel > 0) return null;\n\t\telse {\n\t\t\tthis.bump();\n\t\t\treturn String.fromCodePoint(ch);\n\t\t}\n\t}\n\tparseArgument(nestingLevel, expectingCloseTag) {\n\t\tconst openingBracePosition = this.clonePosition();\n\t\tthis.bump();\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tif (this.char() === 125) {\n\t\t\tthis.bump();\n\t\t\treturn this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t\tlet value = this.parseIdentifierIfPossible().value;\n\t\tif (!value) return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tswitch (this.char()) {\n\t\t\tcase 125:\n\t\t\t\tthis.bump();\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.argument,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\tcase 44:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\t\t\treturn this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n\t\t\tdefault: return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t}\n\t/**\n\t* Advance the parser until the end of the identifier, if it is currently on\n\t* an identifier character. Return an empty string otherwise.\n\t*/\n\tparseIdentifierIfPossible() {\n\t\tconst startingPosition = this.clonePosition();\n\t\tconst startOffset = this.offset();\n\t\tconst value = matchIdentifierAtIndex(this.message, startOffset);\n\t\tconst endOffset = startOffset + value.length;\n\t\tthis.bumpTo(endOffset);\n\t\treturn {\n\t\t\tvalue,\n\t\t\tlocation: createLocation(startingPosition, this.clonePosition())\n\t\t};\n\t}\n\tparseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition) {\n\t\tlet typeStartPosition = this.clonePosition();\n\t\tlet argType = this.parseIdentifierIfPossible().value;\n\t\tlet typeEndPosition = this.clonePosition();\n\t\tswitch (argType) {\n\t\t\tcase \"\": return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n\t\t\tcase \"number\":\n\t\t\tcase \"date\":\n\t\t\tcase \"time\": {\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet styleAndLocation = null;\n\t\t\t\tif (this.bumpIf(\",\")) {\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst styleStartPosition = this.clonePosition();\n\t\t\t\t\tconst result = this.parseSimpleArgStyleIfPossible();\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tconst style = trimEnd(result.val);\n\t\t\t\t\tif (style.length === 0) return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tstyleAndLocation = {\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t\tstyleLocation: createLocation(styleStartPosition, this.clonePosition())\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (styleAndLocation && styleAndLocation.style.startsWith(\"::\")) {\n\t\t\t\t\tlet skeleton = trimStart(styleAndLocation.style.slice(2));\n\t\t\t\t\tif (argType === \"number\") {\n\t\t\t\t\t\tconst result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n\t\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: TYPE.number,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle: result.val\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (skeleton.length === 0) return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location);\n\t\t\t\t\t\tlet dateTimePattern = skeleton;\n\t\t\t\t\t\tif (this.locale) dateTimePattern = getBestPattern(skeleton, this.locale);\n\t\t\t\t\t\tconst style = {\n\t\t\t\t\t\t\ttype: SKELETON_TYPE.dateTime,\n\t\t\t\t\t\t\tpattern: dateTimePattern,\n\t\t\t\t\t\t\tlocation: styleAndLocation.styleLocation,\n\t\t\t\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseDateTimeSkeleton(dateTimePattern) : {}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: argType === \"date\" ? TYPE.date : TYPE.time,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: argType === \"number\" ? TYPE.number : argType === \"date\" ? TYPE.date : TYPE.time,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\tstyle: styleAndLocation?.style ?? null\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"plural\":\n\t\t\tcase \"selectordinal\":\n\t\t\tcase \"select\": {\n\t\t\t\tconst typeEndPosition = this.clonePosition();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\",\")) return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition, { ...typeEndPosition }));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet identifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\tlet pluralOffset = 0;\n\t\t\t\tif (argType !== \"select\" && identifierAndLocation.value === \"offset\") {\n\t\t\t\t\tif (!this.bumpIf(\":\")) return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tidentifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\t\tpluralOffset = result.val;\n\t\t\t\t}\n\t\t\t\tconst optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n\t\t\t\tif (optionsResult.err) return optionsResult;\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (argType === \"select\") return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.select,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\telse return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.plural,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\toffset: pluralOffset,\n\t\t\t\t\t\tpluralType: argType === \"plural\" ? \"cardinal\" : \"ordinal\",\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tdefault: return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n\t\t}\n\t}\n\ttryParseArgumentClose(openingBracePosition) {\n\t\tif (this.isEOF() || this.char() !== 125) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bump();\n\t\treturn {\n\t\t\tval: true,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n\t*/\n\tparseSimpleArgStyleIfPossible() {\n\t\tlet nestedBraces = 0;\n\t\tconst startPosition = this.clonePosition();\n\t\twhile (!this.isEOF()) switch (this.char()) {\n\t\t\tcase 39: {\n\t\t\t\tthis.bump();\n\t\t\t\tlet apostrophePosition = this.clonePosition();\n\t\t\t\tif (!this.bumpUntil(\"'\")) return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 123:\n\t\t\t\tnestedBraces += 1;\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\tcase 125:\n\t\t\t\tif (nestedBraces > 0) nestedBraces -= 1;\n\t\t\t\telse return {\n\t\t\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {\n\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\terr: null\n\t\t};\n\t}\n\tparseNumberSkeletonFromString(skeleton, location) {\n\t\tlet tokens = [];\n\t\ttry {\n\t\t\ttokens = parseNumberSkeletonFromString(skeleton);\n\t\t} catch {\n\t\t\treturn this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n\t\t}\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: SKELETON_TYPE.number,\n\t\t\t\ttokens,\n\t\t\t\tlocation,\n\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseNumberSkeleton(tokens) : {}\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* @param nesting_level The current nesting level of messages.\n\t* This can be positive when parsing message fragment in select or plural argument options.\n\t* @param parent_arg_type The parent argument's type.\n\t* @param parsed_first_identifier If provided, this is the first identifier-like selector of\n\t* the argument. It is a by-product of a previous parsing attempt.\n\t* @param expecting_close_tag If true, this message is directly or indirectly nested inside\n\t* between a pair of opening and closing tags. The nested message will not parse beyond\n\t* the closing tag boundary.\n\t*/\n\ttryParsePluralOrSelectOptions(nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n\t\tlet hasOtherClause = false;\n\t\tconst options = [];\n\t\tconst parsedSelectors = /* @__PURE__ */ new Set();\n\t\tlet { value: selector, location: selectorLocation } = parsedFirstIdentifier;\n\t\twhile (true) {\n\t\t\tif (selector.length === 0) {\n\t\t\t\tconst startPosition = this.clonePosition();\n\t\t\t\tif (parentArgType !== \"select\" && this.bumpIf(\"=\")) {\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tselectorLocation = createLocation(startPosition, this.clonePosition());\n\t\t\t\t\tselector = this.message.slice(startPosition.offset, this.offset());\n\t\t\t\t} else break;\n\t\t\t}\n\t\t\tif (parsedSelectors.has(selector)) return this.error(parentArgType === \"select\" ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n\t\t\tif (selector === \"other\") hasOtherClause = true;\n\t\t\tthis.bumpSpace();\n\t\t\tconst openingBracePosition = this.clonePosition();\n\t\t\tif (!this.bumpIf(\"{\")) return this.error(parentArgType === \"select\" ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\tconst fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n\t\t\tif (fragmentResult.err) return fragmentResult;\n\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\toptions.push([selector, {\n\t\t\t\tvalue: fragmentResult.val,\n\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t}]);\n\t\t\tparsedSelectors.add(selector);\n\t\t\tthis.bumpSpace();\n\t\t\t({value: selector, location: selectorLocation} = this.parseIdentifierIfPossible());\n\t\t}\n\t\tif (options.length === 0) return this.error(parentArgType === \"select\" ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n\t\tif (this.requiresOtherClause && !hasOtherClause) return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\treturn {\n\t\t\tval: options,\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseDecimalInteger(expectNumberError, invalidNumberError) {\n\t\tlet sign = 1;\n\t\tconst startingPosition = this.clonePosition();\n\t\tif (this.bumpIf(\"+\")) {} else if (this.bumpIf(\"-\")) sign = -1;\n\t\tlet hasDigits = false;\n\t\tlet decimal = 0;\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch >= 48 && ch <= 57) {\n\t\t\t\thasDigits = true;\n\t\t\t\tdecimal = decimal * 10 + (ch - 48);\n\t\t\t\tthis.bump();\n\t\t\t} else break;\n\t\t}\n\t\tconst location = createLocation(startingPosition, this.clonePosition());\n\t\tif (!hasDigits) return this.error(expectNumberError, location);\n\t\tdecimal *= sign;\n\t\tif (!Number.isSafeInteger(decimal)) return this.error(invalidNumberError, location);\n\t\treturn {\n\t\t\tval: decimal,\n\t\t\terr: null\n\t\t};\n\t}\n\toffset() {\n\t\treturn this.position.offset;\n\t}\n\tisEOF() {\n\t\treturn this.offset() === this.message.length;\n\t}\n\tclonePosition() {\n\t\treturn {\n\t\t\toffset: this.position.offset,\n\t\t\tline: this.position.line,\n\t\t\tcolumn: this.position.column\n\t\t};\n\t}\n\t/**\n\t* Return the code point at the current position of the parser.\n\t* Throws if the index is out of bound.\n\t*/\n\tchar() {\n\t\tconst offset = this.position.offset;\n\t\tif (offset >= this.message.length) throw Error(\"out of bound\");\n\t\tconst code = this.message.codePointAt(offset);\n\t\tif (code === void 0) throw Error(`Offset ${offset} is at invalid UTF-16 code unit boundary`);\n\t\treturn code;\n\t}\n\terror(kind, location) {\n\t\treturn {\n\t\t\tval: null,\n\t\t\terr: {\n\t\t\t\tkind,\n\t\t\t\tmessage: this.message,\n\t\t\t\tlocation\n\t\t\t}\n\t\t};\n\t}\n\t/** Bump the parser to the next UTF-16 code unit. */\n\tbump() {\n\t\tif (this.isEOF()) return;\n\t\tconst code = this.char();\n\t\tif (code === 10) {\n\t\t\tthis.position.line += 1;\n\t\t\tthis.position.column = 1;\n\t\t\tthis.position.offset += 1;\n\t\t} else {\n\t\t\tthis.position.column += 1;\n\t\t\tthis.position.offset += code < 65536 ? 1 : 2;\n\t\t}\n\t}\n\t/**\n\t* If the substring starting at the current position of the parser has\n\t* the given prefix, then bump the parser to the character immediately\n\t* following the prefix and return true. Otherwise, don't bump the parser\n\t* and return false.\n\t*/\n\tbumpIf(prefix) {\n\t\tif (this.message.startsWith(prefix, this.offset())) {\n\t\t\tfor (let i = 0; i < prefix.length; i++) this.bump();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Bump the parser until the pattern character is found and return `true`.\n\t* Otherwise bump to the end of the file and return `false`.\n\t*/\n\tbumpUntil(pattern) {\n\t\tconst currentOffset = this.offset();\n\t\tconst index = this.message.indexOf(pattern, currentOffset);\n\t\tif (index >= 0) {\n\t\t\tthis.bumpTo(index);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.bumpTo(this.message.length);\n\t\t\treturn false;\n\t\t}\n\t}\n\t/**\n\t* Bump the parser to the target offset.\n\t* If target offset is beyond the end of the input, bump the parser to the end of the input.\n\t*/\n\tbumpTo(targetOffset) {\n\t\tif (this.offset() > targetOffset) throw Error(`targetOffset ${targetOffset} must be greater than or equal to the current offset ${this.offset()}`);\n\t\ttargetOffset = Math.min(targetOffset, this.message.length);\n\t\twhile (true) {\n\t\t\tconst offset = this.offset();\n\t\t\tif (offset === targetOffset) break;\n\t\t\tif (offset > targetOffset) throw Error(`targetOffset ${targetOffset} is at invalid UTF-16 code unit boundary`);\n\t\t\tthis.bump();\n\t\t\tif (this.isEOF()) break;\n\t\t}\n\t}\n\t/** advance the parser through all whitespace to the next non-whitespace code unit. */\n\tbumpSpace() {\n\t\twhile (!this.isEOF() && _isWhiteSpace(this.char())) this.bump();\n\t}\n\t/**\n\t* Peek at the *next* Unicode codepoint in the input without advancing the parser.\n\t* If the input has been exhausted, then this returns null.\n\t*/\n\tpeek() {\n\t\tif (this.isEOF()) return null;\n\t\tconst code = this.char();\n\t\tconst offset = this.offset();\n\t\treturn this.message.charCodeAt(offset + (code >= 65536 ? 2 : 1)) ?? null;\n\t}\n};\n/**\n* This check if codepoint is alphabet (lower & uppercase)\n* @param codepoint\n* @returns\n*/\nfunction _isAlpha(codepoint) {\n\treturn codepoint >= 97 && codepoint <= 122 || codepoint >= 65 && codepoint <= 90;\n}\nfunction _isAlphaOrSlash(codepoint) {\n\treturn _isAlpha(codepoint) || codepoint === 47;\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n\treturn c === 45 || c === 46 || c >= 48 && c <= 57 || c === 95 || c >= 97 && c <= 122 || c >= 65 && c <= 90 || c == 183 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 893 || c >= 895 && c <= 8191 || c >= 8204 && c <= 8205 || c >= 8255 && c <= 8256 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039;\n}\n/**\n* Code point equivalent of regex `\\p{White_Space}`.\n* From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n*/\nfunction _isWhiteSpace(c) {\n\treturn c >= 9 && c <= 13 || c === 32 || c === 133 || c >= 8206 && c <= 8207 || c === 8232 || c === 8233;\n}\n//#endregion\n//#region packages/icu-messageformat-parser/manipulator.ts\n/**\n* Collect all variables in an AST to Record<string, TYPE>\n* @param ast AST to collect variables from\n* @param vars Record of variable name to variable type\n*/\nfunction collectVariables(ast, vars = /* @__PURE__ */ new Map()) {\n\tast.forEach((el) => {\n\t\tif (isArgumentElement(el) || isDateElement(el) || isTimeElement(el) || isNumberElement(el)) if (vars.has(el.value)) {\n\t\t\tconst existingType = vars.get(el.value);\n\t\t\tif (existingType !== el.type && existingType !== TYPE.plural && existingType !== TYPE.select) throw new Error(`Variable ${el.value} has conflicting types`);\n\t\t} else vars.set(el.value, el.type);\n\t\tif (isPluralElement(el) || isSelectElement(el)) {\n\t\t\tvars.set(el.value, el.type);\n\t\t\tObject.keys(el.options).forEach((k) => {\n\t\t\t\tcollectVariables(el.options[k].value, vars);\n\t\t\t});\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tvars.set(el.value, el.type);\n\t\t\tcollectVariables(el.children, vars);\n\t\t}\n\t});\n}\n/**\n* Check if 2 ASTs are structurally the same. This primarily means that\n* they have the same variables with the same type\n* @param a\n* @param b\n* @returns\n*/\nfunction isStructurallySame(a, b) {\n\tconst aVars = /* @__PURE__ */ new Map();\n\tconst bVars = /* @__PURE__ */ new Map();\n\tcollectVariables(a, aVars);\n\tcollectVariables(b, bVars);\n\tif (aVars.size !== bVars.size) return {\n\t\tsuccess: false,\n\t\terror: /* @__PURE__ */ new Error(`Different number of variables: [${Array.from(aVars.keys()).join(\", \")}] vs [${Array.from(bVars.keys()).join(\", \")}]`)\n\t};\n\treturn Array.from(aVars.entries()).reduce((result, [key, type]) => {\n\t\tif (!result.success) return result;\n\t\tconst bType = bVars.get(key);\n\t\tif (bType == null) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Missing variable ${key} in message`)\n\t\t};\n\t\tif (bType !== type) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Variable ${key} has conflicting types: ${TYPE[type]} vs ${TYPE[bType]}`)\n\t\t};\n\t\treturn result;\n\t}, { success: true });\n}\n//#endregion\n//#region packages/icu-messageformat-parser/index.ts\nfunction pruneLocation(els) {\n\tels.forEach((el) => {\n\t\tdelete el.location;\n\t\tif (isSelectElement(el) || isPluralElement(el)) for (const k in el.options) {\n\t\t\tdelete el.options[k].location;\n\t\t\tpruneLocation(el.options[k].value);\n\t\t}\n\t\telse if (isNumberElement(el) && isNumberSkeleton(el.style)) delete el.style.location;\n\t\telse if ((isDateElement(el) || isTimeElement(el)) && isDateTimeSkeleton(el.style)) delete el.style.location;\n\t\telse if (isTagElement(el)) pruneLocation(el.children);\n\t});\n}\nfunction parse(message, opts = {}) {\n\topts = {\n\t\tshouldParseSkeletons: true,\n\t\trequiresOtherClause: true,\n\t\t...opts\n\t};\n\tconst result = new Parser(message, opts).parse();\n\tif (result.err) {\n\t\tconst error = SyntaxError(ErrorKind[result.err.kind]);\n\t\terror.location = result.err.location;\n\t\terror.originalMessage = result.err.message;\n\t\tthrow error;\n\t}\n\tif (!opts?.captureLocation) pruneLocation(result.val);\n\treturn result.val;\n}\nconst _Parser = Parser;\n//#endregion\nexport { SKELETON_TYPE, TYPE, _Parser, createLiteralElement, createNumberElement, isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isStructurallySame, isTagElement, isTimeElement, parse };\n\n//# sourceMappingURL=index.js.map","import { memoize, strategies } from \"@formatjs/fast-memoize\";\nimport { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, parse } from \"@formatjs/icu-messageformat-parser\";\n//#region packages/intl-messageformat/error.ts\nlet ErrorCode = /* @__PURE__ */ function(ErrorCode) {\n\tErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n\tErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n\tErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n\treturn ErrorCode;\n}({});\nvar FormatError = class extends Error {\n\tconstructor(msg, code, originalMessage) {\n\t\tsuper(msg);\n\t\tthis.code = code;\n\t\tthis.originalMessage = originalMessage;\n\t}\n\ttoString() {\n\t\treturn `[formatjs Error: ${this.code}] ${this.message}`;\n\t}\n};\nvar InvalidValueError = class extends FormatError {\n\tconstructor(variableId, value, options, originalMessage) {\n\t\tsuper(`Invalid values for \"${variableId}\": \"${value}\". Options are \"${Object.keys(options).join(\"\\\", \\\"\")}\"`, ErrorCode.INVALID_VALUE, originalMessage);\n\t}\n};\nvar InvalidValueTypeError = class extends FormatError {\n\tconstructor(value, type, originalMessage) {\n\t\tsuper(`Value for \"${value}\" must be of type ${type}`, ErrorCode.INVALID_VALUE, originalMessage);\n\t}\n};\nvar MissingValueError = class extends FormatError {\n\tconstructor(variableId, originalMessage) {\n\t\tsuper(`The intl string context variable \"${variableId}\" was not provided to the string \"${originalMessage}\"`, ErrorCode.MISSING_VALUE, originalMessage);\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/formatters.ts\nlet PART_TYPE = /* @__PURE__ */ function(PART_TYPE) {\n\tPART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n\tPART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n\treturn PART_TYPE;\n}({});\nfunction mergeLiteral(parts) {\n\tif (parts.length < 2) return parts;\n\treturn parts.reduce((all, part) => {\n\t\tconst lastPart = all[all.length - 1];\n\t\tif (!lastPart || lastPart.type !== PART_TYPE.literal || part.type !== PART_TYPE.literal) all.push(part);\n\t\telse lastPart.value += part.value;\n\t\treturn all;\n\t}, []);\n}\nfunction isFormatXMLElementFn(el) {\n\treturn typeof el === \"function\";\n}\nfunction formatToParts(els, locales, formatters, formats, values, currentPluralValue, originalMessage) {\n\tif (els.length === 1 && isLiteralElement(els[0])) return [{\n\t\ttype: PART_TYPE.literal,\n\t\tvalue: els[0].value\n\t}];\n\tconst result = [];\n\tfor (const el of els) {\n\t\tif (isLiteralElement(el)) {\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: el.value\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPoundElement(el)) {\n\t\t\tif (typeof currentPluralValue === \"number\") result.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getNumberFormat(locales).format(currentPluralValue)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst { value: varName } = el;\n\t\tif (!(values && varName in values)) throw new MissingValueError(varName, originalMessage);\n\t\tlet value = values[varName];\n\t\tif (isArgumentElement(el)) {\n\t\t\tif (!value || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\") value = typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" ? String(value) : \"\";\n\t\t\tresult.push({\n\t\t\t\ttype: typeof value === \"string\" ? PART_TYPE.literal : PART_TYPE.object,\n\t\t\t\tvalue\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isDateElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.date[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTimeElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.time[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : formats.time.medium;\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isNumberElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.number[el.style] : isNumberSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tif (style && style.scale) {\n\t\t\t\tconst scale = style.scale || 1;\n\t\t\t\tif (typeof value === \"bigint\") {\n\t\t\t\t\tif (!Number.isInteger(scale)) throw new TypeError(`Cannot apply fractional scale ${scale} to bigint value. Scale must be an integer when formatting bigint.`);\n\t\t\t\t\tvalue = value * BigInt(scale);\n\t\t\t\t} else value = value * scale;\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getNumberFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tconst { children, value } = el;\n\t\t\tconst formatFn = values[value];\n\t\t\tif (!isFormatXMLElementFn(formatFn)) throw new InvalidValueTypeError(value, \"function\", originalMessage);\n\t\t\tlet chunks = formatFn(formatToParts(children, locales, formatters, formats, values, currentPluralValue).map((p) => p.value));\n\t\t\tif (!Array.isArray(chunks)) chunks = [chunks];\n\t\t\tresult.push(...chunks.map((c) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: typeof c === \"string\" ? PART_TYPE.literal : PART_TYPE.object,\n\t\t\t\t\tvalue: c\n\t\t\t\t};\n\t\t\t}));\n\t\t}\n\t\tif (isSelectElement(el)) {\n\t\t\tconst key = value;\n\t\t\tconst opt = (Object.prototype.hasOwnProperty.call(el.options, key) ? el.options[key] : void 0) || el.options.other;\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values));\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPluralElement(el)) {\n\t\t\tconst exactKey = `=${value}`;\n\t\t\tlet opt = Object.prototype.hasOwnProperty.call(el.options, exactKey) ? el.options[exactKey] : void 0;\n\t\t\tif (!opt) {\n\t\t\t\tif (!Intl.PluralRules) throw new FormatError(`Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`, ErrorCode.MISSING_INTL_API, originalMessage);\n\t\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\t\tconst rule = formatters.getPluralRules(locales, { type: el.pluralType }).select(numericValue - (el.offset || 0));\n\t\t\t\topt = (Object.prototype.hasOwnProperty.call(el.options, rule) ? el.options[rule] : void 0) || el.options.other;\n\t\t\t}\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values, numericValue - (el.offset || 0)));\n\t\t\tcontinue;\n\t\t}\n\t}\n\treturn mergeLiteral(result);\n}\n//#endregion\n//#region packages/intl-messageformat/core.ts\nfunction mergeConfig(c1, c2) {\n\tif (!c2) return c1;\n\treturn {\n\t\t...c1,\n\t\t...c2,\n\t\t...Object.keys(c1).reduce((all, k) => {\n\t\t\tall[k] = {\n\t\t\t\t...c1[k],\n\t\t\t\t...c2[k]\n\t\t\t};\n\t\t\treturn all;\n\t\t}, {})\n\t};\n}\nfunction mergeConfigs(defaultConfig, configs) {\n\tif (!configs) return defaultConfig;\n\treturn Object.keys(defaultConfig).reduce((all, k) => {\n\t\tall[k] = mergeConfig(defaultConfig[k], configs[k]);\n\t\treturn all;\n\t}, { ...defaultConfig });\n}\nfunction createFastMemoizeCache(store) {\n\treturn { create() {\n\t\treturn {\n\t\t\tget(key) {\n\t\t\t\treturn store[key];\n\t\t\t},\n\t\t\tset(key, value) {\n\t\t\t\tstore[key] = value;\n\t\t\t}\n\t\t};\n\t} };\n}\nfunction createDefaultFormatters(cache = {\n\tnumber: {},\n\tdateTime: {},\n\tpluralRules: {}\n}) {\n\treturn {\n\t\tgetNumberFormat: memoize((...args) => new Intl.NumberFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.number),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetDateTimeFormat: memoize((...args) => new Intl.DateTimeFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.dateTime),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetPluralRules: memoize((...args) => new Intl.PluralRules(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.pluralRules),\n\t\t\tstrategy: strategies.variadic\n\t\t})\n\t};\n}\nvar IntlMessageFormat = class IntlMessageFormat {\n\tconstructor(message, locales = IntlMessageFormat.defaultLocale, overrideFormats, opts) {\n\t\tthis.formatterCache = {\n\t\t\tnumber: {},\n\t\t\tdateTime: {},\n\t\t\tpluralRules: {}\n\t\t};\n\t\tthis.format = (values) => {\n\t\t\tconst parts = this.formatToParts(values);\n\t\t\tif (parts.length === 1) return parts[0].value;\n\t\t\tconst result = parts.reduce((all, part) => {\n\t\t\t\tif (!all.length || part.type !== PART_TYPE.literal || typeof all[all.length - 1] !== \"string\") all.push(part.value);\n\t\t\t\telse all[all.length - 1] += part.value;\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t\t\tif (result.length <= 1) return result[0] || \"\";\n\t\t\treturn result;\n\t\t};\n\t\tthis.formatToParts = (values) => formatToParts(this.ast, this.locales, this.formatters, this.formats, values, void 0, this.message);\n\t\tthis.resolvedOptions = () => ({ locale: this.resolvedLocale?.toString() || Intl.NumberFormat.supportedLocalesOf(this.locales)[0] });\n\t\tthis.getAst = () => this.ast;\n\t\tthis.locales = locales;\n\t\tthis.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n\t\tif (typeof message === \"string\") {\n\t\t\tthis.message = message;\n\t\t\tif (!IntlMessageFormat.__parse) throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");\n\t\t\tconst { ...parseOpts } = opts || {};\n\t\t\tthis.ast = IntlMessageFormat.__parse(message, {\n\t\t\t\t...parseOpts,\n\t\t\t\tlocale: this.resolvedLocale\n\t\t\t});\n\t\t} else this.ast = message;\n\t\tif (!Array.isArray(this.ast)) throw new TypeError(\"A message must be provided as a String or AST.\");\n\t\tthis.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n\t\tthis.formatters = opts && opts.formatters || createDefaultFormatters(this.formatterCache);\n\t}\n\tstatic {\n\t\tthis.memoizedDefaultLocale = null;\n\t}\n\tstatic get defaultLocale() {\n\t\tif (!IntlMessageFormat.memoizedDefaultLocale) IntlMessageFormat.memoizedDefaultLocale = new Intl.NumberFormat().resolvedOptions().locale;\n\t\treturn IntlMessageFormat.memoizedDefaultLocale;\n\t}\n\tstatic {\n\t\tthis.resolveLocale = (locales) => {\n\t\t\tif (typeof Intl.Locale === \"undefined\") return;\n\t\t\tconst supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n\t\t\tif (supportedLocales.length > 0) return new Intl.Locale(supportedLocales[0]);\n\t\t\treturn new Intl.Locale(typeof locales === \"string\" ? locales : locales[0]);\n\t\t};\n\t}\n\tstatic {\n\t\tthis.__parse = parse;\n\t}\n\tstatic {\n\t\tthis.formats = {\n\t\t\tnumber: {\n\t\t\t\tinteger: { maximumFractionDigits: 0 },\n\t\t\t\tcurrency: { style: \"currency\" },\n\t\t\t\tpercent: { style: \"percent\" }\n\t\t\t},\n\t\t\tdate: {\n\t\t\t\tshort: {\n\t\t\t\t\tmonth: \"numeric\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"2-digit\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\tweekday: \"long\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttime: {\n\t\t\t\tshort: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/index.ts\nvar intl_messageformat_default = IntlMessageFormat;\n//#endregion\nexport { ErrorCode, FormatError, IntlMessageFormat, InvalidValueError, InvalidValueTypeError, MissingValueError, PART_TYPE, intl_messageformat_default as default, formatToParts, isFormatXMLElementFn };\n\n//# sourceMappingURL=index.js.map","import{IntlMessageFormat as t}from\"intl-messageformat\";import{isValidElement as e}from\"react\";import{I as r,a as o,m as a}from\"../formatters-CJcico0N.js\";function m(...[m,s,i,n]){if(Array.isArray(s))throw new r(o.INVALID_MESSAGE,void 0);if(\"object\"==typeof s)throw new r(o.INSUFFICIENT_PATH,void 0);if(\"string\"==typeof s){const t=function(t,e){return e||/'[{}]/.test(t)?void 0:t}(s,i);if(t)return t}const{cache:f,formats:c,formatters:g,globalFormats:u,locale:d,timeZone:A}=n;let p;g.getMessageFormat||(g.getMessageFormat=function(e,r){return a(((...e)=>new t(e[0],e[1],e[2],{formatters:r,...e[3]})),e.message)}(f,g));try{p=g.getMessageFormat(s,d,function(e,r,o){const a=t.formats.date,m=t.formats.time,s={...e?.dateTime,...r?.dateTime},i={date:{...a,...s},time:{...m,...s},number:{...e?.number,...r?.number}};return o&&[\"date\",\"time\"].forEach((t=>{const e=i[t];for(const[t,r]of Object.entries(e))e[t]={timeZone:o,...r}})),i}(u,c,A),{formatters:{...g,getDateTimeFormat:(t,e)=>g.getDateTimeFormat(t,{...e,timeZone:e?.timeZone??A})}})}catch(t){throw new r(o.INVALID_MESSAGE,void 0)}const w=p.format(i);return e(w)||Array.isArray(w)||\"string\"==typeof w?w:String(w)}m.raw=!0;export{m as default};\n","import{cloneElement as e,isValidElement as t}from\"react\";import r from\"use-intl/format-message\";import{I as n,a as o,c as a,b as s}from\"./formatters-CJcico0N.js\";function c(...e){return e.filter(Boolean).join(\".\")}function i(e){return c(e.namespace,e.key)}function u(e){console.error(e)}function m(e,t,r,n){const o=c(n,r);if(!t)throw new Error(o);let a=t;return r.split(\".\").forEach((t=>{const r=a[t];if(null==t||null==r)throw new Error(o+` (${e})`);a=r})),a}function f(a){const s=function(e,t,r){try{if(!t)throw new Error(void 0);const n=r?m(e,t,r):t;if(!n)throw new Error(r);return n}catch(e){return new n(o.MISSING_MESSAGE,e.message)}}(a.locale,a.messages,a.namespace);return function({cache:a,formats:s,formatters:u,getMessageFallback:f=i,locale:l,messagesOrError:g,namespace:y,onError:h,timeZone:w}){const E=g instanceof n;function d(e,t,r,o){const a=new n(t,r);return h(a),o??f({error:a,key:e,namespace:y})}function p(i,p,S,M){const T=M;let N;if(E){if(!T)return h(g),f({error:g,key:i,namespace:y});N=T}else{const e=g;try{N=m(l,e,i,y)}catch(e){if(!T)return d(i,o.MISSING_MESSAGE,e.message,T);N=T}}try{const n=c(y,i);return r(n,N,p?function(r){const n={};return Object.keys(r).forEach((o=>{let a=0;const s=r[o];let c;c=\"function\"==typeof s?r=>{const n=s(r);return t(n)?e(n,{key:o+a++}):n}:s,n[o]=c})),n}(p):p,{cache:a,formatters:u,globalFormats:s,formats:S,locale:l,timeZone:w})}catch(e){let t,r;return e instanceof n?(t=e.code,r=e.originalMessage):(t=o.FORMATTING_ERROR,r=e.message),d(i,t,r,T)}}function S(e,t,r,n){const a=p(e,t,r,n);return\"string\"!=typeof a?d(e,o.INVALID_MESSAGE,void 0):a}return S.rich=p,S.markup=(e,t,r,n)=>p(e,t,r,n),S.raw=e=>{if(E)return h(g),f({error:g,key:e,namespace:y});const t=g;try{return m(l,t,e,y)}catch(t){return d(e,o.MISSING_MESSAGE,t.message)}},S.has=e=>{if(E)return!1;try{return m(l,g,e,y),!0}catch{return!1}},S}({...a,messagesOrError:s})}function l(e,t){return e===t?void 0:e.slice((t+\".\").length)}const g=3600,y=86400,h=7*y,w=2628e3,E=7884e3,d=365*y,p={second:1,seconds:1,minute:60,minutes:60,hour:g,hours:g,day:y,days:y,week:h,weeks:h,month:w,months:w,quarter:E,quarters:E,year:d,years:d};function S(e){const{_cache:t=s(),_formatters:r=a(t),formats:c,locale:i,onError:m=u,timeZone:f}=e;function l(e){return e?.timeZone||(f?e={...e,timeZone:f}:m(new n(o.ENVIRONMENT_FALLBACK,void 0))),e}function E(e,t,r,a,s){let c;try{c=function(e,t,r){let a;if(\"string\"==typeof t){const r=t;if(a=e?.[r],!a){const e=new n(o.MISSING_FORMAT,void 0);throw m(e),e}}else a=t;return r&&(a={...a,...r}),a}(r,e,t)}catch{return s()}try{return a(c)}catch(e){return m(new n(o.FORMATTING_ERROR,e.message)),s()}}function S(e,t,n){return E(t,n,c?.dateTime,(t=>(t=l(t),r.getDateTimeFormat(i,t).format(e))),(()=>String(e)))}function M(){return e.now?e.now:(m(new n(o.ENVIRONMENT_FALLBACK,void 0)),new Date)}return{dateTime:S,number:function(e,t,n){return E(t,n,c?.number,(t=>r.getNumberFormat(i,t).format(e)),(()=>String(e)))},relativeTime:function(e,t){try{let n,o;const a={};t instanceof Date||\"number\"==typeof t?n=new Date(t):t&&(n=null!=t.now?new Date(t.now):M(),o=t.unit,a.style=t.style,a.numberingSystem=t.numberingSystem),n||(n=M());const s=(new Date(e).getTime()-n.getTime())/1e3;o||(o=function(e){const t=Math.abs(e);return t<60?\"second\":t<g?\"minute\":t<y?\"hour\":t<h?\"day\":t<w?\"week\":t<d?\"month\":\"year\"}(s)),a.numeric=\"second\"===o?\"auto\":\"always\";const c=function(e,t){return Math.round(e/p[t])}(s,o);return r.getRelativeTimeFormat(i,a).format(c,o)}catch(t){return m(new n(o.FORMATTING_ERROR,t.message)),String(e)}},list:function(e,t,n){const o=[],a=new Map;let s=0;for(const t of e){let e;\"object\"==typeof t?(e=String(s),a.set(e,t)):e=String(t),o.push(e),s++}return E(t,n,c?.list,(e=>{const t=r.getListFormat(i,e).formatToParts(o).map((e=>\"literal\"===e.type?e.value:a.get(e.value)||e.value));return a.size>0?t:t.join(\"\")}),(()=>String(e)))},dateTimeRange:function(e,t,n,o){return E(n,o,c?.dateTime,(n=>(n=l(n),r.getDateTimeFormat(i,n).formatRange(e,t))),(()=>[S(e),S(t)].join(\" – \")))},displayName:function(e,t,n){return E(t,n,c?.displayName,(t=>r.getDisplayNames(i,t).of(e)),(()=>e))}}}function M({formats:e,getMessageFallback:t,messages:r,onError:n,...o}){return{...o,formats:e||void 0,messages:r||void 0,onError:n||u,getMessageFallback:t||i}}export{f as a,u as b,S as c,i as d,M as i,l as r};\n","import{createContext as e,useContext as r,useMemo as t,useState as o,useEffect as n}from\"react\";import{b as a,c as s,I as c,a as i}from\"./formatters-CJcico0N.js\";import{i as m,r as f,a as u,c as l}from\"./initializeConfig-CHgjheii.js\";import{jsx as g}from\"react/jsx-runtime\";const d=e(void 0);function v({children:e,formats:o,getMessageFallback:n,locale:c,messages:i,now:f,onError:u,timeZone:l}){const v=r(d),w=t((()=>v?.cache||a()),[c,v?.cache]),p=t((()=>v?.formatters||s(w)),[w,v?.formatters]),h=t((()=>({...m({locale:c,formats:void 0===o?v?.formats:o,getMessageFallback:n||v?.getMessageFallback,messages:void 0===i?v?.messages:i,now:f||v?.now,onError:u||v?.onError,timeZone:l||v?.timeZone}),formatters:p,cache:w})),[w,o,p,n,c,i,f,u,v,l]);return g(d.Provider,{value:h,children:e})}function w(){const e=r(d);if(!e)throw new Error(void 0);return e}let p=!1;const h=\"undefined\"==typeof window;function E(e){return function(e,r,o){const{cache:n,formats:a,formatters:s,getMessageFallback:m,locale:l,onError:g,timeZone:d}=w(),v=e[o],E=f(r,o);return d||p||!h||(p=!0,g(new c(i.ENVIRONMENT_FALLBACK,void 0))),t((()=>u({cache:n,formatters:s,getMessageFallback:m,messages:v,namespace:E,onError:g,formats:a,locale:l,timeZone:d})),[n,s,m,v,E,g,a,l,d])}({\"!\":w().messages},e?`!.${e}`:\"!\",\"!\")}function Z(){return w().locale}function k(){return new Date}function b(e){const r=e?.updateInterval,{now:t}=w(),[a,s]=o(t||k());return n((()=>{if(!r)return;const e=setInterval((()=>{s(k())}),r);return()=>{clearInterval(e)}}),[t,r]),null==r&&t?t:a}function F(){return w().timeZone}function M(){const e=w();if(!e.messages)throw new Error(void 0);return e.messages}function I(){const{formats:e,formatters:r,locale:o,now:n,onError:a,timeZone:s}=w();return t((()=>l({formats:e,locale:o,now:n,onError:a,timeZone:s,_formatters:r})),[e,r,n,o,a,s])}function j(e,...r){let t,o;return\"string\"==typeof e?(t=r[0],o=r[1]):(t=e.values,o=e.formats),[void 0,t,o,void 0]}function x(e){const r=E(e);function t(...e){return r(...j(...e))}return t.rich=(...e)=>r.rich(...j(...e)),t.markup=(...e)=>r.markup(...j(...e)),t.has=function(e){return!0},t}export{v as IntlProvider,x as _useExtracted,I as useFormatter,Z as useLocale,M as useMessages,b as useNow,F as useTimeZone,E as useTranslations};\n","import { createContext } from \"preact\";\n\nexport interface DialogQueueEntry {\n\tid: string;\n\tpriority: number;\n}\n\nexport interface IDialogQueueContext {\n\tacquire: (entry: DialogQueueEntry) => void;\n\trelease: (id: string) => void;\n\t/** The id of the dialog that may currently be shown, or null when the queue is empty. */\n\tactiveId: string | null;\n}\n\n// Higher priority wins; ties are broken by acquisition order (FIFO).\nexport const DIALOG_PRIORITY = {\n\ttutorial: 10,\n\tdecision: 9,\n\temptyExchange: 8,\n\tdefault: 0\n} as const;\n\nexport const DialogQueueContext = createContext<IDialogQueueContext | null>(\n\tnull\n);\n","import { useState } from \"preact/hooks\";\nimport { resolveSetStateAction } from \"../../utils/helpers\";\n\ntype Setter<T> = React.Dispatch<React.SetStateAction<T>>;\n\nexport interface ValueState<T> {\n\tvalue: T;\n\tset: Setter<T>;\n}\n\nconst useValueState = <T>(\n\tinitialState: T,\n\tstateUpdateCallback?: (newValue: T) => void\n): Readonly<ValueState<T>> => {\n\tconst [state, setState] = useState<T>(initialState);\n\n\tconst wrappedSetState = (action: React.SetStateAction<T>) => {\n\t\tif (!stateUpdateCallback) {\n\t\t\treturn setState(action);\n\t\t}\n\t\tsetState(prev => {\n\t\t\tconst resolvedValue = resolveSetStateAction(action, prev);\n\t\t\tstateUpdateCallback(resolvedValue);\n\t\t\treturn resolvedValue;\n\t\t});\n\t};\n\treturn { value: state, set: wrappedSetState } as const;\n};\n\nexport default useValueState;\n","import useValueState, { ValueState } from \"./use-value-state\";\n\nexport interface UseDialogRegisterReturn {\n\tisOpen: boolean;\n\tonConfirm?: () => void;\n\tonClose: () => void;\n}\n\nexport interface UseDialogReturn {\n\tregister: () => UseDialogRegisterReturn;\n\tstate: ValueState<boolean>;\n}\n\ninterface UseDialogProps {\n\tinitialOpen?: boolean;\n\tonConfirm?: (state: ValueState<boolean>) => void;\n\tonClose?: () => void;\n}\n\nconst useDialog = ({\n\tinitialOpen = false,\n\tonConfirm,\n\tonClose: onCloseProp\n}: UseDialogProps = {}): UseDialogReturn => {\n\tconst state = useValueState<boolean>(initialOpen);\n\n\tconst onClose = () => {\n\t\tstate.set(false);\n\t\tonCloseProp?.();\n\t};\n\n\tfunction register() {\n\t\treturn {\n\t\t\tisOpen: state.value,\n\t\t\tonConfirm: () => onConfirm?.(state),\n\t\t\tonClose\n\t\t};\n\t}\n\n\treturn {\n\t\tregister,\n\t\tstate\n\t} as const;\n};\n\nexport default useDialog;\n","import { createContext } from \"preact\";\nimport { ValueState } from \"../hooks/common/use-value-state\";\nimport { ReturnViewState, WidgetViewState } from \"../types\";\nimport { WidgetConfiguration } from \"../utils/initialization/types\";\n\nexport interface IWidgetContext {\n\twidgetViewState: ValueState<WidgetViewState>;\n\treturnViewState: ValueState<ReturnViewState>;\n\tconfig: WidgetConfiguration;\n}\n\nexport const WidgetContext = createContext<IWidgetContext>(\n\t{} as IWidgetContext\n);\n","import { useContext } from \"preact/hooks\";\nimport { WidgetContext } from \"../../context/widget-context\";\n\nconst useWidgetContext = () => {\n\tconst context = useContext(WidgetContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useWidgetContext must be used within a WidgetContextProvider\"\n\t\t);\n\t}\n\treturn context;\n};\n\nexport default useWidgetContext;\n","import { PLATFORM_URL } from \"../constants\";\nimport { clearCart } from \"./cart\";\nimport { Locale } from \"./i18n\";\nimport { logger } from \"./logger\";\nimport { clearSession } from \"./shopify\";\n\nexport default {\n\tback: async (locale: Locale, slug: string) => {\n\t\tconst constructedPlatformUrl = new URL(`/${locale}`, PLATFORM_URL);\n\n\t\tif (slug) {\n\t\t\tconstructedPlatformUrl.pathname += `/${slug}/return-action`;\n\t\t}\n\n\t\tawait clearCart();\n\t\tclearSession();\n\n\t\twindow.location.href = constructedPlatformUrl.toString();\n\t},\n\tcontinue: (locale: Locale, slug: string) => {\n\t\tconst confirmationUrl = new URL(\n\t\t\t`/${locale}/${slug}/tutorial-checkout`,\n\t\t\tPLATFORM_URL\n\t\t);\n\n\t\tconst pathname = window.location.pathname;\n\n\t\tif (pathname && pathname !== \"/\") {\n\t\t\tconfirmationUrl.searchParams.append(\"from\", pathname);\n\t\t}\n\n\t\twindow.location.href = confirmationUrl.toString();\n\t},\n\texit: async (clearCartOnExit: boolean = true) => {\n\t\tif (clearCartOnExit) {\n\t\t\ttry {\n\t\t\t\tawait clearCart();\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(\"Failed to clear cart on exit\", err);\n\t\t\t}\n\t\t}\n\t\tclearSession();\n\t\twindow.location.reload();\n\t}\n};\n","import { isOnCartPage } from \"./helpers\";\nimport storage, { STORAGE_OVERLAY_DIALOG_EXPIRY_KEY } from \"./storage\";\n\nexport type DecisionState = \"cart_detection\" | \"cookie_detection\";\n\n// Pure detection of which (if any) return decision dialog should be shown.\n// Side-effect free so mount-time features (e.g. tutorial autostart) can check\n// it without racing the dialog's storage cleanup.\nexport function getReturnDecisionState(\n\tisFirstLoad: boolean\n): DecisionState | null {\n\tif (isOnCartPage()) {\n\t\treturn \"cart_detection\";\n\t}\n\tif (!isFirstLoad) {\n\t\tconst expiration = storage.get<number>(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\t\tif (expiration && Date.now() > expiration) {\n\t\t\treturn \"cookie_detection\";\n\t\t}\n\t}\n\treturn null;\n}\n","import { createContext } from \"preact\";\nimport { CartState } from \"../../components/providers/return-context-provider\";\nimport { IUseAsyncStateReturn } from \"../hooks/common/use-async-state\";\nimport {\n\tCalculationParams,\n\tCalculationResponse,\n\tProcessOrderInitializationReturn\n} from \"../utils/queries\";\nimport { SessionPatchPayload } from \"../utils/session\";\n\nexport interface IReturnContext {\n\torderState: IUseAsyncStateReturn<ProcessOrderInitializationReturn>;\n\tcartState: IUseAsyncStateReturn<CartState, ProcessOrderInitializationReturn>;\n\tcalculationState: IUseAsyncStateReturn<\n\t\tCalculationResponse,\n\t\tCalculationParams\n\t>;\n\tupdateSessionCacheState: IUseAsyncStateReturn<void, SessionPatchPayload>;\n\tisPending: boolean;\n\thasFailed: boolean;\n}\n\nexport const ReturnContext = createContext<IReturnContext>(\n\t{} as IReturnContext\n);\n","import { useContext } from \"preact/hooks\";\nimport { ReturnContext } from \"../../context/return-context\";\n\nconst useReturnContext = () => {\n\tconst context = useContext(ReturnContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useReturnContext must be used within a ReturnContextProvider\"\n\t\t);\n\t}\n\treturn context;\n};\n\nexport default useReturnContext;\n","import { IMAGE_FALLBACK_URL } from \"../../lib/constants\";\nimport { cn } from \"../../lib/utils/helpers\";\n\ninterface ImageProps extends Omit<\n\tReact.ImgHTMLAttributes<HTMLImageElement>,\n\t\"src\"\n> {\n\tsrc: string | null | undefined;\n}\n\nconst Image = ({ src, className, ...props }: ImageProps) => {\n\treturn (\n\t\t<img\n\t\t\tsrc={src || IMAGE_FALLBACK_URL}\n\t\t\tclassName={cn(\"rf-image\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Image;\n","const SkeletonContainer = ({\n\tpending = false,\n\tskeleton,\n\tchildren\n}: {\n\tpending?: boolean;\n\tskeleton: preact.ComponentChildren;\n\tchildren?: preact.ComponentChildren;\n}) => {\n\tswitch (pending) {\n\t\tcase true:\n\t\t\treturn skeleton;\n\t\tdefault:\n\t\t\treturn children;\n\t}\n};\n\nexport default SkeletonContainer;\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../../lib/utils/helpers\";\n\nconst avatarVariants = cva(\n\t\"rf-avatar size-[26px] rounded-full border overflow-hidden\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tlight: \"bg-white text-black border-[#E1E1E1]\",\n\t\t\t\tdark: \"bg-[#555555] text-white border-black\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"light\"\n\t\t}\n\t}\n);\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n\ninterface AvatarProps\n\textends React.HTMLAttributes<HTMLDivElement>, AvatarVariants {\n\tchildren: preact.ComponentChildren;\n}\n\nconst Avatar = ({ children, className, variant, ...props }: AvatarProps) => {\n\treturn (\n\t\t<div className={cn(avatarVariants({ variant }), className)} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default memo(Avatar);\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst Skeleton = ({\n\tclassName,\n\t...props\n}: Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-skeleton bg-neutral-2 animate-pulse rounded-md h-[1.5em]\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<span className=\"rf-skeleton__sr-text sr-only\">Loading...</span>\n\t\t</div>\n\t);\n};\n\nexport default Skeleton;\n","import Skeleton from \"../skeleton/skeleton\";\n\nconst AvatarStackSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-avatar-stack-skeleton flex -space-x-1\">\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[1]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[2]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[3]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default AvatarStackSkeleton;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport Image from \"../image\";\nimport SkeletonContainer from \"../skeleton/skeleton-container\";\nimport Avatar, { AvatarVariants } from \"./avatar\";\nimport AvatarStackSkeleton from \"./avatar-stack-skeleton\";\n\nexport interface AvatarImage {\n\tsrc: string | undefined;\n\talt: string;\n}\n\nexport interface AvatarStackProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n\t\tAvatarVariants {\n\timages: AvatarImage[];\n\tmaxVisibleAvatars?: number | null;\n\tpending?: boolean;\n\tchildren?: (zIndex: number) => React.ReactNode;\n}\n\nconst AvatarStack = ({\n\timages,\n\tvariant,\n\tmaxVisibleAvatars = 3,\n\tclassName,\n\tpending = false,\n\tchildren,\n\t...props\n}: AvatarStackProps) => {\n\tconst maxVisible = maxVisibleAvatars ?? images.length;\n\tconst hasOverflow = maxVisible < images.length;\n\tconst sliceIndex = hasOverflow ? maxVisible - 1 : maxVisible;\n\n\treturn (\n\t\t<SkeletonContainer skeleton={<AvatarStackSkeleton />} pending={pending}>\n\t\t\t{images.length > 0 && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"rf-avatar-stack flex -space-x-1\", className)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{images.slice(0, sliceIndex).map(({ src, alt }, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\t\tclassName=\"relative\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tzIndex: index + 1\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\tclassName=\"rf-avatar-stack__image size-full object-cover\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t\t{hasOverflow && (\n\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tzIndex: sliceIndex + 1\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"rf-avatar-stack__count text-[10px]\">\n\t\t\t\t\t\t\t\t+{images.length - sliceIndex}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t)}\n\t\t\t\t\t{children ? children(sliceIndex + 1) : null}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</SkeletonContainer>\n\t);\n};\n\nexport default AvatarStack;\n","import { useMemo } from \"preact/hooks\";\nimport useReturnContext from \"../lib/hooks/context/use-return-context\";\nimport AvatarStack, {\n\tAvatarImage,\n\tAvatarStackProps\n} from \"./ui/avatar/avatar-stack\";\n\nconst ReturnAvatarStack = ({\n\tpending,\n\t...props\n}: Omit<AvatarStackProps, \"images\">) => {\n\tconst { orderState } = useReturnContext();\n\n\tconst formattedImages = useMemo(() => {\n\t\tconst exchangeProducts =\n\t\t\torderState.value.data?.orderData.productsToExchange ?? [];\n\t\treturn exchangeProducts.reduce<AvatarImage[]>((acc, product) => {\n\t\t\tfor (let i = 0; i < product.quantity; i++) {\n\t\t\t\tacc.push({\n\t\t\t\t\tsrc: product.image,\n\t\t\t\t\talt: product.title\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\t}, [orderState.value.data?.orderData.productsToExchange]);\n\n\treturn (\n\t\t<AvatarStack\n\t\t\tpending={pending ?? orderState.value.pending}\n\t\t\tvariant=\"light\"\n\t\t\timages={formattedImages}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default ReturnAvatarStack;\n","import { createContext } from \"preact\";\nimport { UseDialogRegisterReturn } from \"../hooks/common/use-dialog\";\n\nexport type IDialogContext = UseDialogRegisterReturn;\n\nexport const DialogContext = createContext<IDialogContext | null>(null);\n","const ArrowRightIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={9}\n\t\tviewBox=\"0 0 11 9\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-right ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M10.273 4.427 6.66.954a.55.55 0 0 0-.387-.153.56.56 0 0 0-.387.153l-.328.316a.52.52 0 0 0 0 .749l2.107 2.03H.973a.524.524 0 0 0-.54.517v.446c0 .29.238.54.54.54H7.69L5.56 7.594a.505.505 0 0 0 0 .74l.327.314c.103.099.24.153.387.153a.56.56 0 0 0 .387-.154l3.612-3.473a.513.513 0 0 0 0-.747\" />\n\t</svg>\n);\nexport default ArrowRightIcon;\n","const XIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={11}\n\t\tviewBox=\"0 0 11 11\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--x ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M1.45 10.572a.92.92 0 0 1-.655-.221.92.92 0 0 1 0-1.299l7.82-7.82a.921.921 0 0 1 1.344 1.253l-7.865 7.866a.92.92 0 0 1-.645.22\" />\n\t\t<path d=\"M9.26 10.572a.92.92 0 0 1-.645-.267l-7.82-7.82a.921.921 0 0 1 1.299-1.298l7.865 7.82a.92.92 0 0 1 0 1.344.92.92 0 0 1-.7.22\" />\n\t</svg>\n);\nexport default XIcon;\n","const Spinner = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"1.5em\"\n\t\t\theight=\"1.5em\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tfill=\"currentColor\"\n\t\t\tclassName={`rf-icon rf-icon--spinner ${className || \"\"}`}\n\t\t\t{...props}\n\t\t>\n\t\t\t<g>\n\t\t\t\t<path opacity={0.14} d=\"M11 1h2v5h-2z\" />\n\t\t\t\t<path opacity={0.29} d=\"m16.634 1.974 1.732 1-2.5 4.33-1.732-1z\" />\n\t\t\t\t<path opacity={0.43} d=\"m21.026 5.634 1 1.732-4.33 2.5-1-1.732z\" />\n\t\t\t\t<path opacity={0.57} d=\"M23 11v2h-5v-2z\" />\n\t\t\t\t<path opacity={0.71} d=\"m22.026 16.634-1 1.732-4.33-2.5 1-1.732z\" />\n\t\t\t\t<path opacity={0.86} d=\"m18.366 21.026-1.732 1-2.5-4.33 1.732-1z\" />\n\t\t\t\t<path d=\"M13 23h-2v-5h2z\" />\n\t\t\t\t<animateTransform\n\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\tdur=\"0.75s\"\n\t\t\t\t\tvalues=\"0 12 12;30 12 12;60 12 12;90 12 12;120 12 12;150 12 12;180 12 12;210 12 12;240 12 12;270 12 12;300 12 12;330 12 12;360 12 12\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n};\n\nexport default Spinner;\n","// components/ui/Button.tsx\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Spinner from \"../icons/spinner\";\n\nconst buttonVariants = cva(\n\t\"disabled:cursor-not-allowed h-12 rounded-md text-base font-medium flex items-center justify-center whitespace-nowrap gap-2 px-8 relative transition-all duration-300 ease-in-out [--icon-width:auto] [--icon-height:0.65em] desktop:[--icon-height:0.75em]\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary:\n\t\t\t\t\t\"bg-button-background text-button-foreground disabled:!bg-button-background-disabled disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-button-secondary-background text-button-secondary-foreground disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-button-secondary-background bg-background text-widget-foreground disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\tghost:\n\t\t\t\t\t\"text-neutral-3 font-normal gap-1 disabled:!opacity-50 disabled:cursor-not-allowed desktop:hover:opacity-80\"\n\t\t\t}\n\t\t}\n\t}\n);\n\nexport interface ButtonProps\n\textends\n\t\tReact.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\tVariantProps<typeof buttonVariants> {\n\ticon?: ((props: React.SVGProps<SVGSVGElement>) => React.JSX.Element) | null;\n\ticonPosition?: \"left\" | \"right\";\n\tpending?: boolean;\n}\n\nconst Button = ({\n\tchildren,\n\tclassName,\n\ticon: Icon,\n\tvariant = \"primary\",\n\tpending = false,\n\tdisabled = false,\n\ticonPosition = \"right\",\n\t...props\n}: ButtonProps) => {\n\treturn (\n\t\t<button\n\t\t\taria-busy={pending}\n\t\t\tdisabled={disabled || pending}\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ variant }),\n\t\t\t\t\"rf-button\",\n\t\t\t\t`rf-button--${variant}`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{pending && <Spinner className=\"absolute inset-0 m-auto\" />}\n\t\t\t<span\n\t\t\t\tclassName=\"rf-button__text\"\n\t\t\t\tstyle={{\n\t\t\t\t\tvisibility: pending ? \"hidden\" : \"visible\"\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{!!Icon && (\n\t\t\t\t<Icon\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tvisibility: pending ? \"hidden\" : \"visible\"\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-button__icon w-[var(--icon-width)] h-[var(--icon-height)]\",\n\t\t\t\t\t\ticonPosition === \"left\" ? \"-order-1\" : \"order-1\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</button>\n\t);\n};\n\nexport default memo(Button);\n","import { useContext } from \"preact/hooks\";\nimport { DialogContext } from \"../../../lib/context/dialog-context\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ArrowRightIcon from \"../../icons/arrow-right\";\nimport XIcon from \"../../icons/x\";\nimport Button, { ButtonProps } from \"../../ui/button\";\n\n// eslint-disable-next-line react-refresh/only-export-components\nconst Accept = ({ className, onClick, ...props }: ButtonProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog-button rf-dialog__button rf-dialog__button--accept w-full\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\ticon={ArrowRightIcon}\n\t\t\tonClick={event => {\n\t\t\t\tonClick?.(event);\n\t\t\t\tif (!event.defaultPrevented) ctx?.onConfirm?.();\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n// eslint-disable-next-line react-refresh/only-export-components\nconst Reject = ({ className, onClick, ...props }: ButtonProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog-button rf-dialog__button rf-dialog__button--reject w-full\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tvariant=\"outline\"\n\t\t\ticon={XIcon}\n\t\t\ticonPosition=\"left\"\n\t\t\tonClick={event => {\n\t\t\t\tonClick?.(event);\n\t\t\t\tif (!event.defaultPrevented) ctx?.onClose?.();\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default {\n\tAccept,\n\tReject\n};\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils/helpers\";\n\nconst iconVariants = cva(\n\t\"rf-icon size-8 rounded-full flex items-center justify-center text-2xl p-[9px]\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary: \"rf-icon--primary border border-neutral-2 text-black\",\n\t\t\t\tsolid: \"rf-icon--solid bg-black text-white\",\n\t\t\t\t\"solid-inverse\":\n\t\t\t\t\t\"rf-icon--solid-inverse bg-button-secondary-background text-button-secondary-foreground\"\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tsm: \"size-7 p-[8px]\",\n\t\t\t\tmd: \"size-8 p-[9px]\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"primary\",\n\t\t\tsize: \"md\"\n\t\t}\n\t}\n);\n\ninterface IconAttributesWithChildren {\n\ticon?: never;\n\tchildren: preact.ComponentChildren;\n}\n\ninterface IconAttributesWithoutChildren {\n\ticon: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;\n\tchildren?: never;\n}\n\ntype IconAttributes =\n\t| IconAttributesWithChildren\n\t| IconAttributesWithoutChildren;\n\ntype IconProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> &\n\tVariantProps<typeof iconVariants> &\n\tIconAttributes;\n\nconst Icon = ({\n\ticon: IconComponent,\n\tvariant,\n\tsize,\n\tclassName,\n\tchildren,\n\t...props\n}: IconProps) => {\n\treturn (\n\t\t<div\n\t\t\taria-hidden\n\t\t\tclassName={cn(iconVariants({ variant, size }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{IconComponent && <IconComponent className=\"size-full\" />}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default Icon;\n","import { useTranslations } from \"use-intl\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Icon from \"../icons/icon\";\nimport XIcon from \"../icons/x\";\n\nexport type RejectButtonProps =\n\tReact.ButtonHTMLAttributes<HTMLButtonElement> & {\n\t\tshowLabel?: boolean;\n\t\tlabelProps?: React.HTMLAttributes<HTMLSpanElement>;\n\t};\n\nconst RejectButton = ({\n\tclassName,\n\tlabelProps,\n\tshowLabel = false,\n\t...props\n}: RejectButtonProps) => {\n\tconst t = useTranslations(\"common\");\n\n\treturn (\n\t\t<button\n\t\t\taria-label={!showLabel ? t(\"close\") : undefined}\n\t\t\tclassName={cn(\"flex items-center gap-2 group\", className)}\n\t\t\ttype=\"button\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{showLabel && <span {...labelProps}>{t(\"close\")}</span>}\n\t\t\t<Icon\n\t\t\t\tclassName=\"group-hover:bg-neutral-2 transition-colors\"\n\t\t\t\ticon={XIcon}\n\t\t\t/>\n\t\t</button>\n\t);\n};\n\nexport default RejectButton;\n","import { useEffect } from \"preact/hooks\";\nimport { DIALOG_PRIORITY } from \"../../context/dialog-queue-context\";\nimport useDialogQueue from \"../context/use-dialog-queue\";\n\ninterface UseDialogSlotProps {\n\tid: string;\n\tpriority?: number;\n\t/** Whether this dialog wants to be shown. */\n\topen: boolean;\n}\n\n// Registers a dialog's intent to be shown and returns whether it's the one the\n// queue currently grants. Only one slot is active at a time.\nconst useDialogSlot = ({\n\tid,\n\tpriority = DIALOG_PRIORITY.default,\n\topen\n}: UseDialogSlotProps): boolean => {\n\tconst { acquire, release, activeId } = useDialogQueue();\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tacquire({ id, priority });\n\t\t\treturn () => release(id);\n\t\t} else {\n\t\t\trelease(id);\n\t\t}\n\t}, [open, id, priority, acquire, release]);\n\n\treturn open && activeId === id;\n};\n\nexport default useDialogSlot;\n","import { useContext } from \"preact/hooks\";\nimport { DialogQueueContext } from \"../../context/dialog-queue-context\";\n\nconst useDialogQueue = () => {\n\tconst context = useContext(DialogQueueContext);\n\tif (!context) {\n\t\tthrow new Error(\"useDialogQueue must be used within a DialogQueueProvider\");\n\t}\n\treturn context;\n};\n\nexport default useDialogQueue;\n","import { useEffect, useState } from \"preact/hooks\";\n\nconst useIsMounted = () => {\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\treturn mounted;\n};\n\nexport default useIsMounted;\n","import { createContext, RefObject } from \"preact\";\n\nexport const RootContext = createContext<RefObject<HTMLDivElement> | null>(\n\tnull\n);\n","import { useRef } from \"preact/hooks\";\nimport { cn } from \"../../../lib/utils/helpers\";\n\ninterface DialogBackdropProps extends React.HTMLAttributes<HTMLElement> {\n\tisVisible?: boolean;\n\tonClick?: () => void;\n}\n\nconst DialogBackdrop = ({\n\tonClick,\n\tclassName,\n\tchildren,\n\tisVisible = true,\n\t...props\n}: DialogBackdropProps) => {\n\tconst elementRef = useRef<HTMLElement>(null);\n\n\tfunction handleClick(event: preact.JSX.TargetedMouseEvent<HTMLElement>) {\n\t\tif (onClick && event.target === elementRef.current) {\n\t\t\tonClick();\n\t\t}\n\t}\n\n\treturn (\n\t\t<aside\n\t\t\tonClick={handleClick}\n\t\t\tref={elementRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__backdrop fixed inset-0 size-full z-40 flex items-center justify-center p-6\",\n\t\t\t\tisVisible && \"rf-dialog__backdrop--visible bg-black/50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</aside>\n\t);\n};\n\nexport default DialogBackdrop;\n","import DialogButton from \"./dialog-button\";\nimport DialogExit from \"./dialog-exit\";\nimport DialogModal, { type DialogModalProps } from \"./dialog-modal\";\nimport DialogSubtitle from \"./dialog-subtitle\";\nimport DialogTitle from \"./dialog-title\";\n\nexport type { DialogModalProps };\n\nconst Dialog = {\n\tModal: DialogModal,\n\tTitle: DialogTitle,\n\tSubtitle: DialogSubtitle,\n\tAccept: DialogButton.Accept,\n\tReject: DialogButton.Reject,\n\tExit: DialogExit\n};\n\nexport default Dialog;\n","import { createPortal } from \"preact/compat\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport {\n\tDialogContext,\n\tIDialogContext\n} from \"../../../lib/context/dialog-context\";\nimport { UseDialogRegisterReturn } from \"../../../lib/hooks/common/use-dialog\";\nimport useDialogSlot from \"../../../lib/hooks/common/use-dialog-slot\";\nimport useIsMounted from \"../../../lib/hooks/common/use-is-mounted\";\nimport useRoot from \"../../../lib/hooks/context/use-root\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport DialogBackdrop from \"./dialog-backdrop\";\n\nexport interface DialogModalProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"onClose\">,\n\t\tUseDialogRegisterReturn {\n\tfadeIn?: boolean;\n\tshowBackdrop?: boolean;\n\tdismissOnBackdropClick?: boolean;\n\tdismissOnEscape?: boolean;\n\t/** Stable id for the dialog queue. Auto-generated when omitted. */\n\tqueueId?: string;\n\t/** Queue priority — higher wins. */\n\tpriority?: number;\n\t/** Set false to opt out of the queue (e.g. when another system gates display). */\n\tqueue?: boolean;\n}\n\nconst DialogModal = ({\n\tisOpen,\n\tonConfirm,\n\tonClose,\n\tfadeIn = true,\n\tshowBackdrop = true,\n\tdismissOnBackdropClick = true,\n\tdismissOnEscape = true,\n\tqueueId,\n\tpriority,\n\tqueue = true,\n\tclassName,\n\t...props\n}: DialogModalProps) => {\n\tconst getRoot = useRoot();\n\tconst isMounted = useIsMounted();\n\n\tconst generatedId = useRef<string>();\n\tif (!generatedId.current) {\n\t\tgeneratedId.current = `dialog-${Math.random().toString(36).slice(2, 11)}`;\n\t}\n\tconst id = queueId ?? generatedId.current;\n\n\tconst isActive = useDialogSlot({ id, priority, open: isOpen && queue });\n\n\t// The dialog is visible when it's open and either opted out of the queue or\n\t// granted the active slot.\n\tconst isVisible = isOpen && (!queue || isActive);\n\n\tuseEffect(() => {\n\t\tconst handleEscape = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tif (dismissOnEscape) {\n\t\t\tif (isVisible) {\n\t\t\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\t\t} else {\n\t\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (dismissOnEscape) {\n\t\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\t}\n\t\t};\n\t}, [dismissOnEscape, onClose, isVisible]);\n\n\tif (!isVisible || !isMounted) {\n\t\treturn null;\n\t}\n\n\tconst root = getRoot();\n\n\tif (!root) {\n\t\tlogger.error(\"Root element not found\");\n\t\treturn null;\n\t}\n\n\tconst contextValue: IDialogContext = {\n\t\tisOpen,\n\t\tonConfirm,\n\t\tonClose\n\t};\n\n\treturn createPortal(\n\t\t<DialogBackdrop\n\t\t\tclassName={fadeIn ? \"animate-fade-in\" : undefined}\n\t\t\tisVisible={showBackdrop}\n\t\t\tonClick={dismissOnBackdropClick ? onClose : undefined}\n\t\t>\n\t\t\t<DialogContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-dialog m-auto w-full p-8 rounded-lg bg-white text-widget-foreground shadow-lg max-w-xl relative\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</DialogContext.Provider>\n\t\t</DialogBackdrop>,\n\t\troot\n\t);\n};\n\nexport default DialogModal;\n","import { useContext } from \"preact/hooks\";\nimport { ROOT_ELEMENT_ID } from \"../../constants\";\nimport { RootContext } from \"../../context/root-context\";\n\nconst useRoot = () => {\n\tconst context = useContext(RootContext);\n\tif (!context) {\n\t\tthrow new Error(\"useRoot must be used within a RootProvider\");\n\t}\n\treturn () => {\n\t\tconst rootElement = context.current;\n\t\tif (!rootElement) {\n\t\t\treturn document.getElementById(ROOT_ELEMENT_ID);\n\t\t}\n\t\treturn rootElement;\n\t};\n};\n\nexport default useRoot;\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst DialogTitle = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLHeadingElement>) => {\n\treturn (\n\t\t<h2\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__title text-2xl font-medium leading-tight\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogTitle;\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst DialogSubtitle = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLParagraphElement>) => {\n\treturn (\n\t\t<p\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__subtitle text-neutral-3 py-2.5 leading-tight whitespace-pre-wrap\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogSubtitle;\n","import { useContext } from \"preact/hooks\";\nimport { DialogContext } from \"../../../lib/context/dialog-context\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport RejectButton, { RejectButtonProps } from \"../../ui/reject-button\";\n\ntype DialogExitProps = RejectButtonProps;\n\nconst DialogExit = ({ className, onClick, ...props }: DialogExitProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<RejectButton\n\t\t\tonClick={e => {\n\t\t\t\tonClick?.(e);\n\t\t\t\tif (!e.defaultPrevented) ctx?.onClose();\n\t\t\t}}\n\t\t\tclassName={cn(\"absolute right-4 top-4\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogExit;\n","import { useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { DIALOG_PRIORITY } from \"../../lib/context/dialog-queue-context\";\nimport useDialog from \"../../lib/hooks/common/use-dialog\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport navigation from \"../../lib/utils/navigation\";\nimport {\n\tDecisionState,\n\tgetReturnDecisionState\n} from \"../../lib/utils/return-decision\";\nimport storage, {\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY\n} from \"../../lib/utils/storage\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport Dialog from \"./common\";\n\nconst ReturnDecisionDialog = () => {\n\tconst {\n\t\tconfig: { isFirstLoad }\n\t} = useWidgetContext();\n\t// Detected synchronously so the dialog registers its queue slot on the first\n\t// render — letting the queue order it ahead of lower-priority dialogs.\n\tconst [decisionState] = useState<DecisionState | null>(() =>\n\t\tgetReturnDecisionState(isFirstLoad)\n\t);\n\n\tif (!decisionState) {\n\t\treturn null;\n\t}\n\n\treturn <DecisionDialog decisionState={decisionState} />;\n};\n\nfunction DecisionDialog({ decisionState }: { decisionState: DecisionState }) {\n\tconst t = useTranslations(`dialog.return_decision.${decisionState}`);\n\tconst { widgetViewState } = useWidgetContext();\n\n\t// The cookie expiry is consumed once the user acts on the dialog. Deferring\n\t// it to here (instead of detection) keeps getReturnDecisionState stable for\n\t// other mount-time features that check it.\n\tfunction consumeCookieExpiry() {\n\t\tif (decisionState === \"cookie_detection\") {\n\t\t\tstorage.remove(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\t\t}\n\t}\n\n\tconst modal = useDialog({\n\t\tinitialOpen: true,\n\t\tonConfirm: state => {\n\t\t\tstate.set(false);\n\t\t\tconsumeCookieExpiry();\n\t\t\tif (decisionState === \"cart_detection\") {\n\t\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t\t}\n\t\t},\n\t\tonClose: () => {\n\t\t\tconsumeCookieExpiry();\n\t\t\tnavigation.exit();\n\t\t}\n\t});\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center\"\n\t\t\t{...modal.register()}\n\t\t\tpriority={DIALOG_PRIORITY.decision}\n\t\t>\n\t\t\t<ReturnAvatarStack />\n\t\t\t<Dialog.Title>{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept>{t(\"confirm\")}</Dialog.Accept>\n\t\t\t<Dialog.Reject>{t(\"reject\")}</Dialog.Reject>\n\t\t</Dialog.Modal>\n\t);\n}\n\nexport default ReturnDecisionDialog;\n","import { createContext } from \"preact\";\n\nexport interface TutorialStep {\n\t/** Unique id within the tutorial. Components key off this to render step-specific elements. */\n\tid: string;\n}\n\n/** \"once\" — persisted; never shows again after first completion.\n * \"first-load\" — shows only when a new session starts (searchParams present); not persisted. */\nexport type TutorialShowMode = \"once\" | \"first-load\";\n\nexport interface TutorialOptions {\n\t/** Start automatically when the widget loads. */\n\tautoStart?: boolean;\n\tshowMode?: TutorialShowMode;\n}\n\nexport interface Tutorial {\n\tid: string;\n\tsteps: TutorialStep[];\n\toptions?: TutorialOptions;\n}\n\nexport type TutorialState =\n\t| { status: \"inactive\" }\n\t| { status: \"active\"; tutorial: Tutorial; stepIndex: number };\n\nexport interface ITutorialContext {\n\tstate: TutorialState;\n\t/** The currently active tutorial, or null when none is running. */\n\tactiveTutorial: Tutorial | null;\n\t/** The currently active step, or null when no tutorial is running. */\n\tcurrentStep: TutorialStep | null;\n\tisActive: boolean;\n\t/** Start a tutorial. Replaces any tutorial already running, since only one runs at a time. */\n\tstart: (tutorial: Tutorial) => void;\n\tstop: () => void;\n\t/** Advance to the next step. Stops the tutorial when called on the last step. */\n\tnext: () => void;\n\tprevious: () => void;\n\tgoToStep: (stepId: string) => void;\n\t/** Whether the given step id is the currently active step. */\n\tisStepActive: (stepId: string) => boolean;\n\t/** Whether a tutorial with showMode=\"once\" has already been completed/dismissed. */\n\thasSeenTutorial: (tutorialId: string) => boolean;\n}\n\nexport const TutorialContext = createContext<ITutorialContext | null>(null);\n","import { useContext } from \"preact/hooks\";\nimport { TutorialContext } from \"../../context/tutorial-context\";\n\nconst useTutorial = () => {\n\tconst context = useContext(TutorialContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTutorial must be used within a TutorialProvider\");\n\t}\n\treturn context;\n};\n\nexport default useTutorial;\n","import { Tutorial } from \"./context/tutorial-context\";\n\nexport enum TutorialId {\n\tIntro = \"intro\"\n}\n\n// Step ids are namespaced by tutorial so components can match them unambiguously.\nexport enum IntroTutorialStep {\n\tWelcome = \"intro:welcome\"\n}\n\n// Central registry of every tutorial. `start(tutorials[TutorialId.X])` runs one,\n// and the autostart hook scans this for tutorials flagged `autoStart`.\nexport const TUTORIALS = {\n\t[TutorialId.Intro]: {\n\t\tid: TutorialId.Intro,\n\t\tsteps: [{ id: IntroTutorialStep.Welcome }],\n\t\toptions: { autoStart: true, showMode: \"first-load\" }\n\t}\n} as const satisfies Record<TutorialId, Tutorial>;\n","import { useId } from \"preact/hooks\";\n\nconst COLORS = {\n\tstroke: \"#000000\",\n\tgradientStart: \"#ffffff\",\n\tgradientEnd: \"#6e6e6e\",\n\tlid: \"#7a7a7a\",\n\tpaper: \"#efefef\",\n\ttag: \"#919191\",\n\tsparkle: \"#f8faff\"\n} as const;\n\nconst TutorialIntroAnimation = () => {\n\tconst uid = useId();\n\n\treturn (\n\t\t<div className=\"size-48 relative overflow-hidden\">\n\t\t\t<svg\n\t\t\t\tclassName=\"size-60 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n\t\t\t\tfill=\"none\"\n\t\t\t\theight=\"100%\"\n\t\t\t\twidth=\"100%\"\n\t\t\t\tviewBox=\"0 0 810 810\"\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i0`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={112.771}\n\t\t\t\t\t\ty2={0.882}\n\t\t\t\t\t\tx1={-113.083}\n\t\t\t\t\t\ty1={0.882}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i1`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={-30.286}\n\t\t\t\t\t\ty2={172.522}\n\t\t\t\t\t\tx1={73.352}\n\t\t\t\t\t\ty1={-242.242}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i2`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={163.96}\n\t\t\t\t\t\ty2={0.808}\n\t\t\t\t\t\tx1={-164.788}\n\t\t\t\t\t\ty1={0.808}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i3`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={163.96}\n\t\t\t\t\t\ty2={0.846}\n\t\t\t\t\t\tx1={-164.788}\n\t\t\t\t\t\ty1={0.846}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i4`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={148.903}\n\t\t\t\t\t\ty2={0.242}\n\t\t\t\t\t\tx1={-149.633}\n\t\t\t\t\t\ty1={0.242}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<filter id={`${uid}i5`}>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\tvalues=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</filter>\n\t\t\t\t\t<mask\n\t\t\t\t\t\theight={20000}\n\t\t\t\t\t\twidth={20000}\n\t\t\t\t\t\ty={-10000}\n\t\t\t\t\t\tx={-10000}\n\t\t\t\t\t\tmaskContentUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tmaskUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaskType: \"alpha\"\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tmask-type=\"alpha\"\n\t\t\t\t\t\tid={`${uid}i6`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<g filter={`url(#${uid}i5)`} transform=\"matrix(1,0,0,1,405,405)\">\n\t\t\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\t\tfill={COLORS.lid}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-488.406,113.16,-488.406,113.16C-488.406,113.16,-178.655,203.91,-178.655,203.91C-178.655,203.91,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-505.339,117.399,-505.339,117.399C-505.339,117.399,-195.589,208.149,-195.589,208.149C-195.589,208.149,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-519.368,121.577,-519.368,121.577C-519.368,121.577,-209.618,212.327,-209.618,212.327C-209.618,212.327,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-531.612,125.377,-531.612,125.377C-531.612,125.377,-221.862,216.127,-221.862,216.127C-221.862,216.127,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-541.474,127.887,-541.474,127.887C-541.474,127.887,-231.724,218.636,-231.724,218.636C-231.724,218.636,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-548.98,130.174,-548.98,130.174C-548.98,130.174,-239.23,220.924,-239.23,220.924C-239.23,220.924,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.37 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.7 0.57; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</mask>\n\t\t\t\t</defs>\n\t\t\t\t<g\n\t\t\t\t\ttransform=\"matrix(1,0,0,1,413.184,613.4)\"\n\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\tid={`${uid}i8`}\n\t\t\t\t>\n\t\t\t\t\t<animate\n\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\tkeyTimes=\"0; 0.113016; 1\"\n\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t/>\n\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z\"\n\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\tfill={COLORS.paper}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-89.423,63.119,-89.423,63.119C-57.331,72.617,-23.195,72.761,8.976,63.536C8.976,63.536,114.589,32.319,181.302,13.661C208.689,6.001,236.316,-13.4,165.135,-34.042C127.936,-44.83,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-89.423,63.119,-89.423,63.119C-57.331,72.617,-23.195,72.761,8.976,63.536C8.976,63.536,114.589,32.319,181.302,13.661C208.689,6.001,236.316,-13.4,165.135,-34.042C127.936,-44.83,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.15493; 0.394366; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.373 0.173 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g mask={`url(#${uid}i6)`} id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,-42.983,0)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i0)`}\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\td=\"M112.927,-220.427C112.927,-220.427,101,-225.479,88.066,-229.22C69.689,-234.535,49.358,-235.059,27.776,-228.87C-68.354,-201.305,-112.927,-86.452,-112.927,-17.202C-112.927,33.185,-112.927,206.445,-112.927,206.445C-112.927,206.445,-113.313,284.279,-113.313,284.279C-113.313,284.279,-96.148,289.359,-96.148,289.359C-96.148,289.359,112.927,-220.427,112.927,-220.427Z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,8.583,3.123)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i1)`}\n\t\t\t\t\t\t\t\t\td=\"M146.941,201.744C146.941,201.744,-147.713,286.236,-147.713,286.236C-147.713,286.236,-147.327,36.308,-147.327,-14.079C-147.327,-83.329,-102.754,-198.182,-6.624,-225.747C80.558,-250.746,147.327,-166.206,147.327,-98.79C147.327,-48.348,146.941,201.744,146.941,201.744Z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g transform=\"matrix(1,0,0,1,405,405)\" id={`${uid}i12`}>\n\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25\"\n\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25; M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25; M-28.875,161C-28.875,161,-178.203,203.63,-178.203,203.63C-178.203,203.63,-196.578,198.505,-196.578,198.505; M-10.125,155.5C-10.125,155.5,-194.967,207.964,-194.967,207.964C-194.967,207.964,-213.209,202.896,-213.209,202.896; M7.375,150.5C7.375,150.5,-210.123,212.559,-210.123,212.559C-210.123,212.559,-228.23,207.548,-228.23,207.548; M21.625,146.5C21.625,146.5,-222.271,215.497,-222.271,215.497C-222.271,215.497,-240.241,210.545,-240.241,210.545; M34.875,143C34.875,143,-231.786,218.271,-231.786,218.271C-231.786,218.271,-249.615,213.38,-249.615,213.38; M45.125,139.5C45.125,139.5,-239.306,220.32,-239.306,220.32C-239.306,220.32,-256.987,215.492,-256.987,215.492; M50.625,138C50.625,138,-244,222.25,-244,222.25C-244,222.25,-261.5,217.5,-261.5,217.5; M50.625,138C50.625,138,-244,222.25,-244,222.25C-244,222.25,-261.5,217.5,-261.5,217.5\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.39 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.72 0.6; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.493069; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`}>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i2)`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z; M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z; M-171.874,44.188C-171.874,44.188,-171.874,36.908,-171.874,36.908C-171.874,36.908,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-139.579,53.65,-139.579,53.65C-139.579,53.65,-171.874,44.188,-171.874,44.188Z; M-160.124,40.688C-160.124,40.688,-160.124,33.408,-160.124,33.408C-160.124,33.408,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-127.829,50.15,-127.829,50.15C-127.829,50.15,-160.124,40.688,-160.124,40.688Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 0.84507; 0.915493; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.274 0.17 1; 0.226 0 0.481 1; 0.167 0 0.571 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,1.091)\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683; M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683; M164.374,-42.529C164.374,-42.529,-139.579,45.279,-139.579,45.279C-139.579,45.279,-171.874,35.817,-171.874,35.817; M164.374,-42.529C164.374,-42.529,-127.829,41.779,-127.829,41.779C-127.829,41.779,-160.124,32.317,-160.124,32.317; M164.374,-42.529C164.374,-42.529,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M164.374,-42.529C164.374,-42.529,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 0.84507; 0.915493; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.274 0.17 1; 0.226 0 0.481 1; 0.167 0 0.833 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i14`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.577081; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(102.339,-76.301)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"102.339 -76.301; 102.339 -76.301; 102.339 -47.801; 102.339 -47.801\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.619718; 0.690141; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i15`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.662093; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(41.72,-51.66)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"41.72 -51.66; 41.72 -51.66; 41.72 -30.16; 41.72 -30.16\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.704225; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i16`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.704099; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-19.063,-36.403)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-19.063 -36.403; -19.063 -36.403; -19.063 -13.403; -19.063 -13.403\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.746479; 0.816902; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.648091; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`}>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i3)`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,139.329,-52.65,139.329,-52.65C139.329,-52.65,171.624,-43.188,171.624,-43.188C171.624,-43.188,171.624,-35.908,171.624,-35.908C171.624,-35.908,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-166.499,42.313C-166.499,42.313,-166.499,35.033,-166.499,35.033C-166.499,35.033,129.954,-50.025,129.954,-50.025C129.954,-50.025,162.249,-40.563,162.249,-40.563C162.249,-40.563,162.249,-33.283,162.249,-33.283C162.249,-33.283,-134.204,51.775,-134.204,51.775C-134.204,51.775,-166.499,42.313,-166.499,42.313Z; M-166.499,42.313C-166.499,42.313,-166.499,35.033,-166.499,35.033C-166.499,35.033,129.954,-50.025,129.954,-50.025C129.954,-50.025,162.249,-40.563,162.249,-40.563C162.249,-40.563,162.249,-33.283,162.249,-33.283C162.249,-33.283,-134.204,51.775,-134.204,51.775C-134.204,51.775,-166.499,42.313,-166.499,42.313Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.859155; 0.929577; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.23 0.27 0.17 1; 0.17 0 0.7 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,1.091)\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M171.624,-44.279C171.624,-44.279,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M162.249,-41.654C162.249,-41.654,-134.204,43.404,-134.204,43.404C-134.204,43.404,-166.499,33.942,-166.499,33.942; M162.249,-41.654C162.249,-41.654,-134.204,43.404,-134.204,43.404C-134.204,43.404,-166.499,33.942,-166.499,33.942\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.859155; 0.929577; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.23 0.27 0.17 1; 0.17 0 0.7 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i18`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.746105; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-43.282,-29.111)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-43.282 -29.111; -43.282 -29.111; -43.282 -5.111; -43.282 -5.111\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.788733; 0.859155; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i19`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.718101; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-104.065,-23.354)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-104.065 -23.354; -104.065 -23.354; -104.065 11.646; -104.065 11.646\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.760563; 0.830986; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,0,0)\"\n\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\tid={`${uid}i21`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.310044; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g id={`${uid}i22`} transform=\"matrix(1,0,0,1,3.805,7.012)\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z\"\n\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i4)`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.268,88.027,-149.268,88.027C-149.268,88.027,-113.951,98.464,-113.951,98.464C-103.237,101.63,-91.843,101.685,-81.099,98.622C-81.099,98.622,149.268,32.948,149.268,32.948C149.268,32.948,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.268,88.027,-149.268,88.027C-149.268,88.027,-113.951,98.464,-113.951,98.464C-103.237,101.63,-91.843,101.685,-81.099,98.622C-81.099,98.622,149.268,32.948,149.268,32.948C149.268,32.948,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z\"\n\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g visibility=\"hidden\" id={`${uid}i20`}>\n\t\t\t\t\t<animate\n\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\tkeyTimes=\"0; 0.169024; 1\"\n\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t/>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,0,-59.118)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z\"\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\tfill={COLORS.paper}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z; M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z; M-159.546,20.263C-159.546,20.263,91.321,-51.205,91.321,-51.205C91.321,-51.205,159.548,-31.034,159.548,-31.034C159.548,-31.034,159.548,-18.845,159.548,-18.845C159.548,-18.845,-81.927,49.624,-81.927,49.624C-89.514,51.775,-97.554,51.731,-105.116,49.495C-105.116,49.495,-159.548,33.402,-159.548,33.402C-159.548,33.402,-159.546,20.27,-159.546,20.27C-159.546,20.27,-159.546,20.263,-159.546,20.263Z; M-159.546,20.263C-159.546,20.263,91.321,-51.205,91.321,-51.205C91.321,-51.205,159.548,-31.034,159.548,-31.034C159.548,-31.034,159.548,-18.845,159.548,-18.845C159.548,-18.845,-81.927,49.624,-81.927,49.624C-89.514,51.775,-97.554,51.731,-105.116,49.495C-105.116,49.495,-159.548,33.402,-159.548,33.402C-159.548,33.402,-159.546,20.27,-159.546,20.27C-159.546,20.27,-159.546,20.263,-159.546,20.263Z\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.408451; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.05 0.42 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,-55.127)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722\"\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722; M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722; M159.548,-35.025C159.548,-35.025,-81.927,33.444,-81.927,33.444C-89.514,35.595,-97.554,35.55,-105.116,33.314C-105.116,33.314,-159.548,17.222,-159.548,17.222; M159.548,-35.025C159.548,-35.025,-81.927,33.444,-81.927,33.444C-89.514,35.595,-97.554,35.55,-105.116,33.314C-105.116,33.314,-159.548,17.222,-159.548,17.222\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.408451; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.05 0.42 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g transform=\"matrix(1,0,0,1,55.418,-104.524)\" id={`${uid}i23`}>\n\t\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,0,0)\"\n\t\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\t\tid={`${uid}i24`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.563079; 1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g id={`${uid}i25`} transform=\"matrix(1,0,0,1,0,-1.577)\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z\"\n\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.tag}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z; M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z; M-32.228,28.25C-32.228,28.25,12.116,15.95,12.116,15.95C12.116,15.95,35.903,-24.762,35.903,-24.762C35.903,-24.762,32.228,-28.25,32.228,-28.25C32.228,-28.25,-12.116,-15.95,-12.116,-15.95C-12.116,-15.95,-35.903,24.762,-35.903,24.762C-35.903,24.762,-32.228,28.25,-32.228,28.25Z; M-32.228,28.25C-32.228,28.25,12.116,15.95,12.116,15.95C12.116,15.95,35.903,-24.762,35.903,-24.762C35.903,-24.762,32.228,-28.25,32.228,-28.25C32.228,-28.25,-12.116,-15.95,-12.116,-15.95C-12.116,-15.95,-35.903,24.762,-35.903,24.762C-35.903,24.762,-32.228,28.25,-32.228,28.25Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,1.838,0.166)\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506\"\n\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506; M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506; M-34.065,26.506C-34.065,26.506,-10.278,-14.206,-10.278,-14.206C-10.278,-14.206,34.065,-26.506,34.065,-26.506; M-34.065,26.506C-34.065,26.506,-10.278,-14.206,-10.278,-14.206C-10.278,-14.206,34.065,-26.506,34.065,-26.506\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,55.418,-104.524)\"\n\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\tid={`${uid}i23`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.493069; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,2.099,14.125)\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z\"\n\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\tfill={COLORS.tag}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\tvalues=\"M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z; M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z; M5.777,-15.702C5.777,-15.702,-4.684,-13.027,-4.684,-13.027C-4.684,-13.027,-9.993,-4.596,-9.993,-4.596C-9.993,-4.596,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,5.777,-15.702,5.777,-15.702Z; M5.777,-15.702C5.777,-15.702,-4.684,-13.027,-4.684,-13.027C-4.684,-13.027,-9.993,-4.596,-9.993,-4.596C-9.993,-4.596,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,5.777,-15.702,5.777,-15.702Z\"\n\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.647887; 1\"\n\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g display=\"none\" transform=\"matrix(1,0,0,1,405,405)\" id={`${uid}i26`}>\n\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\tfill={COLORS.lid}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-488.406,113.16,-488.406,113.16C-488.406,113.16,-178.655,203.91,-178.655,203.91C-178.655,203.91,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-505.339,117.399,-505.339,117.399C-505.339,117.399,-195.589,208.149,-195.589,208.149C-195.589,208.149,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-519.368,121.577,-519.368,121.577C-519.368,121.577,-209.618,212.327,-209.618,212.327C-209.618,212.327,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-531.612,125.377,-531.612,125.377C-531.612,125.377,-221.862,216.127,-221.862,216.127C-221.862,216.127,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-541.474,127.887,-541.474,127.887C-541.474,127.887,-231.724,218.636,-231.724,218.636C-231.724,218.636,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-548.98,130.174,-548.98,130.174C-548.98,130.174,-239.23,220.924,-239.23,220.924C-239.23,220.924,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.37 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.7 0.57; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroAnimation;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { IntroTutorialStep } from \"../../../lib/tutorials\";\nimport Dialog from \"../../dialog/common\";\nimport TutorialIntroAnimation from \"./tutorial-intro-animation\";\n\n// Single-step intro tutorial: a dialog with one accept button that finishes it.\n// The shared backdrop is already shown while the tutorial is active, so this\n// dialog renders without its own backdrop to keep a single dimming layer.\n// Clicking anywhere outside the modal advances the tutorial via `next`.\nconst TutorialIntroDialog = () => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst { isStepActive, next } = useTutorial();\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center -translate-y-[calc(var(--rf-summary-height,0px)/2)]\"\n\t\t\tisOpen={isStepActive(IntroTutorialStep.Welcome)}\n\t\t\tonConfirm={next}\n\t\t\tonClose={next}\n\t\t\tshowBackdrop={false}\n\t\t\tdismissOnBackdropClick={true}\n\t\t\tqueue={false}\n\t\t>\n\t\t\t<Dialog.Exit />\n\t\t\t<TutorialIntroAnimation />\n\t\t\t<Dialog.Title className=\"text-3xl\">{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept icon={null}>{t(\"confirm\")}</Dialog.Accept>\n\t\t</Dialog.Modal>\n\t);\n};\n\nexport default TutorialIntroDialog;\n","import ReturnDecisionDialog from \"../dialog/return-decision-dialog\";\nimport TutorialIntroDialog from \"../tutorial/intro/tutorial-intro-dialog\";\n\nconst DialogHandler = () => {\n\treturn (\n\t\t<>\n\t\t\t<ReturnDecisionDialog />\n\t\t\t<TutorialIntroDialog />\n\t\t</>\n\t);\n};\n\nexport default DialogHandler;\n","import { createContext } from \"preact\";\nimport { ToastOptions, ToastQueue } from \"../../components/toast/toast\";\n\nexport interface ToastConfiguration extends Omit<ToastOptions, \"id\"> {\n\tid?: string; // Make id optional for easier usage\n}\n\nexport const DEFAULT_TOAST_DURATION = 5000; // Default duration in milliseconds\nexport const TOAST_ANIMATION_DURATION = 300; // Default animation duration in milliseconds\n\nexport interface IToastContext {\n\tqueue: ToastQueue[];\n\tadd: (options: ToastConfiguration) => string; // Returns the ID of the added toast\n\tremove: (id: string) => void;\n\tclear: () => void;\n}\n\nexport const ToastContext = createContext<IToastContext | null>(null);\n","import { useContext } from \"preact/hooks\";\nimport { ToastContext } from \"../../context/toast-context\";\n\nconst useToast = () => {\n\tconst context = useContext(ToastContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useToast must be used within a ToastProvider\");\n\t}\n\n\treturn context;\n};\n\nexport default useToast;\n","import { useEffect } from \"preact/hooks\";\nimport {\n\temitEvent,\n\tregisterBridge,\n\tunregisterBridge\n} from \"../../../../api/state-bridge\";\nimport { WidgetViewState } from \"../../types\";\nimport useReturnContext from \"../context/use-return-context\";\nimport useToast from \"../context/use-toast\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\n/**\n * Hook that registers the widget's React state with the API bridge.\n * This allows the public API to interact with the widget's internal state.\n */\nconst useApiBridge = () => {\n\tconst { widgetViewState, config } = useWidgetContext();\n\tconst returnContext = useReturnContext();\n\tconst toastContext = useToast();\n\n\t// Register the bridge on mount, unregister on unmount\n\tuseEffect(() => {\n\t\tregisterBridge({ widgetViewState, returnContext, toastContext, config });\n\n\t\treturn () => {\n\t\t\tunregisterBridge();\n\t\t};\n\t}, [widgetViewState, returnContext, toastContext, config]);\n\n\t// Emit drawer state change events\n\tuseEffect(() => {\n\t\tconst state = widgetViewState.value;\n\t\tif (state === WidgetViewState.Open) {\n\t\t\temitEvent(\"drawer:open\");\n\t\t} else {\n\t\t\temitEvent(\"drawer:close\");\n\t\t}\n\t}, [widgetViewState.value]);\n\n\t// Emit cart update events\n\tuseEffect(() => {\n\t\tconst cart = returnContext.cartState.value.data?.original;\n\t\tif (cart) {\n\t\t\temitEvent(\"cart:updated\", cart);\n\t\t}\n\t}, [returnContext.cartState.value.data]);\n\n\t// Emit calculation update events\n\tuseEffect(() => {\n\t\tconst calculation = returnContext.calculationState.value.data;\n\t\tif (calculation) {\n\t\t\temitEvent(\"calculation:updated\", calculation);\n\t\t}\n\t}, [returnContext.calculationState.value.data]);\n};\n\nexport default useApiBridge;\n","export enum ProductErrorState {\n\tUnknown = \"unknown_error\",\n\tNetworkError = \"network_error\",\n\tProductLimit = \"product_limit\"\n}\n\nconst PRODUCT_ERROR_CODE_TO_STATE = {\n\t422: ProductErrorState.ProductLimit\n} satisfies Partial<Record<number, ProductErrorState>>;\n\nexport function getErrorStateFromCode(code: number | null): ProductErrorState {\n\tif (code !== null && code in PRODUCT_ERROR_CODE_TO_STATE) {\n\t\treturn PRODUCT_ERROR_CODE_TO_STATE[\n\t\t\tcode as keyof typeof PRODUCT_ERROR_CODE_TO_STATE\n\t\t];\n\t}\n\treturn ProductErrorState.Unknown;\n}\n","import { TimeoutInterceptorHandler } from \".\";\nimport { CustomEventPayloadMap, InternalCustomEvent } from \"../custom-events\";\nimport { logger } from \"../logger\";\n\nexport type FetchInterceptionCallback = (\n\tpayload: CustomEventPayloadMap[InternalCustomEvent.FetchInterception]\n) => void;\n\nfunction createFetchInterceptor(\n\tcallback?: FetchInterceptionCallback\n): TimeoutInterceptorHandler {\n\tlogger.info(\"Initializing fetch interceptor\");\n\n\tconst originalFetch = window.fetch;\n\n\twindow.__rf_original_fetch ??= originalFetch;\n\twindow.fetch.rf_interception = true;\n\n\tconst proxy = new Proxy(originalFetch, {\n\t\tapply: async function (target, arg, argumentsList) {\n\t\t\tconst requestUrl: string | URL = argumentsList[0];\n\n\t\t\t// Call the original fetch and get the response\n\t\t\tconst response = (await Reflect.apply(target, arg, argumentsList)) as\n\t\t\t\t| Response\n\t\t\t\t| undefined;\n\n\t\t\t// Clone the response for our processing (so other scripts can still use the original)\n\t\t\tconst clonedResponse = response?.clone();\n\n\t\t\tcallback?.({\n\t\t\t\tresponse: clonedResponse,\n\t\t\t\trequestUrl\n\t\t\t});\n\n\t\t\treturn response;\n\t\t}\n\t});\n\n\twindow.fetch = proxy;\n\n\t// Return cleanup function\n\treturn (interval: ReturnType<typeof setInterval> | undefined) => {\n\t\tif (!window.__rf_original_fetch) return;\n\n\t\tlogger.info(\"Resetting fetch interceptor\");\n\t\twindow.fetch = window.__rf_original_fetch;\n\t\twindow.fetch.rf_interception = false;\n\n\t\tif (interval) {\n\t\t\tclearInterval(interval);\n\t\t}\n\t};\n}\n\nexport default createFetchInterceptor;\n","import { TimeoutInterceptorHandler } from \".\";\nimport {\n\tCustomEventPayloadMap,\n\tInterceptionPayload,\n\tInternalCustomEvent,\n\tXHRResponse\n} from \"../custom-events\";\nimport { logger } from \"../logger\";\n\nexport type XHRInterceptionCallback = (\n\tpayload: CustomEventPayloadMap[InternalCustomEvent.XHRInterception]\n) => void;\n\nfunction createXHRInterceptor(\n\tcallback?: XHRInterceptionCallback\n): TimeoutInterceptorHandler {\n\tlogger.info(\"Initializing XHR interceptor\");\n\n\tconst originalXHR = window.XMLHttpRequest;\n\twindow.__rf_original_xhr ??= originalXHR;\n\n\t// Create a proxy for the XMLHttpRequest constructor\n\tconst XHRProxy = new Proxy(originalXHR, {\n\t\tconstruct: function (target, argumentsList) {\n\t\t\t// Create the original XHR instance\n\t\t\tconst xhr = new target(\n\t\t\t\t...(argumentsList as ConstructorParameters<typeof XMLHttpRequest>)\n\t\t\t);\n\n\t\t\t// Store original methods\n\t\t\tconst originalOpen = xhr.open;\n\t\t\tconst originalSend = xhr.send;\n\n\t\t\t// Track request data\n\t\t\tlet requestUrl: string = \"\";\n\n\t\t\t// Intercept open method to capture URL and method\n\t\t\txhr.open = function (\n\t\t\t\tmethod: string,\n\t\t\t\turl: string,\n\t\t\t\tasync?: boolean,\n\t\t\t\tuser?: string,\n\t\t\t\tpassword?: string\n\t\t\t) {\n\t\t\t\trequestUrl = url;\n\t\t\t\treturn originalOpen.call(\n\t\t\t\t\tthis,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tasync ?? false,\n\t\t\t\t\tuser,\n\t\t\t\t\tpassword\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Intercept send method to capture request body and set up response handling\n\t\t\txhr.send = function (body) {\n\t\t\t\t// Set up event listeners for response handling\n\t\t\t\tconst originalOnReadyStateChange = xhr.onreadystatechange;\n\n\t\t\t\txhr.onreadystatechange = function (event) {\n\t\t\t\t\t// Call original handler first\n\t\t\t\t\tif (originalOnReadyStateChange) {\n\t\t\t\t\t\toriginalOnReadyStateChange.call(this, event);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If request is complete, trigger our callback\n\t\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcallback?.(resolveXHRPayload(xhr, requestUrl));\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tlogger.error(\"Error in XHR interception callback:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Also handle load event as backup\n\t\t\t\tconst originalOnLoad = xhr.onload;\n\n\t\t\t\txhr.onload = function (event) {\n\t\t\t\t\tif (originalOnLoad) {\n\t\t\t\t\t\toriginalOnLoad.call(this, event);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Trigger callback if onreadystatechange didn't fire\n\t\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcallback?.(resolveXHRPayload(xhr, requestUrl));\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tlogger.error(\"Error in XHR interception callback:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn originalSend.call(this, body);\n\t\t\t};\n\n\t\t\treturn xhr;\n\t\t}\n\t});\n\n\t// Mark as intercepted and replace global XMLHttpRequest\n\twindow.XMLHttpRequest.rf_interception = true;\n\twindow.XMLHttpRequest = XHRProxy;\n\n\t// Return cleanup function\n\treturn (interval?: ReturnType<typeof setInterval>) => {\n\t\tif (!window.__rf_original_xhr) return;\n\n\t\tlogger.info(\"Resetting XHR interceptor\");\n\t\twindow.XMLHttpRequest = window.__rf_original_xhr;\n\t\twindow.XMLHttpRequest.rf_interception = false;\n\n\t\tif (interval) {\n\t\t\tclearInterval(interval);\n\t\t}\n\t};\n}\n\nfunction resolveXHRPayload(\n\txhr: XMLHttpRequest,\n\turl: string\n): InterceptionPayload {\n\tlet response: XHRResponse;\n\n\tconst isTextResponse = xhr.responseType === \"text\";\n\tconst isJsonResponse =\n\t\txhr.responseType === \"json\" ||\n\t\txhr.getResponseHeader(\"Content-Type\")?.includes(\"application/json\");\n\n\tif (isTextResponse) {\n\t\ttry {\n\t\t\tresponse = JSON.parse(xhr.response);\n\t\t} catch (_) {\n\t\t\t// Ignore JSON parsing errors\n\t\t}\n\t} else if (isJsonResponse) {\n\t\tresponse = xhr.response;\n\t}\n\n\treturn {\n\t\tresponse,\n\t\trequestUrl: url\n\t};\n}\n\nexport default createXHRInterceptor;\n","import { InterceptionResponse } from \"../custom-events\";\nimport {\n\tAutoOpenTriggerEndpoint,\n\tNetworkInterceptionMethod\n} from \"../initialization/types\";\nimport { logger } from \"../logger\";\nimport createFetchInterceptor, { FetchInterceptionCallback } from \"./fetch\";\nimport createXHRInterceptor, { XHRInterceptionCallback } from \"./xhr\";\n\nconst ADD_ENDPOINTS = [\"/cart/add\", \"/cart/add.js\"] as const;\nconst UPDATE_ENDPOINTS = [\"/cart/update\", \"/cart/update.js\"] as const;\nconst CHANGE_ENDPOINTS = [\"/cart/change\", \"/cart/change.js\"] as const;\nconst CLEAR_ENDPOINTS = [\"/cart/clear\", \"/cart/clear.js\"] as const;\n\nconst ENDPOINTS = {\n\tadd: ADD_ENDPOINTS,\n\tupdate: UPDATE_ENDPOINTS,\n\tchange: CHANGE_ENDPOINTS\n} as const satisfies Record<AutoOpenTriggerEndpoint, readonly string[]>;\n\ntype Endpoints = (typeof ENDPOINTS)[keyof typeof ENDPOINTS];\n\nconst ENDPOINTS_TO_INTERCEPT = [\n\t...ADD_ENDPOINTS,\n\t...UPDATE_ENDPOINTS,\n\t...CHANGE_ENDPOINTS,\n\t...CLEAR_ENDPOINTS,\n\t\"/?section_id=cart-drawer\", // Shopify Dawn and other themes use this on item add\n\t\"/api/unstable/graphql.json?operation_name=cartQuery\" // Sometimes Cranks&Coffee calls this on item add\n];\n\ntype InterceptionCallback = FetchInterceptionCallback | XHRInterceptionCallback;\nexport type TimeoutInterceptorHandler = (\n\tinterval?: ReturnType<typeof setInterval> | undefined\n) => void;\n\ntype InitializeNetworkOptions = {\n\tmonitor?: boolean;\n\tmethod?: NetworkInterceptionMethod;\n};\n\nexport function initializeNetworkInterceptors(\n\tcallback: InterceptionCallback,\n\topts: InitializeNetworkOptions = {}\n) {\n\tconst { monitor = false, method } = opts;\n\n\tif (method === \"none\") {\n\t\tlogger.warn(\n\t\t\t\"Network interception method set to 'none'; skipping interceptor initialization.\"\n\t\t);\n\t\treturn () => {};\n\t}\n\n\tlet cleanupFetchHandler: TimeoutInterceptorHandler | undefined;\n\tlet cleanupXHRHandler: TimeoutInterceptorHandler | undefined;\n\n\tlet resolvedMethod: Exclude<NetworkInterceptionMethod, \"none\">;\n\n\tswitch (method) {\n\t\tcase \"fetch\": {\n\t\t\tresolvedMethod = \"fetch\";\n\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"xhr\": {\n\t\t\tresolvedMethod = \"xhr\";\n\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"both\":\n\t\tdefault: {\n\t\t\tresolvedMethod = \"both\";\n\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlogger.info(`Using network interception method: ${resolvedMethod}`);\n\n\tlet interval: ReturnType<typeof setInterval> | undefined;\n\n\tif (monitor) {\n\t\tlogger.info(\"Monitoring network interceptors\");\n\n\t\tinterval = setInterval(() => {\n\t\t\tif (cleanupFetchHandler && !window.fetch.rf_interception) {\n\t\t\t\tlogger.info(\"Re-initializing fetch interceptor\");\n\t\t\t\tcleanupFetchHandler(interval);\n\t\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\t}\n\t\t\tif (cleanupXHRHandler && !window.XMLHttpRequest.rf_interception) {\n\t\t\t\tlogger.info(\"Re-initializing XHR interceptor\");\n\t\t\t\tcleanupXHRHandler(interval);\n\t\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\t}\n\t\t}, 200);\n\t}\n\n\treturn () => {\n\t\tcleanupFetchHandler?.(interval);\n\t\tcleanupXHRHandler?.(interval);\n\t};\n}\n\nexport interface UrlValidationResult {\n\tisValid: boolean;\n\tisForbidden: boolean;\n\tisTriggerEndpoint: boolean;\n\ttriggerEndpointPaths: Endpoints;\n}\n\nexport function validateInterceptionRequestUrl(\n\trequestUrl: string | undefined | null,\n\ttriggerEndpoint?: AutoOpenTriggerEndpoint\n): UrlValidationResult {\n\tconst triggerEndpointValue = triggerEndpoint ?? \"add\";\n\tconst triggerEndpointPaths = ENDPOINTS[triggerEndpointValue];\n\n\t// Early return for invalid input\n\tif (!requestUrl || typeof requestUrl !== \"string\") {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\tisForbidden: false,\n\t\t\tisTriggerEndpoint: false,\n\t\t\ttriggerEndpointPaths\n\t\t};\n\t}\n\n\tconst BLOCKED_PATTERNS = [\"?_\", \"rf=true\"];\n\n\t// Check for forbidden patterns\n\tconst isForbidden = BLOCKED_PATTERNS.some(pattern =>\n\t\trequestUrl.includes(pattern)\n\t);\n\n\t// Check if URL matches any intercepted endpoints\n\tconst matchesInterceptedEndpoint = ENDPOINTS_TO_INTERCEPT.some(endpoint =>\n\t\trequestUrl.includes(endpoint)\n\t);\n\n\t// Check if it's an add endpoint (only if valid)\n\tconst isTriggerEndpoint = triggerEndpointPaths.some(endpoint =>\n\t\trequestUrl.includes(endpoint)\n\t);\n\n\tconst isValid = !isForbidden && matchesInterceptedEndpoint;\n\n\t// Early return if not valid\n\tif (!isValid) {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\tisForbidden,\n\t\t\tisTriggerEndpoint,\n\t\t\ttriggerEndpointPaths\n\t\t};\n\t}\n\n\treturn {\n\t\tisValid: true,\n\t\tisForbidden: false,\n\t\tisTriggerEndpoint,\n\t\ttriggerEndpointPaths\n\t};\n}\n\nexport async function parseInterceptionResponse(\n\tresponse: InterceptionResponse\n): Promise<Record<string, unknown> | undefined> {\n\tif (!response) return undefined;\n\n\tif (response instanceof Response) {\n\t\t// If it's a Response, we need to parse it\n\t\treturn (await response.json().catch(() => undefined)) as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t} else if (typeof response === \"string\") {\n\t\t// If it's a string, attempt to parse as JSON (typically from XHR)\n\t\ttry {\n\t\t\treturn JSON.parse(response);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn response;\n}\n","import { createContext } from \"preact\";\nimport { UseArrayReturn } from \"../hooks/common/use-array\";\n\nexport type CustomError = {\n\tid: string;\n\tmessage: preact.ComponentChildren;\n\tblocking?: boolean; // Indicates if the error is blocking the flow\n};\n\nexport interface IErrorContext extends Omit<\n\tUseArrayReturn<CustomError>,\n\t\"array\"\n> {\n\terrors: UseArrayReturn<CustomError>[\"array\"];\n}\n\nexport const ErrorContext = createContext<IErrorContext>({} as IErrorContext);\n","import { useContext } from \"preact/hooks\";\nimport { ErrorContext } from \"../../context/error-context\";\n\nconst useErrors = () => {\n\tconst context = useContext(ErrorContext);\n\tif (!context) {\n\t\tthrow new Error(\"useErrors must be used within an ErrorProvider\");\n\t}\n\treturn context;\n};\n\nexport default useErrors;\n","import { useCallback, useMemo } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { ShopifyCart, ShopifyCartItem } from \"../../types\";\nimport {\n\tcompareCarts,\n\tgetCart,\n\tnormalizeCart,\n\tNormalizeCartResult,\n\tupdateCartStorage\n} from \"../../utils/cart\";\nimport { InterceptionResponse } from \"../../utils/custom-events\";\nimport { getErrorStateFromCode } from \"../../utils/errors\";\nimport { formatSelectedItems } from \"../../utils/helpers\";\nimport { parseInterceptionResponse } from \"../../utils/interceptor\";\nimport useErrors from \"../context/use-errors\";\nimport useReturnContext from \"../context/use-return-context\";\nimport useToast from \"../context/use-toast\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useCartActions = () => {\n\tconst t = useTranslations();\n\tconst { add: addToast } = useToast();\n\tconst { cartState, orderState, calculationState } = useReturnContext();\n\tconst {\n\t\tconfig: {\n\t\t\tdata: { formData }\n\t\t}\n\t} = useWidgetContext();\n\tconst errors = useErrors();\n\n\tconst lineItems = useMemo(() => formatSelectedItems(formData), [formData]);\n\n\tconst isNewItem = useCallback(\n\t\t(item: ShopifyCartItem, originalCart: ShopifyCart | null) => {\n\t\t\tconst existing = originalCart?.items.find(\n\t\t\t\te => e.variant_id === item.variant_id\n\t\t\t);\n\t\t\tif (!existing) return true;\n\t\t\treturn existing.quantity !== item.quantity;\n\t\t},\n\t\t[]\n\t);\n\n\tconst notifyExclusions = useCallback(\n\t\t(\n\t\t\tresult: NormalizeCartResult<ShopifyCart>,\n\t\t\toriginalCart: ShopifyCart | null\n\t\t) => {\n\t\t\tconst newExcludedItems = result.excludedItems.filter(item =>\n\t\t\t\tisNewItem(item, originalCart)\n\t\t\t);\n\t\t\tconst newBundleItems = result.bundleItems.filter(item =>\n\t\t\t\tisNewItem(item, originalCart)\n\t\t\t);\n\n\t\t\tif (newExcludedItems.length > 0) {\n\t\t\t\taddToast({\n\t\t\t\t\ttone: \"error\",\n\t\t\t\t\tmessage: t.rich(\"toast.product_exchange_error\", {\n\t\t\t\t\t\tproduct_name: newExcludedItems[0].title,\n\t\t\t\t\t\tb: chunks => (\n\t\t\t\t\t\t\t<span className=\"text-neutral-3 inline-block\">{chunks}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (newBundleItems.length > 0) {\n\t\t\t\taddToast({\n\t\t\t\t\ttone: \"error\",\n\t\t\t\t\tmessage: t.rich(\"toast.bundle_exchange_error\", {\n\t\t\t\t\t\tproduct_name: newBundleItems[0].title,\n\t\t\t\t\t\tb: chunks => (\n\t\t\t\t\t\t\t<span className=\"text-neutral-3 inline-block\">{chunks}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[isNewItem, t, addToast]\n\t);\n\n\t// --- Public API ---\n\n\tconst fetchAndUpdateCart = useCallback(async () => {\n\t\tconst order = orderState.value.data;\n\t\tif (!order) return null;\n\n\t\tconst originalCart = cartState.value.data?.original ?? null;\n\n\t\tlet freshCart: ShopifyCart;\n\t\ttry {\n\t\t\tfreshCart = await getCart(false);\n\t\t} catch (err) {\n\t\t\tcartState.set(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tpending: false,\n\t\t\t\terror: err as Error\n\t\t\t}));\n\t\t\treturn null;\n\t\t}\n\n\t\tconst productRules = order.orderData.productRules;\n\t\tconst result = normalizeCart(freshCart, productRules);\n\n\t\tnotifyExclusions(result, originalCart);\n\n\t\tconst hasChanged =\n\t\t\t!originalCart ||\n\t\t\t!compareCarts({\n\t\t\t\tcart1: originalCart,\n\t\t\t\tcart2: freshCart,\n\t\t\t\trules: productRules\n\t\t\t});\n\n\t\t// Always update state so the raw original cart stays in sync\n\t\t// (e.g. bundle items filtered by normalizeCart need to be in\n\t\t// originalCart for notifyExclusions to work on subsequent changes)\n\t\tcartState.set({\n\t\t\tdata: {\n\t\t\t\toriginal: freshCart,\n\t\t\t\ttransformed: result.cart\n\t\t\t},\n\t\t\tpending: false,\n\t\t\terror: null\n\t\t});\n\t\tupdateCartStorage(freshCart);\n\n\t\treturn {\n\t\t\torder,\n\t\t\toriginalCart,\n\t\t\tfreshCart,\n\t\t\ttransformedCart: result.cart,\n\t\t\tproductRules,\n\t\t\thasChanged\n\t\t};\n\t}, [orderState, cartState, notifyExclusions]);\n\n\tconst processCartUpdate = useCallback(\n\t\tasync (cart: ShopifyCart) => {\n\t\t\tconst order = orderState.value.data;\n\t\t\tif (!order) return null;\n\n\t\t\tconst originalCart = cartState.value.data?.original ?? null;\n\t\t\tconst productRules = order.orderData.productRules;\n\t\t\tconst result = normalizeCart(cart, productRules);\n\n\t\t\tnotifyExclusions(result, originalCart);\n\n\t\t\tcartState.set({\n\t\t\t\tdata: {\n\t\t\t\t\toriginal: cart,\n\t\t\t\t\ttransformed: result.cart\n\t\t\t\t},\n\t\t\t\tpending: false,\n\t\t\t\terror: null\n\t\t\t});\n\n\t\t\tupdateCartStorage(cart);\n\n\t\t\tawait calculationState.query({\n\t\t\t\tcart: result.cart,\n\t\t\t\torderId: order.orderData.id,\n\t\t\t\tlineItems\n\t\t\t});\n\n\t\t\treturn { transformedCart: result.cart, productRules };\n\t\t},\n\t\t[orderState, cartState, calculationState, lineItems, notifyExclusions]\n\t);\n\n\tconst handleResponseErrors = useCallback(\n\t\tasync (response: InterceptionResponse) => {\n\t\t\tconst responseBody = await parseInterceptionResponse(response);\n\n\t\t\tif (responseBody) {\n\t\t\t\tlet status: number | undefined;\n\n\t\t\t\tif (\"status\" in responseBody) {\n\t\t\t\t\tconst raw = responseBody.status;\n\t\t\t\t\tstatus = typeof raw === \"number\" ? raw : undefined;\n\t\t\t\t}\n\n\t\t\t\tif (status && !errors.has(status)) {\n\t\t\t\t\tconst errState = getErrorStateFromCode(status);\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tid: errState,\n\t\t\t\t\t\tmessage: t(`product.error.${errState}`)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[t, errors]\n\t);\n\n\tconst triggerCalculation = useCallback(\n\t\t(transformedCart: ShopifyCart, orderId: string) => {\n\t\t\tcalculationState.query({\n\t\t\t\tcart: transformedCart,\n\t\t\t\torderId,\n\t\t\t\tlineItems\n\t\t\t});\n\t\t},\n\t\t[calculationState, lineItems]\n\t);\n\n\treturn {\n\t\tfetchAndUpdateCart,\n\t\tprocessCartUpdate,\n\t\thandleResponseErrors,\n\t\ttriggerCalculation\n\t};\n};\n\nexport default useCartActions;\n","import { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { ReturnViewState, WidgetViewState } from \"../../types\";\nimport customEvents, {\n\tCustomEventPayloadMap,\n\tInternalCustomEvent\n} from \"../../utils/custom-events\";\nimport {\n\tinitializeNetworkInterceptors,\n\tvalidateInterceptionRequestUrl\n} from \"../../utils/interceptor\";\nimport { logger } from \"../../utils/logger\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useCartActions from \"./use-cart-actions\";\n\nconst useFetchInterceptor = () => {\n\tconst {\n\t\twidgetViewState,\n\t\treturnViewState,\n\t\tconfig: {\n\t\t\toptions: {\n\t\t\t\tautoOpen,\n\t\t\t\tautoOpenTriggerEndpoint: triggerEndpoint,\n\t\t\t\tautoOpenTriggerMethod: triggerMethod,\n\t\t\t\tmonitorNetworkOverwrites,\n\t\t\t\tnetworkInterceptionMethod\n\t\t\t}\n\t\t}\n\t} = useWidgetContext();\n\n\tconst { fetchAndUpdateCart, handleResponseErrors, triggerCalculation } =\n\t\tuseCartActions();\n\n\tconst [initialized, setInitialized] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (networkInterceptionMethod !== \"none\") {\n\t\t\tlet resetInterceptor:\n\t\t\t\t| ReturnType<typeof initializeNetworkInterceptors>\n\t\t\t\t| undefined;\n\n\t\t\ttry {\n\t\t\t\t// Initialize the fetch interceptor only once\n\t\t\t\tresetInterceptor = initializeNetworkInterceptors(\n\t\t\t\t\tpayload =>\n\t\t\t\t\t\tcustomEvents.publish(\n\t\t\t\t\t\t\tInternalCustomEvent.FetchInterception,\n\t\t\t\t\t\t\tpayload\n\t\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tmonitor: monitorNetworkOverwrites,\n\t\t\t\t\t\tmethod: networkInterceptionMethod\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tsetInitialized(true);\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error initializing fetch interceptor:\", error);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tresetInterceptor?.();\n\t\t\t};\n\t\t}\n\t\tsetInitialized(false);\n\t}, [monitorNetworkOverwrites, networkInterceptionMethod]);\n\n\ttype FetchInterceptionEvent = CustomEvent<\n\t\tCustomEventPayloadMap[InternalCustomEvent.FetchInterception]\n\t>;\n\n\tconst handleInterceptionEvent = useCallback(\n\t\tasync ({ detail: { response, requestUrl } }: FetchInterceptionEvent) => {\n\t\t\tconst stringifiedUrl =\n\t\t\t\trequestUrl instanceof URL ? requestUrl.toString() : requestUrl;\n\n\t\t\tconst urlValidation = validateInterceptionRequestUrl(\n\t\t\t\tstringifiedUrl,\n\t\t\t\ttriggerEndpoint\n\t\t\t);\n\t\t\tconst { isValid, isForbidden, isTriggerEndpoint } = urlValidation;\n\n\t\t\tif (!isValid || isForbidden) {\n\t\t\t\tlogger.info(\n\t\t\t\t\t`Intercepted request to ${stringifiedUrl} is invalid or forbidden.`,\n\t\t\t\t\turlValidation\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.info(`Intercepted request to ${stringifiedUrl}`, urlValidation);\n\n\t\t\tconst result = await fetchAndUpdateCart();\n\t\t\tif (!result) return;\n\n\t\t\tconst { transformedCart, hasChanged } = result;\n\n\t\t\tawait handleResponseErrors(response);\n\n\t\t\tif (hasChanged) {\n\t\t\t\ttriggerCalculation(transformedCart, result.order.orderData.id);\n\t\t\t}\n\n\t\t\t// Determine if the widget overlay should be triggered\n\t\t\tswitch (triggerMethod) {\n\t\t\t\tcase \"change\":\n\t\t\t\t\tif (!hasChanged) return;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"endpoint\":\n\t\t\t\t\tif (!isTriggerEndpoint) return;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"combination\":\n\t\t\t\tdefault:\n\t\t\t\t\tif (!isTriggerEndpoint || !hasChanged) return;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Collapse the return view state\n\t\t\treturnViewState.set(ReturnViewState.Collapsed);\n\t\t\tif (autoOpen !== false) {\n\t\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tfetchAndUpdateCart,\n\t\t\thandleResponseErrors,\n\t\t\ttriggerCalculation,\n\t\t\twidgetViewState,\n\t\t\treturnViewState,\n\t\t\tautoOpen,\n\t\t\ttriggerEndpoint,\n\t\t\ttriggerMethod\n\t\t]\n\t);\n\n\tuseEffect(() => {\n\t\t// Subscribe to fetch interception events\n\t\tconst unsubscribe = customEvents.subscribe(\n\t\t\tInternalCustomEvent.FetchInterception,\n\t\t\thandleInterceptionEvent\n\t\t);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [handleInterceptionEvent]);\n\n\treturn {\n\t\tinitialized\n\t};\n};\n\nexport default useFetchInterceptor;\n","import { useEffect } from \"preact/hooks\";\nimport { logger } from \"../../utils/logger\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useOverrideScrollBlocking = () => {\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions: { overrideScrollBlocking }\n\t\t}\n\t} = useWidgetContext();\n\n\t/* This is a fix for CSM-1094 */\n\tuseEffect(() => {\n\t\tif (!overrideScrollBlocking) return;\n\n\t\tlogger.info(\"Overriding scroll blocking behavior\");\n\n\t\tconst originalPreventDefault = Event.prototype.preventDefault;\n\n\t\t// Override the default preventDefault method\n\t\tEvent.prototype.preventDefault = function () {\n\t\t\tif (\n\t\t\t\tthis.type === \"wheel\" ||\n\t\t\t\tthis.type === \"mousewheel\" ||\n\t\t\t\tthis.type === \"DOMMouseScroll\" ||\n\t\t\t\tthis.type === \"touchmove\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toriginalPreventDefault.call(this);\n\t\t};\n\n\t\treturn () => {\n\t\t\tEvent.prototype.preventDefault = originalPreventDefault;\n\t\t};\n\t}, [overrideScrollBlocking, widgetViewState.value]);\n};\n\nexport default useOverrideScrollBlocking;\n","import { useEffect } from \"preact/hooks\";\nimport { cloneAndReplaceElement } from \"../../../lib/utils/dom\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport { WidgetViewState } from \"../../types\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useCartActivator = () => {\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions: { cartActivatorSelector }\n\t\t}\n\t} = useWidgetContext();\n\n\tuseEffect(() => {\n\t\tif (!cartActivatorSelector) return;\n\n\t\tconst controller = new AbortController();\n\t\tconst processedElements = new WeakSet<Element>();\n\n\t\tconst onActivatorClick = (event: MouseEvent) => {\n\t\t\tlogger.info(\"Cart activator clicked\", event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t};\n\n\t\tconst attachListenersToElements = (elements: NodeListOf<Element>) => {\n\t\t\telements.forEach(element => {\n\t\t\t\t// Skip if we've already processed this element\n\t\t\t\tif (processedElements.has(element)) return;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Clone the element to avoid issues with event listeners\n\t\t\t\t\tconst clone = cloneAndReplaceElement(element as HTMLElement);\n\n\t\t\t\t\t// Remove potential inline onclick attributes\n\t\t\t\t\tclone.removeAttribute(\"onclick\");\n\n\t\t\t\t\t// Add the click event listener to the cloned element\n\t\t\t\t\tclone.addEventListener(\"click\", onActivatorClick, {\n\t\t\t\t\t\tsignal: controller.signal\n\t\t\t\t\t});\n\n\t\t\t\t\t// Mark this element as processed\n\t\t\t\t\tprocessedElements.add(clone);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\"Failed to attach listener to cart activator\", error);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst initializeActivators = () => {\n\t\t\ttry {\n\t\t\t\tconst elements = document.querySelectorAll(cartActivatorSelector);\n\t\t\t\tif (elements.length > 0) {\n\t\t\t\t\tlogger.info(\"Attaching click listeners to cart activators\", elements);\n\t\t\t\t\tattachListenersToElements(elements);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to set cart activator selector\", error);\n\t\t\t}\n\t\t};\n\n\t\t// Initial setup\n\t\tinitializeActivators();\n\n\t\t// Set up MutationObserver to watch for DOM changes\n\t\tconst observer = new MutationObserver(mutations => {\n\t\t\tlet shouldReinitialize = false;\n\n\t\t\tmutations.forEach(mutation => {\n\t\t\t\t// Check for added nodes\n\t\t\t\tmutation.addedNodes.forEach(node => {\n\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\tconst element = node as Element;\n\n\t\t\t\t\t\t// Check if the added element matches our selector\n\t\t\t\t\t\tif (element.matches?.(cartActivatorSelector)) {\n\t\t\t\t\t\t\tshouldReinitialize = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if any children of the added element match our selector\n\t\t\t\t\t\tif (element.querySelectorAll?.(cartActivatorSelector).length > 0) {\n\t\t\t\t\t\t\tshouldReinitialize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Check for removed nodes (optional - helps with cleanup)\n\t\t\t\tmutation.removedNodes.forEach(node => {\n\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\tconst element = node as Element;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\telement.matches?.(cartActivatorSelector) ||\n\t\t\t\t\t\t\telement.querySelectorAll?.(cartActivatorSelector).length > 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Element was removed - WeakSet will automatically handle cleanup\n\t\t\t\t\t\t\t// since removed elements become unreachable\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (shouldReinitialize) {\n\t\t\t\tlogger.info(\"Reinitializing cart activators\");\n\t\t\t\t// Small delay to ensure DOM is fully updated\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tinitializeActivators();\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t});\n\n\t\t// Start observing\n\t\tobserver.observe(document.body, {\n\t\t\tchildList: true, // Watch for added/removed children\n\t\t\tsubtree: true, // Watch the entire subtree\n\t\t\tattributes: false, // We don't need attribute changes\n\t\t\tcharacterData: false // We don't need text content changes\n\t\t});\n\n\t\treturn () => {\n\t\t\t// Cleanup\n\t\t\tcontroller.abort();\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [cartActivatorSelector, widgetViewState]);\n};\n\nexport default useCartActivator;\n","export const removeInertFromElements = () => {\n\tconst inertElements = document.querySelectorAll(\"[inert]\");\n\tinertElements.forEach(element => {\n\t\telement.removeAttribute(\"inert\");\n\t});\n};\n\nexport function cloneAndReplaceElement<T extends HTMLElement>(element: T): T {\n\tconst parent = element.parentNode;\n\tif (parent) {\n\t\tconst newElement = element.cloneNode(true) as T;\n\t\tparent.replaceChild(newElement, element);\n\t\treturn newElement;\n\t}\n\treturn element;\n}\n","import useApiBridge from \"../../lib/hooks/feature/use-api-bridge\";\nimport useExternalEvents from \"../../lib/hooks/feature/use-external-events\";\nimport useFetchInterceptor from \"../../lib/hooks/feature/use-fetch-interceptor\";\nimport useOverrideScrollBlocking from \"../../lib/hooks/feature/use-override-scroll-blocking\";\nimport useCartActivator from \"../../lib/hooks/feature/use-cart-activator\";\nimport useTutorialAutostart from \"../../lib/hooks/feature/use-tutorial-autostart\";\n\n// Handles the initialization of all necessary interceptors and contexts\n// Note: This is handled as a component, so the context providers can be used within hooks\nconst InitializationHandler = () => {\n\t// Initialize the fetch interceptor to handle incoming HTTP requests\n\tuseFetchInterceptor();\n\n\t// Initialize the cart activator to manage cart-related interactions\n\tuseCartActivator();\n\n\t// Override scroll blocking behavior if configured\n\tuseOverrideScrollBlocking();\n\n\t// Handle external custom events\n\tuseExternalEvents();\n\n\t// Register the API bridge for programmatic control\n\tuseApiBridge();\n\n\t// Auto-start any tutorial flagged to show on load (e.g. the intro)\n\tuseTutorialAutostart();\n\n\treturn null;\n};\n\nexport default InitializationHandler;\n","import { useCallback, useEffect } from \"preact/hooks\";\nimport { WidgetViewState } from \"../../types\";\nimport customEvents, { ExternalCustomEvent } from \"../../utils/custom-events\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useCartActions from \"./use-cart-actions\";\n\nconst useExternalEvents = () => {\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst { fetchAndUpdateCart, triggerCalculation } = useCartActions();\n\n\t// Drawer state handlers\n\tconst handleOpenDrawer = useCallback(() => {\n\t\twidgetViewState.set(WidgetViewState.Open);\n\t}, [widgetViewState]);\n\n\tconst handleCloseDrawer = useCallback(() => {\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t}, [widgetViewState]);\n\n\tconst handleToggleDrawer = useCallback(() => {\n\t\tlet targetState: WidgetViewState;\n\n\t\tif (widgetViewState.value === WidgetViewState.Open) {\n\t\t\ttargetState = WidgetViewState.Collapsed;\n\t\t} else {\n\t\t\ttargetState = WidgetViewState.Open;\n\t\t}\n\n\t\twidgetViewState.set(targetState);\n\t}, [widgetViewState]);\n\n\t// Calculation handlers\n\tconst handleRefetchCalculation = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, triggerCalculation]);\n\n\tconst handleRefetchCart = useCallback(async () => {\n\t\tawait fetchAndUpdateCart();\n\t}, [fetchAndUpdateCart]);\n\n\tconst handleRefetchCartAndCalculation = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, triggerCalculation]);\n\n\tconst handleOpenDrawerAndRefetch = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\thandleOpenDrawer();\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, handleOpenDrawer, triggerCalculation]);\n\n\tuseEffect(() => {\n\t\t// Subscribe to all events\n\t\tconst unsubscribeOpenDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerOpen,\n\t\t\thandleOpenDrawer\n\t\t);\n\n\t\tconst unsubscribeCloseDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerClose,\n\t\t\thandleCloseDrawer\n\t\t);\n\n\t\tconst unsubscribeToggleDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerToggle,\n\t\t\thandleToggleDrawer\n\t\t);\n\n\t\tconst unsubscribeRefetchCalculation = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CalculationRefetch,\n\t\t\thandleRefetchCalculation\n\t\t);\n\n\t\tconst unsubscribeRefetchCart = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CartRefetch,\n\t\t\thandleRefetchCart\n\t\t);\n\n\t\tconst unsubscribeRefetchCartAndCalculation = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CartAndCalculationRefetch,\n\t\t\thandleRefetchCartAndCalculation\n\t\t);\n\n\t\tconst unsubscribeOpenDrawerAndRefetchCartAndCalculation =\n\t\t\tcustomEvents.subscribe(\n\t\t\t\tExternalCustomEvent.DrawerOpenAndRefetch,\n\t\t\t\thandleOpenDrawerAndRefetch\n\t\t\t);\n\n\t\treturn () => {\n\t\t\tunsubscribeOpenDrawer();\n\t\t\tunsubscribeCloseDrawer();\n\t\t\tunsubscribeToggleDrawer();\n\t\t\tunsubscribeRefetchCalculation();\n\t\t\tunsubscribeRefetchCart();\n\t\t\tunsubscribeRefetchCartAndCalculation();\n\t\t\tunsubscribeOpenDrawerAndRefetchCartAndCalculation();\n\t\t};\n\t}, [\n\t\thandleOpenDrawer,\n\t\thandleCloseDrawer,\n\t\thandleToggleDrawer,\n\t\thandleRefetchCalculation,\n\t\thandleRefetchCart,\n\t\thandleRefetchCartAndCalculation,\n\t\thandleOpenDrawerAndRefetch\n\t]);\n};\n\nexport default useExternalEvents;\n","import { useEffect, useMemo, useRef, useState } from \"preact/hooks\";\nimport { DIALOG_PRIORITY } from \"../../context/dialog-queue-context\";\nimport { TUTORIALS } from \"../../tutorials\";\nimport useDialogSlot from \"../common/use-dialog-slot\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useTutorial from \"../context/use-tutorial\";\n\n// Auto-starts the first tutorial flagged `autoStart`, but only once the dialog\n// queue grants its slot — so it never overlaps a higher-priority dialog (e.g.\n// the return decision dialog). The slot is held for the tutorial's whole\n// duration, so nothing pops over its backdrop/pointers mid-run.\nconst useTutorialAutostart = () => {\n\tconst { start, isActive, activeTutorial, hasSeenTutorial } = useTutorial();\n\tconst { config } = useWidgetContext();\n\tconst [finished, setFinished] = useState(false);\n\n\tconst autoStartTutorial = useMemo(\n\t\t() =>\n\t\t\tObject.values(TUTORIALS).find(tutorial => tutorial.options?.autoStart),\n\t\t[]\n\t);\n\n\tconst isAllowed =\n\t\tautoStartTutorial?.options?.showMode === \"first-load\"\n\t\t\t? config.isFirstLoad && !hasSeenTutorial(autoStartTutorial.id)\n\t\t\t: !hasSeenTutorial(autoStartTutorial?.id ?? \"\");\n\n\tconst wantsToShow = !!autoStartTutorial && !finished && isAllowed;\n\n\tconst isSlotActive = useDialogSlot({\n\t\tid: autoStartTutorial ? `tutorial:${autoStartTutorial.id}` : \"tutorial\",\n\t\tpriority: DIALOG_PRIORITY.tutorial,\n\t\topen: wantsToShow\n\t});\n\n\t// Start once, when the queue grants the slot and no tutorial is running.\n\tconst hasStartedRef = useRef(false);\n\tuseEffect(() => {\n\t\tif (\n\t\t\tisSlotActive &&\n\t\t\tautoStartTutorial &&\n\t\t\t!isActive &&\n\t\t\t!hasStartedRef.current\n\t\t) {\n\t\t\thasStartedRef.current = true;\n\t\t\tstart(autoStartTutorial);\n\t\t}\n\t}, [isSlotActive, autoStartTutorial, isActive, start]);\n\n\t// Release the slot once the tutorial we started has actually run and ended.\n\tconst wasRunningRef = useRef(false);\n\tuseEffect(() => {\n\t\tconst running = isActive && activeTutorial?.id === autoStartTutorial?.id;\n\t\tif (running) {\n\t\t\twasRunningRef.current = true;\n\t\t} else if (wasRunningRef.current) {\n\t\t\twasRunningRef.current = false;\n\t\t\tsetFinished(true);\n\t\t}\n\t}, [isActive, activeTutorial, autoStartTutorial]);\n};\n\nexport default useTutorialAutostart;\n","import useIsMounted from \"../lib/hooks/common/use-is-mounted\";\n\nconst IsMounted = ({ children }: { children: preact.ComponentChildren }) => {\n\tconst mounted = useIsMounted();\n\n\tif (!mounted) return null;\n\n\treturn children;\n};\n\nexport default IsMounted;\n","import { useCallback, useMemo, useRef, useState } from \"preact/hooks\";\nimport {\n\tDialogQueueEntry,\n\tDialogQueueContext,\n\tIDialogQueueContext\n} from \"../../lib/context/dialog-queue-context\";\n\ninterface QueuedEntry extends DialogQueueEntry {\n\tseq: number;\n}\n\nconst DialogQueueProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [entries, setEntries] = useState<QueuedEntry[]>([]);\n\tconst seqRef = useRef(0);\n\n\tconst acquire = useCallback((entry: DialogQueueEntry) => {\n\t\tsetEntries(prev => {\n\t\t\tconst existing = prev.find(item => item.id === entry.id);\n\t\t\t// Keep the original seq so re-acquiring (e.g. a priority change) doesn't\n\t\t\t// jump the FIFO order.\n\t\t\tconst seq = existing ? existing.seq : seqRef.current++;\n\t\t\tconst next = prev.filter(item => item.id !== entry.id);\n\t\t\treturn [...next, { ...entry, seq }];\n\t\t});\n\t}, []);\n\n\tconst release = useCallback((id: string) => {\n\t\tsetEntries(prev => prev.filter(item => item.id !== id));\n\t}, []);\n\n\tconst activeId = useMemo(() => {\n\t\tif (entries.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn entries.reduce((best, entry) => {\n\t\t\tif (entry.priority !== best.priority) {\n\t\t\t\treturn entry.priority > best.priority ? entry : best;\n\t\t\t}\n\t\t\treturn entry.seq < best.seq ? entry : best;\n\t\t}).id;\n\t}, [entries]);\n\n\tconst contextValue = useMemo(\n\t\t(): IDialogQueueContext => ({\n\t\t\tacquire,\n\t\t\trelease,\n\t\t\tactiveId\n\t\t}),\n\t\t[acquire, release, activeId]\n\t);\n\n\treturn (\n\t\t<DialogQueueContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</DialogQueueContext.Provider>\n\t);\n};\n\nexport default DialogQueueProvider;\n","import { ReactNode } from \"preact/compat\";\nimport { useMemo } from \"preact/hooks\";\nimport { Fragment } from \"preact/jsx-runtime\";\nimport { useTranslations } from \"use-intl\";\nimport {\n\tCustomError,\n\tErrorContext,\n\tIErrorContext\n} from \"../../lib/context/error-context\";\nimport useArray from \"../../lib/hooks/common/use-array\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { getRuleProductIds } from \"../../lib/utils/cart\";\nimport { stripShopifyId } from \"../../lib/utils/shopify\";\n\nconst ErrorProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst t = useTranslations();\n\tconst { array: errors, ...methods } = useArray<CustomError>();\n\tconst { cartState, orderState, calculationState } = useReturnContext();\n\n\tconst orderData = orderState.value.data?.orderData;\n\tconst calculationLineItems = calculationState.value.data?.lineItems;\n\tconst cartItemCount = cartState.value.data?.transformed.item_count ?? 0;\n\n\t// Combine errors that are pushed from anywhere in within the context with static errors\n\t// These static errors are based on the order data and calculation items\n\tconst resolvedErrors: CustomError[] = useMemo(() => {\n\t\tconst trackedErrors: CustomError[] = [];\n\t\tif (\n\t\t\torderData &&\n\t\t\tcalculationLineItems &&\n\t\t\tArray.isArray(calculationLineItems)\n\t\t) {\n\t\t\t// Reufund window expired error\n\t\t\tconst { refundReturnWindow = true } = orderData.returnWindows ?? {};\n\n\t\t\tconst errorId = \"refund-window-expired\";\n\n\t\t\tif (!refundReturnWindow && cartItemCount === 0) {\n\t\t\t\tconst message: string | preact.ComponentChildren = t(\n\t\t\t\t\t\"product.error.refund_expired\"\n\t\t\t\t);\n\n\t\t\t\ttrackedErrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage,\n\t\t\t\t\tblocking: true\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Product rules\n\t\t\tconst noRefundItemIds = getRuleProductIds(\n\t\t\t\torderData.productRules,\n\t\t\t\t\"NO_REFUND\"\n\t\t\t);\n\t\t\tconst noRefundItems = calculationLineItems.filter(item => {\n\t\t\t\tconst strippedId = stripShopifyId(item.productId);\n\t\t\t\tif (!strippedId) return false;\n\t\t\t\treturn noRefundItemIds.includes(Number(strippedId));\n\t\t\t});\n\n\t\t\tif (noRefundItems.length > 0 && cartItemCount === 0) {\n\t\t\t\tconst joinedProductNames = noRefundItems\n\t\t\t\t\t.map(item => {\n\t\t\t\t\t\tconst product = orderData.productsToExchange.find(\n\t\t\t\t\t\t\tp => p.id === item.id\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!product) return null;\n\n\t\t\t\t\t\tlet title = product.title;\n\t\t\t\t\t\tif (product.variantTitle) {\n\t\t\t\t\t\t\ttitle += ` (${product.variantTitle})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn title;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\", \");\n\n\t\t\t\tconst message = t.rich(\"product.error.no_refund\", {\n\t\t\t\t\tproduct_name: joinedProductNames,\n\t\t\t\t\tb: chunks => {\n\t\t\t\t\t\tif (!chunks) return null;\n\t\t\t\t\t\tconst splitChunks = (chunks as NonNullable<ReactNode>)\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.split(\", \");\n\n\t\t\t\t\t\treturn splitChunks.map((chunk, index) => {\n\t\t\t\t\t\t\tlet dividerString: string | null = null;\n\n\t\t\t\t\t\t\tif (index === splitChunks.length - 2) {\n\t\t\t\t\t\t\t\tdividerString = ` ${t(\"common.and\")} `;\n\t\t\t\t\t\t\t} else if (index < splitChunks.length - 1) {\n\t\t\t\t\t\t\t\tdividerString = \", \";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-3\">{chunk}</span>\n\t\t\t\t\t\t\t\t\t{dividerString}\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttrackedErrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage,\n\t\t\t\t\tblocking: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn trackedErrors.concat(errors);\n\t}, [errors, orderData, calculationLineItems, cartItemCount, t]);\n\n\tconst contextValue: IErrorContext = {\n\t\terrors: resolvedErrors,\n\t\t...methods\n\t};\n\n\treturn (\n\t\t<ErrorContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ErrorContext.Provider>\n\t);\n};\n\nexport default ErrorProvider;\n","import { useCallback, useState } from \"preact/hooks\";\n\ntype ArrayId = string | number;\n\ninterface ArrayItem {\n\tid: ArrayId;\n}\n\nexport interface UseArrayReturn<T extends ArrayItem> {\n\tarray: T[];\n\tset: (newArray: T[]) => void;\n\tpush: (item: T) => void;\n\tremove: (id: ArrayId) => void;\n\tclear: () => void;\n\thas: (id: ArrayId) => boolean;\n}\n\nconst useArray = <T extends ArrayItem>(\n\tinitialArray: T[] = []\n): UseArrayReturn<T> => {\n\tconst [array, setArray] = useState<T[]>(initialArray);\n\n\tconst set = useCallback((newArray: T[]) => {\n\t\tsetArray(newArray);\n\t}, []);\n\n\tconst push = useCallback((item: T | T[]) => {\n\t\tsetArray(prev => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tconst filtered = item.filter(i => !prev.some(p => p.id === i.id));\n\t\t\t\treturn [...prev, ...filtered];\n\t\t\t}\n\t\t\tif (prev.some(p => p.id === item.id)) {\n\t\t\t\treturn prev; // Avoid duplicates\n\t\t\t}\n\t\t\treturn [...prev, item];\n\t\t});\n\t}, []);\n\n\tconst remove = useCallback((id: ArrayId) => {\n\t\tsetArray(prev => prev.filter(item => item.id !== id));\n\t}, []);\n\n\tconst clear = useCallback(() => {\n\t\tsetArray([]);\n\t}, []);\n\n\tconst has = useCallback(\n\t\t(id: ArrayId) => {\n\t\t\treturn array.some(item => item.id === id);\n\t\t},\n\t\t[array]\n\t);\n\n\treturn {\n\t\tarray,\n\t\tset,\n\t\tpush,\n\t\tremove,\n\t\tclear,\n\t\thas\n\t};\n};\n\nexport default useArray;\n","import { useCallback, useEffect, useRef, useState } from \"preact/hooks\";\nimport { logger } from \"../../utils/logger\";\n\ntype IAsyncStatePending<T> = {\n\tdata: T | null;\n\tpending: true;\n\terror: null;\n};\n\ntype IAsyncStateResolved<T> = {\n\tdata: T | null;\n\tpending: false;\n\terror: null;\n};\n\ntype IAsyncStateError<T> = {\n\tdata: T | null;\n\tpending: false;\n\terror: Error;\n};\n\nexport type IAsyncState<T> =\n\t| IAsyncStatePending<T>\n\t| IAsyncStateResolved<T>\n\t| IAsyncStateError<T>;\n\ntype TAsyncStateCommonProps<T> = {\n\tid?: string;\n\tinitialValue?: T | null;\n\tqueryOnInit?: boolean;\n\tstartCount?: number;\n\tonError?: (error: Error) => void;\n};\n\ntype TUseAsyncStatePropsWithoutParams<T> = TAsyncStateCommonProps<T> & {\n\tqueryFn: (count: number) => T | Promise<T>;\n};\n\ntype TUseAsyncStatePropsWithParams<\n\tT,\n\tP = undefined\n> = TAsyncStateCommonProps<T> & {\n\tqueryFn: (count: number, params: P) => T | Promise<T>;\n\tinitialParams?: P;\n};\n\n// Props interface with conditional queryFn and conditional initialParams\ntype TUseAsyncStateProps<T, P = undefined> = P extends undefined\n\t? TUseAsyncStatePropsWithoutParams<T>\n\t: TUseAsyncStatePropsWithParams<T, P>;\n\nexport interface IUseAsyncStateReturn<T, P = undefined> {\n\tvalue: IAsyncState<T>;\n\tset: React.Dispatch<React.SetStateAction<IAsyncState<T>>>;\n\tquery: P extends undefined\n\t\t? () => Promise<T | null>\n\t\t: (params: P) => Promise<T | null>;\n\tinitialFetch: boolean;\n\tcount: number;\n}\n\nconst useAsyncState = <T, Params = undefined>(\n\tprops: TUseAsyncStateProps<T, Params>\n): IUseAsyncStateReturn<T, Params> => {\n\tconst {\n\t\tid,\n\t\tinitialValue = null,\n\t\tqueryFn,\n\t\tqueryOnInit = true,\n\t\tonError,\n\t\tstartCount = 0\n\t} = props;\n\n\tconst [state, setState] = useState<IAsyncState<T>>({\n\t\tdata: initialValue,\n\t\tpending: queryOnInit,\n\t\terror: null\n\t} as IAsyncStatePending<T>);\n\tconst initialRender = useRef(true);\n\n\tconst [countState, setCountState] = useState(startCount);\n\tconst countRef = useRef(countState);\n\n\tconst query = useCallback(\n\t\t(...args: Params extends undefined ? [] : [Params]): Promise<T | null> => {\n\t\t\tconst params = args[0] as Params;\n\n\t\t\t// Increment count at the START and capture it for this request\n\t\t\tconst requestCount = countRef.current + 1;\n\t\t\tcountRef.current = requestCount;\n\t\t\tsetCountState(requestCount);\n\n\t\t\tsetState(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tpending: true,\n\t\t\t\terror: null\n\t\t\t}));\n\n\t\t\tconst run = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t`AsyncState Query Started (Count: ${requestCount})`,\n\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\"\n\t\t\t\t\t);\n\t\t\t\t\tconst data = await (args.length === 0\n\t\t\t\t\t\t? (queryFn as (count: number) => T | Promise<T>)(requestCount)\n\t\t\t\t\t\t: (queryFn as (count: number, params: Params) => T | Promise<T>)(\n\t\t\t\t\t\t\t\trequestCount,\n\t\t\t\t\t\t\t\tparams\n\t\t\t\t\t\t\t));\n\n\t\t\t\t\t// Only update state if this is still the latest request\n\t\t\t\t\tif (countRef.current !== requestCount) {\n\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t`AsyncState Query Stale - Ignoring (Count: ${requestCount}, Current: ${countRef.current})`,\n\t\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Success handling\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tpending: false,\n\t\t\t\t\t\terror: null\n\t\t\t\t\t});\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t`AsyncState Query Resolved (Count: ${requestCount})`,\n\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\",\n\t\t\t\t\t\tdata\n\t\t\t\t\t);\n\t\t\t\t\treturn data;\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Only update state if this is still the latest request\n\t\t\t\t\tif (countRef.current !== requestCount) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Error handling\n\t\t\t\t\tconst error = err as Error;\n\n\t\t\t\t\tlet consoleMessage = `AsyncState Query Failed (Count: ${requestCount})`;\n\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tconsoleMessage += ` (ID: ${id})`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlogger.error(`${consoleMessage}:`, `[${error}]`, params);\n\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tpending: false,\n\t\t\t\t\t\terror\n\t\t\t\t\t});\n\t\t\t\t\tonError?.(error);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn run();\n\t\t},\n\t\t[queryFn, id, onError]\n\t);\n\n\tuseEffect(() => {\n\t\tif (initialRender.current && queryOnInit) {\n\t\t\tinitialRender.current = false;\n\t\t\tconst initialParams = props as TUseAsyncStatePropsWithParams<T, Params>;\n\t\t\tif (initialParams !== undefined && \"initialParams\" in initialParams) {\n\t\t\t\t(query as (params: Params) => Promise<T>)(\n\t\t\t\t\tinitialParams.initialParams as Params\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t(query as () => Promise<T>)();\n\t\t\t}\n\t\t}\n\t}, [query, queryOnInit, props]);\n\n\tconst initialFetch = state.pending && state.data === null;\n\n\treturn {\n\t\tvalue: state,\n\t\tset: setState,\n\t\tquery: query as IUseAsyncStateReturn<T, Params>[\"query\"],\n\t\tcount: countState,\n\t\tinitialFetch\n\t};\n};\n\nexport default useAsyncState;\n","import { logger } from \"./logger\";\nimport { storage, StorageKey } from \"./storage\";\n\ninterface PersistenceOptions extends StorageKey {\n\tstoreResult?: boolean;\n\tshouldUseCachedResult?: boolean;\n\tlogging?: boolean;\n\texpiration?: number;\n}\n\nconst inFlightRequests = new Map<string, Promise<unknown>>();\n\nexport async function persist<T>(\n\tfn: () => Promise<T>,\n\toptions: PersistenceOptions\n): Promise<T> {\n\tconst {\n\t\tstoreResult = true,\n\t\tshouldUseCachedResult = true,\n\t\tlogging = true,\n\t\t...storageOptions\n\t} = options;\n\n\tif (shouldUseCachedResult) {\n\t\tconst cachedData = storage.get<T>(storageOptions);\n\t\tif (cachedData !== null) {\n\t\t\tif (logging) {\n\t\t\t\tlogger.info(\n\t\t\t\t\t`Using cached data for ${storageOptions.key} from ${storageOptions.type}`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn cachedData;\n\t\t}\n\t}\n\n\tconst inFlightKey = `${storageOptions.type}:${storageOptions.key}`;\n\tconst pending = inFlightRequests.get(inFlightKey);\n\tif (pending) {\n\t\treturn pending as Promise<T>;\n\t}\n\n\tconst request = (async () => {\n\t\ttry {\n\t\t\tconst result = await fn();\n\t\t\tif (storeResult) {\n\t\t\t\tstorage.set(storageOptions, result);\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (logging) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`Failed to persist data for ${storageOptions.key} from ${storageOptions.type}`,\n\t\t\t\t\terror\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tinFlightRequests.delete(inFlightKey);\n\t\t}\n\t})();\n\n\tinFlightRequests.set(inFlightKey, request);\n\treturn request;\n}\n","import { LEGACY_PARAMS, SEARCH_PARAM_ID_NAME } from \"../constants\";\nimport type { ShopifyCart } from \"../types\";\nimport api, { ApiResponseObject } from \"./api-client\";\nimport { clearCart, setCartItems, updateCartStorage } from \"./cart\";\nimport { WidgetConfiguration } from \"./initialization/types\";\nimport { logger } from \"./logger\";\nimport { persist } from \"./persistence\";\nimport storage, {\n\tSTORAGE_OVERLAY_DIALOG_EXPIRATION,\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"./storage\";\n\nexport type CalculationResponse = ApiResponseObject<\n\t\"/calculation/{uuid}\",\n\t\"post\"\n>;\n\nexport type CalculationLineItem = CalculationResponse[\"lineItems\"][number];\nexport type CalculationExchangeProduct = NonNullable<\n\tCalculationResponse[\"exchange\"]\n>[\"exchangeDetails\"][number];\n\nexport interface CalculationParams {\n\tcart: ShopifyCart;\n\torderId: string;\n\tlineItems?: {\n\t\tid: string;\n\t\tlineItemId: string;\n\t\taction: \"EXCHANGE\" | \"REFUND\" | \"GIFTCARD\";\n\t}[];\n}\n\n// REST API Queries\nexport async function getCalculation(\n\t{ orderId, cart, lineItems }: CalculationParams,\n\tlabelCount: number\n): Promise<CalculationResponse> {\n\tconst formattedExchangeTo = (cart.items || []).map(item => ({\n\t\tvariantId: `gid://shopify/ProductVariant/${item.variant_id}`,\n\t\tquantity: item.quantity\n\t}));\n\n\tconst formattedLineItems = (lineItems || []).map(item => ({\n\t\tlineItemId: item.lineItemId,\n\t\tquantity: 1,\n\t\taction: item.action\n\t}));\n\n\tconst response = await api.POST(\"/calculation/{uuid}\", {\n\t\tparams: { path: { uuid: orderId } },\n\t\tbody: {\n\t\t\tlineItems: formattedLineItems,\n\t\t\texchangeTo: formattedExchangeTo,\n\t\t\tnumOfLabels: labelCount\n\t\t}\n\t});\n\n\tif (response.error || !response.data?.responseObject) {\n\t\tlogger.error(\n\t\t\t`Failed to fetch calculation data for orderId: ${orderId}`,\n\t\t\tresponse.error\n\t\t);\n\t\tthrow new Error(\n\t\t\t`Failed to fetch calculation: ${response.error?.message ?? \"Unknown error\"}`\n\t\t);\n\t}\n\n\treturn response.data.responseObject;\n}\n\nexport type ShopOverlayDataResponse = ApiResponseObject<\"/shop-overlay\", \"get\">;\n\nexport async function getShopOverlayData({\n\tisFirstLoad,\n\tinternalReturnId,\n\tlineIds\n}: {\n\tisFirstLoad: boolean;\n\tinternalReturnId: string;\n\tlineIds: string;\n}) {\n\tconst cacheKey = `${internalReturnId}_${lineIds}`;\n\n\tconst response = await persist(\n\t\t() =>\n\t\t\tapi.GET(\"/shop-overlay\", {\n\t\t\t\tparams: {\n\t\t\t\t\tquery: {\n\t\t\t\t\t\tinternalId: internalReturnId,\n\t\t\t\t\t\torderLines: lineIds\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t{\n\t\t\tkey: cacheKey,\n\t\t\ttype: \"sessionStorage\",\n\t\t\tshouldUseCachedResult: !isFirstLoad\n\t\t}\n\t);\n\n\tif (response.error || !response.data?.responseObject) {\n\t\tlogger.error(\n\t\t\t`Failed to fetch shop overlay data for internalId: ${internalReturnId} and lineIds: ${lineIds}`,\n\t\t\tresponse.error\n\t\t);\n\t\tthrow new Error(\"Failed to fetch shop overlay data\");\n\t}\n\n\treturn response.data.responseObject;\n}\n\nexport type ProcessOrderInitializationReturn = {\n\torderData: ShopOverlayDataResponse;\n\tupdatedCart: ShopifyCart | null;\n};\n\nexport async function processOrderInitialization({\n\tisFirstLoad,\n\toptions: { clearCartOnStart },\n\tid: internalId,\n\tdata: cache\n}: WidgetConfiguration): Promise<ProcessOrderInitializationReturn> {\n\tlet updatedCart: ShopifyCart | null = null;\n\n\tif (isFirstLoad) {\n\t\tconst cachedExchangeItems = cache.exchangeItems ?? [];\n\n\t\tif (cachedExchangeItems.length > 0) {\n\t\t\tconst mappedItems = cachedExchangeItems.map(item => ({\n\t\t\t\tid: item.variantId,\n\t\t\t\tquantity: item.quantity\n\t\t\t}));\n\t\t\tlogger.info(\n\t\t\t\t\"Setting cart items from cached return items on initialization.\",\n\t\t\t\tmappedItems\n\t\t\t);\n\t\t\t// If there are cached return items, set them in the cart\n\t\t\tupdatedCart = await setCartItems(mappedItems);\n\t\t} else if (clearCartOnStart) {\n\t\t\tlogger.info(\"Clearing cart on initialization as per configuration.\");\n\t\t\t// Clear the cart if it's the first load and clearCartOnStart is true\n\t\t\tupdatedCart = await clearCart();\n\t\t}\n\n\t\tupdateCartStorage(updatedCart);\n\n\t\t// Set the dialog expiration in session storage\n\t\tconst dialogExpiration =\n\t\t\tnew Date().getTime() + STORAGE_OVERLAY_DIALOG_EXPIRATION;\n\n\t\tstorage.set(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY, dialogExpiration);\n\n\t\t// Remove the search param from the URL\n\t\tconst url = new URL(window.location.href);\n\n\t\turl.searchParams.delete(SEARCH_PARAM_ID_NAME);\n\n\t\tLEGACY_PARAMS.forEach(param => {\n\t\t\turl.searchParams.delete(param);\n\t\t});\n\n\t\twindow.history.replaceState(null, \"\", url);\n\t}\n\n\tstorage.set(STORAGE_SESSION_KEY, internalId);\n\n\tconst lineIds =\n\t\t(cache.formData?.selectedItems ?? [])?.map(item => item.id).join(\",\") ?? \"\";\n\n\tconst orderData = await getShopOverlayData({\n\t\tisFirstLoad,\n\t\tinternalReturnId: internalId,\n\t\tlineIds\n\t});\n\n\treturn {\n\t\torderData,\n\t\tupdatedCart\n\t};\n}\n","import { useMemo } from \"preact/hooks\";\nimport {\n\tIReturnContext,\n\tReturnContext\n} from \"../../lib/context/return-context\";\nimport useAsyncState from \"../../lib/hooks/common/use-async-state\";\nimport useOnce from \"../../lib/hooks/common/use-once\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport {\n\tReturnViewState,\n\tShopifyCart,\n\tShopifyCartChangeResponse\n} from \"../../lib/types\";\nimport { getCart, normalizeCart } from \"../../lib/utils/cart\";\nimport { formatSelectedItems } from \"../../lib/utils/helpers\";\nimport {\n\tCalculationParams,\n\tCalculationResponse,\n\tgetCalculation,\n\tprocessOrderInitialization,\n\tProcessOrderInitializationReturn\n} from \"../../lib/utils/queries\";\nimport {\n\tSessionPatchPayload,\n\tupdateSessionCache\n} from \"../../lib/utils/session\";\nimport { formatShopifyCartItem } from \"../../lib/utils/shopify\";\n\ninterface ReturnContextProviderProps {\n\tchildren: preact.ComponentChildren;\n}\n\ntype Cart = ShopifyCart | ShopifyCartChangeResponse;\n\nexport interface CartState {\n\ttransformed: Cart;\n\toriginal: Cart;\n}\n\nconst ReturnContextProvider = ({ children }: ReturnContextProviderProps) => {\n\tconst { returnViewState, config } = useWidgetContext();\n\n\tconst isFirstLoad = config.isFirstLoad;\n\n\tconst cartState = useAsyncState<CartState, ProcessOrderInitializationReturn>({\n\t\tid: \"cart\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (\n\t\t\tqueryCount: number,\n\t\t\torderResult: ProcessOrderInitializationReturn\n\t\t) => {\n\t\t\tconst pathname = window.location.pathname;\n\t\t\tconst isCartPage = pathname.startsWith(\"/cart\");\n\n\t\t\tconst isFirstQuery = queryCount === 1;\n\n\t\t\tconst shouldFetchFreshCart = !isFirstQuery || isCartPage;\n\n\t\t\tconst cart = await getCart(!shouldFetchFreshCart);\n\n\t\t\tif (cart.item_count !== 0 && isFirstQuery) {\n\t\t\t\t// If the cart has items and this is the first query, collapse the return view state\n\t\t\t\treturnViewState.set(ReturnViewState.Collapsed);\n\t\t\t}\n\n\t\t\tconst { cart: transformedCart } = normalizeCart(\n\t\t\t\tcart,\n\t\t\t\torderResult.orderData.productRules\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttransformed: transformedCart,\n\t\t\t\toriginal: cart\n\t\t\t};\n\t\t}\n\t});\n\n\t// Initialize the order state & set cookies/storage\n\tconst orderState = useAsyncState<ProcessOrderInitializationReturn>({\n\t\tid: \"order\",\n\t\tqueryFn: async () => {\n\t\t\tconst result = await processOrderInitialization(config);\n\n\t\t\tif (result.updatedCart && isFirstLoad) {\n\t\t\t\tconst { cart: normalizedCart } = normalizeCart(\n\t\t\t\t\tresult.updatedCart,\n\t\t\t\t\tresult.orderData.productRules\n\t\t\t\t);\n\t\t\t\tcartState.set({\n\t\t\t\t\tdata: {\n\t\t\t\t\t\toriginal: result.updatedCart,\n\t\t\t\t\t\ttransformed: normalizedCart\n\t\t\t\t\t},\n\t\t\t\t\tpending: false,\n\t\t\t\t\terror: null\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcartState.query(result);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t});\n\n\tconst updateSessionCacheState = useAsyncState({\n\t\tid: \"updateSessionCache\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (_: unknown, payload: SessionPatchPayload) => {\n\t\t\tconst internalId = config.id;\n\t\t\tif (internalId) {\n\t\t\t\tawait updateSessionCache(internalId, payload);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst calculationState = useAsyncState<\n\t\tCalculationResponse,\n\t\tCalculationParams\n\t>({\n\t\tid: \"calculation\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (_: unknown, params: CalculationParams) => {\n\t\t\tconst internalId = config.id;\n\t\t\tconst cartItems = params.cart?.items || [];\n\t\t\t// Update session cache with the current cart items\n\t\t\tif (internalId) {\n\t\t\t\tconst formattedCartItems = Array.isArray(cartItems)\n\t\t\t\t\t? cartItems.map(item => formatShopifyCartItem(item))\n\t\t\t\t\t: [];\n\n\t\t\t\tupdateSessionCacheState.query({\n\t\t\t\t\texchangeItems: formattedCartItems\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst labelCount = config.data.formData?.packages?.length || 1;\n\t\t\treturn await getCalculation(params, labelCount);\n\t\t}\n\t});\n\n\tconst [initialized] = useOnce(\n\t\tresolve => {\n\t\t\tconst order = orderState.value.data;\n\t\t\tconst cart = cartState.value.data?.transformed;\n\t\t\tconst formData = config.data.formData;\n\n\t\t\tif (order && cart) {\n\t\t\t\tresolve();\n\t\t\t\tconst lineItems = formatSelectedItems(formData);\n\t\t\t\tcalculationState.query({\n\t\t\t\t\tcart,\n\t\t\t\t\torderId: order.orderData.id,\n\t\t\t\t\tlineItems\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[orderState.value.data, cartState.value.data, calculationState.query]\n\t);\n\n\tconst isPending =\n\t\t!initialized || cartState.value.pending || calculationState.value.pending;\n\n\tconst contextError = useMemo(\n\t\t() =>\n\t\t\torderState.value.error ||\n\t\t\tcartState.value.error ||\n\t\t\tcalculationState.value.error,\n\t\t[\n\t\t\torderState.value.error,\n\t\t\tcartState.value.error,\n\t\t\tcalculationState.value.error\n\t\t]\n\t);\n\n\tconst hasFailed = Boolean(contextError);\n\n\tconst contextValue = useMemo(\n\t\t(): IReturnContext => ({\n\t\t\torderState,\n\t\t\tcartState,\n\t\t\tcalculationState,\n\t\t\tupdateSessionCacheState,\n\t\t\tisPending,\n\t\t\thasFailed\n\t\t}),\n\t\t[\n\t\t\torderState,\n\t\t\tcartState,\n\t\t\tcalculationState,\n\t\t\tupdateSessionCacheState,\n\t\t\tisPending,\n\t\t\thasFailed\n\t\t]\n\t);\n\n\treturn (\n\t\t<ReturnContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ReturnContext.Provider>\n\t);\n};\n\nexport default ReturnContextProvider;\n","import { Inputs, useEffect, useRef, useState } from \"preact/hooks\";\n\nconst useOnce = (callback: (resolve: () => void) => void, deps?: Inputs) => {\n\tconst state = useState(false);\n\tconst effectRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (!effectRef.current) {\n\t\t\tcallback(() => {\n\t\t\t\tstate[1](true);\n\t\t\t\teffectRef.current = true;\n\t\t\t});\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, deps);\n\n\treturn state;\n};\n\nexport default useOnce;\n","import type { OrderProduct } from \"../widget/lib/types\";\nimport type {\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart\n} from \"../widget/lib/types/shopify\";\nimport { CommonOptions } from \"../widget/lib/utils/initialization/types\";\nimport { CalculationResponse } from \"../widget/lib/utils/queries\";\n\nexport type { OrderProduct } from \"../widget/lib/types\";\nexport type {\n\tConnection,\n\tEdge,\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart,\n\tStorefrontCartCost,\n\tStorefrontCartImage,\n\tStorefrontCartLine,\n\tStorefrontCartLineCost,\n\tStorefrontCartLineMerchandise\n} from \"../widget/lib/types/shopify\";\nexport type {\n\tCalculationExchangeProduct,\n\tCalculationLineItem,\n\tCalculationResponse\n} from \"../widget/lib/utils/queries\";\n\nexport enum WidgetViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n\nexport type Environment = \"development\" | \"test\" | \"production\";\n\nexport interface ThemeVariables {\n\tbackgroundColor?: string;\n\taccentBackgroundColor?: string;\n\tprimaryCTAColor?: string;\n\tprimaryCTATextColor?: string;\n\tsecondaryCTAColor?: string;\n\tsecondaryCTATextColor?: string;\n\tprimaryTextColor?: string;\n\tsecondaryTextColor?: string;\n}\n\nexport const STORE_DEFAULT_THEME = {\n\tbackgroundColor: \"#FFFFFF\",\n\taccentBackgroundColor: \"#F5F5F5\",\n\tprimaryCTAColor: \"#000000\",\n\tprimaryCTATextColor: \"#FFFFFF\",\n\tsecondaryCTAColor: \"#E5E5E5\",\n\tsecondaryCTATextColor: \"#000000\",\n\tprimaryTextColor: \"#000000\",\n\tsecondaryTextColor: \"#737373\"\n} satisfies Required<ThemeVariables>;\n\nexport type CartInput = ShopifyCart | StorefrontCart;\n\nexport type CartAddItem = {\n\tmerchandiseId: string;\n\tquantity: number;\n};\n\nexport type CartUpdateItem = {\n\tid: string;\n\tmerchandiseId: string;\n\tquantity: number;\n};\n\nexport interface CartProvider<T extends CartInput = CartInput> {\n\tgetCart(): Promise<T | undefined>;\n\tclearCart(): Promise<T>;\n\taddItems(items: CartAddItem[]): Promise<T>;\n\tupdateItems(items: CartUpdateItem[]): Promise<T>;\n\tremoveItems(lineIds: string[]): Promise<T>;\n}\n\nexport type ReturnflowsConfig = Partial<\n\tCommonOptions & {\n\t\tdebug: boolean;\n\t\tcartProvider: CartProvider;\n\t\tgetProductUrl: (product: ShopifyCartItem | OrderProduct) => string;\n\t\tonReady: () => void;\n\t\tonError: (error: Error) => void;\n\t}\n>;\n\nexport interface DrawerAPI {\n\topen(): void;\n\tclose(): void;\n\ttoggle(): void;\n\tisOpen(): boolean;\n}\n\nexport interface DataAPI {\n\tgetCart(): ShopifyCart | null;\n\tgetCalculation(): CalculationResponse | null;\n\tgetOrder(): OrderData | null;\n\tisLoading(): boolean;\n}\n\nexport interface CartAPI {\n\tsetCart(cart: CartInput): Promise<SetCartOutput>;\n\trefetch(): Promise<void>;\n\tclear(): Promise<void>;\n}\n\nexport type SetCartOutput = {\n\tcart: ShopifyCart | null;\n\tcalculation: CalculationResponse | null;\n\thasChanged: boolean;\n};\n\nexport type ToastTone = \"info\" | \"tip\" | \"action\" | \"error\" | \"giftcard\";\n\nexport interface ToastOptions {\n\tmessage: string;\n\ttone?: ToastTone;\n\tduration?: number;\n\tonClose?: () => void;\n}\n\nexport interface ToastAPI {\n\tshow(options: ToastOptions): string;\n\tdismiss(id: string): void;\n\tclear(): void;\n}\n\nexport type EventName =\n\t| \"ready\"\n\t| \"drawer:open\"\n\t| \"drawer:close\"\n\t| \"cart:updated\"\n\t| \"calculation:updated\"\n\t| \"error\";\n\nexport type EventCallback<K extends EventName> = K extends \"error\"\n\t? (error: Error) => void\n\t: K extends \"calculation:updated\"\n\t\t? (calculation: CalculationResponse) => void\n\t\t: K extends \"cart:updated\"\n\t\t\t? (cart: ShopifyCart) => void\n\t\t\t: () => void;\n\nexport interface OrderData {\n\tid: string;\n\torderId: string;\n\torderName: string;\n\tinstantExchange: boolean;\n\tfreeExchangeLabel: boolean;\n\tproductsToExchange: Array<OrderProduct>;\n\ttotalPrice: number;\n}\n\nexport interface ReturnflowsAPI {\n\tinit(config?: ReturnflowsConfig): Promise<void>;\n\tdestroy(): void;\n\tisInitialized(): boolean;\n\treadonly drawer: DrawerAPI;\n\treadonly data: DataAPI;\n\treadonly cart: CartAPI;\n\treadonly toast: ToastAPI;\n\ton<K extends EventName>(event: K, callback: EventCallback<K>): () => void;\n\toff<K extends EventName>(event: K, callback: EventCallback<K>): void;\n\treadonly version: string;\n}\n","import { useMemo } from \"preact/hooks\";\nimport { STORE_DEFAULT_THEME } from \"../../../../api\";\nimport { camelToKebab, hexToHsl } from \"../../utils/helpers\";\nimport useWidgetContext from \"./use-widget-context\";\n\nconst useTheme = () => {\n\tconst {\n\t\tconfig: { theme }\n\t} = useWidgetContext();\n\n\tconst themeVariables = useMemo(() => {\n\t\tconst resolvedTheme: Record<string, string> = { ...STORE_DEFAULT_THEME };\n\t\tfor (const [key, color] of Object.entries(theme ?? {})) {\n\t\t\tif (color) {\n\t\t\t\tresolvedTheme[key] = color;\n\t\t\t}\n\t\t}\n\n\t\treturn Object.entries(resolvedTheme).reduce<Record<string, string>>(\n\t\t\t(acc, [key, color]) => {\n\t\t\t\tconst convertedColor = hexToHsl(color);\n\t\t\t\tconst propertyKey = `--${camelToKebab(key)}`;\n\t\t\t\tacc[propertyKey] = convertedColor;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, string>\n\t\t) as React.CSSProperties;\n\t}, [theme]);\n\n\treturn {\n\t\ttheme,\n\t\tcssVariables: themeVariables\n\t};\n};\n\nexport default useTheme;\n","import { useRef } from \"preact/hooks\";\nimport { ROOT_ELEMENT_ID } from \"../../lib/constants\";\nimport { RootContext } from \"../../lib/context/root-context\";\nimport useTheme from \"../../lib/hooks/context/use-theme\";\n\nconst RootProvider = (\n\tprops: Omit<\n\t\tReact.HTMLAttributes<HTMLDivElement>,\n\t\t\"id\" | \"style\" | \"className\"\n\t>\n) => {\n\tconst rootRef = useRef<HTMLDivElement | null>(null);\n\tconst { cssVariables } = useTheme();\n\n\treturn (\n\t\t<RootContext.Provider value={rootRef}>\n\t\t\t<div\n\t\t\t\t/* stopPropagation was added to prevent double clicks in ios safari */\n\t\t\t\t/* Fix for CSM-1094 */\n\t\t\t\tonTouchStart={e => e.stopPropagation()}\n\t\t\t\tclassName=\"rf-root\"\n\t\t\t\tref={rootRef}\n\t\t\t\tid={ROOT_ELEMENT_ID}\n\t\t\t\tstyle={cssVariables}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</RootContext.Provider>\n\t);\n};\n\nexport default RootProvider;\n","import { useCallback, useMemo, useState } from \"preact/hooks\";\nimport {\n\tITutorialContext,\n\tTutorial,\n\tTutorialContext,\n\tTutorialState\n} from \"../../lib/context/tutorial-context\";\nimport storage, { STORAGE_TUTORIALS_SEEN_KEY } from \"../../lib/utils/storage\";\n\n// Tracks \"per-load\" tutorials seen this page load; resets on browser refresh.\nconst seenThisPageLoad = new Set<string>();\n\nfunction getSeenTutorials(): string[] {\n\treturn storage.get<string[]>(STORAGE_TUTORIALS_SEEN_KEY) ?? [];\n}\n\nfunction hasSeenTutorial(tutorialId: string): boolean {\n\treturn (\n\t\tgetSeenTutorials().includes(tutorialId) || seenThisPageLoad.has(tutorialId)\n\t);\n}\n\nfunction markTutorialSeen(tutorialId: string): void {\n\tconst seen = getSeenTutorials();\n\tif (!seen.includes(tutorialId)) {\n\t\tstorage.set(STORAGE_TUTORIALS_SEEN_KEY, [...seen, tutorialId]);\n\t}\n}\n\nfunction endTutorial(state: TutorialState): TutorialState {\n\tif (state.status === \"active\") {\n\t\tif (state.tutorial.options?.showMode === \"once\") {\n\t\t\tmarkTutorialSeen(state.tutorial.id);\n\t\t} else if (state.tutorial.options?.showMode === \"first-load\") {\n\t\t\tseenThisPageLoad.add(state.tutorial.id);\n\t\t}\n\t}\n\treturn { status: \"inactive\" };\n}\n\nconst TutorialProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [state, setState] = useState<TutorialState>({ status: \"inactive\" });\n\n\tconst start = useCallback((tutorial: Tutorial) => {\n\t\tif (tutorial.steps.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (hasSeenTutorial(tutorial.id)) {\n\t\t\treturn;\n\t\t}\n\t\tsetState({ status: \"active\", tutorial, stepIndex: 0 });\n\t}, []);\n\n\tconst stop = useCallback(() => {\n\t\tsetState(prev => endTutorial(prev));\n\t}, []);\n\n\tconst next = useCallback(() => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tconst nextIndex = prev.stepIndex + 1;\n\t\t\tif (nextIndex >= prev.tutorial.steps.length) {\n\t\t\t\treturn endTutorial(prev);\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: nextIndex };\n\t\t});\n\t}, []);\n\n\tconst previous = useCallback(() => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: Math.max(0, prev.stepIndex - 1) };\n\t\t});\n\t}, []);\n\n\tconst goToStep = useCallback((stepId: string) => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tconst index = prev.tutorial.steps.findIndex(step => step.id === stepId);\n\t\t\tif (index === -1) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: index };\n\t\t});\n\t}, []);\n\n\tconst activeTutorial = state.status === \"active\" ? state.tutorial : null;\n\tconst currentStep =\n\t\tstate.status === \"active\" ? state.tutorial.steps[state.stepIndex] : null;\n\n\tconst isStepActive = useCallback(\n\t\t(stepId: string) => currentStep?.id === stepId,\n\t\t[currentStep]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t(): ITutorialContext => ({\n\t\t\tstate,\n\t\t\tactiveTutorial,\n\t\t\tcurrentStep,\n\t\t\tisActive: state.status === \"active\",\n\t\t\tstart,\n\t\t\tstop,\n\t\t\tnext,\n\t\t\tprevious,\n\t\t\tgoToStep,\n\t\t\tisStepActive,\n\t\t\thasSeenTutorial\n\t\t}),\n\t\t[\n\t\t\tstate,\n\t\t\tactiveTutorial,\n\t\t\tcurrentStep,\n\t\t\tstart,\n\t\t\tstop,\n\t\t\tnext,\n\t\t\tprevious,\n\t\t\tgoToStep,\n\t\t\tisStepActive\n\t\t]\n\t);\n\n\treturn (\n\t\t<TutorialContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</TutorialContext.Provider>\n\t);\n};\n\nexport default TutorialProvider;\n","import { useMemo } from \"preact/hooks\";\nimport {\n\tIWidgetContext,\n\tWidgetContext\n} from \"../../lib/context/widget-context\";\nimport useValueState from \"../../lib/hooks/common/use-value-state\";\nimport { ReturnViewState, WidgetViewState } from \"../../lib/types\";\nimport customEvents, {\n\tInternalCustomEvent\n} from \"../../lib/utils/custom-events\";\nimport { removeInertFromElements } from \"../../lib/utils/dom\";\nimport { WidgetConfiguration } from \"../../lib/utils/initialization/types\";\n\ninterface WidgetContextProviderProps extends WidgetConfiguration {\n\tchildren: preact.ComponentChildren;\n}\n\nconst WidgetContextProvider = ({\n\tchildren,\n\t...config\n}: WidgetContextProviderProps) => {\n\t// Drawer state (collapsed, expanded, etc.)\n\tconst widgetViewState = useValueState<WidgetViewState>(\n\t\tWidgetViewState.Collapsed,\n\t\tstate => {\n\t\t\tcustomEvents.publish(InternalCustomEvent.DrawerStateChange, { state });\n\t\t\t// (DEV-1559) Ensure inert is removed from elements when drawer state changes\n\t\t\tremoveInertFromElements();\n\t\t}\n\t);\n\t// Inner drawer state: return product list state (collapsed, expanded, etc.)\n\tconst returnViewState = useValueState<ReturnViewState>(ReturnViewState.Open);\n\n\tconst contextValue = useMemo(\n\t\t(): IWidgetContext => ({\n\t\t\twidgetViewState,\n\t\t\treturnViewState,\n\t\t\tconfig\n\t\t}),\n\t\t[widgetViewState, returnViewState, config]\n\t);\n\n\treturn (\n\t\t<WidgetContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</WidgetContext.Provider>\n\t);\n};\n\nexport default WidgetContextProvider;\n","import { useCallback, useState } from \"preact/hooks\";\nimport {\n\tDEFAULT_TOAST_DURATION,\n\tIToastContext,\n\tTOAST_ANIMATION_DURATION,\n\tToastConfiguration,\n\tToastContext\n} from \"../../lib/context/toast-context\";\nimport { ToastQueue } from \"./toast\";\n\nconst ToastProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [queue, setQueue] = useState<ToastQueue[]>([]);\n\n\tconst remove = useCallback((id: string) => {\n\t\tsetQueue(prev =>\n\t\t\tprev.map(toast => {\n\t\t\t\tif (toast.id === id) {\n\t\t\t\t\t// Optionally, you can call the onClose callback if it exists\n\t\t\t\t\ttoast.onClose?.();\n\t\t\t\t}\n\t\t\t\treturn toast.id === id ? { ...toast, isVisible: false } : toast;\n\t\t\t})\n\t\t);\n\t\t// Set a timeout to remove the toast from the queue after the animation duration\n\t\tsetTimeout(() => {\n\t\t\tsetQueue(prev => prev.filter(toast => toast.id !== id));\n\t\t}, TOAST_ANIMATION_DURATION); // Adjust the timeout to match your animation duration\n\t}, []);\n\n\tconst add = useCallback(\n\t\t({ duration = DEFAULT_TOAST_DURATION, ...options }: ToastConfiguration) => {\n\t\t\tconst id = options.id || generateToastId();\n\n\t\t\tsetQueue(prev => {\n\t\t\t\tconst newToast = {\n\t\t\t\t\t...options,\n\t\t\t\t\tid,\n\t\t\t\t\tduration,\n\t\t\t\t\tisVisible: true\n\t\t\t\t};\n\t\t\t\treturn [...prev, newToast];\n\t\t\t});\n\n\t\t\tsetTimeout(() => remove(id), duration);\n\n\t\t\treturn id;\n\t\t},\n\t\t[remove]\n\t);\n\n\tconst clear = useCallback(() => {\n\t\tsetQueue(prev =>\n\t\t\tprev.map(toast => {\n\t\t\t\t// Optionally, you can call the onClose callback for each toast\n\t\t\t\ttoast.onClose?.();\n\t\t\t\treturn { ...toast, isVisible: false };\n\t\t\t})\n\t\t);\n\t\t// Set a timeout to clear the queue after the animation duration\n\t\tsetTimeout(() => {\n\t\t\tsetQueue([]);\n\t\t}, TOAST_ANIMATION_DURATION); // Adjust the timeout to match your animation duration\n\t}, []);\n\n\tconst contextValue: IToastContext = {\n\t\tqueue,\n\t\tadd,\n\t\tremove,\n\t\tclear\n\t};\n\n\treturn (\n\t\t<ToastContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ToastContext.Provider>\n\t);\n};\n\nfunction generateToastId() {\n\treturn `toast-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport default ToastProvider;\n","const ActionIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={21}\n\t\theight={21}\n\t\tviewBox=\"0 0 21 21\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--action ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<rect\n\t\t\tx={0.5}\n\t\t\ty={0.679}\n\t\t\twidth={20}\n\t\t\theight={20}\n\t\t\trx={10}\n\t\t\tclassName=\"fill-[var(--icon-fill-1,_#000)]\"\n\t\t/>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M11.517 6.04q.088.055.127.157c.025.066.03.14.013.209l-.775 3.13h2.826q.088 0 .16.052a.3.3 0 0 1 .108.14.35.35 0 0 1-.055.348l-4.083 4.822a.3.3 0 0 1-.168.098.27.27 0 0 1-.187-.037.3.3 0 0 1-.127-.156.35.35 0 0 1-.013-.21l.775-3.129H7.292a.27.27 0 0 1-.16-.053.3.3 0 0 1-.108-.14.35.35 0 0 1 .055-.348l4.083-4.821a.3.3 0 0 1 .168-.098.27.27 0 0 1 .187.037\"\n\t\t\tclassName=\"fill-[var(--icon-fill-2,_#fff)]\"\n\t\t/>\n\t</svg>\n);\nexport default ActionIcon;\n","const InfoIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={21}\n\t\theight={21}\n\t\tviewBox=\"0 0 21 21\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--info ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tclassName=\"fill-[var(--icon-fill-2,_#fff)]\"\n\t\t\td=\"M6.856 4.628h7.288v12.226H6.856z\"\n\t\t/>\n\t\t<path\n\t\t\tclassName=\"fill-[var(--icon-fill-1,_#000)]\"\n\t\t\td=\"M17.572 3.67C13.666-.235 7.335-.236 3.429 3.67c-3.905 3.905-3.905 10.237 0 14.143 3.905 3.904 10.237 3.904 14.143 0 3.905-3.906 3.904-10.238 0-14.143m-5.768 11.419a1.304 1.304 0 1 1-2.609 0V9.87a1.304 1.304 0 1 1 2.61 0zm-1.327-7.447c-.752 0-1.252-.532-1.237-1.19-.015-.688.485-1.204 1.252-1.204s1.252.516 1.268 1.205c0 .657-.5 1.189-1.283 1.189\"\n\t\t/>\n\t</svg>\n);\nexport default InfoIcon;\n","const GiftcardIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={20}\n\t\theight={15}\n\t\tviewBox=\"0 0 20 15\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--giftcard fill-[var(--icon-fill-1,_currentColor)] ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M8.23 3.129c-.288 0-.602.11-.82.37-.284.342-.373 1.362-.363 1.877.48.012 1.4-.001 1.771-.395.39-.411.496-1.13.082-1.568a.9.9 0 0 0-.67-.284m-3.666 0c.288 0 .603.11.82.37.284.342.373 1.362.363 1.877-.48.012-1.399-.001-1.77-.395-.39-.411-.496-1.13-.083-1.568a.9.9 0 0 1 .67-.284\" />\n\t\t<path d=\"M9.806 2.447c.73.773.828 1.99.328 2.929H20V1.948C20 .872 19.178 0 18.165 0H7.038v2.103c.9-.54 2.036-.43 2.768.344.417.44-.732-.775 0 0M4.347 9.21l-.91-.962L4.85 6.74H0v6.312C0 14.128.821 15 1.835 15h3.919V7.71zm3.589-2.47L9.33 8.236l-.912.959-1.38-1.48V15h11.126C19.18 15 20 14.128 20 13.052V6.74zM2.659 5.376c-.5-.939-.403-2.157.327-2.929.732-.775 1.869-.883 2.768-.344V0h-3.92C.822 0 0 .872 0 1.948v3.428z\" />\n\t</svg>\n);\nexport default GiftcardIcon;\n","const WarningIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={30}\n\t\theight={27}\n\t\tviewBox=\"0 0 30 27\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--warning fill-[var(--icon-fill-1,_#000)] ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M15 18.904c-.81 0-1.49.68-1.49 1.49s.68 1.489 1.49 1.489c.78 0 1.489-.68 1.453-1.454A1.454 1.454 0 0 0 15 18.904\" />\n\t\t<path d=\"M28.784 24.182a5.09 5.09 0 0 0 .012-5.147L19.467 2.88A5.07 5.07 0 0 0 15.006.289c-1.87 0-3.539.97-4.462 2.585l-9.34 16.173a5.13 5.13 0 0 0 .017 5.177 5.1 5.1 0 0 0 4.45 2.555h18.633c1.865 0 3.539-.97 4.48-2.597m-2.025-1.167a2.82 2.82 0 0 1-2.46 1.423H5.665a2.78 2.78 0 0 1-2.43-1.394 2.82 2.82 0 0 1-.006-2.841l9.34-16.167a2.76 2.76 0 0 1 2.437-1.412c1.018 0 1.93.53 2.436 1.417l9.335 16.168c.5.87.494 1.918-.018 2.806\" />\n\t\t<path d=\"M14.63 8.45c-.709.202-1.15.846-1.15 1.626.036.47.066.947.102 1.418l.303 5.343A1.09 1.09 0 0 0 15 17.886c.608 0 1.085-.471 1.114-1.085 0-.369 0-.708.036-1.084.066-1.15.137-2.3.203-3.449.035-.744.101-1.49.137-2.234a1.8 1.8 0 0 0-.137-.744 1.49 1.49 0 0 0-1.722-.84\" />\n\t</svg>\n);\nexport default WarningIcon;\n","import Skeleton from \"../skeleton/skeleton\";\n\nconst BannerSkeleton = () => {\n\treturn <Skeleton className=\"rf-banner-skeleton h-12 rounded-lg\" />;\n};\n\nexport default BannerSkeleton;\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ActionIcon from \"../../icons/banner/action\";\nimport InfoIcon from \"../../icons/banner/info\";\nimport GiftcardIcon from \"../../icons/giftcard\";\nimport WarningIcon from \"../../icons/warning\";\nimport SkeletonContainer from \"../skeleton/skeleton-container\";\nimport BannerSkeleton from \"./banner-skeleton\";\n\nconst variants = cva(\n\t\"rf-banner text-black rounded-lg flex items-center gap-2.5 p-3 min-h-12 font-medium leading-tight\",\n\t{\n\t\tvariants: {\n\t\t\ttone: {\n\t\t\t\tinfo: \"rf-banner--info bg-banner-info-background [--icon-fill-1:hsl(var(--rf-c-banner-info-foreground))]\",\n\t\t\t\ttip: \"rf-banner--tip bg-banner-tip-background [--icon-fill-1:hsl(var(--rf-c-banner-tip-foreground))]\",\n\t\t\t\taction:\n\t\t\t\t\t\"rf-banner--action bg-banner-action-background [--icon-fill-1:hsl(var(--rf-c-banner-action-foreground))]\",\n\t\t\t\terror:\n\t\t\t\t\t\"rf-banner--error bg-banner-error-background [--icon-fill-1:hsl(var(--rf-c-banner-error-foreground))]\",\n\t\t\t\tgiftcard:\n\t\t\t\t\t\"rf-banner--giftcard bg-[#F1F3FE] [--icon-fill-1:hsl(var(--rf-c-primary))]\"\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tdashed: \"border border-dashed border-[color:var(--icon-fill-1)]\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\ttone: \"info\"\n\t\t}\n\t}\n);\n\ntype Variants = VariantProps<typeof variants>;\n\nexport type BannerTone = NonNullable<Variants[\"tone\"]>;\n\ninterface BannerProps extends React.HTMLAttributes<HTMLElement>, Variants {\n\ticon?: BannerTone;\n\tpending?: boolean;\n}\n\nconst Banner = ({\n\tclassName,\n\tchildren,\n\ttone,\n\tborder,\n\ticon,\n\tpending = false,\n\t...props\n}: BannerProps) => {\n\treturn (\n\t\t<SkeletonContainer skeleton={<BannerSkeleton />} pending={pending}>\n\t\t\t<aside className={cn(variants({ tone, border }), className)} {...props}>\n\t\t\t\t{renderIcon(icon ?? tone ?? \"info\")}\n\t\t\t\t<span className=\"rf-banner__text flex-1\">{children}</span>\n\t\t\t</aside>\n\t\t</SkeletonContainer>\n\t);\n};\n\nconst COMMON_ICON_PROPS: React.SVGProps<SVGSVGElement> = {\n\tclassName: \"rf-banner__icon\",\n\twidth: 20,\n\theight: 20\n};\n\nfunction renderIcon(icon: BannerTone) {\n\tswitch (icon) {\n\t\tcase \"action\":\n\t\t\treturn <ActionIcon {...COMMON_ICON_PROPS} />;\n\t\tcase \"error\":\n\t\t\treturn <WarningIcon {...COMMON_ICON_PROPS} />;\n\t\tcase \"giftcard\":\n\t\t\treturn <GiftcardIcon {...COMMON_ICON_PROPS} />;\n\t\tdefault:\n\t\t\treturn <InfoIcon {...COMMON_ICON_PROPS} />;\n\t}\n}\n\nexport default memo(Banner);\n","import { useTranslations } from \"use-intl\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport Banner from \"../../ui/banner/banner\";\nimport BannerSkeleton from \"../../ui/banner/banner-skeleton\";\n\nconst ExchangeBanner = () => {\n\tconst t = useTranslations(\"banner\");\n\tconst { orderState, calculationState } = useReturnContext();\n\n\tconst hasInstantExchange =\n\t\torderState.value.data?.orderData.instantExchange ?? false;\n\tconst returnLabelPrice = calculationState.value.data?.returnLabelPrice ?? 0;\n\n\tif (!orderState.value.data || !calculationState.value.data) {\n\t\treturn <BannerSkeleton />;\n\t}\n\n\tif (hasInstantExchange) {\n\t\treturn (\n\t\t\t<Banner className=\"rf-exchange-banner\" tone=\"action\">\n\t\t\t\t{t(\"fast_exchange\")}\n\t\t\t</Banner>\n\t\t);\n\t}\n\n\tif (returnLabelPrice === 0) {\n\t\treturn (\n\t\t\t<Banner className=\"rf-exchange-banner\" tone=\"tip\">\n\t\t\t\t{t(\"free_shipping_label\")}\n\t\t\t</Banner>\n\t\t);\n\t}\n\n\treturn <Banner className=\"rf-exchange-banner\">{t(\"exchange_info\")}</Banner>;\n};\n\nexport default ExchangeBanner;\n","import { useCallback } from \"preact/hooks\";\nimport { NumberFormatOptions, useFormatter } from \"use-intl\";\nimport { parseToNumber } from \"../../utils/helpers\";\nimport { DEFAULT_CURRENCY } from \"../../utils/i18n\";\nimport useReturnContext from \"./use-return-context\";\nimport useWidgetContext from \"./use-widget-context\";\n\ntype TCurrencyDisplayOptions = NumberFormatOptions[\"currencyDisplay\"] | \"none\";\n\ninterface ICurrencyFormatOptions extends Omit<\n\tNumberFormatOptions,\n\t\"style\" | \"currencyDisplay\"\n> {\n\tcurrencyDisplay?: TCurrencyDisplayOptions;\n\tfractionDigits?: number;\n}\n\nconst useCurrency = (hookOptions: ICurrencyFormatOptions = {}) => {\n\tconst { config } = useWidgetContext();\n\tconst { calculationState, cartState } = useReturnContext();\n\n\tconst cartCurrency = cartState.value.data?.transformed.currency;\n\tconst calcCurrency = calculationState.value.data?.currency.localCurrency;\n\n\tconst resolvedCurrencyCode =\n\t\thookOptions.currency ||\n\t\tcalcCurrency ||\n\t\tconfig.currency ||\n\t\tcartCurrency ||\n\t\tDEFAULT_CURRENCY;\n\n\tconst formatter = useFormatter();\n\n\tconst applyExchangeRate = useCallback(\n\t\t(value: number, exchangeRate?: number) => {\n\t\t\tconst currencyObject = calculationState.value.data?.currency;\n\t\t\tconst resolvedExchangeRate =\n\t\t\t\texchangeRate ?? parseToNumber(currencyObject?.exchangeRate, 1);\n\t\t\treturn value * resolvedExchangeRate;\n\t\t},\n\t\t[calculationState.value.data]\n\t);\n\n\tconst format = useCallback(\n\t\t(value: number | string, options?: ICurrencyFormatOptions) => {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tvalue = parseFloat(value);\n\t\t\t}\n\n\t\t\tconst { fractionDigits = 2, ...mergedOptions } = {\n\t\t\t\t...hookOptions,\n\t\t\t\t...options\n\t\t\t};\n\t\t\tconst { currencyDisplay, ...formatOptions }: ICurrencyFormatOptions = {\n\t\t\t\tcurrency: resolvedCurrencyCode,\n\t\t\t\tminimumFractionDigits: fractionDigits,\n\t\t\t\tmaximumFractionDigits: fractionDigits,\n\t\t\t\t...mergedOptions\n\t\t\t};\n\n\t\t\tif (currencyDisplay === \"none\") {\n\t\t\t\treturn formatter.number(value, formatOptions);\n\t\t\t}\n\n\t\t\treturn formatter.number(value, {\n\t\t\t\tstyle: \"currency\",\n\t\t\t\tcurrencyDisplay,\n\t\t\t\t...formatOptions\n\t\t\t});\n\t\t},\n\t\t[formatter, hookOptions, resolvedCurrencyCode]\n\t);\n\n\treturn { format, applyExchangeRate, currency: resolvedCurrencyCode };\n};\n\nexport default useCurrency;\n","import { useMemo } from \"preact/hooks\";\nimport { parseToNumber } from \"../../utils/helpers\";\nimport useCurrency from \"./use-currency\";\nimport useReturnContext from \"./use-return-context\";\n\ninterface CalculationComputationResult {\n\torderTotal: number;\n\tcartTotal: number;\n\treturnTotal: number;\n\tgiftcardValue: number;\n\ttotalPriceDiscount: number;\n\tgiftCardBonusAmount: number;\n\treturnLabelPrice: number;\n\tisRefunding: boolean;\n}\n\nconst useCalculation = () => {\n\tconst { applyExchangeRate } = useCurrency();\n\tconst { calculationState, cartState } = useReturnContext();\n\n\tconst cart = cartState.value.data;\n\tconst calculation = calculationState.value.data;\n\n\tconst itemCount = cartState.value.data?.transformed.item_count ?? 0;\n\n\tconst computedTotals: CalculationComputationResult = useMemo(() => {\n\t\tif (!calculation || !cart) {\n\t\t\treturn {\n\t\t\t\torderTotal: 0,\n\t\t\t\tcartTotal: 0,\n\t\t\t\treturnTotal: 0,\n\t\t\t\tgiftcardValue: 0,\n\t\t\t\ttotalPriceDiscount: 0,\n\t\t\t\tgiftCardBonusAmount: 0,\n\t\t\t\treturnLabelPrice: 0,\n\t\t\t\tisRefunding: false\n\t\t\t};\n\t\t}\n\t\tconst {\n\t\t\torderSubtotal: orderTotal,\n\t\t\treturnSubtotal,\n\t\t\ttotal,\n\t\t\trefundMethods,\n\t\t\texchange,\n\t\t\tgiftCardBonusAmount,\n\t\t\treturnLabelPrice\n\t\t} = calculation;\n\n\t\t// Exchange coverage + discount applied to exchange\n\t\tconst totalPriceDiscount = applyExchangeRate(\n\t\t\texchange?.discountSummary.adjustedDiscountTotal ?? 0\n\t\t);\n\n\t\tconst giftcardValue = parseToNumber(\n\t\t\tapplyExchangeRate(refundMethods?.giftcard)\n\t\t);\n\n\t\tconst cartTotal = applyExchangeRate(returnSubtotal) - giftcardValue;\n\n\t\tconst returnTotal = Math.abs(applyExchangeRate(total));\n\n\t\treturn {\n\t\t\torderTotal: applyExchangeRate(orderTotal),\n\t\t\tcartTotal,\n\t\t\treturnTotal,\n\t\t\tgiftcardValue,\n\t\t\ttotalPriceDiscount,\n\t\t\tgiftCardBonusAmount: applyExchangeRate(giftCardBonusAmount),\n\t\t\treturnLabelPrice: applyExchangeRate(returnLabelPrice),\n\t\t\tisRefunding: total > 0\n\t\t};\n\t}, [calculation, cart, applyExchangeRate]);\n\n\treturn {\n\t\titemCount,\n\t\t...computedTotals\n\t};\n};\n\nexport default useCalculation;\n","const StarIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={12}\n\t\theight={12}\n\t\tviewBox=\"0 0 13 13\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--star ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"m6.11 1.06 1.7 3.62 3.8.584-2.75 2.817.65 3.979-3.4-1.88-3.398 1.88.649-3.98L.61 5.265l3.8-.584z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={1.111}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t</svg>\n);\nexport default StarIcon;\n","import { memo } from \"preact/compat\";\nimport useCurrency from \"../../lib/hooks/context/use-currency\";\nimport { cn, isNil } from \"../../lib/utils/helpers\";\nimport Skeleton from \"./skeleton/skeleton\";\nimport SkeletonContainer from \"./skeleton/skeleton-container\";\n\ninterface PriceProps extends React.HTMLAttributes<HTMLSpanElement> {\n\tvalue?: number;\n\tcompareAtValue?: number;\n\tpending?: boolean;\n}\n\nconst Price = ({\n\tvalue = 0,\n\tcompareAtValue,\n\tpending,\n\tchildren,\n\tclassName,\n\t...props\n}: PriceProps) => {\n\tconst { format: formatToCurrency } = useCurrency();\n\n\tconst isDiscounted =\n\t\t!isNil(compareAtValue) && trimNumber(compareAtValue) > trimNumber(value);\n\n\treturn (\n\t\t<SkeletonContainer\n\t\t\tskeleton={<Skeleton className=\"w-20\" />}\n\t\t\tpending={pending}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rf-price font-medium text-base inline-flex flex-col items-end\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className=\"rf-price__value\">{formatToCurrency(value)}</span>\n\t\t\t\t{isDiscounted && (\n\t\t\t\t\t<span className=\"rf-price__compare-at text-affirmative line-through text-xs\">\n\t\t\t\t\t\t{formatToCurrency(compareAtValue)}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t</SkeletonContainer>\n\t);\n};\n\nfunction trimNumber(num: number, decimals: number = 2) {\n\treturn Number(num.toFixed(decimals));\n}\n\nexport default memo(Price);\n","import Skeleton from \"../../../ui/skeleton/skeleton\";\n\nconst AdjustmentsTableSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-adjustments-table-skeleton space-y-2\">\n\t\t\t<Skeleton className=\"h-5 w-full\" />\n\t\t\t<Skeleton className=\"h-5 w-full\" />\n\t\t</div>\n\t);\n};\n\nexport default AdjustmentsTableSkeleton;\n","import { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../../../lib/hooks/context/use-calculation\";\nimport useCurrency from \"../../../../lib/hooks/context/use-currency\";\nimport useReturnContext from \"../../../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../../../lib/utils/helpers\";\nimport GiftcardIcon from \"../../../icons/giftcard\";\nimport StarIcon from \"../../../icons/star\";\nimport Price from \"../../../ui/price\";\nimport AdjustmentsTableSkeleton from \"./adjustments-table-skeleton\";\n\nconst AdjustmentsTable = () => {\n\tconst t = useTranslations();\n\tconst { format: formatToCurrency } = useCurrency();\n\tconst { calculationState } = useReturnContext();\n\n\tconst {\n\t\tcartTotal,\n\t\tgiftcardValue,\n\t\tgiftCardBonusAmount,\n\t\treturnLabelPrice,\n\t\ttotalPriceDiscount\n\t} = useCalculation();\n\n\tconst showDiscountRow = totalPriceDiscount > 0;\n\tconst showGiftcardRow = giftcardValue > 0;\n\tconst showLabelPriceRow = returnLabelPrice > 0;\n\n\tif (!calculationState.value.data) {\n\t\treturn (\n\t\t\t<div className=\"rf-adjustments-table-loading p-base border-t border-neutral-2\">\n\t\t\t\t<AdjustmentsTableSkeleton />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"rf-adjustments-table p-base border-t border-neutral-2\">\n\t\t\t<table className=\"rf-adjustments-table__table w-full\">\n\t\t\t\t<tbody className=\"rf-adjustments-table__body\">\n\t\t\t\t\t{showDiscountRow && (\n\t\t\t\t\t\t<Row value={totalPriceDiscount * -1} className=\"text-affirmative\">\n\t\t\t\t\t\t\t{t(\"price_details.price_change\")}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{showLabelPriceRow && (\n\t\t\t\t\t\t<Row value={returnLabelPrice} className=\"text-neutral-3\">\n\t\t\t\t\t\t\t{t(\"price_details.return_label\")}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{cartTotal > 0 && (\n\t\t\t\t\t\t<Row value={cartTotal}>{t(\"price_details.products\")}</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{showGiftcardRow && (\n\t\t\t\t\t\t<Row className=\"text-primary\" value={giftcardValue}>\n\t\t\t\t\t\t\t<span className=\"align-middle\">\n\t\t\t\t\t\t\t\t<GiftcardIcon className=\"inline -mt-1 w-4 h-auto\" />{\" \"}\n\t\t\t\t\t\t\t\t{t(\"price_details.giftcard\")}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{giftCardBonusAmount > 0 && (\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-reward align-middle\">\n\t\t\t\t\t\t\t\t\t+{formatToCurrency(giftCardBonusAmount)}{\" \"}\n\t\t\t\t\t\t\t\t\t<StarIcon className=\"inline -mt-0.5\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n};\n\nfunction Row({\n\tvalue,\n\tchildren,\n\tclassName\n}: {\n\tvalue: number;\n} & React.HTMLAttributes<HTMLTableRowElement>) {\n\treturn (\n\t\t<tr className={cn(\"rf-adjustments-table__row h-6 group/row\", className)}>\n\t\t\t<th\n\t\t\t\tscope=\"row\"\n\t\t\t\tclassName=\"rf-adjustments-table__label space-x-2 font-normal text-left group-first/row:pt-0 group-last/row:pb-0 py-0.5\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t\t<td className=\"rf-adjustments-table__value text-right\">\n\t\t\t\t<Price value={value} />\n\t\t\t</td>\n\t\t</tr>\n\t);\n}\n\nexport default AdjustmentsTable;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport ExchangeBanner from \"./exchange-banner\";\nimport AdjustmentsTable from \"./table/adjustments-table\";\n\nconst ExchangeAdjustments = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-exchange-adjustments border-t border-neutral-2\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-exchange-adjustments__banner p-base\">\n\t\t\t\t<ExchangeBanner />\n\t\t\t</div>\n\t\t\t<AdjustmentsTable />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeAdjustments;\n","import { useTranslations } from \"use-intl\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\n\nconst AnnoucementBar = () => {\n\tconst t = useTranslations(\"announcement\");\n\tconst { cartState } = useReturnContext();\n\n\tconst itemCount = cartState.value.data?.transformed.item_count;\n\n\tconst stepSnippet = (itemCount ?? 0) === 0 ? \"step_1\" : \"step_2\";\n\n\treturn (\n\t\t<div className=\"rf-announcement-bar h-14 bg-announcement-background text-announcement-foreground px-base flex items-center justify-between text-sm\">\n\t\t\t<ReturnAvatarStack />\n\t\t\t<div className=\"rf-announcement-bar__content space-x-1\">\n\t\t\t\t<span className=\"rf-announcement-bar__step-label text-neutral-3\">\n\t\t\t\t\t{t(\"this_step\")}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"rf-announcement-bar__step-text\">{t(stepSnippet)}</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default AnnoucementBar;\n","import { cn } from \"../../lib/utils/helpers\";\nimport WarningIcon from \"../icons/warning\";\n\ninterface ErrorScreenProps extends React.HTMLAttributes<HTMLDivElement> {\n\terrorMessage?: string;\n\tinstructionMessage?: string;\n}\n\nconst ErrorScreen = ({\n\tclassName,\n\terrorMessage = \"Der skete en fejl!\",\n\tinstructionMessage = \"Opdater siden og prøv igen.\",\n\t...props\n}: ErrorScreenProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"rf-error-screen p-base flex-1\", className)}\n\t\t\trole=\"alert\"\n\t\t\taria-live=\"assertive\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-error-screen__content bg-[#FEF2F2] rounded-lg p-base flex flex-col items-center justify-center gap-1 text-center size-full\">\n\t\t\t\t<WarningIcon className=\"mb-2 fill-destructive\" aria-hidden=\"true\" />\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"rf-error-screen__message text-neutral-3\"\n\t\t\t\t\tid=\"error-heading\"\n\t\t\t\t>\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</p>\n\t\t\t\t<p className=\"rf-error-screen__instruction\">{instructionMessage}</p>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ErrorScreen;\n","import { useLocale } from \"use-intl\";\nimport navigation from \"../../utils/navigation\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useNavigation = () => {\n\tconst locale = useLocale();\n\tconst {\n\t\tconfig: {\n\t\t\tdata: { slug }\n\t\t}\n\t} = useWidgetContext();\n\n\tif (!slug) {\n\t\tthrow new Error(\n\t\t\t\"useNavigation must be used within a WidgetContextProvider with a valid slug\"\n\t\t);\n\t}\n\n\treturn {\n\t\tback: () => navigation.back(locale, slug),\n\t\tcontinue: () => navigation.continue(locale, slug),\n\t\texit: navigation.exit\n\t};\n};\n\nexport default useNavigation;\n","import { useTranslations } from \"use-intl\";\nimport { DIALOG_PRIORITY } from \"../../lib/context/dialog-queue-context\";\nimport WarningIcon from \"../icons/warning\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport Avatar from \"../ui/avatar/avatar\";\nimport Dialog, { DialogModalProps } from \"./common\";\n\nconst EmptyExchangeDialog = (dialog: Omit<DialogModalProps, \"priority\">) => {\n\tconst t = useTranslations(\"dialog.empty_exchange\");\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center\"\n\t\t\t{...dialog}\n\t\t\tpriority={DIALOG_PRIORITY.emptyExchange}\n\t\t>\n\t\t\t<ReturnAvatarStack>\n\t\t\t\t{zIndex => (\n\t\t\t\t\t<Avatar className=\"flex\" style={{ zIndex }}>\n\t\t\t\t\t\t<WarningIcon className=\"size-3 m-auto -translate-y-px fill-warning\" />\n\t\t\t\t\t</Avatar>\n\t\t\t\t)}\n\t\t\t</ReturnAvatarStack>\n\t\t\t<Dialog.Title>{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept>{t(\"confirm\")}</Dialog.Accept>\n\t\t\t<Dialog.Reject>{t(\"reject\")}</Dialog.Reject>\n\t\t</Dialog.Modal>\n\t);\n};\n\nexport default EmptyExchangeDialog;\n","import { useTranslations } from \"use-intl\";\nimport useDialog from \"../../lib/hooks/common/use-dialog\";\nimport useCalculation from \"../../lib/hooks/context/use-calculation\";\nimport useErrors from \"../../lib/hooks/context/use-errors\";\nimport useNavigation from \"../../lib/hooks/context/use-navigation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport EmptyExchangeDialog from \"../dialog/empty-exchange-dialog\";\nimport ArrowRightIcon from \"../icons/arrow-right\";\nimport Button from \"../ui/button\";\nimport Price from \"../ui/price\";\n\nconst ExchangeConfirmation = () => {\n\tconst t = useTranslations(\"confirmation\");\n\tconst navigation = useNavigation();\n\n\tconst {\n\t\tcalculationState,\n\t\tupdateSessionCacheState,\n\t\tisPending: globalPendingState,\n\t\thasFailed\n\t} = useReturnContext();\n\tconst { isRefunding, returnTotal, itemCount } = useCalculation();\n\tconst { errors } = useErrors();\n\n\tconst blockingErrors = errors.filter(error => error.blocking);\n\n\tconst canContinue =\n\t\t!hasFailed &&\n\t\t!globalPendingState &&\n\t\t!updateSessionCacheState.value.pending &&\n\t\tblockingErrors.length === 0;\n\n\tconst hasExchangeProducts = itemCount > 0;\n\n\tfunction continueIfPossible() {\n\t\tif (!canContinue) return;\n\n\t\tnavigation.continue();\n\t}\n\n\tconst emptyExchangeDialog = useDialog({\n\t\tonConfirm: state => {\n\t\t\tstate.set(false);\n\t\t\tcontinueIfPossible();\n\t\t}\n\t});\n\n\tfunction handleContinue() {\n\t\tif (!canContinue) return;\n\n\t\tif (!hasExchangeProducts) {\n\t\t\temptyExchangeDialog.state.set(true);\n\t\t\treturn;\n\t\t}\n\n\t\tcontinueIfPossible();\n\t}\n\n\treturn (\n\t\t<div className=\"rf-exchange-confirmation rounded-t-2xl bg-neutral-1 p-base pb-safe-offset-base space-y-2\">\n\t\t\t<div className=\"rf-exchange-confirmation__header flex justify-between items-center pb-2\">\n\t\t\t\t<h3 className=\"rf-exchange-confirmation__title font-medium\">\n\t\t\t\t\t{isRefunding ? t(\"title_refund\") : t(\"title_checkout\")}\n\t\t\t\t</h3>\n\t\t\t\t<Price value={returnTotal} pending={calculationState.value.pending} />\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tdisabled={!canContinue}\n\t\t\t\tonClick={handleContinue}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\ticon={ArrowRightIcon}\n\t\t\t>\n\t\t\t\t<span>\n\t\t\t\t\t{hasExchangeProducts\n\t\t\t\t\t\t? t(\"confirm_exchange\")\n\t\t\t\t\t\t: t(\"confirm_no_exchange\")}\n\t\t\t\t</span>\n\t\t\t</Button>\n\t\t\t<p className=\"rf-exchange-confirmation__disclaimer text-sm text-neutral-3 text-center mx-auto font-normal\">\n\t\t\t\t{hasExchangeProducts\n\t\t\t\t\t? t(\"disclaimer_exchange\")\n\t\t\t\t\t: t(\"disclaimer_no_exchange\")}\n\t\t\t</p>\n\t\t\t<EmptyExchangeDialog {...emptyExchangeDialog.register()} />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeConfirmation;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport RejectButton from \"../ui/reject-button\";\n\nconst ExchangeHeader = () => {\n\tconst t = useTranslations(\"common\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className=\"rf-exchange-header border-t border-neutral-3 p-base flex items-center justify-between\">\n\t\t\t<h2 className=\"rf-exchange-header__title text-xl font-semibold\">\n\t\t\t\t{t(\"title\")}\n\t\t\t</h2>\n\t\t\t<RejectButton\n\t\t\t\tshowLabel\n\t\t\t\tclassName=\"rf-exchange-header__close-button\"\n\t\t\t\tlabelProps={{ className: \"rf-exchange-header__close-text\" }}\n\t\t\t\tonClick={() => widgetViewState.set(WidgetViewState.Collapsed)}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nexport default ExchangeHeader;\n","const CartIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={28}\n\t\theight={27}\n\t\tviewBox=\"0 0 28 27\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--cart ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M8.094 20.443c-1.223-.066-1.2-1.856 0-1.919 3.4.013 12.367.004 15.875.006.96 0 1.78-.68 1.996-1.652l1.992-8.979a1.77 1.77 0 0 0-.316-1.46 1.62 1.62 0 0 0-1.293-.653c-1.41 0-13.39-.057-19.525-.082L5.85 1.947C5.617 1.05 4.83.423 3.936.423H.821C.367.423 0 .805 0 1.277s.367.854.82.854h3.116c.154 0 .29.108.33.262L8 16.818a2.5 2.5 0 0 0-1.732.793 2.7 2.7 0 0 0-.738 1.919c.025 1.445 1.174 2.621 2.563 2.621H9.29a3.1 3.1 0 0 0-.278 1.282c0 1.648 1.289 2.99 2.873 2.99s2.872-1.341 2.872-2.99c0-.459-.1-.893-.277-1.282h5.182a3.1 3.1 0 0 0-.277 1.281c0 1.649 1.288 2.99 2.872 2.99s2.873-1.341 2.873-2.99a3.1 3.1 0 0 0-.299-1.326.85.85 0 0 0 .56-.81c0-.47-.368-.853-.822-.853zm5.023 2.99c0 .706-.552 1.281-1.231 1.281-.68 0-1.232-.575-1.232-1.281 0-.707.552-1.281 1.23-1.282h.003c.678 0 1.23.575 1.23 1.282m9.141 1.28c-.678 0-1.23-.574-1.23-1.28 0-.7.54-1.27 1.21-1.282h.04c.67.011 1.212.582 1.212 1.281 0 .707-.553 1.282-1.232 1.282M26.355 7.5q.005.009.003.015l-.84 3.783h-2.842l.484-3.817 3.182.013q.006-.002.013.006m-8.462 9.322v-3.815h2.91l-.483 3.815zm-4.07 0-.488-3.815h2.916v3.815zm-3.779 0h-.002a.45.45 0 0 1-.428-.341l-.9-3.475h2.965l.488 3.816zm3.073-5.524-.494-3.861 3.628.015v3.846zm4.776 0v-3.84l3.612.016-.485 3.824zM10.966 7.43l.495 3.868H8.27L7.267 7.414zm13.003 9.392h-1.993l.483-3.815h2.68l-.773 3.486a.41.41 0 0 1-.397.329\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default CartIcon;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport CartIcon from \"../icons/cart\";\n\nconst ExchangePlaceholder = () => {\n\tconst t = useTranslations(\"exchange_placeholder\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className=\"rf-exchange-placeholder px-base pb-base\">\n\t\t\t<div className=\"rf-exchange-placeholder__content border border-dashed border-[#DDDDDD] h-36 rounded-md flex items-center justify-center flex-col gap-2 font-medium text-base p-base\">\n\t\t\t\t<CartIcon className=\"text-neutral-3\" />\n\t\t\t\t<span className=\"rf-exchange-placeholder__text\">\n\t\t\t\t\t{t(\"prompt_text\")}\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => widgetViewState.set(WidgetViewState.Collapsed)}\n\t\t\t\t\tclassName=\"rf-exchange-placeholder__continue text-button-background decoration-[color:hsla(var(--rf-c-button-background),_0.25)] underline-offset-4 underline text-sm cursor-pointer\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t{t(\"continue\")}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ExchangePlaceholder;\n","import useErrors from \"../../../lib/hooks/context/use-errors\";\nimport Banner from \"../../ui/banner/banner\";\n\nconst ProductErrors = () => {\n\tconst { errors } = useErrors();\n\n\tif (errors.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"rf-product-errors rf-product-view__error-list px-base pb-base space-y-base\">\n\t\t\t{errors.map(({ id, message }) => (\n\t\t\t\t<Banner\n\t\t\t\t\tkey={id}\n\t\t\t\t\tclassName=\"rf-product-view__error animate-slide-up-and-fade-in\"\n\t\t\t\t\ttone=\"error\"\n\t\t\t\t>\n\t\t\t\t\t{message}\n\t\t\t\t</Banner>\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default ProductErrors;\n","import { OrderProduct, ShopifyCartItem } from \"../../../lib/types\";\n\nexport interface QuantityPickerConstraints {\n\tmin: {\n\t\tlimit: number;\n\t\tdisabled: boolean;\n\t};\n\tmax: {\n\t\tlimit: number;\n\t\tdisabled: boolean;\n\t};\n}\n\nexport const DEFAULT_CONSTRAINTS: QuantityPickerConstraints = {\n\tmin: { limit: 1, disabled: false },\n\tmax: { limit: 99, disabled: true }\n};\n\nexport function getNormalizedQuantityRule(\n\tquantityRule: ShopifyCartItem[\"quantity_rule\"]\n) {\n\tconst minQuantity = quantityRule?.min ?? 1;\n\tconst maxQuantity = quantityRule?.max ?? 99;\n\tconst increment = quantityRule?.increment ?? 1;\n\n\tconst constraints: QuantityPickerConstraints = {\n\t\tmin: { limit: minQuantity, disabled: false },\n\t\tmax: { limit: maxQuantity, disabled: true }\n\t};\n\n\treturn {\n\t\tmin: minQuantity,\n\t\tmax: maxQuantity,\n\t\tincrement,\n\t\tconstraints\n\t};\n}\n\nexport function getSafeProductUrl(\n\tgetProductUrl:\n\t\t| ((product: ShopifyCartItem | OrderProduct) => string)\n\t\t| undefined,\n\tproduct: ShopifyCartItem | OrderProduct\n): string {\n\tconst fallback = `/products/${product.handle}`;\n\tif (!getProductUrl) return fallback;\n\ttry {\n\t\tconst url = getProductUrl(product);\n\t\treturn typeof url === \"string\" && url ? url : fallback;\n\t} catch {\n\t\treturn fallback;\n\t}\n}\n\nexport function clampQuantity(\n\tquantity: number,\n\tconstraints: QuantityPickerConstraints = DEFAULT_CONSTRAINTS\n) {\n\treturn Math.max(\n\t\tconstraints.min.limit,\n\t\tMath.min(quantity, constraints.max.limit)\n\t);\n}\n","import { useCallback } from \"preact/hooks\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport Icon from \"../../icons/icon\";\nimport {\n\tclampQuantity,\n\tDEFAULT_CONSTRAINTS,\n\tQuantityPickerConstraints\n} from \"./product.utils\";\n\ninterface QuantityPickerProps extends React.HTMLAttributes<HTMLDivElement> {\n\tonIncrement: (isAtBound: boolean) => void | Promise<void>;\n\tonDecrement: (isAtBound: boolean) => void | Promise<void>;\n\tquantity: number;\n\tconstraints?: QuantityPickerConstraints;\n\tpending?: boolean;\n\tdisabled?: boolean;\n}\n\nconst QuantityPicker = ({\n\tonIncrement,\n\tonDecrement,\n\tconstraints = DEFAULT_CONSTRAINTS,\n\tquantity,\n\tpending = false,\n\tdisabled = false,\n\tclassName,\n\t...props\n}: QuantityPickerProps) => {\n\tconst isDisabled = pending || disabled;\n\n\tconst isAtMin = quantity === constraints.min.limit;\n\tconst isAtMax = quantity === constraints.max.limit;\n\n\tconst incrementDisabled = (constraints.max.disabled && isAtMax) || isDisabled;\n\tconst decrementDisabled = (constraints.min.disabled && isAtMin) || isDisabled;\n\n\tconst handleIncrement = useCallback(async () => {\n\t\tif (incrementDisabled) return;\n\t\ttry {\n\t\t\tawait onIncrement(isAtMax);\n\t\t} catch (err) {\n\t\t\tlogger.error(\"Increment failed:\", err);\n\t\t}\n\t}, [incrementDisabled, onIncrement, isAtMax]);\n\n\tconst handleDecrement = useCallback(async () => {\n\t\tif (decrementDisabled) return;\n\t\ttry {\n\t\t\tawait onDecrement(isAtMin);\n\t\t} catch (err) {\n\t\t\tlogger.error(\"decrement failed:\", err);\n\t\t}\n\t}, [decrementDisabled, onDecrement, isAtMin]);\n\n\tconst clampedQuantity = clampQuantity(quantity, constraints);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-quantity-picker rounded-full p-1 border border-button-secondary-background flex items-center h-min gap-2 transition-opacity\",\n\t\t\t\tisDisabled &&\n\t\t\t\t\t\"rf-quantity-picker--disabled opacity-50 cursor-not-allowed\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"rf-quantity-picker__decrement-button disabled:!opacity-50 desktop:hover:opacity-80 disabled:cursor-not-allowed transition-opacity\"\n\t\t\t\tdisabled={decrementDisabled}\n\t\t\t\tonClick={handleDecrement}\n\t\t\t>\n\t\t\t\t<Icon variant=\"solid-inverse\" size=\"sm\">\n\t\t\t\t\t<span className=\"rf-quantity-picker__decrement-icon text-base leading-none -mt-0.5\">\n\t\t\t\t\t\t-\n\t\t\t\t\t</span>\n\t\t\t\t</Icon>\n\t\t\t</button>\n\t\t\t<div className=\"rf-quantity-picker__quantity px-1.5 flex-1 text-base\">\n\t\t\t\t{clampedQuantity}\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"rf-quantity-picker__increment-button disabled:!opacity-50 desktop:hover:opacity-80 disabled:cursor-not-allowed transition-opacity\"\n\t\t\t\tdisabled={incrementDisabled}\n\t\t\t\tonClick={handleIncrement}\n\t\t\t>\n\t\t\t\t<Icon variant=\"solid-inverse\" size=\"sm\">\n\t\t\t\t\t<span className=\"rf-quantity-picker__increment-icon text-base leading-none -mt-0.5\">\n\t\t\t\t\t\t+\n\t\t\t\t\t</span>\n\t\t\t\t</Icon>\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nexport default QuantityPicker;\n","import { memo } from \"preact/compat\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport useErrors from \"../../../lib/hooks/context/use-errors\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport useCartActions from \"../../../lib/hooks/feature/use-cart-actions\";\nimport { ShopifyCartItem } from \"../../../lib/types\";\nimport { updateCartItemQuantity } from \"../../../lib/utils/cart\";\nimport {\n\tgetErrorStateFromCode,\n\tProductErrorState\n} from \"../../../lib/utils/errors\";\nimport { isNil } from \"../../../lib/utils/helpers\";\nimport { getNormalizedQuantityRule } from \"./product.utils\";\nimport QuantityPicker from \"./quantity-picker\";\n\ninterface ProductActionsProps {\n\tvariantId: number;\n\tquantity?: number;\n\tquantityRule: ShopifyCartItem[\"quantity_rule\"];\n}\n\nconst ProductActions = ({\n\tvariantId,\n\tquantity,\n\tquantityRule\n}: ProductActionsProps) => {\n\tconst t = useTranslations(\"product\");\n\tconst [isPending, setIsPending] = useState(false);\n\tconst { cartState, isPending: anyStatePending } = useReturnContext();\n\tconst errors = useErrors();\n\tconst { processCartUpdate } = useCartActions();\n\n\tconst handleQuantityChange = useCallback(\n\t\tasync (newQuantity: number) => {\n\t\t\tsetIsPending(true);\n\n\t\t\tconst errorId = ProductErrorState.ProductLimit;\n\n\t\t\ttry {\n\t\t\t\t// Start loading state\n\t\t\t\tcartState.set(prev => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tpending: true,\n\t\t\t\t\terror: null\n\t\t\t\t}));\n\n\t\t\t\tconst updatedCart = await updateCartItemQuantity({\n\t\t\t\t\tvariantId,\n\t\t\t\t\tquantity: newQuantity\n\t\t\t\t});\n\n\t\t\t\tawait processCartUpdate(updatedCart);\n\n\t\t\t\t// Remove the error if it exists\n\t\t\t\tif (errors.has(errorId)) {\n\t\t\t\t\terrors.remove(errorId);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err as Error;\n\t\t\t\tconst parsed = parseInt(error.message);\n\t\t\t\tconst errorCode = isNaN(parsed) ? null : parsed;\n\n\t\t\t\tcartState.set(prev => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tpending: false\n\t\t\t\t}));\n\n\t\t\t\terrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage: t(`error.${getErrorStateFromCode(errorCode)}`)\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tsetIsPending(false);\n\t\t\t}\n\t\t},\n\t\t[cartState, variantId, errors, t, processCartUpdate]\n\t);\n\n\tif (isNil(quantity)) {\n\t\treturn null;\n\t}\n\n\tconst { increment, constraints } = getNormalizedQuantityRule(quantityRule);\n\n\treturn (\n\t\t<div className=\"rf-product-actions flex items-center\">\n\t\t\t<QuantityPicker\n\t\t\t\tpending={anyStatePending || isPending}\n\t\t\t\tconstraints={constraints}\n\t\t\t\tonDecrement={isAtBound => {\n\t\t\t\t\tconst newQuantity = isAtBound ? 0 : quantity - increment;\n\t\t\t\t\thandleQuantityChange(newQuantity);\n\t\t\t\t}}\n\t\t\t\tonIncrement={() => {\n\t\t\t\t\tconst newQuantity = quantity + increment;\n\t\t\t\t\thandleQuantityChange(newQuantity);\n\t\t\t\t}}\n\t\t\t\tquantity={quantity}\n\t\t\t/>\n\t\t\t<button\n\t\t\t\tdisabled={anyStatePending || isPending}\n\t\t\t\tclassName=\"rf-product-actions__remove-button underline ml-auto text-sm disabled:cursor-not-allowed disabled:opacity-50 transition-opacity cursor-pointer\"\n\t\t\t\tonClick={() => handleQuantityChange(0)}\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\t{t(\"remove\")}\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nexport default memo(ProductActions);\n","import { cn } from \"../../lib/utils/helpers\";\n\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tdisabled?: boolean;\n\tunstyled?: boolean;\n\tonDisabledClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nconst Link = ({\n\tclassName,\n\thref,\n\tunstyled = false,\n\tonClick,\n\tonDisabledClick,\n\tdisabled = false,\n\t...props\n}: LinkProps) => {\n\tconst isDisabled = disabled || !href;\n\n\tfunction handleClick(e: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (disabled) {\n\t\t\te.preventDefault();\n\t\t\tonDisabledClick?.(e);\n\t\t\treturn;\n\t\t}\n\t\tonClick?.(e);\n\t}\n\n\treturn (\n\t\t<a\n\t\t\tonClick={handleClick}\n\t\t\thref={isDisabled ? undefined : href}\n\t\t\taria-disabled={isDisabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-link block\",\n\t\t\t\t!unstyled && \"transition-opacity\",\n\t\t\t\tisDisabled\n\t\t\t\t\t? unstyled\n\t\t\t\t\t\t? \"cursor-default\"\n\t\t\t\t\t\t: \"cursor-not-allowed opacity-50\"\n\t\t\t\t\t: \"cursor-pointer\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Link;\n","import { memo } from \"preact/compat\";\nimport { useTranslations } from \"use-intl\";\nimport useCurrency from \"../../../lib/hooks/context/use-currency\";\nimport { cn, isNil, parseToNumber } from \"../../../lib/utils/helpers\";\nimport Link from \"../../ui/link\";\nimport Price from \"../../ui/price\";\n\nexport interface ProductAttributesAttributes {\n\ttitle: string;\n\tvariantTitle: string | null | undefined;\n\tpending?: boolean;\n\tprice: number | null | undefined;\n\tcompareAtPrice: number | null | undefined;\n\tquantity: number;\n\thref?: string;\n\texchangeRate?: number;\n}\n\ninterface ProductAttributesProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"children\" | \"title\">,\n\t\tProductAttributesAttributes {\n\tshowQuantity?: boolean;\n}\n\nconst ProductAttributes = ({\n\ttitle,\n\tvariantTitle,\n\tpending = false,\n\tprice,\n\tcompareAtPrice,\n\tclassName,\n\tquantity = 1,\n\thref,\n\tshowQuantity = true,\n\texchangeRate,\n\t...props\n}: ProductAttributesProps) => {\n\tconst t = useTranslations();\n\tconst { applyExchangeRate } = useCurrency();\n\tconst quantityIsVisible = quantity > 1 && showQuantity;\n\n\tconst resolvedCompareAt = !isNil(compareAtPrice)\n\t\t? applyExchangeRate(parseToNumber(compareAtPrice), exchangeRate)\n\t\t: undefined;\n\n\tconst resolvedPrice = applyExchangeRate(parseToNumber(price), exchangeRate);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-product-attributes flex justify-between gap-4 text-sm leading-tight\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-product-attributes__info flex-1 min-w-0\">\n\t\t\t\t{href ? (\n\t\t\t\t\t<Link unstyled href={href} className=\"rf-product-attributes__link\">\n\t\t\t\t\t\t<h3 className=\"rf-product-attributes__title text-base font-medium line-clamp-1\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t</Link>\n\t\t\t\t) : (\n\t\t\t\t\t<h3 className=\"rf-product-attributes__title text-base font-medium line-clamp-1\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h3>\n\t\t\t\t)}\n\t\t\t\t{(variantTitle || quantityIsVisible) && (\n\t\t\t\t\t<h4 className=\"rf-product-attributes__variant text-neutral-3\">\n\t\t\t\t\t\t{variantTitle}{\" \"}\n\t\t\t\t\t\t{quantityIsVisible && (\n\t\t\t\t\t\t\t<span className=\"rf-product-attributes__quantity\">\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{t(\"piece\", {\n\t\t\t\t\t\t\t\t\tcount: quantity\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</h4>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<Price\n\t\t\t\tpending={pending}\n\t\t\t\tvalue={resolvedPrice}\n\t\t\t\tcompareAtValue={resolvedCompareAt}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nexport default memo(ProductAttributes);\n","import { memo } from \"preact/compat\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../../lib/types\";\nimport Image from \"../../ui/image\";\n\ninterface ProductImageProps {\n\timageSource: string;\n\ttitle: string;\n\thref: string;\n}\n\nconst ProductImage = ({ imageSource, title, href }: ProductImageProps) => {\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst handleAnchorClick = () =>\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\n\treturn (\n\t\t<a className=\"rf-product-image\" href={href} onClick={handleAnchorClick}>\n\t\t\t<Image\n\t\t\t\tclassName=\"rf-product-image__img w-[70px] h-24 rounded-lg border border-neutral-1 object-cover\"\n\t\t\t\tsrc={imageSource}\n\t\t\t\talt={title}\n\t\t\t/>\n\t\t</a>\n\t);\n};\n\nexport default memo(ProductImage);\n","import { CalculationExchangeProduct } from \"../../../../api\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { ShopifyCartItem } from \"../../../lib/types\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ProductActions from \"./product-actions\";\nimport ProductAttributes from \"./product-attributes\";\nimport ProductImage from \"./product-image\";\nimport { getSafeProductUrl } from \"./product.utils\";\n\nexport interface ExtendedShopifyProduct extends ShopifyCartItem {\n\tcalculation: Omit<CalculationExchangeProduct, \"coverage\"> | undefined;\n}\n\ninterface ProductProps extends Omit<\n\tReact.HTMLAttributes<HTMLLIElement>,\n\t\"children\" | \"title\" | \"id\" | \"key\"\n> {\n\tproduct: ExtendedShopifyProduct;\n}\n\nconst Product = ({\n\tproduct: { calculation, ...product },\n\tclassName,\n\t...props\n}: ProductProps) => {\n\tconst {\n\t\tconfig: { options }\n\t} = useWidgetContext();\n\n\tconst href = getSafeProductUrl(options.getProductUrl, product);\n\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\"rf-product flex gap-4 p-base first:pt-0\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ProductImage\n\t\t\t\timageSource={product.image}\n\t\t\t\ttitle={product.product_title}\n\t\t\t\thref={href}\n\t\t\t/>\n\t\t\t<div className=\"rf-product__content space-y-2 flex-1\">\n\t\t\t\t<ProductAttributes\n\t\t\t\t\tclassName=\"flex-1\"\n\t\t\t\t\thref={href}\n\t\t\t\t\ttitle={product.product_title}\n\t\t\t\t\tvariantTitle={product.variant_title}\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tprice={calculation?.price}\n\t\t\t\t\tcompareAtPrice={calculation?.compareAtPrice}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\tshowQuantity={false}\n\t\t\t\t/>\n\t\t\t\t<ProductActions\n\t\t\t\t\tvariantId={product.variant_id}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\tquantityRule={product.quantity_rule}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</li>\n\t);\n};\n\nexport default Product;\n","import useCartItems from \"../../../lib/hooks/context/use-cart-items\";\nimport Product from \"./product\";\n\nconst ProductList = () => {\n\tconst { cartItems } = useCartItems();\n\n\treturn (\n\t\t<ul className=\"rf-product-list border-neutral-2 divide-y divide-neutral-2\">\n\t\t\t{cartItems.map((product, i) => {\n\t\t\t\tconst key = `${product.id}-${i}`;\n\t\t\t\treturn <Product key={key} product={product} />;\n\t\t\t})}\n\t\t</ul>\n\t);\n};\n\nexport default ProductList;\n","import { useMemo } from \"preact/hooks\";\nimport { ExtendedShopifyProduct } from \"../../../components/drawer/product/product\";\nimport { CalculationExchangeProduct } from \"../../utils/queries\";\nimport { stripShopifyId } from \"../../utils/shopify\";\nimport useReturnContext from \"./use-return-context\";\n\n/**\n * Merges cart items with their corresponding exchange calculation details.\n * Returns cart items enriched with pricing information from the calculation state.\n */\nconst useCartItems = () => {\n\tconst { cartState, calculationState } = useReturnContext();\n\n\tconst transformedCart = cartState.value.data?.transformed;\n\tconst exchangeDetails =\n\t\tcalculationState.value.data?.exchange?.exchangeDetails;\n\n\tconst cartItems: ExtendedShopifyProduct[] = useMemo(() => {\n\t\tconst items = transformedCart?.items;\n\n\t\tif (!items) return [];\n\n\t\treturn items.map(item => {\n\t\t\tlet calculation: Omit<CalculationExchangeProduct, \"coverage\"> | undefined;\n\n\t\t\tconst exchangeDetailItems = exchangeDetails?.filter(exchangeItem => {\n\t\t\t\tif (exchangeItem.variantId) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tNumber(stripShopifyId(exchangeItem.variantId)) === item.variant_id\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\tNumber(stripShopifyId(exchangeItem.productId)) === item.product_id\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (exchangeDetailItems && exchangeDetailItems.length > 0) {\n\t\t\t\t// Aggregate pricing from all matching exchange detail items for this cart item\n\t\t\t\tcalculation = exchangeDetailItems.reduce(\n\t\t\t\t\t(acc, { coverage, ...curr }) => {\n\t\t\t\t\t\tconst resolvedCurrPrice = coverage?.originalUnitPrice ?? curr.price;\n\n\t\t\t\t\t\tconst resolvedCompareAt =\n\t\t\t\t\t\t\tcoverage?.exchangeUnitPrice ?? curr.compareAtPrice ?? null;\n\n\t\t\t\t\t\tif (resolvedCompareAt) {\n\t\t\t\t\t\t\tif (!acc.compareAtPrice) {\n\t\t\t\t\t\t\t\tacc.compareAtPrice = resolvedCompareAt;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.compareAtPrice += resolvedCompareAt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tacc.price += resolvedCurrPrice;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...curr,\n\t\t\t\t\t\t\t...acc\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprice: 0,\n\t\t\t\t\t\tcompareAtPrice: null\n\t\t\t\t\t} as Omit<CalculationExchangeProduct, \"coverage\">\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tcalculation\n\t\t\t};\n\t\t});\n\t}, [transformedCart, exchangeDetails]);\n\n\treturn { cartItems };\n};\n\nexport default useCartItems;\n","const ArrowDownIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={9}\n\t\theight={11}\n\t\tviewBox=\"0 0 9 11\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-down ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"m4.92 10.824 3.907-3.972A.6.6 0 0 0 9 6.426.6.6 0 0 0 8.827 6l-.355-.36a.594.594 0 0 0-.842 0L5.346 7.957V.594A.583.583 0 0 0 4.764 0h-.502a.605.605 0 0 0-.608.594v7.39L1.357 5.64a.58.58 0 0 0-.831 0L.172 6A.6.6 0 0 0 0 6.426c0 .161.062.312.173.426l3.907 3.972A.58.58 0 0 0 4.5 11a.58.58 0 0 0 .42-.176\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\n\nexport default ArrowDownIcon;\n","const ChevronIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={7}\n\t\tviewBox=\"0 0 11 7\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--chevron ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M10.632 6.183a.95.95 0 0 1-.673.24.97.97 0 0 1-.652-.288l-3.375-3.49-3.375 3.49a.96.96 0 0 1-.652.287.96.96 0 0 1-.673-.24.9.9 0 0 1-.299-.625.88.88 0 0 1 .25-.646L5.244.71a.97.97 0 0 1 1.375 0l4.062 4.2a.9.9 0 0 1 .25.646.9.9 0 0 1-.3.626\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default ChevronIcon;\n","import { useEffect, useRef, useState } from \"preact/hooks\";\nimport { cn } from \"../../lib/utils/helpers\";\n\ninterface ExpanderProps extends Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"onToggle\"\n> {\n\tisOpen: boolean;\n\tcollapseDelay?: number;\n\tautoCloseAfter?: number;\n\tonToggle?: (isOpen: boolean) => void;\n}\n\nconst Expander = ({\n\tisOpen,\n\tclassName,\n\tstyle,\n\tchildren,\n\tcollapseDelay = 300,\n\tautoCloseAfter,\n\tonToggle,\n\t...props\n}: ExpanderProps) => {\n\tconst [isRendered, setIsRendered] = useState(isOpen);\n\tconst [height, setHeight] = useState<number | undefined>(\n\t\tisOpen ? undefined : 0\n\t);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst collapseTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\tconst autoCloseTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n\t// Measure height whenever content might change\n\tconst measureHeight = () => {\n\t\tconst container = containerRef.current;\n\t\tif (container) {\n\t\t\tsetHeight(container.scrollHeight);\n\t\t}\n\t};\n\n\t// Handle opening/closing state changes\n\tuseEffect(() => {\n\t\tif (collapseTimeoutRef.current) {\n\t\t\tclearTimeout(collapseTimeoutRef.current);\n\t\t}\n\t\tif (autoCloseTimeoutRef.current) {\n\t\t\tclearTimeout(autoCloseTimeoutRef.current);\n\t\t}\n\n\t\tif (isOpen) {\n\t\t\t// Opening: render first, then measure height\n\t\t\tsetIsRendered(true);\n\n\t\t\t// Set up auto-close timer if specified\n\t\t\tif (autoCloseAfter && onToggle) {\n\t\t\t\tautoCloseTimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tonToggle(false);\n\t\t\t\t}, autoCloseAfter);\n\t\t\t}\n\t\t} else {\n\t\t\t// Closing: set height to 0 immediately, unmount after delay\n\t\t\tsetHeight(0);\n\t\t\tcollapseTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetIsRendered(false);\n\t\t\t}, collapseDelay);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (collapseTimeoutRef.current) {\n\t\t\t\tclearTimeout(collapseTimeoutRef.current);\n\t\t\t}\n\t\t\tif (autoCloseTimeoutRef.current) {\n\t\t\t\tclearTimeout(autoCloseTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [isOpen, collapseDelay, autoCloseAfter, onToggle]);\n\n\t// Measure height when rendered and opened\n\tuseEffect(() => {\n\t\tif (isRendered && isOpen) {\n\t\t\t// Use requestAnimationFrame to ensure DOM is updated\n\t\t\tconst frame = requestAnimationFrame(() => {\n\t\t\t\tmeasureHeight();\n\t\t\t});\n\t\t\treturn () => cancelAnimationFrame(frame);\n\t\t}\n\t}, [isRendered, isOpen, children]);\n\n\t// Re-measure height if content changes while open\n\tuseEffect(() => {\n\t\tif (isOpen && isRendered) {\n\t\t\tmeasureHeight();\n\t\t}\n\t}, [children, isOpen, isRendered]);\n\n\tif (!isRendered) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-expander overflow-hidden transition-all duration-300 ease-in-out\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: height !== undefined ? `${height}px` : \"auto\",\n\t\t\t\t...(typeof style === \"object\" ? style : {})\n\t\t\t}}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div ref={containerRef}>{children}</div>\n\t\t</div>\n\t);\n};\n\nexport default Expander;\n","import { useTranslations } from \"use-intl\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport GiftcardIcon from \"../../icons/giftcard\";\n\nexport type BadgeType = \"giftcard\";\n\nexport interface ProductBadgeProps {\n\ttype: BadgeType | null;\n}\n\ntype ReturnProductBadgeProps = React.HTMLAttributes<HTMLDivElement> &\n\tProductBadgeProps;\n\nconst ReturnProductBadge = ({\n\tclassName,\n\ttype,\n\t...props\n}: ReturnProductBadgeProps) => {\n\tconst t = useTranslations(\"product.badge\");\n\n\tswitch (type) {\n\t\tcase \"giftcard\":\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-return-product-badge rf-return-product__badge rf-return-product__badge--giftcard text-base text-primary\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<GiftcardIcon className=\"inline -mt-1 w-4 h-auto\" /> {t(\"giftcard\")}\n\t\t\t\t</div>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport default ReturnProductBadge;\n","import { useTranslations } from \"use-intl\";\nimport Link from \"../../ui/link\";\nimport ReturnProductBadge, { ProductBadgeProps } from \"./return-product-badge\";\n\ninterface ReturnProductActionsProps extends ProductBadgeProps {\n\tpending?: boolean;\n\tdeleted?: boolean;\n\tonDeletedClick?: () => void;\n\thref: string;\n\thandleAnchorClick: () => void;\n}\n\nconst ReturnProductActions = ({\n\tpending = false,\n\tdeleted = false,\n\thref,\n\tonDeletedClick,\n\thandleAnchorClick,\n\t...rest\n}: ReturnProductActionsProps) => {\n\tconst t = useTranslations(\"product\");\n\n\tfunction handleDeletedClick() {\n\t\tif (deleted) {\n\t\t\tonDeletedClick?.();\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"rf-return-product-actions rf-return-product__actions flex justify-between items-center\">\n\t\t\t<Link\n\t\t\t\tonDisabledClick={handleDeletedClick}\n\t\t\t\tdisabled={pending || deleted}\n\t\t\t\tonClick={handleAnchorClick}\n\t\t\t\tclassName=\"rf-return-product__link text-sm underline block\"\n\t\t\t\thref={href}\n\t\t\t>\n\t\t\t\t{t(\"go_to_product\")}\n\t\t\t</Link>\n\t\t\t<ReturnProductBadge {...rest} />\n\t\t</div>\n\t);\n};\n\nexport default ReturnProductActions;\n","import { useMemo, useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { CalculationLineItem } from \"../../../../api\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { OrderProduct, WidgetViewState } from \"../../../lib/types\";\nimport { cn, isNil } from \"../../../lib/utils/helpers\";\nimport Banner from \"../../ui/banner/banner\";\nimport Expander from \"../../ui/expander\";\nimport Image from \"../../ui/image\";\nimport Link from \"../../ui/link\";\nimport ProductAttributes from \"../product/product-attributes\";\nimport { getSafeProductUrl } from \"../product/product.utils\";\nimport ReturnProductActions from \"./return-product-actions\";\nimport { BadgeType } from \"./return-product-badge\";\n\nexport interface ExtendedCalculationLineItem extends OrderProduct {\n\tcalculation: CalculationLineItem | undefined;\n}\n\nexport interface IReturnProductAttributes {\n\thandle: string;\n\timageSource: string;\n}\n\ninterface ReturnProductProps extends Omit<\n\tReact.HTMLAttributes<HTMLLIElement>,\n\t\"children\" | \"title\"\n> {\n\tproduct: ExtendedCalculationLineItem;\n\tallProducts: ExtendedCalculationLineItem[];\n}\n\nconst ReturnProduct = ({\n\tproduct: { calculation, ...product },\n\tallProducts,\n\tclassName,\n\t...props\n}: ReturnProductProps) => {\n\tconst t = useTranslations(\"product.error\");\n\tconst [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions,\n\t\t\tdata: { formData }\n\t\t}\n\t} = useWidgetContext();\n\n\tconst href = getSafeProductUrl(options.getProductUrl, product);\n\n\tfunction handleAnchorClick() {\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t}\n\n\tconst qty = product?.quantity ?? 1;\n\n\tconst price = (calculation?.price ?? 0) * qty;\n\tconst compareAtPrice = (calculation?.originalPrice ?? 0) * qty;\n\n\tconst badgeType: BadgeType | null = useMemo(() => {\n\t\tconst allActions = allProducts\n\t\t\t.flatMap(item => {\n\t\t\t\tif (item.id !== product.id) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst returnItems = formData?.selectedItems?.filter(\n\t\t\t\t\treturnItem => returnItem.lineItemId === item.shopifyLineId\n\t\t\t\t);\n\t\t\t\tif (!returnItems || returnItems.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t// Return the action from calculation instead of from item\n\t\t\t\treturn item.calculation?.action;\n\t\t\t})\n\t\t\t.filter(item => !isNil(item));\n\n\t\tconst multipleTypes = new Set(allActions).size > 1;\n\n\t\tconst action = calculation?.action;\n\n\t\tif (multipleTypes || !action) {\n\t\t\treturn null;\n\t\t}\n\n\t\tswitch (action) {\n\t\t\tcase \"GIFTCARD\":\n\t\t\t\treturn \"giftcard\";\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}, [calculation?.action, allProducts, product.id, formData?.selectedItems]);\n\n\tconst isDeleted = !calculation?.variantId;\n\n\tfunction handleDeletedClick() {\n\t\tif (!isDeleted) {\n\t\t\treturn;\n\t\t}\n\t\tsetErrorMessage(t(\"product_unavailable\"));\n\t}\n\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-return-product grid grid-cols-[max-content_1fr] gap-x-4 p-base\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Link\n\t\t\t\tdisabled={isDeleted}\n\t\t\t\tonDisabledClick={handleDeletedClick}\n\t\t\t\tclassName=\"rf-return-product__image-link\"\n\t\t\t\tonClick={handleAnchorClick}\n\t\t\t\thref={href}\n\t\t\t\tunstyled\n\t\t\t>\n\t\t\t\t<Image\n\t\t\t\t\tclassName=\"rf-return-product__image size-[70px] rounded-lg border border-neutral-1 object-cover\"\n\t\t\t\t\tsrc={product.image}\n\t\t\t\t\talt={product.title}\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t\t<div className=\"rf-return-product__content flex-1 space-y-1 flex flex-col justify-between\">\n\t\t\t\t<ProductAttributes\n\t\t\t\t\tclassName=\"text-neutral-3\"\n\t\t\t\t\thref={href}\n\t\t\t\t\ttitle={product.title}\n\t\t\t\t\tvariantTitle={product.variantTitle}\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tprice={price}\n\t\t\t\t\tcompareAtPrice={compareAtPrice}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\texchangeRate={calculation?.exchangeRate ?? 1}\n\t\t\t\t/>\n\t\t\t\t<ReturnProductActions\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tdeleted={isDeleted}\n\t\t\t\t\thref={href}\n\t\t\t\t\tonDeletedClick={handleDeletedClick}\n\t\t\t\t\thandleAnchorClick={handleAnchorClick}\n\t\t\t\t\ttype={badgeType}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Expander\n\t\t\t\tclassName=\"col-span-full\"\n\t\t\t\tisOpen={!!errorMessage}\n\t\t\t\tautoCloseAfter={5000}\n\t\t\t\tonToggle={bool => setErrorMessage(!bool ? null : errorMessage)}\n\t\t\t>\n\t\t\t\t<div className=\"pt-4\">\n\t\t\t\t\t<Banner tone=\"error\">{errorMessage}</Banner>\n\t\t\t\t</div>\n\t\t\t</Expander>\n\t\t</li>\n\t);\n};\n\nexport default ReturnProduct;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport Skeleton from \"../../ui/skeleton/skeleton\";\n\nconst ReturnProductSkeleton = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLLIElement>) => {\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-return-product-skeleton flex gap-4 p-base text-sm\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Skeleton className=\"size-[70px] rounded-lg\" />\n\t\t\t<div className=\"rf-return-product-skeleton__content flex-1 space-y-1 flex flex-col justify-between\">\n\t\t\t\t<div className=\"rf-return-product-skeleton__info space-y-1\">\n\t\t\t\t\t<Skeleton className=\"w-[16ch]\" />\n\t\t\t\t\t<Skeleton className=\"text-xs w-[12ch]\" />\n\t\t\t\t</div>\n\t\t\t\t<Skeleton className=\"text-xs w-[16ch]\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"w-[8ch]\" />\n\t\t</li>\n\t);\n};\n\nexport default ReturnProductSkeleton;\n","import { useMemo } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../../lib/hooks/context/use-calculation\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { ReturnViewState } from \"../../../lib/types\";\nimport ArrowDownIcon from \"../../icons/arrow-down\";\nimport ChevronIcon from \"../../icons/chevron\";\nimport Icon from \"../../icons/icon\";\nimport Banner from \"../../ui/banner/banner\";\nimport Price from \"../../ui/price\";\nimport SkeletonContainer from \"../../ui/skeleton/skeleton-container\";\nimport ReturnProduct, { ExtendedCalculationLineItem } from \"./return-product\";\nimport ReturnProductSkeleton from \"./return-product-skeleton\";\n\nconst ReturnProductList = () => {\n\tconst t = useTranslations(\"return_products\");\n\tconst { returnViewState } = useWidgetContext();\n\tconst { orderState, calculationState } = useReturnContext();\n\n\tconst { orderTotal } = useCalculation();\n\n\tconst isPending = calculationState.initialFetch;\n\n\tconst lineItems = calculationState.value.data?.lineItems;\n\tconst exchangeProducts = orderState.value.data?.orderData.productsToExchange;\n\n\tconst extendedLineItems: ExtendedCalculationLineItem[] = useMemo(() => {\n\t\tif (!lineItems || !exchangeProducts) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn exchangeProducts.map(exchangeProduct => {\n\t\t\tconst lineItem = lineItems.find(\n\t\t\t\titem => item.lineItemId === exchangeProduct.shopifyLineId\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...exchangeProduct,\n\t\t\t\tcalculation: lineItem\n\t\t\t};\n\t\t});\n\t}, [lineItems, exchangeProducts]);\n\n\tconst hasGiftcardItem = Boolean(\n\t\textendedLineItems?.some(item => item.calculation?.action === \"GIFTCARD\")\n\t);\n\n\tfunction onToggle() {\n\t\treturnViewState.set(prev =>\n\t\t\tprev === ReturnViewState.Collapsed\n\t\t\t\t? ReturnViewState.Open\n\t\t\t\t: ReturnViewState.Collapsed\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-return-product-list border-b border-neutral-2 relative mb-base group [&[data-state='OPEN']]:mb-[calc(var(--rf-base-spacing)*2)]\"\n\t\t\tdata-state={returnViewState.value}\n\t\t>\n\t\t\t<div className=\"rf-return-product-list__header flex justify-between items-center p-base\">\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"rf-return-product-list__toggle-button flex items-center gap-2 font-medium\"\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"rf-return-product-list__toggle-text\">\n\t\t\t\t\t\t{t(\"action\")}\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronIcon\n\t\t\t\t\t\tclassName={`transition-transform will-change-transform ${\n\t\t\t\t\t\t\treturnViewState.value === ReturnViewState.Open\n\t\t\t\t\t\t\t\t? \"rotate-180\"\n\t\t\t\t\t\t\t\t: \"rotate-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t\t<Price value={orderTotal} pending={isPending} />\n\t\t\t</div>\n\t\t\t{/* This is being set with CSS to later support a potential animation */}\n\t\t\t<div className=\"rf-return-product-list__content pb-base group-[&[data-state='COLLAPSED']]:hidden\">\n\t\t\t\t{hasGiftcardItem && (\n\t\t\t\t\t<div className=\"rf-return-product-list__container p-base pt-0\">\n\t\t\t\t\t\t<Banner className=\"rf-return-product-list__banner\" tone=\"giftcard\">\n\t\t\t\t\t\t\t{t(\"banner.giftcard\")}\n\t\t\t\t\t\t</Banner>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<ul className=\"rf-return-product-list__items divide-y divide-neutral-2\">\n\t\t\t\t\t<SkeletonContainer\n\t\t\t\t\t\tpending={isPending}\n\t\t\t\t\t\tskeleton={\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ReturnProductSkeleton />\n\t\t\t\t\t\t\t\t<ReturnProductSkeleton />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{extendedLineItems.map(lineItem => (\n\t\t\t\t\t\t\t<ReturnProduct\n\t\t\t\t\t\t\t\tclassName=\"first:pt-0\"\n\t\t\t\t\t\t\t\tkey={lineItem.id}\n\t\t\t\t\t\t\t\tproduct={lineItem}\n\t\t\t\t\t\t\t\tallProducts={extendedLineItems}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SkeletonContainer>\n\t\t\t\t</ul>\n\t\t\t\t<Icon\n\t\t\t\t\tclassName=\"absolute inset-x-0 mx-auto bottom-0 translate-y-1/2\"\n\t\t\t\t\tvariant=\"solid\"\n\t\t\t\t\ticon={ArrowDownIcon}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ReturnProductList;\n","import useYScrollable from \"../../lib/hooks/common/use-y-scrollable\";\nimport ArrowDownIcon from \"../icons/arrow-down\";\n\ninterface ScrollIndicatorProps {\n\tcontainerRef: React.RefObject<HTMLDivElement>;\n}\n\nconst ScrollIndicator = ({ containerRef }: ScrollIndicatorProps) => {\n\tconst { isYScrollable, isDirty } = useYScrollable(containerRef);\n\n\tconst isVisible = !isDirty && isYScrollable;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-scroll-indicator w-full h-36 bg-gradient-to-t from-white to-transparent absolute bottom-full inset-x-0 flex items-end justify-center p-base transition-all pointer-events-none\"\n\t\t\tstyle={{\n\t\t\t\topacity: isVisible ? 1 : 0,\n\t\t\t\tvisibility: isVisible ? \"visible\" : \"hidden\"\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"rf-scroll-indicator__content rounded-full py-2.5 w-24 bg-neutral-1 text-center space-x-1 align-middle\">\n\t\t\t\t<span className=\"rf-scroll-indicator__text\">Scroll</span>{\" \"}\n\t\t\t\t<ArrowDownIcon className=\"inline text-neutral-3 -mt-0.5\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ScrollIndicator;\n","import type { RefObject } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\ninterface UseYScrollableReturn extends ScrollState {\n\tisYScrollable: boolean;\n}\n\ninterface ScrollState {\n\tisDirty: boolean;\n\tisScrolling: boolean;\n}\n\nconst useYScrollable = <T extends HTMLElement>(\n\tref: RefObject<T>\n): UseYScrollableReturn => {\n\tconst [isYScrollable, setIsYScrollable] = useState(false);\n\tconst [{ isScrolling, isDirty }, setScrollState] = useState<ScrollState>({\n\t\tisDirty: false,\n\t\tisScrolling: false\n\t});\n\n\tuseEffect(() => {\n\t\tconst element = ref.current;\n\t\tif (!element) return;\n\n\t\tconst checkScrollable = () => {\n\t\t\tconst scrollable = element.scrollHeight > element.clientHeight;\n\t\t\tsetIsYScrollable(scrollable);\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentScrollTop = element.scrollTop;\n\t\t\tconst hasScrolled = currentScrollTop > 0;\n\t\t\tsetScrollState(prev => ({\n\t\t\t\tisDirty: hasScrolled ? true : prev.isDirty,\n\t\t\t\tisScrolling: hasScrolled\n\t\t\t}));\n\t\t};\n\n\t\t// Initial checks\n\t\tcheckScrollable();\n\t\thandleScroll();\n\n\t\t// Use ResizeObserver for element size changes\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tcheckScrollable();\n\t\t});\n\t\tresizeObserver.observe(element);\n\n\t\t// Use MutationObserver to detect content changes (like dropdown visibility)\n\t\tconst mutationObserver = new MutationObserver(() => {\n\t\t\tcheckScrollable();\n\t\t});\n\n\t\tmutationObserver.observe(element, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [\"style\", \"class\"] // Common attributes that affect visibility\n\t\t});\n\n\t\t// Listen to scroll events\n\t\telement.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t\telement.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [ref]);\n\n\treturn { isYScrollable, isScrolling, isDirty };\n};\n\nexport default useYScrollable;\n","import { useRef } from \"preact/hooks\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ExchangeAdjustments from \"./adjustments/exchange-adjustments\";\nimport AnnoucementBar from \"./annoucement-bar\";\nimport ErrorScreen from \"./error-screen\";\nimport ExchangeConfirmation from \"./exchange-confirmation\";\nimport ExchangeHeader from \"./exchange-header\";\nimport ExchangePlaceholder from \"./exchange-placeholder\";\nimport ProductErrors from \"./product/product-errors\";\nimport ProductList from \"./product/product-list\";\nimport ReturnProductList from \"./return/return-product-list\";\nimport ScrollIndicator from \"./scroll-indicator\";\n\nconst ExchangeDrawer = () => {\n\tconst { cartState, hasFailed } = useReturnContext();\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst scrollContainerRef = useRef<HTMLDivElement>(null);\n\n\tconst isDrawerOpen = widgetViewState.value === WidgetViewState.Open;\n\n\tconst hasItems =\n\t\tcartState.value.data &&\n\t\t!cartState.value.error &&\n\t\tcartState.value.data.transformed.item_count !== 0;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-drawer bg-background text-foreground transition-[transform,visibility] duration-300 ease-in-out z-20 fixed max-desktop:inset-0 desktop:right-0 desktop:inset-y-0 size-full pt-safe flex flex-col desktop:max-w-[var(--rf-desktop-widget-width)]\",\n\t\t\t\tisDrawerOpen\n\t\t\t\t\t? \"max-desktop:translate-y-0 desktop:translate-x-0 visible\"\n\t\t\t\t\t: \"max-desktop:translate-y-full desktop:translate-x-full pointer-events-none invisible\"\n\t\t\t)}\n\t\t\taria-hidden={!isDrawerOpen}\n\t\t\tinert={!isDrawerOpen}\n\t\t\ttabIndex={!isDrawerOpen ? -1 : undefined}\n\t\t>\n\t\t\t<ExchangeHeader />\n\t\t\t<AnnoucementBar />\n\t\t\t<div\n\t\t\t\tclassName=\"rf-drawer__content flex-1 min-h-0 overflow-y-auto flex flex-col\"\n\t\t\t\tref={scrollContainerRef}\n\t\t\t>\n\t\t\t\t{hasFailed ? (\n\t\t\t\t\t<ErrorScreen />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ReturnProductList />\n\t\t\t\t\t\t{hasItems ? <ProductList /> : <ExchangePlaceholder />}\n\t\t\t\t\t\t<ProductErrors />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t<ExchangeAdjustments className=\"rf-drawer__adjustments mt-auto\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-drawer__footer relative mt-auto\">\n\t\t\t\t<ScrollIndicator containerRef={scrollContainerRef} />\n\t\t\t\t<ExchangeConfirmation />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ExchangeDrawer;\n","import { TOAST_ANIMATION_DURATION } from \"../../lib/context/toast-context\";\nimport useToast from \"../../lib/hooks/context/use-toast\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Banner, { BannerTone } from \"../ui/banner/banner\";\n\nexport interface ToastOptions {\n\tid: string;\n\tmessage: preact.ComponentChildren;\n\ttone?: BannerTone;\n\tduration?: number; // Duration in milliseconds\n\tonClose?: () => void; // Callback when the toast is closed\n}\n\nexport interface ToastQueue extends ToastOptions {\n\tisVisible: boolean; // Indicates if the toast is currently visible\n}\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n\toptions: ToastQueue;\n}\n\nconst Toast = ({\n\toptions: { id, tone = \"info\", message, isVisible },\n\tclassName,\n\tstyle,\n\t...props\n}: ToastProps) => {\n\tconst { remove } = useToast();\n\n\treturn (\n\t\t<div\n\t\t\tonClick={() => remove(id)}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-toast animate-slide-up-and-fade-in overflow-hidden shadow-sm max-w-screen-lg mx-auto\",\n\t\t\t\t`rf-toast--${tone}`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t\tstyle={{\n\t\t\t\tvisibility: isVisible ? \"visible\" : \"hidden\",\n\t\t\t\topacity: isVisible ? 1 : 0,\n\t\t\t\ttransform: !isVisible ? \"translateY(-20px)\" : undefined,\n\t\t\t\ttransition: `all ${TOAST_ANIMATION_DURATION}ms ease-in-out`,\n\t\t\t\t...(typeof style === \"object\" ? style : undefined) // Spread any additional styles\n\t\t\t}}\n\t\t>\n\t\t\t<Banner tone={tone} className=\"font-medium\" border=\"dashed\">\n\t\t\t\t{message}\n\t\t\t</Banner>\n\t\t</div>\n\t);\n};\n\nexport default Toast;\n","import useToast from \"../../lib/hooks/context/use-toast\";\nimport Toast from \"./toast\";\n\nconst ToastContainer = () => {\n\tconst { queue } = useToast();\n\n\tif (queue.length === 0) {\n\t\treturn null; // Return null if there are no toasts to display\n\t}\n\n\treturn (\n\t\t<div className=\"rf-toast__container p-base space-y-base\">\n\t\t\t{queue.map(toast => (\n\t\t\t\t<Toast key={toast.id} options={toast} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default ToastContainer;\n","const ArrowLeftIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={9}\n\t\tviewBox=\"0 0 11 9\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-left ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"m.66 5.202 3.61 3.473c.103.1.24.154.387.154a.56.56 0 0 0 .387-.154l.328-.315a.52.52 0 0 0 0-.749l-2.107-2.03H9.96c.301 0 .54-.228.54-.518v-.446c0-.29-.239-.54-.54-.54H3.242l2.131-2.042a.505.505 0 0 0 0-.739L5.045.982a.55.55 0 0 0-.387-.153.56.56 0 0 0-.387.153L.66 4.455a.513.513 0 0 0 0 .747\" />\n\t</svg>\n);\nexport default ArrowLeftIcon;\n","import { useTranslations } from \"use-intl\";\nimport useNavigation from \"../../lib/hooks/context/use-navigation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ArrowLeftIcon from \"../icons/arrow-left\";\nimport Button from \"../ui/button\";\n\nconst BackButton = ({\n\tclassName,\n\t...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement>) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { orderState } = useReturnContext();\n\tconst navigation = useNavigation();\n\n\tconst isPending = orderState.value.pending;\n\n\tasync function handleClick() {\n\t\tif (isPending) return;\n\n\t\tnavigation.back();\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"ghost\"\n\t\t\ticon={ArrowLeftIcon}\n\t\t\ticonPosition=\"left\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isPending}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-back-button desktop:text-black desktop:bg-neutral-2 desktop:hover:opacity-50 desktop:font-semibold max-desktop:text-sm max-desktop:px-0 max-desktop:h-auto\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\ttype=\"button\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-back-button__text\">{t(\"back\")}</span>\n\t\t</Button>\n\t);\n};\n\nexport default BackButton;\n","const TutorialArrowCurveRight = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={65}\n\t\theight={131}\n\t\tviewBox=\"0 0 65 131\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M30.726 1.8C14.17 30.988-19.17 79.318 20.412 104.855c9.697 6.256 19.735 5.577 30.787 5.577.477 0 11.533-1.774 10.313-2.75-3.267-2.614-22.279-18.309-9.855-8.25 1.315 1.063 11.46 6.781 11.46 8.555 0 4.833-17.775 16.705-21.39 20.321\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={3.6}\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</svg>\n);\n\nexport default TutorialArrowCurveRight;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../../lib/tutorials\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport TutorialArrowCurveRight from \"../tutorial-arrow-curve-right\";\n\ntype TutorialIntroPointerTotalProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TutorialIntroPointerTotal = ({\n\tclassName,\n\t...props\n}: TutorialIntroPointerTotalProps) => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst tutorial = useTutorial();\n\n\tif (tutorial.activeTutorial?.id !== TutorialId.Intro) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-tutorial-pointer rf-tutorial-pointer--total absolute bottom-0 right-full text-white translate-y-3 -translate-x-2 z-10 font-caveat text-2xl pointer-events-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-tutorial-pointer__text absolute -top-3 -translate-y-full left-0 w-28 text-center leading-none block rotate-3\">\n\t\t\t\t{t(\"pointer_total\")}\n\t\t\t</span>\n\t\t\t<TutorialArrowCurveRight className=\"text-button-background\" />\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroPointerTotal;\n","import Skeleton from \"../ui/skeleton/skeleton\";\n\nconst ExchangeTotalSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-exchange-total-skeleton max-desktop:max-w-48 w-full desktop:w-48 space-y-1 text-xs\">\n\t\t\t<Skeleton className=\"w-full rounded-md\" />\n\t\t\t<Skeleton className=\"w-full rounded-md\" />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeTotalSkeleton;\n","import { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../lib/hooks/context/use-calculation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport TutorialIntroPointerTotal from \"../tutorial/intro/tutorial-intro-pointer-total\";\nimport Price from \"../ui/price\";\nimport SkeletonContainer from \"../ui/skeleton/skeleton-container\";\nimport ExchangeTotalSkeleton from \"./exchange-total-skeleton\";\n\nconst ExchangeTotal = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { orderState, isPending } = useReturnContext();\n\n\tconst { orderTotal, cartTotal } = useCalculation();\n\n\tconst orderName = orderState.value.data?.orderData.orderName;\n\n\treturn (\n\t\t<SkeletonContainer skeleton={<ExchangeTotalSkeleton />} pending={isPending}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rf-exchange-total font-normal text-sm max-desktop:max-w-48 w-full desktop:w-48 flex-1\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ExchangeTotalRow\n\t\t\t\t\tlabel={\n\t\t\t\t\t\torderName\n\t\t\t\t\t\t\t? t(\"order_label\", { orderName })\n\t\t\t\t\t\t\t: t(\"order_label_no_name\")\n\t\t\t\t\t}\n\t\t\t\t\tvalue={orderTotal}\n\t\t\t\t>\n\t\t\t\t\t<TutorialIntroPointerTotal />\n\t\t\t\t</ExchangeTotalRow>\n\t\t\t\t<ExchangeTotalRow\n\t\t\t\t\tlabel={t(\"cart_contents\")}\n\t\t\t\t\tvalue={Math.max(0, cartTotal)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</SkeletonContainer>\n\t);\n};\n\nfunction ExchangeTotalRow({\n\tlabel,\n\tvalue,\n\tchildren\n}: {\n\tlabel: React.ReactNode;\n\tvalue: number;\n\tchildren?: React.ReactNode;\n}) {\n\treturn (\n\t\t<div className=\"rf-exchange-total__row flex justify-between relative\">\n\t\t\t<span className=\"rf-exchange-total__label text-neutral-3\">{label}</span>\n\t\t\t<Price className=\"text-sm font-normal relative\" value={value}>\n\t\t\t\t{children}\n\t\t\t</Price>\n\t\t</div>\n\t);\n}\n\nexport default ExchangeTotal;\n","const BagIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={14}\n\t\theight={17}\n\t\tviewBox=\"0 0 14 17\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--bag ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M3.175 4.146H2.103c-.74 0-1.355.589-1.408 1.348l-.691 9.952c-.028.401.107.797.374 1.092A1.4 1.4 0 0 0 1.412 17h11.176a1.4 1.4 0 0 0 1.034-.462c.267-.295.402-.69.374-1.093l-.691-9.95c-.053-.76-.668-1.349-1.408-1.349h-1.065V3.94C10.832 1.763 9.117 0 7 0 4.96 0 3.076 1.67 3.168 3.939zm7.657 1.244V8.5a.614.614 0 0 1-.605.622.614.614 0 0 1-.605-.622V5.39H4.378V8.5a.614.614 0 0 1-.605.622.614.614 0 0 1-.605-.622s.052-1.453.035-3.11h-1.1a.204.204 0 0 0-.2.193l-.692 9.95a.2.2 0 0 0 .053.157.2.2 0 0 0 .148.066h11.176a.2.2 0 0 0 .148-.066.2.2 0 0 0 .053-.156l-.691-9.951a.204.204 0 0 0-.201-.193zm-1.21-1.244V3.94c0-1.49-1.174-2.696-2.622-2.696S4.378 2.45 4.378 3.939v.207z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default BagIcon;\n","const TutorialArrowStraightDown = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={31}\n\t\theight={98}\n\t\tviewBox=\"0 0 31 98\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M6.014 2C8.74 28.597 14.31 53.53 19.822 79.595c.31 1.472 3.905 16.778 4.42 15.89 4.37-7.523.112-18.808 3.362-26.172 3.467-7.856-3.32 17.294-1.612 25.709.618 3.041-4.764-5.162-5.6-6.215C15.395 82.523 8.836 79.136 2 75.165\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={4}\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</svg>\n);\n\nexport default TutorialArrowStraightDown;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../../lib/tutorials\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport TutorialArrowStraightDown from \"../tutorial-arrow-straight-down\";\n\ntype TutorialIntroPointerCartProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TutorialIntroPointerCart = ({\n\tclassName,\n\t...props\n}: TutorialIntroPointerCartProps) => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst tutorial = useTutorial();\n\n\tif (tutorial.activeTutorial?.id !== TutorialId.Intro) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-tutorial-pointer rf-tutorial-pointer--cart absolute bottom-full inset-x-0 -translate-y-4 flex flex-col items-center text-white font-caveat text-2xl pointer-events-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-tutorial-pointer__text whitespace-nowrap text-center block -rotate-6 -translate-x-3\">\n\t\t\t\t{t(\"pointer_cart\")}\n\t\t\t</span>\n\t\t\t<TutorialArrowStraightDown className=\"text-button-background\" />\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroPointerCart;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport BagIcon from \"../icons/bag\";\nimport TutorialIntroPointerCart from \"../tutorial/intro/tutorial-intro-pointer-cart\";\nimport Button from \"../ui/button\";\n\ntype ViewCartButtonProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst ViewCartButton = ({ className, ...props }: ViewCartButtonProps) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)} {...props}>\n\t\t\t<TutorialIntroPointerCart />\n\t\t\t<Button\n\t\t\t\tclassName=\"rf-summary__button rf-summary__button--cart ![--icon-height:initial]\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\twidgetViewState.set(prev =>\n\t\t\t\t\t\tprev === WidgetViewState.Collapsed\n\t\t\t\t\t\t\t? WidgetViewState.Open\n\t\t\t\t\t\t\t: WidgetViewState.Collapsed\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\ticon={BagIcon}\n\t\t\t>\n\t\t\t\t{t(\"view_cart\")}\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n\nexport default ViewCartButton;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../lib/tutorials\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport ToastContainer from \"../toast/toast-container\";\nimport BackButton from \"./back-button\";\nimport ExchangeTotal from \"./exchange-total\";\nimport ViewCartButton from \"./view-cart-button\";\n\nconst ExchangeSummary = () => {\n\tconst t = useTranslations(\"summary\");\n\tconst tutorial = useTutorial();\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-exchange-summary rf-summary__container fixed bottom-0 inset-x-0 pb-safe animate-slide-up\"\n\t\t\tstyle={{\n\t\t\t\tzIndex:\n\t\t\t\t\ttutorial.activeTutorial?.id === TutorialId.Intro ? 50 : undefined\n\t\t\t}}\n\t\t>\n\t\t\t<ToastContainer />\n\t\t\t<div className=\"rf-summary h-[var(--rf-summary-height,_auto)] bg-widget-background text-widget-foreground max-desktop:rounded-t-3xl flex max-desktop:flex-col desktop:justify-between desktop:px-5\">\n\t\t\t\t<div className=\"rf-summary__header flex items-center max-desktop:px-5 max-desktop:flex-1 gap-2 desktop:gap-4 text-sm desktop:text-base\">\n\t\t\t\t\t<BackButton className=\"rf-summary__back max-desktop:mr-auto\" />\n\t\t\t\t\t<Divider className=\"max-desktop:hidden\" />\n\t\t\t\t\t<div className=\"flex items-center gap-2 desktop:flex-row-reverse\">\n\t\t\t\t\t\t<ReturnAvatarStack />\n\t\t\t\t\t\t<span className=\"rf-summary__title font-medium\">{t(\"title\")}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Divider className=\"desktop:hidden\" />\n\t\t\t\t<div className=\"rf-summary__actions max-desktop:px-5 max-desktop:py-3 gap-4 flex desktop:flex-row-reverse items-end desktop:items-center justify-between\">\n\t\t\t\t\t<ViewCartButton />\n\t\t\t\t\t<Divider className=\"max-desktop:hidden\" />\n\t\t\t\t\t<ExchangeTotal />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Divider = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"rf-summary__divider max-desktop:h-px w-full desktop:w-px desktop:self-stretch bg-neutral-2 shrink-0\",\n\t\t\tclassName\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport default ExchangeSummary;\n","import useTutorial from \"../../lib/hooks/context/use-tutorial\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\n\nconst Backdrop = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\tconst { widgetViewState } = useWidgetContext();\n\tconst tutorial = useTutorial();\n\n\tconst isDrawerOpen = widgetViewState.value === WidgetViewState.Open;\n\n\tfunction onBackdropClick() {\n\t\tif (tutorial.isActive) {\n\t\t\ttutorial.stop();\n\t\t} else {\n\t\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t\t}\n\t}\n\n\tconst isVisible = isDrawerOpen || tutorial.isActive;\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden\n\t\t\tonClick={onBackdropClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-backdrop transition-[background-color,visibility] inset-0 size-full fixed duration-300 ease-in-out z-10\",\n\t\t\t\tisVisible\n\t\t\t\t\t? \"bg-black/30 visible\"\n\t\t\t\t\t: \"bg-black/0 pointer-events-none invisible\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Backdrop;\n","import ExchangeDrawer from \"./drawer/exchange-drawer\";\nimport ExchangeSummary from \"./summary/exchange-summary\";\nimport Backdrop from \"./ui/backdrop\";\n\nconst Widget = () => {\n\treturn (\n\t\t<>\n\t\t\t<ExchangeSummary />\n\t\t\t<Backdrop />\n\t\t\t<ExchangeDrawer />\n\t\t</>\n\t);\n};\n\nexport default Widget;\n","import { IntlProvider } from \"use-intl\";\nimport { WidgetConfiguration } from \"../lib/utils/initialization/types\";\nimport DialogHandler from \"./handlers/dialog-handler\";\nimport InitializationHandler from \"./handlers/initialization-handler\";\nimport IsMounted from \"./is-mounted\";\nimport DialogQueueProvider from \"./providers/dialog-queue-provider\";\nimport ErrorProvider from \"./providers/error-provider\";\nimport ReturnContextProvider from \"./providers/return-context-provider\";\nimport RootProvider from \"./providers/root-provider\";\nimport TutorialProvider from \"./providers/tutorial-provider\";\nimport WidgetContextProvider from \"./providers/widget-context-provider\";\nimport ToastProvider from \"./toast/toast-provider\";\nimport Widget from \"./widget\";\n\n// This is the main entry point for the widget.\n// It initializes the widget with the provided options and renders it within the context providers.\nconst WidgetContainer = (config: WidgetConfiguration) => {\n\tconst { locale, messages } = config;\n\n\treturn (\n\t\t<IsMounted>\n\t\t\t<IntlProvider messages={messages} locale={locale}>\n\t\t\t\t<WidgetContextProvider {...config}>\n\t\t\t\t\t<ReturnContextProvider>\n\t\t\t\t\t\t<ErrorProvider>\n\t\t\t\t\t\t\t<RootProvider>\n\t\t\t\t\t\t\t\t<ToastProvider>\n\t\t\t\t\t\t\t\t\t<TutorialProvider>\n\t\t\t\t\t\t\t\t\t\t<DialogQueueProvider>\n\t\t\t\t\t\t\t\t\t\t\t<Widget />\n\t\t\t\t\t\t\t\t\t\t\t<DialogHandler />\n\t\t\t\t\t\t\t\t\t\t\t<InitializationHandler />\n\t\t\t\t\t\t\t\t\t\t</DialogQueueProvider>\n\t\t\t\t\t\t\t\t\t</TutorialProvider>\n\t\t\t\t\t\t\t\t</ToastProvider>\n\t\t\t\t\t\t\t</RootProvider>\n\t\t\t\t\t\t</ErrorProvider>\n\t\t\t\t\t</ReturnContextProvider>\n\t\t\t\t</WidgetContextProvider>\n\t\t\t</IntlProvider>\n\t\t</IsMounted>\n\t);\n};\n\nexport default WidgetContainer;\n"],"names":["WidgetViewState","ReturnViewState","getInternalCartProvider","_window$Returnflows$_","_window$Returnflows","window","Returnflows","_cartProvider","hasCartProvider","_window$Returnflows2","r","e","t","f","n","Array","isArray","o","length","clsx","arguments","concatArrays","array1","array2","combinedArray","i","minutesToMilliseconds","minutes","STORAGE_SESSION_KEY","key","type","expiration","hours","STORAGE_OVERLAY_DIALOG_EXPIRY_KEY","STORAGE_OVERLAY_DIALOG_EXPIRATION","STORAGE_CART_KEY","STORAGE_DEBUG_MODE_KEY","STORAGE_TUTORIALS_SEEN_KEY","getStorageKey","concat","storage","set","_ref","value","data","Date","now","undefined","getStorage","setItem","JSON","stringify","get","_ref2","storageItem","getItem","parsedData","parse","removeItem","_","has","_ref3","remove","_ref4","sessionStorage","localStorage","Error","LOG_PREFIX","LogLevel","Logger","constructor","getInstance","instance","checkDebugMode","storedDebugModeValue","Boolean","log","level","message","this","_len","args","_key","DEBUG","console","debug","INFO","info","WARN","warn","ERROR","error","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","logger","cn","inputs","twMerge","isNil","parseToNumber","fallback","parseFloat","isNaN","toString","formatSelectedItems","cacheData","selectedItems","selectedActions","map","item","_selectedActions$find","matchedAction","find","a","itemId","id","action","formattedAction","toUpperCase","lineItemId","constructShopifyUrl","endpoint","queryParams","root","url","secure","startsWith","ensureHttpUrl","location","host","variable","assert","searchParams","URLSearchParams","Object","entries","forEach","async","handleShopifyFetch","init","_init$method","fetchUrl","rf","response","fetch","_objectSpread","method","body","cache","headers","ok","errorResponse","json","clearSession","stripShopifyId","segment","split","pop","toMerchandiseGid","variantId","getRuleProductIds","rules","filter","rule","flatMap","products","p","product","Number","shopifyProductId","normalizeCart","cart","noExchangeTo","excludedItems","bundleItems","items","itemCount","reduce","acc","includes","product_id","push","has_components","existingItem","variant_id","quantity","item_count","compareCarts","cart1","cart2","normalizedCart1","normalizedCart2","items1","items2","quantityMap1","Map","getCart","usedStore","usedProvider","storedCart","provider","updateCartStorage","source","clearCart","updateCartItemQuantity","isRetry","updateCartItemQuantityViaShopify","lineId","line_id","merchandiseId","merchandise_id","removeItems","updateItems","updateItem","err","status","_existingItems$existi","String","existingItems","totalQuantity","existingItemIndex","findIndex","increment","calculatedQuantity","cartChange","line","resolveConnection","connections","edges","edge","node","toCents","amount","parsed","Math","round","resolveLineImage","_line$merchandise$ima","_line$merchandise$pro","_line$merchandise$pro2","merchandise","image","featuredImage","productImages","images","normalizeStorefrontLine","_line$cost","productId","unitPrice","lineTotal","cost","amountPerQuantity","totalAmount","price","variantTitle","title","productTitle","isDefaultVariant","product_title","handle","grams","line_price","final_price","final_line_price","variant_title","sku","vendor","product_type","productType","requires_shipping","requiresShipping","normalizeCartInput","lines","isStorefrontCart","_cart$totalQuantity","_cart$note","sum","token","note","normalizeStorefrontCart","normalizeAndStore","normalized","bridge","widgetViewState","config","returnContext","toastContext","cartProvider","isInitialized","eventListeners","unregisterBridge","clear","setCartProvider","wrapped","addItems","ids","wrapCartProvider","setDrawerState","state","setCart","_bridge$returnContext7","_bridge$returnContext8","_bridge$returnContext9","_cartState$value$data","_bridge$config","cartState","orderState","calculationState","calculation","hasChanged","order","normalizedInput","productRules","orderData","currentCart","original","_calculationState$val","transformedCart","transformed","pending","emitEvent","calculationResponse","query","orderId","lineItems","formData","removeEventListener","event","callback","_bridge$eventListener","delete","listeners","defineProperty","open","_ensureInitialized","Open","close","Collapsed","toggle","_bridge$widgetViewSta","_bridge$widgetViewSta2","isOpen","_bridge$widgetViewSta3","_bridge$returnContext","getCalculation","_bridge$returnContext2","_bridge$returnContext3","getOrder","_bridge$returnContext4","orderName","instantExchange","freeExchangeLabel","productsToExchange","totalPrice","isLoading","_bridge$returnContext5","_bridge$returnContext6","isPending","refetch","_bridge$returnContext10","_bridge$returnContext11","_bridge$cartProvider","document","dispatchEvent","CustomEvent","show","options","add","tone","duration","onClose","dismiss","_initPromise","Promise","resolve","reject","_config$onReady2","onReady","onError","rest","_objectWithoutProperties","_excluded","default","initialize","then","index","WidgetContainer","widgetContainer","h","preact_module","result","widgetConfig","networkInterceptionMethod","success","_config$onReady","reason","_waitForBridge","call","_config$onError","destroy","container","getElementById","on","Set","off","timeout","start","setTimeout","v","y","resolveEnvVar","varKey","_process$env","process","env","_import$meta$env","API_URL","PLATFORM_URL","WIDGET_BASE_URL","SEARCH_PARAM_ID_NAME","LEGACY_PARAMS","ROOT_ELEMENT_ID","CONTAINER_ELEMENT_ID","SETTINGS_SCRIPT_ID","InternalCustomEvent","ExternalCustomEvent","customEvents","subscribe","eventName","handler","addEventListener","publish","detail","unsubscribe","DEFAULT_LOCALE","PATH_PARAM_RE","serializePrimitiveParam","name","allowReserved","encodeURIComponent","serializeObjectParam","values","joiner","simple","label","matrix","style","explode","k","final2","join","finalName","final","serializeArrayParam","joiner2","form","spaceDelimited","pipeDelimited","createQuerySerializer","search","array","object","defaultPathSerializer","pathname","pathParams","nextURL","match","_pathname$match","substring","endsWith","replace","defaultBodySerializer","FormData","_headers$get","_headers$ContentType","Function","mergeHeaders","finalHeaders","Headers","allHeaders","iterator","v2","append","removeTrailingSlash","api","clientOptions","_clientOptions","baseUrl","Request","CustomRequest","globalThis","baseFetch","querySerializer","globalQuerySerializer","bodySerializer","globalBodySerializer","pathSerializer","globalPathSerializer","baseHeaders","requestInitExt","baseOptions","supportsRequestInitExt","_process","parseInt","versions","undici","globalMiddlewares","coreFetch","schemaPath","fetchOptions","_response$headers$get","localBaseUrl","params","parseAs","requestQuerySerializer","requestPathSerializer","middleware","requestMiddlewares","_excluded2","finalBaseUrl","_removeTrailingSlash","serializedBody","header","finalMiddlewares","requestInit","redirect","request","_options$params","_options$params$query","finalURL","path","createFinalURL","random","slice","freeze","m","onRequest","Response","error2","errorAfterMiddleware","onResponse","contentLength","getResponseData","raw","text","_unused","GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE","use","eject","indexOf","splice","createClient","getWidgetSettings","locale","slug","isFirstLoad","settings","scriptElement","_settings$translation","innerHTML","localizedMessages","translations","messages","formattedMessages","getSettingsFromScript","remoteSettings","shouldUseCachedResult","_configResponse$data","configResponse","clientStorage","responseObject","_configResponse$error","getRemoteSettings","parseScriptDataset","dataset","datasetRecord","resolvedValue","isFinite","isNumber","prepareInitializationOptions","_settings$theme","DOMStringMap","prototype","_window$__rf_original","searchString","__rf_original_search","getResolvedSearchParams","searchParamsId","internalId","isDebugModeEnabled","isDevEnvironment","hasDebugParameter","determineDebugMode","_response$data$respon","_response$data2","getSessionCache","resolvedCurrency","currency","defaultCurrency","localesList","defaultLocale","val","resolvedLocale","locales","loadMessages","customMessages","structuredClone","jsonError","deepClone","obj","keys","lastKey","current","next","setNestedValue","debugMode","theme","createSafeLinkElement","attributes","selector","existing","querySelector","link","createElement","assign","head","appendChild","injectCustomCSS","css","some","pattern","test","validateCSS","styleElement","setAttribute","textContent","renderNode","containerResult","display","shadow","attachShadow","mode","shadowRoot","className","createShadowRoot","customCssOverlay","customCssPage","devStyles","injectInlineStyle","rel","fileName","href","onload","injectStyle","onerror","injectPublicVariables","preconnect","preconnect2","crossOrigin","fontLink","render","injectWidget","WidgetInitialization","memoize","fn","cacheDefault","serializer","serializerDefault","strategy","strategyDefault","monadic","arg","cacheKey","computedValue","variadic","apply","assemble","context","serialize","bind","create","ObjectWithoutPrototypeCache","strategies","super","code","originalMessage","MISSING_MESSAGE","MISSING_FORMAT","ENVIRONMENT_FALLBACK","INSUFFICIENT_PATH","INVALID_MESSAGE","INVALID_KEY","FORMATTING_ERROR","s","dateTime","number","relativeTime","pluralRules","list","displayNames","I","l","getDateTimeFormat","Intl","DateTimeFormat","getNumberFormat","NumberFormat","getPluralRules","PluralRules","getRelativeTimeFormat","RelativeTimeFormat","getListFormat","ListFormat","getDisplayNames","DisplayNames","u","c","__b","__r","diffed","__c","unmount","__","__h","__H","d","D","__N","setState","__f","every","props","shouldComponentUpdate","componentWillUpdate","__e","__s","C","A","T","q","x","sub","j","shift","__P","z","B","__v","__k","__m","requestAnimationFrame","w","clearTimeout","cancelAnimationFrame","E","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","len","era","year","RangeError","month","day","weekday","hour12","hourCycle","hour","minute","second","timeZoneName","ErrorKind","ErrorCode","FormatError","msg","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","formats","formatters","g","globalFormats","timeZone","getMessageFormat","date","time","_e$timeZone","format","namespace","getMessageFallback","messagesOrError","S","M","N","rich","markup","seconds","days","week","weeks","months","quarter","quarters","years","children","Provider","_cache","_formatters","_e","_unused2","unit","numberingSystem","getTime","abs","numeric","formatToParts","size","dateTimeRange","formatRange","displayName","of","DIALOG_PRIORITY","tutorial","decision","emptyExchange","DialogQueueContext","createContext","useValueState","initialState","stateUpdateCallback","useState","prev","currentState","resolveSetStateAction","useDialog","initialOpen","onConfirm","onCloseProp","register","WidgetContext","useWidgetContext","useContext","navigation","back","constructedPlatformUrl","URL","continue","confirmationUrl","exit","reload","getReturnDecisionState","isOnCartPage","ReturnContext","useReturnContext","Image","src","_jsx","SkeletonContainer","falsyToString","cx","cva","base","_config_compoundVariants","variants","class","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","param","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","avatarVariants","light","dark","memo","Skeleton","role","AvatarStackSkeleton","_jsxs","AvatarStack","maxVisibleAvatars","maxVisible","hasOverflow","sliceIndex","alt","Avatar","zIndex","ReturnAvatarStack","_orderState$value$dat3","formattedImages","useMemo","_orderState$value$dat","_orderState$value$dat2","DialogContext","ArrowRightIcon","width","height","viewBox","fill","xmlns","XIcon","Spinner","opacity","attributeName","calcMode","dur","repeatCount","buttonVariants","primary","secondary","outline","ghost","icon","Icon","disabled","iconPosition","visibility","DialogButton","Accept","onClick","ctx","Button","_ctx$onConfirm","defaultPrevented","Reject","_ctx$onClose","iconVariants","solid","sm","md","IconComponent","RejectButton","labelProps","showLabel","useTranslations","useDialogSlot","priority","acquire","release","activeId","useDialogQueue","useEffect","useIsMounted","mounted","setMounted","RootContext","DialogBackdrop","isVisible","elementRef","useRef","target","ref","Dialog","Modal","fadeIn","showBackdrop","dismissOnBackdropClick","dismissOnEscape","queueId","queue","getRoot","useRoot","isMounted","generatedId","isActive","handleEscape","preventDefault","contextValue","createPortal","Title","Subtitle","Exit","ReturnDecisionDialog","decisionState","DecisionDialog","consumeCookieExpiry","modal","TutorialContext","useTutorial","TutorialId","IntroTutorialStep","TUTORIALS","Intro","steps","Welcome","autoStart","showMode","COLORS","TutorialIntroAnimation","uid","useId","gradientUnits","spreadMethod","x2","y2","x1","y1","offset","stopColor","maskContentUnits","maskUnits","maskType","transform","begin","keyTimes","keySplines","strokeMiterlimit","strokeWidth","stroke","mask","TutorialIntroDialog","isStepActive","DialogHandler","_Fragment","DEFAULT_TOAST_DURATION","ToastContext","useToast","useApiBridge","registerBridge","_returnContext$cartSt","ProductErrorState","PRODUCT_ERROR_CODE_TO_STATE","ProductLimit","getErrorStateFromCode","Unknown","createFetchInterceptor","originalFetch","__rf_original_fetch","rf_interception","proxy","Proxy","argumentsList","requestUrl","Reflect","clonedResponse","clone","interval","clearInterval","createXHRInterceptor","originalXHR","XMLHttpRequest","__rf_original_xhr","XHRProxy","construct","xhr","originalOpen","originalSend","send","user","password","originalOnReadyStateChange","onreadystatechange","readyState","DONE","resolveXHRPayload","originalOnLoad","_xhr$getResponseHeade","isTextResponse","responseType","isJsonResponse","getResponseHeader","ADD_ENDPOINTS","UPDATE_ENDPOINTS","CHANGE_ENDPOINTS","ENDPOINTS","update","change","ENDPOINTS_TO_INTERCEPT","ErrorContext","useErrors","useCartActions","addToast","errors","isNewItem","useCallback","originalCart","notifyExclusions","newExcludedItems","newBundleItems","product_name","b","chunks","fetchAndUpdateCart","_cartState$value$data2","freshCart","processCartUpdate","_cartState$value$data3","_cartState$value$data4","handleResponseErrors","responseBody","catch","parseInterceptionResponse","errState","triggerCalculation","useFetchInterceptor","returnViewState","autoOpen","autoOpenTriggerEndpoint","triggerEndpoint","autoOpenTriggerMethod","triggerMethod","monitorNetworkOverwrites","initialized","setInitialized","resetInterceptor","opts","monitor","cleanupFetchHandler","cleanupXHRHandler","resolvedMethod","setInterval","_cleanupFetchHandler","_cleanupXHRHandler","initializeNetworkInterceptors","payload","FetchInterception","_resetInterceptor","handleInterceptionEvent","stringifiedUrl","urlValidation","triggerEndpointPaths","isValid","isForbidden","isTriggerEndpoint","matchesInterceptedEndpoint","validateInterceptionRequestUrl","useOverrideScrollBlocking","overrideScrollBlocking","originalPreventDefault","Event","useCartActivator","cartActivatorSelector","controller","AbortController","processedElements","WeakSet","onActivatorClick","stopPropagation","initializeActivators","elements","querySelectorAll","element","parent","parentNode","newElement","cloneNode","replaceChild","cloneAndReplaceElement","removeAttribute","signal","attachListenersToElements","observer","MutationObserver","mutations","shouldReinitialize","mutation","addedNodes","nodeType","Node","ELEMENT_NODE","_element$matches","_element$querySelecto","matches","removedNodes","_element$matches2","_element$querySelecto2","observe","childList","subtree","characterData","abort","disconnect","InitializationHandler","useExternalEvents","handleOpenDrawer","handleCloseDrawer","handleToggleDrawer","targetState","handleRefetchCalculation","handleRefetchCart","handleRefetchCartAndCalculation","handleOpenDrawerAndRefetch","unsubscribeOpenDrawer","DrawerOpen","unsubscribeCloseDrawer","DrawerClose","unsubscribeToggleDrawer","DrawerToggle","unsubscribeRefetchCalculation","CalculationRefetch","unsubscribeRefetchCart","CartRefetch","unsubscribeRefetchCartAndCalculation","CartAndCalculationRefetch","unsubscribeOpenDrawerAndRefetchCartAndCalculation","DrawerOpenAndRefetch","useTutorialAutostart","_autoStartTutorial$op","_autoStartTutorial$id","activeTutorial","hasSeenTutorial","finished","setFinished","autoStartTutorial","_tutorial$options","isAllowed","wantsToShow","isSlotActive","hasStartedRef","wasRunningRef","IsMounted","DialogQueueProvider","setEntries","seqRef","entry","seq","best","ErrorProvider","_useArray","initialArray","setArray","newArray","filtered","useArray","methods","calculationLineItems","cartItemCount","resolvedErrors","trackedErrors","_orderData$returnWind","refundReturnWindow","returnWindows","errorId","blocking","noRefundItemIds","noRefundItems","strippedId","joinedProductNames","splitChunks","chunk","dividerString","Fragment","useAsyncState","initialValue","queryFn","queryOnInit","startCount","initialRender","countState","setCountState","countRef","requestCount","consoleMessage","run","initialParams","initialFetch","count","inFlightRequests","getShopOverlayData","internalReturnId","lineIds","storeResult","logging","storageOptions","cachedData","inFlightKey","persist","orderLines","processOrderInitialization","_map$join","_cache$formData$selec","_cache$formData","clearCartOnStart","updatedCart","_cache$exchangeItems","cachedExchangeItems","exchangeItems","mappedItems","clearedCart","cartItems","setCartItems","dialogExpiration","history","replaceState","ReturnContextProvider","queryCount","orderResult","isCartPage","isFirstQuery","shouldFetchFreshCart","normalizedCart","updateSessionCacheState","_response$data","updateSessionCache","_params$cart","_config$data$formData","formattedCartItems","_item$variant_title","_item$quantity","formatShopifyCartItem","labelCount","packages","formattedExchangeTo","formattedLineItems","uuid","exchangeTo","numOfLabels","_response$error$messa","_response$error","useOnce","deps","effectRef","contextError","hasFailed","STORE_DEFAULT_THEME","backgroundColor","accentBackgroundColor","primaryCTAColor","primaryCTATextColor","secondaryCTAColor","secondaryCTATextColor","primaryTextColor","secondaryTextColor","useTheme","themeVariables","resolvedTheme","color","convertedColor","hex","max","min","diff","hDeg","sPercent","lPercent","hexToHsl","toLowerCase","cssVariables","RootProvider","rootRef","onTouchStart","seenThisPageLoad","getSeenTutorials","_storage$get","tutorialId","endTutorial","_state$tutorial$optio","_state$tutorial$optio2","seen","markTutorialSeen","TutorialProvider","stepIndex","stop","nextIndex","previous","goToStep","stepId","step","currentStep","WidgetContextProvider","DrawerStateChange","ToastProvider","setQueue","toast","_toast$onClose","substr","_toast$onClose2","ActionIcon","rx","fillRule","clipRule","InfoIcon","GiftcardIcon","WarningIcon","BannerSkeleton","tip","giftcard","border","dashed","COMMON_ICON_PROPS","renderIcon","ExchangeBanner","_calculationState$val2","hasInstantExchange","returnLabelPrice","Banner","useCurrency","hookOptions","cartCurrency","calcCurrency","localCurrency","resolvedCurrencyCode","formatter","useFormatter","applyExchangeRate","exchangeRate","currencyObject","_hookOptions$options","fractionDigits","mergedOptions","_currency$minimumFrac","minimumFractionDigits","maximumFractionDigits","currencyDisplay","formatOptions","useCalculation","_exchange$discountSum","orderTotal","cartTotal","returnTotal","giftcardValue","totalPriceDiscount","giftCardBonusAmount","isRefunding","orderSubtotal","returnSubtotal","total","refundMethods","exchange","discountSummary","adjustedDiscountTotal","StarIcon","strokeLinecap","strokeLinejoin","trimNumber","num","decimals","toFixed","compareAtValue","formatToCurrency","isDiscounted","AdjustmentsTableSkeleton","AdjustmentsTable","showDiscountRow","showGiftcardRow","showLabelPriceRow","Row","scope","Price","ExchangeAdjustments","AnnoucementBar","stepSnippet","ErrorScreen","errorMessage","instructionMessage","useNavigation","EmptyExchangeDialog","dialog","ExchangeConfirmation","globalPendingState","blockingErrors","canContinue","hasExchangeProducts","continueIfPossible","emptyExchangeDialog","ExchangeHeader","CartIcon","ExchangePlaceholder","ProductErrors","DEFAULT_CONSTRAINTS","limit","getSafeProductUrl","getProductUrl","QuantityPicker","onIncrement","onDecrement","constraints","isDisabled","isAtMin","isAtMax","incrementDisabled","decrementDisabled","handleIncrement","handleDecrement","clampedQuantity","clampQuantity","quantityRule","setIsPending","anyStatePending","handleQuantityChange","newQuantity","errorCode","_quantityRule$min","_quantityRule$max","_quantityRule$increme","minQuantity","maxQuantity","getNormalizedQuantityRule","isAtBound","Link","unstyled","onDisabledClick","compareAtPrice","showQuantity","quantityIsVisible","resolvedCompareAt","resolvedPrice","imageSource","handleAnchorClick","Product","ProductImage","ProductAttributes","ProductActions","quantity_rule","ProductList","useCartItems","exchangeDetails","exchangeDetailItems","exchangeItem","_coverage$originalUni","_coverage$exchangeUni","coverage","curr","resolvedCurrPrice","originalUnitPrice","exchangeUnitPrice","ArrowDownIcon","ChevronIcon","Expander","collapseDelay","autoCloseAfter","onToggle","isRendered","setIsRendered","setHeight","containerRef","collapseTimeoutRef","autoCloseTimeoutRef","measureHeight","scrollHeight","frame","ReturnProductBadge","ReturnProductActions","deleted","onDeletedClick","ReturnProduct","_product$quantity","_calculation$price","_calculation$original","_calculation$exchange","allProducts","setErrorMessage","qty","originalPrice","badgeType","allActions","_formData$selectedIte","_item$calculation","returnItems","returnItem","shopifyLineId","multipleTypes","isDeleted","handleDeletedClick","bool","ReturnProductSkeleton","ReturnProductList","exchangeProducts","extendedLineItems","exchangeProduct","lineItem","hasGiftcardItem","ScrollIndicator","isYScrollable","isDirty","setIsYScrollable","isScrolling","setScrollState","checkScrollable","scrollable","clientHeight","handleScroll","hasScrolled","scrollTop","resizeObserver","ResizeObserver","mutationObserver","attributeFilter","passive","useYScrollable","ExchangeDrawer","scrollContainerRef","isDrawerOpen","hasItems","inert","tabIndex","Toast","transition","ToastContainer","ArrowLeftIcon","BackButton","TutorialArrowCurveRight","TutorialIntroPointerTotal","_tutorial$activeTutor","ExchangeTotalSkeleton","ExchangeTotal","ExchangeTotalRow","BagIcon","TutorialArrowStraightDown","TutorialIntroPointerCart","ViewCartButton","ExchangeSummary","Divider","Backdrop","Widget","IntlProvider"],"mappings":"0hDAuBA,IAAYA,EAKAC,WCtBIC,IAAuB,IAAAC,EAAAC,EAGtC,MAAsB,oBAAXC,OACH,KAGQ,QADhBF,EAA8EC,QAA9EA,EAASC,OAA0DC,mBAA1DF,IAAqEA,OAArEA,EAAAA,EACNG,qBAAaJ,IAAAA,EAAAA,EAAI,IACrB,UAEgBK,IAAe,IAAAC,EAC9B,MAAsB,oBAAXJ,QAKU,OADkDI,QAArEA,EAAAJ,OAA0DC,mBAA1DG,IAAqEA,OAArEA,EAAAA,EACEF,cAEL,CCxBA,SAASG,EAAEC,GAAG,IAAIC,EAAEC,EAAEC,EAAE,GAAG,GAAG,iBAAiBH,GAAG,iBAAiBA,EAAEG,GAAGH,OAAO,GAAG,iBAAiBA,EAAE,GAAGI,MAAMC,QAAQL,GAAG,CAAC,IAAIM,EAAEN,EAAEO,OAAO,IAAIN,EAAE,EAAEA,EAAEK,EAAEL,IAAID,EAAEC,KAAKC,EAAEH,EAAEC,EAAEC,OAAOE,IAAIA,GAAG,KAAKA,GAAGD,EAAG,MAAK,IAAIA,KAAKF,EAAEA,EAAEE,KAAKC,IAAIA,GAAG,KAAKA,GAAGD,GAAG,OAAOC,CAAC,CAAQ,SAASK,IAAO,IAAI,IAAIR,EAAEC,EAAEC,EAAE,EAAEC,EAAE,GAAGG,EAAEG,UAAUF,OAAOL,EAAEI,EAAEJ,KAAKF,EAAES,UAAUP,MAAMD,EAAEF,EAAEC,MAAMG,IAAIA,GAAG,KAAKA,GAAGF,GAAG,OAAOE,CAAC,mUFuB/W,CAAYd,IACXA,EAAA,UAAA,YACAA,EAAA,KAAA,MACA,EAHD,CAAYA,IAAAA,EAGX,CAAA,IAED,CAAYC,IACXA,EAAA,UAAA,YACAA,EAAA,KAAA,MACA,EAHD,CAAYA,IAAAA,EAGX,CAAA,IG5BM,ihBAAqBoB,EACxBC,EACAC,KAGA,MAAMC,EAA2B,IAAIT,MAAMO,EAAOJ,OAASK,EAAOL,QAClE,IAAK,IAAIO,EAAI,EAAGA,EAAIH,EAAOJ,OAAQO,IAC/BD,EAAcC,GAAKH,EAAOG,GAE9B,IAAK,IAAIA,EAAI,EAAGA,EAAIF,EAAOL,OAAQO,IAC/BD,EAAcF,EAAOJ,OAASO,GAAKF,EAAOE,GAE9C,OAAOD,CAAa,qu2BCZxB,SAASE,GAAsBC,GAC9B,OAAiB,GAAVA,EAAe,GACvB,CAgBO,MAAMC,GAAsB,CAClCC,IAAK,aACLC,KAAM,iBACNC,YAxB4BC,GAwBI,EAvBjB,GAARA,GAAa,GAAK,MAD1B,IAA6BA,GA2BtB,MAAMC,GAAoC,CAChDJ,IAAK,oBACLC,KAAM,kBAGMI,GAAoCR,GAAsB,IAE1DS,GAAmB,CAC/BN,IAAK,OACLC,KAAM,iBACNC,WAAYL,GAAsB,IAGtBU,GAAyB,CACrCP,IAAK,aACLC,KAAM,kBAGMO,GAA6B,CACzCR,IAAK,iBACLC,KAAM,gBAKP,SAASQ,GAAcT,GACtB,MAAA,GAAAU,OAH6B,WAGLA,OAAGV,EAC5B,CAEO,MAAMW,GAAU,CACtBC,IAAKA,CAAAC,EAA2CC,KAAY,IAAnDd,IAAEA,EAAGC,KAAEA,EAAIC,WAAEA,GAAwBW,EAC7C,MAAME,EAAoB,CACzBD,QACAZ,WAAYA,EAAac,KAAKC,MAAQf,OAAagB,GAEpCC,GAAWlB,GACnBmB,QAAQX,GAAcT,GAAMqB,KAAKC,UAAUP,GAAM,EAG1DQ,IAAKC,IAA2C,IAAvCxB,IAAEA,EAAGC,KAAEA,GAAkBuB,EACjC,MAAMb,EAAUQ,GAAWlB,GAErBwB,EAAcd,EAAQe,QAAQjB,GAAcT,IAElD,IAAKyB,EAAa,OAAO,KAEzB,IACC,MAAME,EAAaN,KAAKO,MAAMH,GAC9B,OAAIE,EAAWzB,YAAcc,KAAKC,MAAQU,EAAWzB,YAEpDS,EAAQkB,WAAWpB,GAAcT,IAC1B,MAED2B,EAAWb,KAClB,CAAC,MAAOgB,GACR,OAAO,IACR,GAGDC,IAAKC,IAAuC,IAAtChC,IAAEA,EAAGC,KAAEA,GAAkB+B,EAC9B,OAAsC,OAA/BrB,GAAQY,IAAI,CAAEvB,MAAKC,QAAgB,EAG3CgC,OAAQC,IAA8B,IAA7BlC,IAAEA,EAAGC,KAAEA,GAAkBiC,EACjCf,GAAWlB,GAAM4B,WAAWpB,GAAcT,GAAK,GAIjD,SAASmB,GAAWlB,GACnB,GAAa,mBAATA,EACH,OAAOkC,eACD,GAAa,iBAATlC,EACV,OAAOmC,aAEP,MAAM,IAAIC,MAAK,yBAAA3B,OAA0BT,GAE3C,CCpGA,MAAMqC,GAAa,OAEnB,IAAKC,GAAL,CAAKA,IACJA,EAAAA,EAAA,MAAA,GAAA,QACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,KAAA,GAAA,OACAA,EAAAA,EAAA,MAAA,GAAA,OACA,EALD,CAAKA,KAAAA,GAKJ,CAAA,IAED,MAAMC,GAGLC,WAAAA,GAAA,CAEO,kBAAOC,GAIb,OAHKF,GAAOG,WACXH,GAAOG,SAAW,IAAIH,IAEhBA,GAAOG,QACf,CAEQC,cAAAA,GACP,MAAMC,EAAuBlC,GAAQY,IAAahB,IAClD,OAAOuC,QAAQD,EAChB,CAEQE,GAAAA,CAAIC,EAAiBC,GAC5B,GAAKC,KAAKN,iBAAV,CAEC,IAAAO,IAAAA,EAAA5D,UAAAF,OAH+C+D,MAAelE,MAAAiE,EAAAA,EAAAA,OAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAfD,EAAeC,EAAA9D,GAAAA,UAAA8D,GAI/D,OAAQL,GACP,KAAKT,GAASe,MACbC,QAAQC,MAAK9C,GAAAA,OAAI4B,GAAU5B,KAAAA,OAAIuC,MAAcG,GAC7C,MACD,KAAKb,GAASkB,KACbF,QAAQG,KAAIhD,GAAAA,OAAI4B,GAAU5B,KAAAA,OAAIuC,MAAcG,GAC5C,MACD,KAAKb,GAASoB,KACbJ,QAAQK,KAAIlD,GAAAA,OAAI4B,GAAU5B,KAAAA,OAAIuC,MAAcG,GAC5C,MACD,KAAKb,GAASsB,MACbN,QAAQO,MAAKpD,GAAAA,OAAI4B,GAAU5B,KAAAA,OAAIuC,MAAcG,GAZ/C,CAeD,CAEAI,KAAAA,CAAMP,GAAmC,IAAAc,IAAAA,EAAAxE,UAAAF,OAAf+D,MAAelE,MAAA6E,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfZ,EAAeY,EAAAzE,GAAAA,UAAAyE,GACxCd,KAAKH,IAAIR,GAASe,MAAOL,KAAYG,EACtC,CAEAM,IAAAA,CAAKT,GAAmC,IAAAgB,IAAAA,EAAA1E,UAAAF,OAAf+D,MAAelE,MAAA+E,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfd,EAAec,EAAA3E,GAAAA,UAAA2E,GACvChB,KAAKH,IAAIR,GAASkB,KAAMR,KAAYG,EACrC,CAEAQ,IAAAA,CAAKX,GAAmC,IAAAkB,IAAAA,EAAA5E,UAAAF,OAAf+D,MAAelE,MAAAiF,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAfhB,EAAegB,EAAA7E,GAAAA,UAAA6E,GACvClB,KAAKH,IAAIR,GAASoB,KAAMV,KAAYG,EACrC,CAEAU,KAAAA,CAAMb,GAAmC,IAAAoB,IAAAA,EAAA9E,UAAAF,OAAf+D,MAAelE,MAAAmF,EAAAA,EAAAA,OAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAflB,EAAekB,EAAA/E,GAAAA,UAAA+E,GACxCpB,KAAKH,IAAIR,GAASsB,MAAOZ,KAAYG,EACtC,EAGM,MAAMmB,GAAS/B,GAAOE,cC5Db,SAAA8B,KAA0B,IAAA,IAAArB,EAAA5D,UAAAF,OAApBoF,EAAoBvF,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAApBoB,EAAoBpB,GAAA9D,UAAA8D,GACzC,OAAOqB,GAAQpF,EAAKmF,GACrB,CAYM,SAAUE,GAAM7D,GACrB,OAAOA,OACR,UAgHgB8D,GACf9D,GACY,IAAZ+D,EAAQtF,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,GAAAA,UAAA,GAAG,EAEX,OAAIoF,GAAM7D,IAAoB,KAAVA,EAAqB+D,GACpB,iBAAV/D,IAAoBA,EAAQgE,WAAWhE,IAC9CiE,MAAMjE,IAA+B,aAArBA,EAAMkE,WAAkCH,EACrD/D,EACR,CAyFM,SAAUmE,GACfC,GAEA,MAAMC,EAAgBD,aAAAA,EAAAA,EAAWC,cAC3BC,EAAkBF,aAAAA,EAAAA,EAAWE,gBAEnC,OAAKD,GAAkBjG,MAAMC,QAAQgG,GAK9BA,EAAcE,KAAIC,IAAO,IAAAC,EAC/B,MAAMC,EAAgBJ,SAErB,QAFoCG,EAAfH,EAAiBK,MACtCC,GAAKA,EAAEC,SAAWL,EAAKM,YACvB,IAAAL,OAAA,EAFqBA,EAEnBM,OACGC,GAlBCD,OAFRA,EAoB8CL,GAlBtCK,EAAU,UAAUE,cAHvB,IACLF,EAqBC,MAAO,CACND,GAAIN,EAAKM,GACTI,WAAYV,EAAKU,WACjBH,OAAQC,EACR,KAbDvB,GAAOX,KAAK,yCACL,GAcT,CCpPgB,SAAAqC,GACfC,EACAC,GAEA,MAAMC,WDWuBC,GAAmC,IAAtBC,6DAC1C,OAAKD,EAAIE,WAAW,YAAeF,EAAIE,WAAW,YAM3CF,EALFC,EACH5F,WAAAA,OAAkB2F,GAEnB3F,UAAAA,OAAiB2F,EAGnB,CCnBcG,CAAchI,OAAOiI,SAASC,ODH5B,SAAOC,EAAmB1D,GACzC,GAAI0B,GAAMgC,IAA0B,KAAbA,EACtB,MAAM,IAAItE,MAAMY,EAElB,CCCC2D,CAAOR,EAAM,mCAEb,MAAMS,EAAe,IAAIC,gBAGxBC,OAAOC,QAAQb,GAAac,SAAQpG,IAAiB,IAAfb,EAAKc,GAAMD,EAChDgG,EAAajG,IAAIZ,EAAKc,EAAM,IAI9B,IAAIuF,EAAMD,EAWV,OATKF,EAASK,WAAW,OACxBF,GAAO,KAERA,GAAOH,EAEHW,EAAa7B,aAChBqB,GAAG,IAAA3F,OAAQmG,EAAa7B,aAGlBqB,CACR,CAEOa,eAAeC,GACrBjB,EACAkB,GAAkB,IAAAC,EAElB,MAAMC,EAAWrB,GAAoBC,EAAU,CAC9CqB,GAAI,SAECC,QAAiBC,MAAMH,EAAQI,EAAA,CACpCC,OAAoBN,QAAdA,EAAED,aAAAA,EAAAA,EAAMO,kBAAMN,EAAAA,EAAKD,SAAAA,EAAMQ,KAAO,OAAS,MAC/CC,MAAO,WACPC,QAAS,CACR,eAAgB,qBAEdV,IAGJ,IAAKI,EAASO,GAAI,CACjB,MAAMC,QAAuBR,EAASS,OACtC,GAAID,GAAiB,YAAaA,EACjC,MAAMA,EAEP,MAAM,IAAI3F,MAAM,gBACjB,CAGA,aADoBmF,EAASS,MAE9B,UAEgBC,KACfvH,GAAQsB,OAAO3B,IACfK,GAAQsB,OAAOlC,IACfY,GAAQsB,OAAO7B,IACfO,GAAQsB,OAAO1B,GAChB,CAgBM,SAAU4H,GAAevC,GAC9B,IAAKA,EAAI,MAAO,GAEhB,MAAMwC,EAAUxC,EAAGZ,WAAWqD,MAAM,KAAKC,MACzC,OAAKF,GAAgB,EAGtB,CCrFA,SAASG,GAAiBC,GACzB,ODwEoDvI,ECxElB,iBDyEhB,iBADa2F,ECxER4C,IDyEO5C,EAAGW,WAAW,UAAkBX,EAC9D,iBAAAlF,OAAwBT,EAAIS,KAAAA,OAAIkF,GAFjB,IAAgBA,EAAqB3F,CCvErD,CAEgB,SAAAwI,GACfC,EACAzI,GAEA,OAAOyI,EACLC,QAAOC,GAAQA,EAAK3I,OAASA,IAC7B4I,SAAQD,GACRA,EAAKE,SACHH,QAAOI,GAAW,OAANA,IACZ1D,KAAI2D,GAAWC,OAAOd,GAAea,EAAQE,sBAElD,CASgB,SAAAC,GACfC,EACAV,GAEA,MAAMW,EAAeZ,GAAkBC,EAAO,kBAExCY,EAA4B,GAC5BC,EAA0B,IAE1BC,MAAEA,EAAKC,UAAEA,IAAeL,EAAKI,OAAS,IAAIE,QAI/C,CAACC,EAAKrE,KAEL,GAAI+D,EAAaO,SAAStE,EAAKuE,YAE9B,OADAP,EAAcQ,KAAKxE,GACZqE,EAGR,GAAIrE,EAAKyE,eAER,OADAR,EAAYO,KAAKxE,GACVqE,EAGR,MAAMK,EAAeL,EAAIH,MAAM/D,MAC9B7F,GAAKA,EAAEqK,aAAe3E,EAAK2E,aAK5B,OAFAN,EAAIF,WAAanE,EAAK4E,UAAY,EAE9BF,GAEHA,EAAaE,UAAY5E,EAAK4E,SACvBP,IAGRA,EAAIH,MAAMM,KAAIpC,EAAA,CAAA,EAAMpC,IAEbqE,EAAG,GAEX,CACCH,MAAO,GACPC,UAAW,IAUb,MAAO,CACNL,KAPmB1B,EAAAA,KAChB0B,GAAI,GAAA,CACPI,QACAW,WAAYV,IAKZH,gBACAC,cAEF,CAGM,SAAUa,GAAYvJ,GAQ3B,IAR4BwJ,MAC5BA,EAAKC,MACLA,EAAK5B,MACLA,GAKA7H,EACA,MAAQuI,KAAMmB,GAAoBpB,GAAckB,EAAO3B,IAC/CU,KAAMoB,GAAoBrB,GAAcmB,EAAO5B,GAEjD+B,EAASF,EAAgBf,OAAS,GAClCkB,EAASF,EAAgBhB,OAAS,GAExC,GAAIiB,EAAOpL,SAAWqL,EAAOrL,OAC5B,OAAO,EAGR,MAAMsL,EAAe,IAAIC,IACxBH,EAAOpF,KAAIC,GAAQ,CAACA,EAAK2E,WAAY3E,EAAK4E,aAG3C,IAAK,MAAM5E,KAAQoF,EAClB,GAAIC,EAAapJ,IAAI+D,EAAK2E,cAAgB3E,EAAK4E,SAC9C,OAAO,EAIT,OAAO,CACR,CAEOhD,eAAe2D,KACQ,IAEzBzB,EACA0B,GAAqB,EACrBC,GAAwB,EAE5B,8DAAmB,CAClB,MAAMC,EAsQArK,GAAQY,IAAiBjB,IArQ3B0K,IACHF,GAAY,EACZ1B,EAAO4B,EAET,CAEA,IAAK5B,EAAM,CAEV,GAAIzK,IAAmB,CACtB,MAAMsM,EAAW5M,IACb4M,IACH1G,GAAOb,KAAK,2CACZ0F,QAAa6B,EAASJ,UACtBE,GAAe,EAEjB,CAGK3B,IACJ7E,GAAOb,KAAK,wDACZ0F,QAAajC,GAAgC,aAG9C+D,GAAkB9B,EACnB,CAEA,MAAM+B,EAASL,EAAY,UAAYC,EAAe,WAAa,MAGnE,OAFAxG,GAAOb,KAAIhD,iBAAAA,OAAkByK,EAAM,KAAK/B,GAEjCA,CACR,CAEOlC,eAAekE,KAErB,GAAIzM,IAAmB,CACtB,MAAMsM,EAAW5M,IACjB,GAAI4M,SAAAA,EAAUG,UAAW,CACxB7G,GAAOb,KAAK,6CACZ,MAAM0F,QAAa6B,EAASG,YAE5B,OADAF,GAAkB9B,GACXA,CACR,CACA7E,GAAOb,KACN,+FAEF,CAGA,MAAM0F,QAAajC,GAAgC,iBAAkB,CACpEQ,OAAQ,SAGT,OADAuD,GAAkB9B,GACXA,CACR,CAiDOlC,eAAemE,GAAsB7J,GAQ3C,IAR4CgH,UAC5CA,EAAS0B,SACTA,EAAQoB,QACRA,GAAU,GAKV9J,EACA,IACC,GAAImD,GAAMuF,GACT,MAAM,IAAI7H,MAAM,wCAIjB,GAAI1D,IAAmB,CACtB,MAAMsM,EAAW5M,IACjB,GAAI4M,EAAU,CAGb,MACM3F,SADoBuF,IAASS,IACV9B,MAAM/D,MAAK7F,GAAKA,EAAEqK,aAAezB,IAE1D,IAAKlD,EAKJ,OAJAf,GAAOX,KAAI,sCAAAlD,OAC4B8H,yBAGlC8C,SAQCC,GAAiC/C,EAAW0B,GAC3CW,IAAQ,KARdtG,GAAOb,KAAK,mDACL2H,GAAuB,CAC7B7C,YACA0B,WACAoB,SAAS,KAOZ,MAAME,EAASlG,EAAKmG,QACdC,EACLpG,EAAKqG,gBAAkBpD,GAAiBC,GAEzC,IAAKgD,EAGJ,OAFAjH,GAAOX,KAAK,0CAEP0H,GAQL/G,GAAOX,KACN,sFAEK2H,GAAiC/C,EAAW0B,GAC3CW,IAAQ,KAXdtG,GAAOb,KAAK,mDACL2H,GAAuB,CAC7B7C,YACA0B,WACAoB,SAAS,KAUZ,GAAiB,IAAbpB,GAAkBe,EAASW,YAC9BrH,GAAOb,KAAI,8CAAAhD,OAA+C8K,eACpDP,EAASW,YAAY,CAACJ,SACtB,GAAIP,EAASY,YAAa,CAChC,MAAMC,EAAa,CAAElG,GAAI4F,EAAQE,gBAAexB,YAChD3F,GAAOb,KACN,8CACAoI,SAEKb,EAASY,YAAY,CAACC,GAC7B,MACCvH,GAAOb,KACN,qHAEK6H,GAAiC/C,EAAW0B,GAInD,OAAOW,IAAQ,EAChB,CACD,CAIA,aADMU,GAAiC/C,EAAW0B,GAC3CW,IAAQ,EACf,CAAC,MAAOkB,GACR,MAAMjI,EAAQiI,EAEd,GADAxH,GAAOT,MAAM,qCAAsCA,GAC/C,WAAYA,EACf,MAAM,IAAIzB,MAAMyB,EAAMkI,OAAOhH,YAE9B,MAAM,IAAI3C,MAAMyB,EAAMb,QACvB,CACD,CAMAiE,eAAeqE,GACd/C,EACA0B,GAAgB,IAAA+B,EAEhB,GAAiB,IAAb/B,EAQH,kBANM/C,GAA8C,kBAAmB,CACtES,KAAMvG,KAAKC,UAAU,CACpBsE,GAAIsG,OAAO1D,GACX0B,eAOH,MAEMiC,SAFqBtB,MAEQrB,OAAS,GAKtC4C,EAHyBD,EAAcxD,QAC5CrD,GAAQA,EAAK2E,aAAezB,IAEgBkB,QAC5C,CAACC,EAAKrE,IAASqE,GAAOrE,EAAK4E,UAAY,IACvC,GAEKmC,EAAoBF,EAAcG,WACvChH,GAAQA,EAAK2E,aAAezB,IAGvB+D,EAAYrC,EAAWkC,EAKvBI,EAHmB5H,WAAaqH,EACrCE,EAAcE,UAAkB,IAAAJ,OAAA,EAAhCA,EAAkC/B,UAEWqC,EAE9C,IAA2B,IAAvBF,EAA0B,CAC7B,MAAMI,EAAa,CAClBC,KAAMR,OAAOG,EAAoB,GACjCnC,SAAUsC,SAELrF,GAA8C,kBAAmB,CACtES,KAAMvG,KAAKC,UAAUmL,IAEvB,CACD,CAEM,SAAUvB,GAAkB9B,GAC7BA,EACHzI,GAAQC,IAAIN,GAAkB8I,GAG/BzI,GAAQsB,OAAO3B,GAChB,CC9XA,SAASqM,GAAoCC,GAC5C,MAAI,UAAWA,EACPA,EAAYC,MAAMxH,KAAIyH,GAAQA,EAAKC,OAEpCH,EAAYvH,KAAIyH,GAClB,SAAUA,EACNA,EAAKC,KAEND,GAET,CAWA,SAASE,GAAQC,GAChB,MAAMC,EAASpI,WAAWmI,GAC1B,OAAOhE,OAAOlE,MAAMmI,GAAU,EAAIC,KAAKC,MAAe,IAATF,EAC9C,CAEA,SAASG,GAAiBX,GAAwB,IAAAY,EAAAC,EAAAC,EACjD,GAA0B,QAA1BF,EAAIZ,EAAKe,YAAYC,aAAK,IAAAJ,GAAtBA,EAAwBjH,IAC3B,OAAOqG,EAAKe,YAAYC,MAAMrH,IAE/B,WAAAkH,EAAIb,EAAKe,YAAYzE,QAAQ2E,qBAAa,IAAAJ,GAAtCA,EAAwClH,IAC3C,OAAOqG,EAAKe,YAAYzE,QAAQ2E,cAActH,IAE/C,MAAMuH,EAAgBjB,GACUa,QADOA,EACtCd,EAAKe,YAAYzE,QAAQ6E,kBAAML,EAAAA,EAAI,IAEpC,OAAII,EAAcvO,OAAS,EACnBuO,EAAc,GAAGvH,IAElB,EACR,CAEA,SAASyH,GAAwBpB,GAAwB,IAAAqB,EACxD,MAAMN,YAAEA,EAAWvD,SAAEA,GAAawC,GAC5B1D,QAAEA,GAAYyE,EAEdjF,EAAYS,OAAOd,GAAesF,EAAY7H,KAC9CoI,EAAY/E,OAAOd,GAAea,EAAQpD,KAGhD,IAAIqI,EACAC,EAESH,QAAbA,EAAIrB,EAAKyB,YAALJ,IAASA,GAATA,EAAWK,mBACdH,EAAYjB,GAAQN,EAAKyB,KAAKC,kBAAkBnB,QAChDiB,EAAYxB,EAAKyB,KAAKE,YACnBrB,GAAQN,EAAKyB,KAAKE,YAAYpB,QAC9BgB,EAAY/D,GACLuD,EAAYa,OACtBL,EAAYjB,GAAQS,EAAYa,MAAMrB,QACtCiB,EAAYD,EAAY/D,IAExB+D,EAAY,EACZC,EAAY,GAGb,MAAMK,EAAed,EAAYe,MAC3BC,EAAezF,EAAQwF,MAEvBE,GACJH,GACgB,kBAAjBA,GACiB,YAAjBA,EAMD,MAAO,CACNtE,WAAYzB,EACZ0B,WACAsE,MAPaE,EACXD,EAAY,GAAA/N,OACT+N,EAAY,OAAA/N,OAAM6N,GAMvBD,MAAOL,EACPpE,WAAYmE,EACZW,cAAeF,EACfG,OAAQ5F,EAAQ4F,OAChBlB,MAAOL,GAAiBX,GACxBmC,MAAO,EACPC,WAAYZ,EACZa,YAAad,EACbe,iBAAkBd,EAClBzC,QAASiB,EAAK9G,GACd+F,eAAgB8B,EAAY7H,GAC5BqJ,cAAeP,OAAmBxN,EAAYqN,EAC9CW,IAAKzB,EAAYyB,IACjBC,OAAQnG,EAAQmG,OAChBC,aAAcpG,EAAQqG,YACtBC,kBAAmB7B,EAAY8B,iBAEjC,CAgBM,SAAUC,GAAmBpG,GAClC,OAxGD,SAA0BA,GACzB,KAAM,UAAWA,GAAO,OAAO,EAC/B,MAAMqG,EAASrG,EAAwBqG,MACvC,OACCvQ,MAAMC,QAAQsQ,IACJ,MAATA,GAAkC,iBAAVA,GAAsB,UAAWA,CAE5D,CAiGKC,CAAiBtG,GAftB,SAAiCA,GAAoB,IAAAuG,EAAAC,EACpD,MACMpG,EADQmD,GAAkBvD,EAAKqG,OACjBpK,IAAIyI,IAClBrE,EACa,QADJkG,EACdvG,EAAKgD,qBAAa,IAAAuD,EAAAA,EAAInG,EAAME,QAAO,CAACmG,EAAKjQ,IAAMiQ,EAAMjQ,EAAEsK,UAAU,GAElE,MAAO,CACNV,QACAW,WAAYV,EACZqG,MAAO1G,EAAKxD,GACZmK,KAAeH,QAAXA,EAAExG,EAAK2G,YAAIH,IAAAA,EAAAA,EAAI,GAErB,CAISI,CAAwB5G,GAEzBA,CACR,CAEA,SAAS6G,GAAkB7G,GAC1B,MAAM8G,EAAaV,GAAmBpG,GAEtC,OADA8B,GAAkBgF,GACXA,CACR,CCzGA,MAAMC,GAAsB,CAC3BC,gBAAiB,KACjBC,OAAQ,KACRC,cAAe,KACfC,aAAc,KACdC,aAAc,KACdC,eAAe,EACfC,eAAgB,IAAI9F,cAuBL+F,KACfR,GAAOC,gBAAkB,KACzBD,GAAOG,cAAgB,KACvBH,GAAOI,aAAe,KACtBJ,GAAOE,OAAS,KAChBF,GAAOK,aAAe,KACtBL,GAAOM,eAAgB,EACvBN,GAAOO,eAAeE,OACvB,CAEM,SAAUC,GAAgB5F,GAC/B,MAAM6F,EAAU7F,EDkEX,SAA2BA,GAChC,MAAO,CACN,aAAMJ,GACL,MAAMzB,QAAa6B,EAASJ,UAC5B,OAAOzB,EAAO6G,GAAkB7G,QAAQlI,CACxC,EACDkK,UAAWlE,SAAY+I,SAAwBhF,EAASG,aACxD2F,SAAU7J,SAAe+I,SAAwBhF,EAAS8F,SAASvH,IACnEqC,YAAa3E,SACZ+I,SAAwBhF,EAASY,YAAYrC,IAC9CoC,YAAa1E,SAAa+I,SAAwBhF,EAASW,YAAYoF,IAEzE,CC9E4BC,CAAiBhG,GAAY,KAIxD,GAFAkF,GAAOK,aAAeM,EAEA,oBAAXtS,OAAwB,CAClC,MAAM+I,EACL/I,OAGCC,YACE8I,IACHA,EAAG7I,cAAgBoS,EAErB,CAEI7F,EACH1H,QAAQG,KAAI,kCAEZH,QAAQG,KAAK,8BAEf,UAMgB+M,KACf,OAAON,GAAOM,aACf,CAMM,SAAUS,GAAeC,GACzBhB,GAAOC,gBAIZD,GAAOC,gBAAgBxP,IAAIuQ,GAH1B5N,QAAQK,KAAK,kDAIf,CAmCOsD,eAAekK,GAAQhI,GAAe,IAAAiI,EAAAC,EAAAC,EAAAC,EAAAC,EAC5C,MAAMC,EAAgC,QAAvBL,EAAGlB,GAAOG,qBAAa,IAAAe,OAAA,EAApBA,EAAsBK,UAClCC,EAAiC,QAAvBL,EAAGnB,GAAOG,qBAAa,IAAAgB,OAAA,EAApBA,EAAsBK,WACnCC,EAAuC,QAAvBL,EAAGpB,GAAOG,qBAAa,IAAAiB,OAAA,EAApBA,EAAsBK,iBAE/C,IAAKF,GAAcC,UAAAA,EAAY7Q,MAAMC,KAEpC,OADAwC,QAAQK,KAAK,oDACN,CACNwF,KAAM,KACNyI,YAAa,KACbC,YAAY,GAId,MAAMC,EAAQJ,EAAW7Q,MAAMC,KAEzBiR,EAAkBxC,GAAmBpG,GACrC6I,EAAeF,EAAMG,UAAUD,cAAgB,GAG/CE,EAAkCX,QAAvBA,EAAGE,EAAU5Q,MAAMC,YAAhByQ,IAAoBA,OAApBA,EAAAA,EAAsBY,SAQxC,IAAAC,EAPF,GACCF,GACA/H,GAAa,CACZC,MAAO8H,EACP7H,MAAO0H,EACPtJ,MAAOuJ,IAGR,MAAO,CACN7I,KAAM+I,EACNN,YAAyC,QAA9BQ,EAAET,aAAAA,EAAAA,EAAkB9Q,MAAMC,YAAIsR,IAAAA,EAAAA,EAAI,KAC7CP,YAAY,GAId,MAAQ1I,KAAMkJ,GAAoBnJ,GACjC6I,EACAC,GAGDP,EAAU9Q,IAAI,CACbG,KAAM,CACLqR,SAAUJ,EACVO,YAAaD,GAEdE,SAAS,EACT1O,MAAO,OAGRoH,GAAkB8G,GAElBS,GAAU,eAAgBT,GAE1B,MAAMU,QAA4Bd,aAAAA,EAAAA,EAAkBe,MAAM,CACzDvJ,KAAMkJ,EACNM,QAASb,EAAMG,UAAUtM,GACzBiN,UAAW5N,GAAiC,QAAdwM,EAACtB,GAAOE,cAAPoB,IAAaA,OAAbA,EAAAA,EAAe1Q,KAAK+R,aAGpD,MAAO,CACN1J,KAAMkJ,EACNT,YAAaa,QAAAA,EAAuB,KACpCZ,YAAY,EAEd,CAiGgB,SAAAiB,GACfC,EACAC,GAA0B,IAAAC,EAGd,QADZA,EAAA/C,GAAOO,eACLnP,IAAIyR,UADNE,IACYA,GADZA,EAEGC,OAAOF,EACX,UAEgBR,GACfO,GAOO,IAAA7P,IAAAA,EAAA5D,UAAAF,OANJ+D,MAMIlE,MAAAiE,EAAAA,EAAAA,OAAAE,EAAA,EAAAA,EAAAF,EAAAE,IANJD,EAMIC,EAAA9D,GAAAA,UAAA8D,GAEP,MAAM+P,EAAYjD,GAAOO,eAAenP,IAAIyR,GACvCI,GAELA,EAAUnM,SAAQgM,IACjB,IAECA,KAAY7P,EACZ,CAAC,MAAOU,GACRP,QAAQO,MAAKpD,iBAAAA,OAAkBsS,EAAK,mBAAmBlP,EACxD,IAEF,qDCvIarF,GAAc,IA5L3B,MAAAgE,WAAAA,GACSsE,OAAAsM,eAAAnQ,KAAA,eAAA,iDAAqC,OAG7C6D,OAAAsM,eAAAnQ,KAAA,gBAAA,iDAAqC,OAErB6D,OAAAsM,eAAAnQ,KAAA,UAAA,iDACsB,UAEtB6D,OAAAsM,eAAAnQ,KAAA,SAAA,2CAAoBpC,MAAA,CACnCwS,KAAMA,KACLpQ,KAAKqQ,qBACLpD,GAAsBhS,EAAgBqV,KAAK,EAG5CC,MAAOA,KACNvQ,KAAKqQ,qBACLpD,GAAsBhS,EAAgBuV,UAAU,EAGjDC,OAAQA,KACPzQ,KAAKqQ,yBDiEsBK,EAAAC,EC/D3B1D,IDgEkC,QAApCyD,EAA6BC,QAA7BA,EAAO1D,GAAOC,uBAAPyD,IAAsBA,OAAtBA,EAAAA,EAAwB/S,aAAK8S,IAAAA,EAAAA,EAAI,QC/DzBzV,EAAgBqV,KACzBrV,EAAgBuV,UAChBvV,EAAgBqV,KACnB,EAGFM,OAAQA,KAEP,OADA5Q,KAAKqQ,sBDoEsB,QAAtBQ,EAAA5D,GAAOC,uBAAe,IAAA2D,OAAA,EAAtBA,EAAwBjT,SAAU3C,EAAgBqV,SAD9BO,CClEG,KAIdhN,OAAAsM,eAAAnQ,KAAA,OAAA,2CAAgBpC,MAAA,CAC/B+J,QAASA,eDiEY,IAAAmJ,EACtB,MAAMtC,EAAgC,QAAvBsC,EAAG7D,GAAOG,qBAAa,IAAA0D,OAAA,EAApBA,EAAsBtC,UACxC,OAAKA,SAAAA,EAAW5Q,MAAMC,KACf2Q,EAAU5Q,MAAMC,KAAKqR,SADO,IAEpC,CCrEiBjC,GACf8D,eAAgBA,KAAM9D,eDuEvB+D,EAA2BC,QAA3BA,EAAOhE,GAAOG,qBAAP6D,IAAoBA,OAApBA,EAAAA,EAAsBvC,iBAAiB9Q,MAAMC,YAAI,IAAAmT,EAAAA,EAAI,SAD/BA,EAAAC,CCtEiB,EAC7CC,SAAUA,eDyEY,IAAAC,EACvB,MAAMnC,EAAgC,QAAvBmC,EAAGlE,GAAOG,qBAAa,IAAA+D,WAAAA,EAApBA,EAAsB1C,WAAW7Q,MAAMC,YAAI,IAAAsT,OAAA,EAA3CA,EAA6CnC,UAC/D,OAAKA,EAEE,CACNtM,GAAIsM,EAAUtM,GACdgN,QAASV,EAAUU,QACnB0B,UAAWpC,EAAUoC,UACrBC,gBAAiBrC,EAAUqC,gBAC3BC,kBAAmBtC,EAAUsC,kBAC7BC,mBAAoBvC,EAAUuC,mBAC9BC,WAAYxC,EAAUwC,YATA,IAWxB,CCtFkBvE,GAChBwE,UAAWA,KAAMxE,ODwFoB,QAAtCyE,EAA2BC,QAA3BA,EAAO1E,GAAOG,qBAAPuE,IAAoBA,OAApBA,EAAAA,EAAsBC,iBAASF,IAAAA,GAAAA,MADdA,EAAAC,CCtFvB,KAEe9N,OAAAsM,eAAAnQ,KAAA,OAAA,2CAAgBpC,MAAA,CAC/BsQ,QAASlK,UACRhE,KAAKqQ,qBACEpD,GAAe/G,IAGvB2L,QAAS7N,UACRhE,KAAKqQ,2BDoJDrM,iBAA0B,IAAA8N,EAAAC,EAChC,MAAMvD,EAAgC,QAAvBsD,EAAG7E,GAAOG,qBAAa,IAAA0E,OAAA,EAApBA,EAAsBtD,UAClCC,EAAiC,QAAvBsD,EAAG9E,GAAOG,qBAAa,IAAA2E,OAAA,EAApBA,EAAsBtD,WAEzC,GAAKD,GAAcC,SAAAA,EAAY7Q,MAAMC,KAArC,CAKA,GAAIoP,GAAOK,aACV,IACC,MAAMpH,QAAa+G,GAAOK,aAAa3F,UACvC,IAAKzB,EAAM,OACX,OAAOgI,GAAQhI,EACf,CAAC,MAAOtF,GAMR,OALAP,QAAQO,MAAM,qCAAsCA,QACpD2O,GACC,QACA3O,aAAiBzB,MAAQyB,EAAQ,IAAIzB,MAAM6J,OAAOpI,IAGpD,OAGK4N,EAAUiB,MAAMhB,EAAW7Q,MAAMC,KAjBvC,MAFCwC,QAAQK,KAAK,mDAoBf,CC5KSuM,EAAoB,EAG3BS,MAAO1J,UACNhE,KAAKqQ,2BD0KDrM,iBAAwB,IAAAgO,EAC9B,GAAK/E,GAAOM,cAAZ,CAKA,GAAuByE,QAAvBA,EAAI/E,GAAOK,oBAAP0E,IAAmBA,GAAnBA,EAAqB9J,UACxB,IAEC,OAAOgG,SADYjB,GAAOK,aAAapF,YAEvC,CAAC,MAAOtH,GAMR,OALAP,QAAQO,MAAM,uCAAwCA,QACtD2O,GACC,QACA3O,aAAiBzB,MAAQyB,EAAQ,IAAIzB,MAAM6J,OAAOpI,IAGpD,CAGDqR,SAASC,cAAc,IAAIC,YAAY,mCAhBvC,MAFC9R,QAAQK,KAAK,kDAmBf,CC9LSuM,EAAkB,KAIVpJ,OAAAsM,eAAAnQ,KAAA,QAAA,2CAAkBpC,MAAA,CACjCwU,KAAOC,IACNrS,KAAKqQ,qBD0LF,SAAoBgC,GAMzB,OAAKpF,GAAOI,aAKLJ,GAAOI,aAAaiF,IAAI,CAC9BvS,QAASsS,EAAQtS,QACjBwS,KAAMF,EAAQE,KACdC,SAAUH,EAAQG,SAClBC,QAASJ,EAAQI,WARjBpS,QAAQK,KAAK,mDACN,GAST,CC1MUuM,CAAiBoF,IAGzBK,QAAUhQ,IACT1C,KAAKqQ,qBDwMF,SAAuB3N,GACvBuK,GAAOI,aAIZJ,GAAOI,aAAatO,OAAO2D,GAH1BrC,QAAQK,KAAK,+BAIf,CC7MGuM,CAAoBvK,EAAG,EAGxBgL,MAAOA,KACN1N,KAAKqQ,qBD4MFpD,GAAOI,aAIZJ,GAAOI,aAAaK,QAHnBrN,QAAQK,KAAK,+BC5MQ,IAiHvB,CA7GC,UAAMwD,GAAmC,IAA9BiJ,EAAA9Q,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,GAAAA,UAAA,GAA4B,CAAE,EACxC,OAAI2D,KAAK2S,cACRtS,QAAQK,KAAK,0DACNV,KAAK2S,cAGT1F,UACH5M,QAAQK,KACP,oEAKFV,KAAK2S,aAAe,IAAIC,SAAc,CAACC,EAASC,KAC/C,WACC,IAAI,IAAAC,EACH,MAAMC,QAAEA,EAAOC,QAAEA,EAAO3F,aAAEA,GAA0BH,EAAT+F,EAAIC,EAAKhG,EAAMiG,IAEtD9F,GACHL,GAAuBK,GAGxB,MAAQ+F,QAASC,SACVV,QAA4CC,UAAAU,MAAA,IAAAC,MAC3CH,QAASI,SACVb,QAA+CC,UAAAU,MAAA,IAAAG,MAChDC,SAAcf,QAAgBC,UAAAU,MAAA,IAAAK,KAE9BC,QAAeP,GACpBQ,GAAgBH,EAAEF,EAAiBK,IAAatP,EAAA,CAE/CuP,0BAA2B,QACxBb,IAIL,IAAKW,EAAOG,QAAS,CACsB,IAAAC,EAA1C,GAAsB,qBAAlBJ,EAAOK,OAGV,aAFMlU,KAAKmU,iBACG,QAAdF,EAAA9G,EAAO6F,eAAO,IAAAiB,GAAdA,EAAAG,KAAAjH,GACO0F,IAER,GAAsB,uBAAlBgB,EAAOK,OAEV,OADAlU,KAAK2S,aAAe,KACbE,IAER,MAAM,IAAI1T,MAAK3B,iCAAAA,OACmBqW,EAAO9T,QAAO,MAAAvC,OAAKqW,EAAOK,YAE7D,OAEMlU,KAAKmU,iBACG,QAAdpB,EAAA5F,EAAO6F,eAAO,IAAAD,GAAdA,EAAAqB,KAAAjH,GACA0F,GACD,CAAE,MAAOhK,GAAK,IAAAwL,EACb,MAAMzT,EAAQiI,aAAe1J,MAAQ0J,EAAM,IAAI1J,MAAM6J,OAAOH,IAC9CwL,QAAdA,EAAAlH,EAAO8F,eAAPoB,IAAcA,GAAdA,EAAAD,KAAAjH,EAAiBvM,GACjBqM,GAAuB,MACvBjN,KAAK2S,aAAe,KACpBG,EAAOlS,EACR,CACA,EA/CD,EA+CI,IAGEZ,KAAK2S,aACb,CAEA2B,OAAAA,GAIC,GAHArH,GAAuB,MACvBA,KAEwB,oBAAbgF,SAA0B,CACpC,MAAMsC,EAAYtC,SAASuC,eAAe,qBACtCD,GACHA,EAAUxV,QAEZ,CAEAiB,KAAK2S,aAAe,IACrB,CAEApF,aAAAA,GACC,OAAON,IACR,CAEAwH,EAAAA,CAAwB3E,EAAUC,GAEjC,ODuHc,SACfD,EACAC,GAEK9C,GAAOO,eAAe3O,IAAIiR,IAC9B7C,GAAOO,eAAe9P,IAAIoS,EAAO,IAAI4E,KAEtCzH,GAAOO,eAAenP,IAAIyR,GAAQwC,IAAIvC,EACvC,CChIE9C,CAAwB6C,EAAOC,GACxB,IAAM9C,GAA2B6C,EAAOC,EAChD,CAEA4E,GAAAA,CAAyB7E,EAAUC,GAClC9C,GAA2B6C,EAAOC,EACnC,CAEQM,kBAAAA,GACP,IAAKpD,KACJ,MAAM,IAAI9N,MAAM,kDAElB,CAEQ,oBAAMgV,GAA8B,IAAfS,EAAOvY,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,GAAAA,UAAA,GAAG,IACtC,MAAMwY,EAAQ/W,KAAKC,MACnB,MAAQkP,MAAwB,CAC/B,GAAInP,KAAKC,MAAQ8W,EAAQD,EACxB,MAAM,IAAIzV,MAAM,qCAEX,IAAIyT,SAAQjX,GAAKmZ,WAAWnZ,EAAG,KACtC,CACD,GAKqB,oBAAXL,SACTA,OAAwDC,YACxDA,ICjNK,wCAiBMsK,GAAgC,CAAG,EACnCkP,GAAY,GACZC,GACZ,+XALmB,kDACK,qDADL,mEAAA,QAAA,eAAA,SAAA,sBACK,mCADL,SAAA,gIAAA,qCAAA,qCAAA,oBAAA,+DAAA,+BAAA,gBAAA,kCAAA,+BAAA,oBAAA,maAfQ,aAeR,mBAfQ,2PAeR,kKAAA,OAAA,yCAAA,KACK,KAAA,MAAA,iEADL,oCAAA,uDATG,IASH,SAAA,0EAXQ,qDAAA,cAWR,0BAAA,kBATG,yEASH,iIAAA,kCAAA,SAAA,eAXQ,2UAWR,2CAAA,iEAAA,iIAAA,iDATG,wBASH,SATG,wEAAA,yEAAA,8GASH,4hBAJS,ySAIT,mKAAA,gKACK,2BADL,KAbU,iBAFF,kYAeR,gCAAA,wJAAA,kCAAA,sDAAA,sEAAA,yCAAA,4EAAA,uRAAA,iEAAA,oXAAA,qEAAA,wEAAA,sBAAA,iGANM,2CAMN,wBAAA,QAAA,oCAbU,qEAaV,yFAAA,MAAA,4GAbU,4OAaV,+IAJS,yCAEC,2CADC,gCAGX,gHAAA,cAAA,YAAA,kHAAA,QAAA,6FAAA,yQAAA,8VAHW,gEAGX,kEAAA,mCACK,2FAAA,0IADL,mKAAA,SAAA,0GAAA,gSAAA,wCAAA,oCAAA,wCAAA,+MACK,kIADL,kKAAA,0aAAA,sFAAA,2JAAA,qIAAA,mhBChBJ,SAAAC,GACfC,EACAvT,GAEA,IAAI/D,EACJ,IAAI,IAAAuX,EACHvX,EAAmBuX,QAAdA,EAAGC,QAAQC,WAARF,IAAWA,OAAXA,EAAAA,EAAcD,EACtB,CAAC,MAAOrM,GAAK,IAAAyM,EACb1X,EAAuB,QAAlB0X,cAAeD,WAAG,IAAAC,OAAA,EAAfA,EAAkBJ,EAE3B,CAEA,OADAtX,UAAAA,EAAU+D,GACH/D,CACR,CAGO,MAIM2X,GAAUN,GAAc,eAAgB,yBACxCO,GAAeP,GAC3B,oBACA,yBAEYQ,GAAkBR,GAC9B,uBACA,yBAIYS,GAAuB,WAGvBC,GAAgB,CAAC,YAAa,OAAQ,SAAU,YAGhDC,GAAkB,OAElBC,GAAuB,oBAIvBC,GAAqB,mBCvClC,IAAkBC,GAOAC,GAPlB,CAAkBD,IACjBA,EAAA,kBAAA,wBACAA,EAAA,gBAAA,sBACAA,EAAA,kBAAA,yBACAA,EAAA,qBAAA,0BACA,EALD,CAAkBA,KAAAA,GAKjB,CAAA,IAED,CAAkBC,IACjBA,EAAA,WAAA,iBACAA,EAAA,YAAA,kBACAA,EAAA,aAAA,mBACAA,EAAA,mBAAA,yBACAA,EAAA,YAAA,kBACAA,EAAA,0BAAA,kCACAA,EAAA,qBAAA,4BACA,EARD,CAAkBA,KAAAA,GAQjB,CAAA,IA8DD,MAAMC,GAAe,CACpBC,UAnCD,SACCC,EACApG,GAEA,MAAMqG,EAAWtG,GAChBC,EAASD,GAEV,OADAmC,SAASoE,iBAAiBF,EAAWC,GAC9B,KACNnE,SAASpC,oBAAoBsG,EAAWC,EAAyB,CAEnE,EA0BCE,QAvBD,SACCH,GAKA,MAAMrG,EAAQ,IAAIqC,YAAYgE,EAAW,CACxCI,OAAMla,UAAAF,QAAA6B,OAAAA,EAAA3B,UAAA,KAEP4V,SAASC,cAAcpC,EACxB,EAcC0G,YAXD,SACCL,EACApG,GAEAkC,SAASpC,oBAAoBsG,EAAWpG,EACzC,GCxEa0G,GAAyB,iQCLhCC,GAAgB,cAoaf,SAASC,GAAwBC,EAAMhZ,EAAOyU,GACnD,GAAIzU,QACF,MAAO,GAET,GAAqB,iBAAVA,EACT,MAAM,IAAIuB,MACR,wGAGJ,MAAA3B,GAAAA,OAAUoZ,EAAI,KAAApZ,QAA+B,KAA3B6U,eAAAA,EAASwE,eAAyBjZ,EAAQkZ,mBAAmBlZ,GACjF,CAMO,SAASmZ,GAAqBH,EAAMhZ,EAAOyU,GAChD,IAAKzU,GAA0B,iBAAVA,EACnB,MAAO,GAET,MAAMoZ,EAAS,GACTC,EACJ,CACEC,OAAQ,IACRC,MAAO,IACPC,OAAQ,KACR/E,EAAQgF,QAAU,IAGtB,GAAsB,eAAlBhF,EAAQgF,QAA8C,IAApBhF,EAAQiF,QAAmB,CAC/D,IAAWC,MAAAA,KAAK3Z,EACdoZ,EAAOpQ,KAAK2Q,GAA6B,IAA1BlF,EAAQwE,cAAyBjZ,EAAM2Z,GAAKT,mBAAmBlZ,EAAM2Z,KAEtF,MAAMC,EAAQR,EAAOS,KAAK,KAC1B,OAAQpF,EAAQgF,OACd,IAAK,OACH,MAAA,GAAA7Z,OAAUoZ,EAAIpZ,KAAAA,OAAIga,GAEpB,IAAK,QACH,MAAAha,IAAAA,OAAWga,GAEb,IAAK,SACH,MAAA,IAAAha,OAAWoZ,EAAIpZ,KAAAA,OAAIga,GAErB,QACE,OAAOA,EAGb,CAGA,IAAWD,MAAAA,KAAK3Z,EAAO,CACrB,MAAM8Z,EAA8B,eAAlBrF,EAAQgF,MAAU,GAAA7Z,OAAkBoZ,EAAIpZ,KAAAA,OAAI+Z,OAAOA,EACrEP,EAAOpQ,KAAK+P,GAAwBe,EAAW9Z,EAAM2Z,GAAIlF,GAC3D,CACA,MAAMsF,EAAQX,EAAOS,KAAKR,GAC1B,MAAyB,UAAlB5E,EAAQgF,OAAuC,WAAlBhF,EAAQgF,MAAU7Z,GAAAA,OAAcyZ,GAAMzZ,OAAGma,GAAUA,CACzF,CAMO,SAASC,GAAoBhB,EAAMhZ,EAAOyU,GAC/C,IAAKrW,MAAMC,QAAQ2B,GACjB,MAAO,GAIT,IAAwB,IAApByU,EAAQiF,QAAmB,CAC7B,MAAMO,EAAS,CAAEC,KAAM,IAAKC,eAAgB,MAAOC,cAAe,KAAM3F,EAAQgF,QAAU,IACpFM,IAAmC,IAA1BtF,EAAQwE,cAAyBjZ,EAAQA,EAAMuE,KAAK4S,GAAM+B,mBAAmB/B,MAAK0C,KAAKI,GACtG,OAAQxF,EAAQgF,OACd,IAAK,SACH,OAAOM,EAET,IAAK,QACH,MAAAna,IAAAA,OAAWma,GAEb,IAAK,SACH,MAAA,IAAAna,OAAWoZ,EAAIpZ,KAAAA,OAAIma,GAIrB,QACE,MAAA,GAAAna,OAAUoZ,EAAIpZ,KAAAA,OAAIma,GAGxB,CAGA,MAAMV,EAAS,CAAEC,OAAQ,IAAKC,MAAO,IAAKC,OAAQ,KAAM/E,EAAQgF,QAAU,IACpEL,EAAS,GACf,IAAWjC,MAAAA,KAAKnX,EACQ,WAAlByU,EAAQgF,OAAwC,UAAlBhF,EAAQgF,MACxCL,EAAOpQ,MAA+B,IAA1ByL,EAAQwE,cAAyB9B,EAAI+B,mBAAmB/B,IAEpEiC,EAAOpQ,KAAK+P,GAAwBC,EAAM7B,EAAG1C,IAGjD,MAAyB,UAAlBA,EAAQgF,OAAuC,WAAlBhF,EAAQgF,MAAU7Z,GAAAA,OAC/CyZ,GAAMzZ,OAAGwZ,EAAOS,KAAKR,IACxBD,EAAOS,KAAKR,EAClB,CAMO,SAASgB,GAAsB5F,GACpC,OAAO,SAAyBpP,GAC9B,MAAMiV,EAAS,GACf,GAAIjV,GAAsC,iBAAhBA,EACxB,IAAW2T,MAAAA,KAAQ3T,EAAa,CAC9B,MAAMrF,EAAQqF,EAAY2T,GAC1B,GAAIhZ,QAGJ,GAAI5B,MAAMC,QAAQ2B,GAAlB,CACE,GAAqB,IAAjBA,EAAMzB,OACR,SAEF+b,EAAOtR,KACLgR,GAAoBhB,EAAMhZ,EAAA4G,EAAAA,EAAA,CACxB6S,MAAO,OACPC,SAAS,GACNjF,aAAAA,EAAAA,EAAS8F,OAAA,GAAA,CACZtB,eAAexE,aAAAA,EAAAA,EAASwE,iBAAiB,KAI/C,KACqB,iBAAVjZ,EAWXsa,EAAOtR,KAAK+P,GAAwBC,EAAMhZ,EAAOyU,IAV/C6F,EAAOtR,KACLmQ,GAAqBH,EAAMhZ,EAAA4G,EAAAA,EAAA,CACzB6S,MAAO,aACPC,SAAS,GACNjF,aAAAA,EAAAA,EAAS+F,QAAA,GAAA,CACZvB,eAAexE,aAAAA,EAAAA,EAASwE,iBAAiB,KAMjD,CAEF,OAAOqB,EAAOT,KAAK,IACrB,CACF,CAOO,SAASY,GAAsBC,EAAUC,GAC9C,IAAIC,EAAUF,EACd,IAAA,MAAWG,aAAAC,EAASJ,EAASG,MAAM/B,WAAa,IAAAgC,EAAAA,EAAK,GAAI,CAAA,IAAAA,EACvD,IAAI9B,EAAO6B,EAAME,UAAU,EAAGF,EAAMtc,OAAS,GACzCmb,GAAU,EACVD,EAAQ,SAYZ,GAXIT,EAAKgC,SAAS,OAChBtB,GAAU,EACVV,EAAOA,EAAK+B,UAAU,EAAG/B,EAAKza,OAAS,IAErCya,EAAKvT,WAAW,MAClBgU,EAAQ,QACRT,EAAOA,EAAK+B,UAAU,IACb/B,EAAKvT,WAAW,OACzBgU,EAAQ,SACRT,EAAOA,EAAK+B,UAAU,KAEnBJ,QAAmC,IAArBA,EAAW3B,IAA4C,OAArB2B,EAAW3B,GAC9D,SAEF,MAAMhZ,EAAQ2a,EAAW3B,GACrB5a,MAAMC,QAAQ2B,GAChB4a,EAAUA,EAAQK,QAAQJ,EAAOb,GAAoBhB,EAAMhZ,EAAO,CAAEyZ,QAAOC,aAW7EkB,EARqB,iBAAV5a,EAIG,WAAVyZ,EAIMmB,EAAQK,QAAQJ,EAAiB,UAAVpB,EAAU,IAAA7Z,OAAcsZ,mBAAmBlZ,IAAWkZ,mBAAmBlZ,IAH9F4a,EAAQK,QAAQJ,EAAA,IAAAjb,OAAWmZ,GAAwBC,EAAMhZ,KAJzD4a,EAAQK,QAAQJ,EAAO1B,GAAqBH,EAAMhZ,EAAO,CAAEyZ,QAAOC,YAQhF,CACA,OAAOkB,CACT,CAMO,SAASM,GAAsBpU,EAAME,GAC1C,GAAIF,aAAgBqU,SAClB,OAAOrU,EAET,GAAIE,EAAS,CAAA,IAAAoU,EAAAC,EAKX,GAAoB,uCAHlBrU,EAAQvG,eAAe6a,SACQ,QADRF,EAClBpU,EAAQvG,IAAI,uBAAc2a,IAAAA,EAAAA,EAAKpU,EAAQvG,IAAI,wBAAc4a,EACzDrU,EAAQ,uBAAc,IAAAqU,EAAAA,EAAKrU,EAAQ,iBAExC,OAAO,IAAIhB,gBAAgBc,GAAM5C,UAErC,CACA,OAAO3D,KAAKC,UAAUsG,EACxB,CAyBO,SAASyU,KACd,MAAMC,EAAe,IAAIC,QAAQ,IAAA,IAAAtY,EAAA1E,UAAAF,OADHmd,EAAAtd,IAAAA,MAAA+E,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAAsY,EAAAtY,GAAA3E,UAAA2E,GAE9B,IAAW2S,MAAAA,KAAK2F,EAAY,CAC1B,IAAK3F,GAAkB,iBAANA,EACf,SAEF,MAAM4F,EAAW5F,aAAa0F,QAAU1F,EAAE7P,UAAYD,OAAOC,QAAQ6P,GACrE,IAAA,MAAY4D,EAAGxC,KAAMwE,EACnB,GAAU,OAANxE,EACFqE,EAAanJ,OAAOsH,QACtB,GAAWvb,MAAMC,QAAQ8Y,GACvB,IAAWyE,MAAAA,KAAMzE,EACfqE,EAAaK,OAAOlC,EAAGiC,aAEV,IAANzE,GACTqE,EAAa1b,IAAI6Z,EAAGxC,EAG1B,CACA,OAAOqE,CACT,CAMO,SAASM,GAAoBvW,GAClC,OAAIA,EAAIyV,SAAS,KACRzV,EAAIwV,UAAU,EAAGxV,EAAIhH,OAAS,GAEhCgH,CACT,CC9lBA,MAAMwW,GD3DN,SAAqCC,GACnC,IAAAC,EAAArV,EAAA,CAAA,EAUSoV,IAVLE,QACFA,EAAU,GACVC,QAASC,EAAgBC,WAAWF,QACpCxV,MAAO2V,EAAYD,WAAW1V,MAC9B4V,gBAAiBC,EACjBC,eAAgBC,EAChBC,eAAgBC,EAChB5V,QAAS6V,EAAAC,eACTA,GAEFb,EADKc,EAAAxH,EAAA0G,EAAAzG,IA9BwBwH,IAAMC,EAgCnCH,EA9BqB,iBAAZtF,SACPrP,OAAO+U,SAAS,QAATD,EAASzF,eAAAyF,IAAAA,GAASA,QAATA,EAAAA,EAASE,oBAAAF,WAAAA,EAATA,EAAmBhR,YAAA,IAAAgR,OAAA,EAAnBA,EAAyBlC,UAAU,EAAG,KAAO,IAC7DvD,QAAQ2F,SAASC,OA4ByBN,OAAiB,EAC7DZ,EAAUJ,GAAoBI,GAC9B,MAAMmB,EAAoB,GAO1BjX,eAAekX,EAAUC,EAAYC,GAAc,IAAAC,EACjD,MAAA1d,EAaIyd,GAAgB,CAAC,GAZnBtB,QAASwB,EAAA/W,MACTA,EAAQ2V,EAAAH,QACRA,EAAUC,EAAApV,QACVA,EAAA2W,OACAA,EAAS,CAAC,EAAAC,QACVA,EAAU,OACVrB,gBAAiBsB,EAAApB,eACjBA,GAAiBC,QAAAA,EAAwBxB,IACzCyB,eAAgBmB,EAAAhX,KAChBA,EACAiX,WAAYC,EAAqB,IAEnCje,EADKuG,EAAAiP,EAAAxV,EAAAke,IAEL,IAAIC,EAAehC,EACD,IAAAiC,EAAdT,IACFQ,EAA+C,QAA/CC,EAAerC,GAAoB4B,UAAY,IAAAS,EAAAA,EAAKjC,GAGtD,IAAIK,EAC+B,mBAA1BC,EACHA,EACAnC,GAAsBmC,GACxBqB,IACFtB,EACoC,mBAA3BsB,EACHA,EACAxD,GAAAzT,EAAAA,EACM,CAAA,EAAiC,iBAA1B4V,EAAqCA,EAAwB,CAAC,GACtEqB,KAIb,MAAMlB,EAAiBmB,GAAyBlB,GAAwBnC,GAElE2D,OACK,IAATtX,OACI,EACA2V,EACE3V,EAMAyU,GAAasB,EAAa7V,EAAS2W,EAAOU,SAE5C7C,EAAeD,QAEA,IAAnB6C,GAEEA,aAA0BjD,SACxB,GACA,CACE,eAAgB,oBAEtB0B,EACA7V,EACA2W,EAAOU,QAIHC,EAAmB,IAAIjB,KAAsBW,GAE7CO,EAAA3X,EAAAA,EAAAA,EAAA,CACJ4X,SAAU,UACPzB,GACAzW,GAAA,GAAA,CACHQ,KAAMsX,EACNpX,QAASwU,IAGX,IAAI1W,EACA2P,EAKA/N,EAJA+X,EAAU,IAAItC,EAugBf,SAAwBzB,EAAUjG,GAAS,IAAAiK,EAAAC,EAChD,IAAIC,EAAAhf,GAAAA,OAAc6U,EAAQyH,SAAOtc,OAAG8a,GACxBgE,QAAZA,EAAIjK,EAAQkJ,cAARe,IAAQA,GAARA,EAAgBG,OAClBD,EAAWnK,EAAQkI,eAAeiC,EAAUnK,EAAQkJ,OAAOkB,OAE7D,IAAIvE,EAAS7F,EAAQ8H,gBAA+B,QAA/BoC,EAAgBlK,EAAQkJ,OAAO9L,aAAA8M,IAAAA,EAAAA,EAAS,CAAA,GACzDrE,EAAO7U,WAAW,OACpB6U,EAASA,EAAOS,UAAU,IAExBT,IACFsE,GAAA,IAAAhf,OAAgB0a,IAElB,OAAOsE,CACT,CAnhBME,CAAevB,EAAY,CAAErB,QAASgC,EAAcP,SAAQpB,kBAAiBI,mBAC7E4B,GAKF,IAAWrf,MAAAA,KAAOoH,EACVpH,KAAOuf,IACXA,EAAQvf,GAAOoH,EAAKpH,IAIxB,GAAIof,EAAiB/f,OAAQ,CAC3BuG,EArHGuH,KAAK0S,SAAS7a,SAAS,IAAI8a,MAAM,EAAG,IAwHvCvK,EAAUxO,OAAOgZ,OAAO,CACtB/C,QAASgC,EACTvX,QACAiX,UACArB,kBACAE,iBACAE,mBAEF,IAAWuC,MAAAA,KAAKZ,EACd,GAAIY,GAAkB,iBAANA,GAAyC,mBAAhBA,EAAEC,UAA0B,CACnE,MAAMlJ,QAAeiJ,EAAEC,UAAU,CAC/BV,UACAlB,aACAI,SACAlJ,UACA3P,OAEF,GAAImR,EAAQ,CACV,KAAIA,aAAkBkG,GAEXlG,IAAAA,aAAkBmJ,SAAU,CACrC1Y,EAAWuP,EACX,MAEA,MAAM,IAAI1U,MAAM,gFAClB,CANEkd,EAAUxI,CAOd,CACF,CAEJ,CAEA,IAAKvP,EAAU,CAEb,IACEA,QAAiBC,EAAM8X,EAAS3B,EAClC,CAAA,MAASuC,GACP,IAAIC,EAAuBD,EAG3B,GAAIf,EAAiB/f,OACnB,IAASO,IAAAA,EAAIwf,EAAiB/f,OAAS,EAAGO,GAAK,EAAGA,IAAK,CACrD,MAAMogB,EAAIZ,EAAiBxf,GAC3B,GAAIogB,GAAkB,iBAANA,GAAuC,mBAAdA,EAAE7J,QAAwB,CACjE,MAAMY,QAAeiJ,EAAE7J,QAAQ,CAC7BoJ,UACAzb,MAAOsc,EACP/B,aACAI,SACAlJ,UACA3P,OAEF,GAAImR,EAAQ,CAEV,GAAIA,aAAkBmJ,SAAU,CAC9BE,OAAuB,EACvB5Y,EAAWuP,EACX,KACF,CAEA,GAAIA,aAAkB1U,MAAO,CAC3B+d,EAAuBrJ,EACvB,QACF,CAEA,MAAM,IAAI1U,MAAM,2DAClB,CACF,CACF,CAIF,GAAI+d,EACF,MAAMA,CAEV,CAIA,GAAIhB,EAAiB/f,OACnB,IAASO,IAAAA,EAAIwf,EAAiB/f,OAAS,EAAGO,GAAK,EAAGA,IAAK,CACrD,MAAMogB,EAAIZ,EAAiBxf,GAC3B,GAAIogB,GAAkB,iBAANA,GAA0C,mBAAjBA,EAAEK,WAA2B,CACpE,MAAMtJ,QAAeiJ,EAAEK,WAAW,CAChCd,UACA/X,WACA6W,aACAI,SACAlJ,UACA3P,OAEF,GAAImR,EAAQ,CACV,KAAMA,aAAkBmJ,UACtB,MAAM,IAAI7d,MAAM,sEAElBmF,EAAWuP,CACb,CACF,CACF,CAEJ,CAEA,MAAMuJ,EAAgB9Y,EAASM,QAAQvG,IAAI,kBAE3C,GACsB,MAApBiG,EAASwE,QACU,SAAnBuT,EAAQ5X,QACW,MAAlB2Y,IAAkE,QAAzC/B,EAAC/W,EAASM,QAAQvG,IAAI,4BAAmB,IAAAgd,IAAxCA,EAA2C3U,SAAS,YAE/E,OAAOpC,EAASO,GAAK,CAAEhH,UAAM,EAAWyG,YAAa,CAAE1D,WAAO,EAAW0D,YAI3E,GAAIA,EAASO,GAAI,CACf,MAAMwY,EAAkBrZ,UAEtB,GAAgB,WAAZwX,EACF,OAAOlX,EAASI,KAGlB,GAAgB,SAAZ8W,IAAuB4B,EAAe,CAExC,MAAME,QAAYhZ,EAASiZ,OAC3B,OAAOD,EAAMnf,KAAKO,MAAM4e,QAAO,CACjC,CAEA,aAAahZ,EAASkX,IAAS,EAEjC,MAAO,CAAE3d,WAAYwf,IAAmB/Y,WAC1C,CAGA,IAAI1D,QAAc0D,EAASiZ,OAC3B,IACE3c,EAAQzC,KAAKO,MAAMkC,EACrB4c,CAAAA,MAAAA,GAAQ,CAGR,MAAO,CAAE5c,QAAO0D,WAClB,CAEA,MAAO,CACL+X,QAAAA,CAAQ5X,EAAQtB,EAAKe,IACZgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQA,EAAO5B,iBAGlD4a,IAAIta,CAAAA,EAAKe,IACAgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,SAG3CiZ,IAAIva,CAAAA,EAAKe,IACAgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,SAG3CkZ,KAAKxa,CAAAA,EAAKe,IACDgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,UAG3CmZ,OAAOza,CAAAA,EAAKe,IACHgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,YAG3CoZ,QAAQ1a,CAAAA,EAAKe,IACJgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,aAG3CqZ,KAAK3a,CAAAA,EAAKe,IACDgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,UAG3CsZ,MAAM5a,CAAAA,EAAKe,IACFgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,WAG3CuZ,MAAM7a,CAAAA,EAAKe,IACFgX,EAAU/X,EAAAqB,EAAAA,KAAUN,GAAA,GAAA,CAAMO,OAAQ,WAG3CwZ,GAAAA,GAAmB,IAAA,IAAAhe,EAAA5D,UAAAF,OAAZwf,EAAA3f,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAAwb,EAAAxb,GAAA9D,UAAA8D,GACL,IAAW2c,MAAAA,KAAKnB,EACd,GAAKmB,EAAL,CAGA,GAAiB,iBAANA,KAAoB,cAAeA,GAAK,eAAgBA,GAAK,YAAaA,GACnF,MAAM,IAAI3d,MAAM,wFAElB8b,EAAkBrU,KAAKkW,EAJvB,CAMJ,EAEAoB,KAAAA,GAAqB,IAAA,IAAArd,EAAAxE,UAAAF,OAAZwf,EAAA3f,IAAAA,MAAA6E,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAA6a,EAAA7a,GAAAzE,UAAAyE,GACP,IAAWgc,MAAAA,KAAKnB,EAAY,CAC1B,MAAMjf,EAAIue,EAAkBkD,QAAQrB,IACtB,IAAVpgB,GACFue,EAAkBmD,OAAO1hB,EAAG,EAEhC,CACF,EAEJ,CC5PY2hB,CAAoB,CAC/BvE,QAASvE,GACT3Q,QAAS,CACR,eAAgB,sBC3EXZ,eAAesa,GAAiB3gB,GAQtC,IARuC4gB,OACvCA,EAAMC,KACNA,EAAIC,YACJA,GAAc,GAKd9gB,EACI+gB,EAmBL,SAA+BH,GAC9B,MAAMI,EAAgB1M,SAASuC,eAC9BsB,IAGD,IAAK6I,EACJ,OAAO,KAGR,IAAI,IAAAC,EACH,MAAMF,EAAqCvgB,KAAKO,MAC/CigB,EAAcE,WAGTC,UAAiBF,EAAGF,EAASK,oBAAY,IAAAH,GAAU,QAAVA,EAArBA,EAAuBI,gBAAvBJ,IAA+BA,OAA/BA,EAAAA,EAAkCL,GAItDU,EAAoBH,EACvB,CAAEE,SAAUF,QACZ9gB,EAEH,OAAAwG,EAAAA,EAAA,CAAA,EACIka,GAAQ,CAAA,EAAA,CACXK,aAAcE,GAEf,CAAC,MAAOre,GAER,OADAS,GAAOT,MAAM,uCAAwCA,GAC9C,IACR,CACD,CAjD+Cse,CAAsBX,GAEpE,IAAKG,EAAU,CACd,MAAMS,QAgDRnb,eAAgC1F,GAQ/B,IARgCigB,OAChCA,EAAMC,KACNA,EAAIY,sBACJA,GAAwB,GAKxB9gB,EACA,IAAKkgB,EACJ,OAAO,KAER,IAAI,IAAAa,EACH,MAAMC,QAAuB3F,GAAI8D,IAAI,uBAAwB,CAC5DlC,OAAQ,CACP9L,MAAO,CAAE8O,SAAQC,SAElBe,cAAe,CACdziB,IAAG,mBAAAU,OAAqBghB,OAAIhhB,OAAI+gB,GAChCxhB,KAAM,iBACNqiB,2BAIII,EAAoC,QAAtBH,EAAGC,EAAezhB,YAAI,IAAAwhB,OAAA,EAAnBA,EAAqBG,eACC,IAAAC,EAA7C,OAAIH,EAAe1e,QAAU4e,GAC5Bne,GAAOT,MACN,+CAAsC6e,EACtCH,EAAe1e,aAAK,IAAA6e,EAAAA,EAAI,oBAElB,MAGDD,CACP,CAAC,MAAO5e,GAER,OADAS,GAAOT,MAAKpD,6CAAAA,OAA8C+gB,EAAM,KAAK3d,GAC9D,IACR,CACD,CAtF+B8e,CAAkB,CAC9CnB,SACAC,OACAY,uBAAwBX,IAErBU,GACH9d,GAAOb,KAAK,yBAA0B2e,GACtCT,EAAWS,GAEX9d,GAAOX,KAAK,0CAEd,CAEA,OAAOge,CACR,CCTM,SAAUiB,GAAmBC,GAClC,MAAMC,EAA8C,CAAE,EA4BtD,OA1BAhc,OAAOC,QAAQ8b,GAAS7b,SAAQpG,IAAiB,IAAfb,EAAKc,GAAMD,EAC5C,GAAI8D,GAAM7D,GAAQ,OAAOA,EAEzB,IAAIkiB,EAAyBliB,EAE7B,GAAc,SAAVA,EACHkiB,GAAgB,OACV,GAAc,UAAVliB,EACVkiB,GAAgB,OACV,GbLH,SAAmBliB,GACxB,MAAqB,iBAAVA,IAGHiE,MAAMkE,OAAOnI,KAAWmiB,SAASha,OAAOnI,GACjD,CaAaoiB,CAASpiB,GACnBkiB,EAAgB/Z,OAAOnI,QACjB,GAAc,SAAVA,EACVkiB,EAAgB,UACV,GAAc,cAAVliB,EACVkiB,OAAgB9hB,OAEhB,IACC8hB,EAAgB3hB,KAAKO,MAAMd,EAC3B,CAAC,MAAA4f,GACD,CAIFqC,EAAc/iB,GAAOgjB,CAAa,IAG5BD,CACR,CA0BO7b,eAAeic,GACrBL,GAAyC,IAAAhB,EAAAsB,EAEzC,MAAM7N,GApENzU,EAoE+BgiB,EAjEL,oBAAjBO,cAAgCviB,aAAiBuiB,cACf,0BAA1Ctc,OAAOuc,UAAUte,SAASsS,KAAKxW,GAiE7B+hB,GAAmBC,GACnBA,GAvEE,IACLhiB,EAwEA,MAAM+F,ab2FgC,IAAA0c,EACtC,MAAMC,EAA0C,QAA9BD,EAAG/kB,OAAOilB,4BAAoB,IAAAF,EAAAA,EAAI/kB,OAAOiI,SAAS2U,OACpE,OAAO,IAAItU,gBAAgB0c,EAC5B,Ca9FsBE,GAEfC,EAAiB9c,EAAatF,IAAIqX,IAClC+I,EAAc7e,QAAQ6gB,GAEtBC,EAAaD,GAAkBhjB,GAAQY,IAAIxB,IAEjD,IAAK6jB,EAAY,CAChB,MAAM3gB,EAAU,6CAEhB,OADAsB,GAAOX,KAAKX,GACL,CAAEiU,SAAS,EAAOE,OAAQ,qBAAsBnU,UACxD,CAEA,MAAM4gB,EA5CP,SAA2BriB,GAM1B,IAN2B+T,QAC3BA,EAAO1O,aACPA,GAIArF,EACA,MAAMsiB,EACW,gBAAhBvO,EAAQgD,KAAyC,SAAhBhD,EAAQgD,IACpCwL,EAAkD,SAA9Bld,EAAatF,IAAI,SAErCsB,EAAuBlC,GAAQY,IAAahB,IAUlD,OARIujB,GAAoBC,IACvBpjB,GAAQC,IAAIL,IAAwB,GAGVuC,QAC1BghB,GAAoBC,GAAqBlhB,EAI3C,CAsB4BmhB,CAAmB,CAAEzO,UAAS1O,iBAEnDgB,QCpDAX,eACN0c,GAEA,IAAKA,EACJ,OAAO,KAER,IAAI,IAAAK,EAAAC,EACH,MAAM1c,QAAiBqV,GAAI8D,IAAI,yBAA0B,CACxDlC,OAAQ,CAAEkB,KAAM,CAAE/Z,GAAIge,MAKvB,OAFArf,GAAOb,KAAK,wCAAyC8D,GAEjB,QAApCyc,EAAoBC,QAApBA,EAAO1c,EAASzG,YAATmjB,IAAaA,OAAbA,EAAAA,EAAexB,sBAAcuB,IAAAA,EAAAA,EAAI,IACxC,CAAC,MAAOngB,GAER,OADAS,GAAOT,MAAM,+BAAgCA,GACtC,IACR,CACD,CDkCqBqgB,CAAgBP,GAEpC,IAAK/b,EAAO,CACX,MAAM5E,EAAO,kCAAAvC,OAAqCkjB,GAElD,OADArf,GAAOX,KAAKX,GACL,CAAEiU,SAAS,EAAOE,OAAQ,oBAAqBnU,UACvD,CAEA,MAAMmhB,EACLvc,EAAM9G,KAAKsjB,UAAY9O,EAAQ+O,iBJ3GO,MI6GjCC,EAAc,CACnB1c,EAAM9G,KAAK0gB,OACXlM,EAAQiP,cACR7K,IACChR,QAAO8b,QAAevjB,IAARujB,KAERhD,OAAQiD,EAAcxC,SAAEA,SJjH1Bhb,iBACc,IAAA,IAAA/D,EAAA5D,UAAAF,OAAjBslB,EAAiBzlB,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAjBshB,EAAiBthB,GAAA9D,UAAA8D,GAGpB,MAAMkhB,EAAcI,EAAQtlB,OAAS,EAAIslB,EAAU,CAAChL,IAEpD,IAAK,MAAM8H,KAAU8C,EACpB,IACC,MAAM/c,QAAiBC,MAAK/G,GAAAA,OACxBiY,GAAejY,cAAAA,OAAa+gB,YAEhC,GAAIja,EAASO,GAEZ,MAAO,CAAEma,eADc1a,EAASS,OACbwZ,SAEpB,CAAC,MAAO3d,GACRS,GAAOT,MAAKpD,qCAAAA,OAAsC+gB,EAAM,KAAK3d,EAC9D,CAID,MAAM,IAAIzB,MAAK3B,6CAAAA,OAC+B6jB,EAAY5J,KAAK,OAEhE,CIyFoDiK,IAC/CL,GAGE3C,QAAiBJ,GAAkB,CACxCC,OAAQiD,EACRhD,KAAM7Z,EAAM9G,KAAK2gB,KACjBC,gBAGKkD,EbkEiB,SAAa/jB,GACpC,IACC,MAAqB,iBAAVA,GAAgC,OAAVA,EACzBA,EAEDgkB,gBAAgBhkB,EACvB,CAAC,MAAA4f,GACDnc,GAAOX,KAAK,sDACZ,IACC,OAAOvC,KAAKO,MAAMP,KAAKC,UAAUR,GACjC,CAAC,MAAOikB,GAIR,MAHAxgB,GAAOT,MACN,yEAEKihB,CACP,CACD,CACD,CanFwBC,CAAUpD,SAAsBE,QAAdA,EAARF,EAAUK,wBAAYH,SAAtBA,EAAwBI,UAErD2C,IACHtgB,GAAOb,KAAK,gDACZqD,OAAOC,QAAQ6d,GAAgB5d,SAAQjF,IAAiB,IAAfhC,EAAKc,GAAMkB,EACnD,cbgBFijB,EACAtF,EACA7e,GAEA,MAAMokB,EAAOvF,EAAKtX,MAAM,KAClB8c,EAAUD,EAAK5c,MAErB,IAAK6c,EACJ,MAAM,IAAI9iB,MAAM,gBAGF6iB,EAAKxb,QACnB,CAAC0b,EAAkBplB,KAClB,GAAIolB,GAA8B,iBAAZA,GAAwBplB,KAAOolB,EAAS,CAC7D,MAAMC,EAAQD,EAAoCplB,GAClD,GAAIqlB,GAAwB,iBAATA,EAClB,OAAOA,CAET,CACA,MAAM,IAAIhjB,MAAK,4BAAA3B,OAA4BV,EAAG,iBAAAU,OAAcif,EAAI,MAAI,GAErEsF,GAGME,GAAWrkB,CAEnB,CazCIwkB,CAAepD,EAAUliB,EAAKc,EAC9B,CAAC,MAAOgD,GACRS,GAAOX,KAAIlD,4CAAAA,OAA6CV,EAAG,KAAK8D,EACjE,MAeF,MAAO,CAAEoT,SAAS,EAAM7G,OAXZ3I,EAAA,CACX+Z,OAAQiD,EACRL,SAAUD,EACVmB,UAAW1B,EACXlC,cACAO,WACA3M,UACAiQ,MAAsB,QAAjBpC,EAAExB,aAAQ,EAARA,EAAU4D,aAAK,IAAApC,EAAAA,EAAI,MACvBvb,GAIL,CEpHA,SAAS4d,GACRC,GAEA,MAAMC,EAAW5e,OAAOC,QAAQ0e,GAC9B/c,QACA9H,IAAA,IAAEiB,EAAGhB,GAAMD,EAAA,MAAsB,iBAAVC,GAAuC,iBAAVA,CAAkB,IAEtEuE,KAAI7D,IAAA,IAAExB,EAAKc,GAAMU,EAAA,MAAA,IAAAd,OAASV,EAAGU,MAAAA,OAAKI,EAAK,KAAA,IACvC6Z,KAAK,IAEDiL,EAAWzQ,SAAS0Q,qBAAanlB,OAAyBilB,IAEhE,GAAIC,EAIH,OAHArhB,GAAOX,KAAIlD,gCAAAA,OACsBW,KAAKC,UAAUokB,GAAW,qBAEpDE,EAGR,MAAME,EAAO3Q,SAAS4Q,cAAc,QAIpC,OAHAhf,OAAOif,OAAOF,EAAMJ,GACpBvQ,SAAS8Q,KAAKC,YAAYJ,GAEnBA,CACR,CCpCM,SAAUK,GACfC,GACsC,IAAtC3O,EAAyBlY,UAAAF,OAAAE,QAAA2B,IAAA3B,UAAA2B,GAAA3B,UAAA4V,GAAAA,SAAS8Q,KAElC,IAAKG,EAAK,OAEV,IA3BK,SAAsBA,GAK3B,OAHoBA,EAAIzK,MAAM,OAAS,IAAItc,UACtB+mB,EAAIzK,MAAM,OAAS,IAAItc,SAOlB,CACzB,gBACA,oBACA,iBACA,gBACA,0CAGyBgnB,MAAKC,GAAWA,EAAQC,KAAKH,IACxD,CAQMI,CAAYJ,GAChB,MAAM,IAAI/jB,MACT,yFAKF,MAAMokB,EAAetR,SAAS4Q,cAAc,SAQ5C,OAPAU,EAAaC,aAAYhmB,QAAAA,OTHU,iBSGuB,QAC1D+lB,EAAaE,YAAcP,EAE3B7hB,GAAOb,KAAK,2BAEZ+T,EAAUyO,YAAYO,GAEfA,CACR,8CCOAvf,eACC0f,EACArR,GAEA,IACC,MAAMwB,QAAeoM,GAA6B5N,GAElD,IAAKwB,EAAOG,QACX,OAAOH,EAGR,MAAM8P,EAjDR,WAGC,GAF0B1R,SAASuC,eAAeqB,IAGjD,MAAO,CACN7B,SAAS,EACTE,OAAQ,mBACRnU,QAAO,sBAAAvC,OAAwBqY,GAAoB,qBAIrD,MAAMtB,EAAYtC,SAAS4Q,cAAc,OACzCtO,EAAU7R,GAAKmT,GACftB,EAAU8C,MAAMuM,QAAU,QAE1B,MAAMC,EAAStP,EAAUuP,aAAa,CAAEC,KAAM,WACxCC,EAAa/R,SAAS4Q,cAAc,OAQ1C,OANAmB,EAAWC,UAAY,eACvBD,EAAWthB,GVD0B,cUErCshB,EAAW3M,MAAMuM,QAAU,OAE3BC,EAAOb,YAAYgB,GAEZ,CAAEhQ,SAAS,EAAMpW,MAAO,CAAC2W,EAAWyP,GAC5C,CAwB0BE,GACxB,IAAKP,EAAgB3P,QACpB,OAAO2P,EAGR,MAAOpP,EAAWyP,GAAcL,EAAgB/lB,OAE1CuP,OAAEA,GAAW0G,GAElBxB,SAAS8R,iBAAEA,EAAgBC,cAAEA,IAC1BjX,EAEEkX,EAAY,cAAehS,EAAUA,EAAQgS,eAAYrmB,EAe/D,OAdIqmB,ED3BU,SACfL,EACAd,GAEA,MAAMK,EAAetR,SAAS4Q,cAAc,SAC5CU,EAAaE,YAAcP,EAC3Bc,EAAWhB,YAAYO,EAExB,CCoBGe,CAAkBN,EAAYK,GDjB3B,SAAsBL,GAC3B,MAAMpB,EAAO3Q,SAAS4Q,cAAc,QACpCD,EAAK2B,IAAM,aAEX,MAAMC,EAAWvP,GAAc,gBAAkB,SACjD2N,EAAK6B,KAAI,GAAAjnB,OAAMiY,GAAejY,KAAAA,OAAIgnB,EAAc,QAEhD5B,EAAK8B,OAAS,KACbrjB,GAAOb,KAAK,iCAAiC,EAG9CwjB,EAAWhB,YAAYJ,EAGxB,CCKG+B,CAAYX,cDDd,MAAMpB,EAAO3Q,SAAS4Q,cAAc,QACpCD,EAAK2B,IAAM,aAEX3B,EAAK6B,KAAI,GAAAjnB,OAAMiY,GAA+B,kBAE9CmN,EAAK8B,OAAS,KACbrjB,GAAOb,KAAK,2CAA2C,EAGxDoiB,EAAKgC,QAAU,KACdvjB,GAAOX,KAAK,sCAAsC,EAGnDuR,SAAS8Q,KAAKC,YAAYJ,EAG3B,CCbEiC,GF/EM,IAAIjS,SAAQ,CAACC,EAASC,KAE5B,MAAMgS,EAAavC,GAAsB,CACxCgC,IAAK,aACLE,KAAM,iCAIDM,EAAcxC,GAAsB,CACzCgC,IAAK,aACLE,KAAM,4BACNO,YAAa,cAGRC,EAAW1C,GAAsB,CACtCgC,IAAK,aACLE,KAAM,+IAGPQ,EAASP,OAAS,KACjBrjB,GAAOb,KAAK,uCACZqS,EAAQ,CAACiS,EAAYC,EAAaE,GAAU,EAE7CA,EAASL,QAAU,KAClBvjB,GAAOT,MAAM,kCACbkS,EAAO,IAAI3T,MAAM,kCAAkC,EAGpD8S,SAAS8Q,KAAKC,YAAYiC,EAAS,IEqDnChC,GAAgBmB,GAChBnB,GAAgBkB,EAAkBH,GAzCpC,SACCN,EACAM,EACA7W,GAEA9L,GAAOb,KAAK,mCAAoC2M,GAChD+X,GAAOxB,EAAWvW,GAAS6W,EAC5B,CAmCEmB,CAAazB,EAAYM,EAAY7W,GAErC8E,SAASvN,KAAKse,YAAYzO,GAC1B0B,GAAaK,QAAQP,GAAoBqP,qBAAsBjY,GAExD,CAAE6G,SAAS,EAAM7G,SACxB,CAAC,MAAOtE,GACR,MAAM9I,EAAU8I,aAAe1J,MAAQ0J,EAAI9I,QAAUiJ,OAAOH,GAE5D,OADAxH,GAAOT,MAAM,wBAAyBiI,GAC/B,CAAEmL,SAAS,EAAOE,OAAQ,gBAAiBnU,UACnD,CACD,yWClEA,SAAgBslB,GAAwBC,EAAOjT,GAC7C,MAAM1N,EAAQ0N,GAAWA,EAAQ1N,MAAQ0N,EAAQ1N,MAAQ4gB,GAEnDC,EACJnT,GAAWA,EAAQmT,WAAanT,EAAQmT,WAAaC,GAKvD,OAFEpT,GAAWA,EAAQqT,SAAWrT,EAAQqT,SAAWC,IAEnCL,EAAI,CAClB3gB,QACA6gB,eAsBJ,SAASI,GAEPN,EACA3gB,EACA6gB,EACAK,GAEA,MAAMC,EAnBK,OAFQloB,EAqBUioB,IAnBO,iBAAVjoB,GAAuC,kBAAVA,EAmBnBioB,EAAML,EAAWK,GArBvD,IAAqBjoB,EAuBnB,IAAImoB,EAAgBphB,EAAMtG,IAAIynB,GAM9B,YAL6B,IAAlBC,IACTA,EAAgBT,EAAGlR,KAAKpU,KAAM6lB,GAC9BlhB,EAAMjH,IAAIooB,EAAUC,IAGfA,EAGT,SAASC,GAEPV,EACA3gB,EACA6gB,GAEA,MAAMtlB,EAAOlE,MAAMokB,UAAUxD,MAAMxI,KAAK/X,UAAW,GAC7CypB,EAAWN,EAAWtlB,GAE5B,IAAI6lB,EAAgBphB,EAAMtG,IAAIynB,GAM9B,YAL6B,IAAlBC,IACTA,EAAgBT,EAAGW,MAAMjmB,KAAME,GAC/ByE,EAAMjH,IAAIooB,EAAUC,IAGfA,EAGT,SAASG,GACPZ,EACAa,EACAT,EACA/gB,EACAyhB,GAEA,OAAOV,EAASW,KAAKF,EAASb,EAAI3gB,EAAOyhB,GAG3C,SAAST,GAEPL,EACAjT,GAIA,OAAO6T,GACLZ,EACAtlB,KAJ6B,IAAdslB,EAAGnpB,OAAeypB,GAAUI,GAM3C3T,EAAQ1N,MAAM2hB,SACdjU,EAAQmT,YA8BZ,MAAMC,GAAgC,WACpC,OAAOtnB,KAAKC,UAAU/B,YAOxB,IAAMkqB,GAAN,MAGEhnB,WAAAA,GACES,KAAK2E,MAAQd,OAAOyiB,OAAO,MAG7BjoB,GAAAA,CAAIvB,GACF,OAAOkD,KAAK2E,MAAM7H,GAGpBY,GAAAA,CAAOZ,EAAac,GAClBoC,KAAK2E,MAAM7H,GAAOc,IAItB,MAAM2nB,GAAgC,CACpCe,OAAQ,WACN,OAAO,IAAIC,KAaFC,GAA+B,CAC1CR,SAlEF,SAEEV,EACAjT,GAEA,OAAO6T,GACLZ,EACAtlB,KACAgmB,GACA3T,EAAQ1N,MAAM2hB,SACdjU,EAAQmT,aAyDVI,QArDF,SAEEN,EACAjT,GAEA,OAAO6T,GAASZ,EAAItlB,KAAM4lB,GAASvT,EAAQ1N,MAAM2hB,SAAUjU,EAAQmT,qBCtJJ,cAAgBrmB,MAAMI,WAAAA,CAAY3D,EAAEC,GAAG,IAAI2G,EAAE5G,EAAEC,IAAI2G,GAAG,KAAK3G,GAAG4qB,MAAMjkB,GAAGxC,KAAK0mB,KAAK9qB,EAAEC,IAAImE,KAAK2mB,gBAAgB9qB,EAAE,GAAE,IAAIF,GAAE,CAASC,IAAUA,EAAEgrB,gBAAgB,kBAAkBhrB,EAAEirB,eAAe,iBAAiBjrB,EAAEkrB,qBAAqB,uBAAuBlrB,EAAEmrB,kBAAkB,oBAAoBnrB,EAAEorB,gBAAgB,kBAAkBprB,EAAEqrB,YAAY,cAAcrrB,EAAEsrB,iBAAiB,mBAAmBtrB,GAArR,CAAwRD,IAAG,CAAA,GAAI,SAASwrB,KAAI,MAAM,CAACC,SAAS,CAAE,EAACC,OAAO,CAAE,EAACtnB,QAAQ,CAAE,EAACunB,aAAa,CAAE,EAACC,YAAY,CAAE,EAACC,KAAK,CAAE,EAACC,aAAa,CAAA,EAAG,CAAC,SAAS/qB,GAAE8F,EAAE7G,GAAG,OAAOC,GAAE4G,EAAE,CAACmC,OAAOwiB,EAAExrB,EAAE,CAAC2qB,OAAOA,KAAK,CAACjoB,IAAIzC,GAAGurB,EAAEvrB,GAAG8B,GAAAA,CAAI9B,EAAEC,GAAGsrB,EAAEvrB,GAAGC,CAAC,MAAM6pB,SAAS7pB,GAAEmqB,WAAW,IAAImB,CAAC,CAAC,SAASO,GAAE9rB,EAAEC,GAAG,OAAOa,IAAG,WAAA,IAAA,IAAAuD,EAAA5D,UAAAF,OAAIN,EAACG,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAADtE,EAACsE,GAAA9D,UAAA8D,GAAA,OAAG,IAAIvE,KAAKC,EAAE,GAAEA,EAAE,CAAC,SAAS8rB,GAAE/rB,GAAG,MAAM,CAACgsB,kBAAkBF,GAAEG,KAAKC,eAAelsB,EAAEwrB,UAAUW,gBAAgBL,GAAEG,KAAKG,aAAapsB,EAAEyrB,QAAQY,eAAeP,GAAEG,KAAKK,YAAYtsB,EAAE2rB,aAAaY,sBAAsBT,GAAEG,KAAKO,mBAAmBxsB,EAAE0rB,cAAce,cAAcX,GAAEG,KAAKS,WAAW1sB,EAAE4rB,MAAMe,gBAAgBb,GAAEG,KAAKW,aAAa5sB,EAAE6rB,cAAc,CCG3iC,IAAI5rB,GAGAF,GAGA8sB,GAsBA/rB,GAnBAR,GAAc,EAGdJ,GAAoB,GAGlB4sB,GAAuD3sB,GAEzDH,GAAgB8sB,GAAOC,IACvBnmB,GAAkBkmB,GAAOE,IACzB7T,GAAe2T,GAAQG,OACvBlB,GAAYe,GAAOI,IACnBhM,GAAmB4L,GAAQK,QAC3B5B,GAAUuB,GAAOM,GAiHrB,SAASnjB,GAAa9J,EAAOF,GACxB6sB,GAAOO,KACVP,GAAOO,IAAOttB,GAAkBI,EAAOG,IAAeL,GAEvDK,GAAc,EAOd,IAAMusB,EACL9sB,GAAgButB,MACfvtB,GAAgButB,IAAW,CAC3BF,GAAO,GACPC,IAAiB,KAOnB,OAJIltB,GAAS0sB,EAAKO,GAAO7sB,QACxBssB,EAAKO,GAAOpiB,KAAK,CAAA,GAGX6hB,EAAKO,GAAOjtB,EACpB,CAOO,SAASotB,GAASptB,GAExB,OADAG,GAAc,EAYC,SAAWH,EAAS0sB,EAAc/rB,GAEjD,IAAMR,EAAY2J,GAAahK,KAAgB,GAE/C,GADAK,EAAUL,EAAWE,GAChBG,EAAS4sB,MACb5sB,EAAS8sB,GAAU,CACjBtsB,EAAiDA,EAAK+rB,GAA/CW,QAAA,EAA0BX,GAElC1sB,IACC,IAAMF,EAAeK,EAASmtB,IAC3BntB,EAASmtB,IAAY,GACrBntB,EAAS8sB,GAAQ,GACdrtB,EAAYO,EAAUL,EAASA,EAAcE,GAE/CF,IAAiBF,IACpBO,EAASmtB,IAAc,CAAC1tB,EAAWO,EAAS8sB,GAAQ,IACpD9sB,EAAS4sB,IAAYQ,SAAS,CAEhC,MAGDptB,EAAS4sB,IAAcntB,IAElBA,GAAgB4tB,KAAmB,CAAA,IAgC9BztB,EAAT,SAAyBC,EAAGF,EAAGF,GAC9B,IAAKO,EAAS4sB,IAAAI,IAAqB,OAAW,EAG9C,IACMT,EACLvsB,EAAS4sB,IAAAI,IAAAF,GAA0BvjB,QAFhB1J,KAAOA,EAAC+sB,MAO5B,GAHsBL,EAAWe,OAAMztB,IAAMA,EAACstB,MAI7C,OAAOX,GAAUA,EAAQtU,KAAKpU,KAAMjE,EAAGF,EAAGF,GAM3C,IAAIe,EAAeR,EAAS4sB,IAAYW,QAAU1tB,EAUlD,OATA0sB,EAAW1kB,SAAQhI,IAClB,GAAIA,EAAQstB,IAAa,CACxB,IAAMxtB,EAAeE,EAAQitB,GAAQ,GACrCjtB,EAAQitB,GAAUjtB,EAAQstB,IAC1BttB,EAAQstB,WACJxtB,IAAiBE,EAAQitB,GAAQ,KAAItsB,GAAA,EAC1C,CACD,IAEOgsB,GACJA,EAAQtU,KAAKpU,KAAMjE,EAAGF,EAAGF,IACzBe,CACJ,EA9DAf,GAAgB4tB,KAAoB,EACpC,IAAIb,EAAU/sB,GAAiB+tB,sBACzB9tB,EAAUD,GAAiBguB,oBAKjChuB,GAAiBguB,oBAAsB,SAAU5tB,EAAGF,EAAGF,GACtD,GAAIqE,KAAI4pB,IAAS,CAChB,IAAInB,EAAMC,EAEVA,OAAU,EACV5sB,EAAgBC,EAAGF,EAAGF,GACtB+sB,EAAUD,CACX,CAEI7sB,GAASA,EAAQwY,KAAKpU,KAAMjE,EAAGF,EAAGF,EACvC,EA+CAA,GAAiB+tB,sBAAwB5tB,CAC1C,CAGD,OAAOI,EAASmtB,KAAentB,EAAS8sB,EACzC,CAxGQrV,CAAWyV,GAAgBrtB,EACnC,CA8GO,SAASiZ,GAAUjZ,EAAU0sB,GAEnC,IAAM/rB,EAAQmJ,GAAahK,KAAgB,IACtC6sB,GAAOmB,KAAiBC,GAAYptB,EAAKwsB,IAAQT,KACrD/rB,EAAKssB,GAAUjtB,EACfW,EAAM+rB,EAAeA,EAErB9sB,GAAgButB,IAAAD,IAAyBriB,KAAKlK,GAEhD,CAmBO,SAASqtB,GAAOhuB,GAEtB,OADAG,GAAc,EACP8tB,IAAQ,KAAO,CAAE9H,QAASnmB,KAAiB,GACnD,CAiCgB,SAAAiuB,GAAQjuB,EAASJ,GAEhC,IAAM8sB,EAAQ5iB,GAAahK,KAAgB,GAO3C,OANIiuB,GAAYrB,EAAKS,IAAQvtB,KAC5B8sB,EAAKO,GAAUjtB,IACf0sB,EAAKS,IAASvtB,EACd8sB,EAAKQ,IAAYltB,GAGX0sB,EAAKO,EACb,CAOO,SAASiB,GAAYluB,EAAUF,GAErC,OADAK,GAAc,EACP8tB,IAAQ,IAAMjuB,GAAUF,EAChC,CAKO,SAASquB,GAAWnuB,GAC1B,IAAM0sB,EAAW9sB,GAAiBwqB,QAAQpqB,EAAO+sB,KAK3CpsB,EAAQmJ,GAAahK,KAAgB,GAK3C,OADAa,EAAKgsB,EAAY3sB,EACZ0sB,GAEe,MAAhB/rB,EAAKssB,KACRtsB,EAAKssB,IAAU,EACfP,EAAS0B,IAAIxuB,KAEP8sB,EAASgB,MAAM7rB,OANA7B,EAAOitB,EAO9B,CA2DA,SAASoB,KAER,IADA,IAAIruB,EACIA,EAAYD,GAAkBuuB,SACrC,GAAKtuB,EAASuuB,KAAgBvuB,EAASmtB,IACvC,IACCntB,EAASmtB,IAAAD,IAAyBllB,QAAQwmB,IAC1CxuB,EAASmtB,IAAAD,IAAyBllB,QAAQymB,IAC1CzuB,EAASmtB,IAAAD,IAA2B,EACnC,OAAOptB,GACRE,EAASmtB,IAAAD,IAA2B,GACpCP,GAAOkB,IAAa/tB,EAAGE,EAAS0uB,IACjC,CAEF,CA1aA/B,GAAOC,IAAS5sB,IACfJ,GAAmB,KACfC,IAAeA,GAAcG,EAClC,EAEA2sB,GAAOM,GAAS,CAACjtB,EAAOF,KACnBE,GAASF,EAAS6uB,KAAc7uB,EAAS6uB,IAAAC,MAC5C5uB,EAAK4uB,IAAS9uB,EAAS6uB,IAAAC,KAGpBxD,IAASA,GAAQprB,EAAOF,EAC7B,EAGA6sB,GAAOE,IAAW7sB,IACbyG,IAAiBA,GAAgBzG,GAGrCF,GAAe,EAEf,IAAMa,GAHNf,GAAmBI,EAAK+sB,KAGMI,IAC1BxsB,IACC+rB,KAAsB9sB,IACzBe,EAAKusB,IAAmB,GACxBttB,GAAgBstB,IAAoB,GACpCvsB,EAAKssB,GAAOjlB,SAAQhI,IACfA,EAAQstB,MACXttB,EAAQitB,GAAUjtB,EAAQstB,KAE3BttB,EAAS0sB,EAAe1sB,EAAQstB,gBAGjC3sB,EAAKusB,IAAiBllB,QAAQwmB,IAC9B7tB,EAAKusB,IAAiBllB,QAAQymB,IAC9B9tB,EAAKusB,IAAmB,GACxBptB,GAAe,IAGjB4sB,GAAoB9sB,EACrB,EAGA+sB,GAAQG,OAAS9sB,IACZgZ,IAAcA,GAAahZ,GAE/B,IAAMF,EAAIE,EAAK+sB,IACXjtB,GAAKA,EAACqtB,MACLrtB,EAACqtB,IAAAD,IAAyB9sB,SAgaR,IAha2BL,GAAkB8K,KAAK/K,IAga7Ca,KAAYgsB,GAAQkC,yBAC/CluB,GAAUgsB,GAAQkC,wBACNC,IAAgBT,KAja5BvuB,EAACqtB,IAAAF,GAAejlB,SAAQhI,IACnBA,EAAS0sB,IACZ1sB,EAAQmtB,IAASntB,EAAS0sB,GAE3B1sB,EAAS0sB,QACV,KAEDA,GAAoB9sB,GAAmB,IACxC,EAIA+sB,GAAOI,IAAW,CAAC/sB,EAAOF,KACzBA,EAAYsnB,MAAKpnB,IAChB,IACCA,EAASktB,IAAkBllB,QAAQwmB,IACnCxuB,EAASktB,IAAoBltB,EAASktB,IAAkBxjB,QAAO1J,IAC9DA,EAAEitB,IAAUwB,GAAazuB,IAEzB,OAAOJ,GACRE,EAAYsnB,MAAKpnB,IACZA,EAACktB,MAAmBltB,EAACktB,IAAoB,GAC9C,IACAptB,EAAc,GACd6sB,GAAOkB,IAAajuB,EAAGI,EAAS0uB,IACjC,CACD,IAEI9C,IAAWA,GAAU5rB,EAAOF,EACjC,EAGA6sB,GAAQK,QAAUhtB,IACb+gB,IAAkBA,GAAiB/gB,GAEvC,IAEKF,EAFCF,EAAII,EAAK+sB,IACXntB,GAAKA,EAACutB,MAETvtB,EAACutB,IAAAF,GAAejlB,SAAQhI,IACvB,IACCwuB,GAAcxuB,EACb,OAAOA,GACRF,EAAaE,CACd,CACD,IACAJ,EAACutB,SAAW,EACRrtB,GAAY6sB,GAAOkB,IAAa/tB,EAAYF,EAAC8uB,KAEnD,EA4UA,IAAIlT,GAA0C,mBAAzBqT,sBAYrB,SAASC,GAAe9uB,GACvB,IAOIF,EAPEF,EAAO,KACZmvB,aAAarC,GACTlR,IAASwT,qBAAqBlvB,GAClCiZ,WAAW/Y,EACZ,EACM0sB,EAAU3T,WAAWnZ,EAlcR,IAqcf4b,KACH1b,EAAM+uB,sBAAsBjvB,GAE9B,CAqBA,SAAS4uB,GAAcxuB,GAGtB,IAAMF,EAAOF,GACT8sB,EAAU1sB,EAAI+sB,IACI,mBAAXL,IACV1sB,EAAI+sB,SAAY,EAChBL,KAGD9sB,GAAmBE,CACpB,CAOA,SAAS2uB,GAAazuB,GAGrB,IAAMF,EAAOF,GACbI,EAAI+sB,IAAY/sB,EAAIitB,KACpBrtB,GAAmBE,CACpB,CAOA,SAASiuB,GAAY/tB,EAASF,GAC7B,OACEE,GACDA,EAAQI,SAAWN,EAAQM,QAC3BN,EAAQsnB,MAAK,CAACtnB,EAAKF,IAAUE,IAAQE,EAAQJ,IAE/C,CAQA,SAASytB,GAAertB,EAAKF,GAC5B,MAAmB,mBAALA,EAAkBA,EAAEE,GAAOF,CAC1C,CCxhBO,SAASmvB,GAAejvB,EAAGF,GACjC,IAAK,IAAID,KAAKG,EAAG,GAAU,aAANH,KAAsBA,KAAKC,GAAI,OAAW,EAC/D,IAAK,IAAIF,KAAKE,EAAG,GAAU,aAANF,GAAoBI,EAAEJ,KAAOE,EAAEF,GAAI,OAAW,EACnE,OAAA,CACD,83BAfgB,SAAOI,EAAKF,GAC3B,IAAK,IAAID,KAAKC,EAAOE,EAAIH,GAAKC,EAAMD,GACpC,OAA6BG,CAC9B,wiKCLA,MAAMkvB,GACJ,4KAQF,SAAgBC,GACdC,GAEA,MAAMtX,EAAqC,CAAE,EA6H7C,OA5HAsX,EAAStS,QAAQoS,IAAiBxS,IAChC,MAAM2S,EAAM3S,EAAMtc,OAClB,OAAQsc,EAAM,IAEZ,IAAK,IACH5E,EAAOwX,IAAc,IAARD,EAAY,OAAiB,IAARA,EAAY,SAAW,QACzD,MAEF,IAAK,IACHvX,EAAOyX,KAAe,IAARF,EAAY,UAAY,UACtC,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WACR,gEAGJ,IAAK,IACL,IAAK,IACH,MAAM,IAAIA,WAAW,8CAEvB,IAAK,IACL,IAAK,IACH1X,EAAO2X,MAAQ,CAAC,UAAW,UAAW,QAAS,OAAQ,UACrDJ,EAAM,GAER,MAEF,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WAAW,2CACvB,IAAK,IACH1X,EAAO4X,IAAM,CAAC,UAAW,WAAWL,EAAM,GAC1C,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WACR,6DAGJ,IAAK,IACH1X,EAAO6X,QAAkB,IAARN,EAAY,OAAiB,IAARA,EAAY,SAAW,QAC7D,MACF,IAAK,IACH,GAAIA,EAAM,EACR,MAAM,IAAIG,WAAW,iDAEvB1X,EAAO6X,QAAU,CAAC,QAAS,OAAQ,SAAU,SAC3CN,EAAM,GAER,MACF,IAAK,IACH,GAAIA,EAAM,EACR,MAAM,IAAIG,WAAW,iDAEvB1X,EAAO6X,QAAU,CAAC,QAAS,OAAQ,SAAU,SAC3CN,EAAM,GAER,MAGF,IAAK,IACHvX,EAAO8X,QAAS,EAChB,MACF,IAAK,IACL,IAAK,IACH,MAAM,IAAIJ,WACR,8DAGJ,IAAK,IACH1X,EAAO+X,UAAY,MACnB/X,EAAOgY,KAAO,CAAC,UAAW,WAAWT,EAAM,GAC3C,MACF,IAAK,IACHvX,EAAO+X,UAAY,MACnB/X,EAAOgY,KAAO,CAAC,UAAW,WAAWT,EAAM,GAC3C,MACF,IAAK,IACHvX,EAAO+X,UAAY,MACnB/X,EAAOgY,KAAO,CAAC,UAAW,WAAWT,EAAM,GAC3C,MACF,IAAK,IACHvX,EAAO+X,UAAY,MACnB/X,EAAOgY,KAAO,CAAC,UAAW,WAAWT,EAAM,GAC3C,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WACR,oEAGJ,IAAK,IACH1X,EAAOiY,OAAS,CAAC,UAAW,WAAWV,EAAM,GAC7C,MAEF,IAAK,IACHvX,EAAOkY,OAAS,CAAC,UAAW,WAAWX,EAAM,GAC7C,MACF,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WACR,8DAGJ,IAAK,IACH1X,EAAOmY,aAAeZ,EAAM,EAAI,QAAU,OAC1C,MACF,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACH,MAAM,IAAIG,WACR,wEAGN,MAAO,EAAA,IAEF1X,wvICtIT,IAAYoY,GAAL,CAAAA,IAELA,EAAAA,EAAA,8BAAA,GAAA,gCAEAA,EAAAA,EAAA,eAAA,GAAA,iBAEAA,EAAAA,EAAA,mBAAA,GAAA,qBAEAA,EAAAA,EAAA,qBAAA,GAAA,uBAEAA,EAAAA,EAAA,sBAAA,GAAA,wBAEAA,EAAAA,EAAA,sBAAA,GAAA,wBAEAA,EAAAA,EAAA,wBAAA,GAAA,0BAEAA,EAAAA,EAAA,2BAAA,GAAA,6BAEAA,EAAAA,EAAA,uBAAA,GAAA,yBAEAA,EAAAA,EAAA,0BAAA,IAAA,4BAEAA,EAAAA,EAAA,iCAAA,IAAA,mCAEAA,EAAAA,EAAA,+BAAA,IAAA,iCAGAA,EAAAA,EAAA,oCAAA,IAAA,sCAEAA,EAAAA,EAAA,qCAAA,IAAA,uCAGAA,EAAAA,EAAA,gCAAA,IAAA,kCAEAA,EAAAA,EAAA,gCAAA,IAAA,kCAGAA,EAAAA,EAAA,yCAAA,IAAA,2CAKAA,EAAAA,EAAA,yCAAA,IAAA,2CAGAA,EAAAA,EAAA,iCAAA,IAAA,mCAMAA,EAAAA,EAAA,mCAAA,IAAA,qCAIAA,EAAAA,EAAA,mCAAA,IAAA,qCAGAA,EAAAA,EAAA,qBAAA,IAAA,uBAGAA,EAAAA,EAAA,YAAA,IAAA,cAEAA,EAAAA,EAAA,iBAAA,IAAA,mBAEAA,EAAAA,EAAA,sBAAA,IAAA,wBAEAA,EAAAA,EAAA,aAAA,IAAA,kBAnEK,CAoEN,uulBC5ED,IAAYC,GAAL,CAAAA,IAELA,EAAA,cAAA,gBAEAA,EAAA,cAAA,gBAEAA,EAAA,iBAAA,sBANK,CAON,IAED,IAAaC,GAAb,cAAiChtB,MAU/BI,WAAAA,CAAY6sB,EAAa1F,EAAiBC,GACxCF,MAAM2F,GACNpsB,KAAK0mB,KAAOA,EACZ1mB,KAAK2mB,gBAAkBA,EAEzB7kB,QAAAA,GACE,MAAAtE,oBAAAA,OAA2BwC,KAAK0mB,WAAAlpB,OAASwC,KAAKD,WAIrCssB,GAAb,cAAuCF,GACrC5sB,WAAAA,CACE+sB,EACA1uB,EACAyU,EACAsU,GAEAF,MAAAjpB,uBAAAA,OACyB8uB,EAAA9uB,QAAAA,OAAiBI,EAAAJ,oBAAAA,OAAwBqG,OAAOme,KACrE3P,GACAoF,KAAK,QACPyU,KAAAA,GAAUK,cACV5F,KAKO6F,GAAb,cAA2CL,GACzC5sB,WAAAA,CAAY3B,EAAYb,EAAc4pB,GACpCF,MAAA,cAAAjpB,OACgBI,EAAA,sBAAAJ,OAA0BT,GACxCmvB,GAAUK,cACV5F,KAKO8F,GAAb,cAAuCN,GACrC5sB,WAAAA,CAAY+sB,EAAoB3F,GAC9BF,MAAA,qCAAAjpB,OACuC8uB,EAAA,sCAAA9uB,OAA+CmpB,EAAA,KACpFuF,GAAUQ,cACV/F,yoMC7DoJ,SAAS7J,KAAe,IAAA,IAAA7c,EAAA5D,UAAAF,OAAAwB,EAAA3B,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAAxC,EAAAwC,GAAA9D,UAAA8D,GAAA,IAAT2c,EAAEqK,EAAEzqB,EAAEX,GAAE4B,EAAE,GAAG3B,MAAMC,QAAQkrB,GAAG,MAAM,IAAIxrB,GAAEO,GAAE8qB,qBAAgB,GAAQ,GAAG,iBAAiBG,EAAE,MAAM,IAAIxrB,GAAEO,GAAE6qB,uBAAkB,GAAQ,GAAG,iBAAiBI,EAAE,CAAC,MAAMtrB,EAAE,EAASA,EAAED,IAAUA,GAAG,QAAQynB,KAAKxnB,QAAG,EAAOA,EAA/C,CAAkDsrB,EAAEzqB,GAAG,GAAGb,EAAE,OAAOA,CAAC,CAAC,MAAM8I,MAAM7I,EAAE6wB,QAAQjE,EAAEkE,WAAWC,EAAEC,cAAcrE,EAAElK,OAAO4K,EAAE4D,SAAShD,GAAGhuB,EAAE,IAAI8J,EAAEgnB,EAAEG,mBAAmBH,EAAEG,iBAAiB,EAASpxB,EAAED,IAAU6G,IAAG,WAAA,OAAQ,IAAI3G,GAACQ,UAAAF,QAAA,OAAA6B,EAAA3B,UAAA,GAAAA,UAAAF,QAAA,OAAA6B,EAAA3B,UAAA,GAAAA,UAAAF,QAAA,OAAA6B,EAAA3B,UAAA,GAAAmI,EAAA,CAAiBooB,WAAWjxB,GAACU,UAAAF,QAAA,OAAA6B,EAAA3B,iBAAYT,EAAEmE,SAAhF,CAA0FjE,EAAE+wB,IAAI,IAAIhnB,EAAEgnB,EAAEG,iBAAiB7F,EAAEgC,EAAE,EAASvtB,EAAED,EAAEO,KAAG,MAAMsG,EAAE3G,GAAE8wB,QAAQM,KAAKnQ,EAAEjhB,GAAE8wB,QAAQO,KAAK/F,EAAC3iB,EAAAA,KAAK5I,aAAAA,EAAAA,EAAGwrB,UAAYzrB,eAAAA,EAAGyrB,UAAU1qB,EAAE,CAACuwB,KAAIzoB,EAAAA,KAAKhC,GAAK2kB,GAAG+F,KAAI1oB,EAAAA,KAAKsY,GAAKqK,GAAGE,OAAM7iB,EAAAA,EAAK5I,CAAAA,EAAAA,aAAC,EAADA,EAAGyrB,QAAU1rB,aAAAA,EAAAA,EAAG0rB,SAAS,OAAOnrB,GAAG,CAAC,OAAO,QAAQ6H,SAASlI,IAAI,MAAMD,EAAEc,EAAEb,GAAG,IAAI,MAAMA,EAAEF,KAAKkI,OAAOC,QAAQlI,GAAGA,EAAEC,GAAE2I,EAAA,CAAEuoB,SAAS7wB,GAAKP,EAAE,IAAIe,CAAC,EAArR,CAAuR+rB,EAAEC,EAAEqB,GAAG,CAAC6C,WAAUpoB,EAAAA,KAAKqoB,GAAC,CAAA,EAAA,CAACjF,kBAAkBA,CAAC/rB,EAAED,KAAC,IAAAuxB,EAAA,OAAGN,EAAEjF,kBAAkB/rB,EAAC2I,EAAAA,EAAA,CAAA,EAAK5I,GAAC,GAAA,CAACmxB,SAAoB,QAAZI,EAACvxB,aAAC,EAADA,EAAGmxB,gBAAQ,IAAAI,EAAAA,EAAEpD,IAAG,KAAI,CAAA,MAAMluB,GAAG,MAAM,IAAIF,GAAEO,GAAE8qB,qBAAgB,EAAO,CAAC,MAAM6D,EAAEhlB,EAAEunB,OAAO1wB,GAAG,OAAOd,GAAEivB,IAAI7uB,MAAMC,QAAQ4uB,IAAI,iBAAiBA,EAAEA,EAAE7hB,OAAO6hB,EAAE,CAAC/N,GAAEQ,KAAI,iECA7+B,SAASoL,KAAO,IAAA,IAAAzoB,EAAA5D,UAAAF,OAAFP,EAACI,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAADvE,EAACuE,GAAA9D,UAAA8D,GAAE,OAAOvE,EAAE6J,OAAO7F,SAAS6X,KAAK,IAAI,CAAC,SAAS/a,GAAEd,GAAG,OAAO8sB,GAAE9sB,EAAEyxB,UAAUzxB,EAAEkB,IAAI,CAAC,SAAS2rB,GAAE7sB,GAAGyE,QAAQO,MAAMhF,EAAE,CAAC,SAASkhB,GAAElhB,EAAEC,EAAEF,EAAEI,GAAG,MAAMG,EAAEwsB,GAAE3sB,EAAEJ,GAAG,IAAIE,EAAE,MAAM,IAAIsD,MAAMjD,GAAG,IAAIsG,EAAE3G,EAAE,OAAOF,EAAEwJ,MAAM,KAAKpB,SAASlI,IAAI,MAAMF,EAAE6G,EAAE3G,GAAG,GAAG,MAAMA,GAAG,MAAMF,EAAE,MAAM,IAAIwD,MAAMjD,EAAC,KAAAsB,OAAM5B,QAAM4G,EAAE7G,CAAC,IAAI6G,CAAC,CAAC,SAAS1G,GAAE0G,GAAG,MAAM2kB,EAAE,EAASvrB,EAAEC,EAAEF,KAAG,IAAI,IAAIE,EAAE,MAAM,IAAIsD,WAAM,GAAQ,MAAMpD,EAAEJ,EAAEmhB,GAAElhB,EAAEC,EAAEF,GAAGE,EAAE,IAAIE,EAAE,MAAM,IAAIoD,MAAMxD,GAAG,OAAOI,CAAE,CAAA,MAAMH,GAAG,OAAO,IAAIG,GAAEG,GAAE0qB,gBAAgBhrB,EAAEmE,QAAQ,CAAC,EAA5J,CAA8JyC,EAAE+b,OAAO/b,EAAEwc,SAASxc,EAAE6qB,WAAW,MAAO,CAAA1vB,IAA6H,IAAnHgH,MAAMnC,EAAEmqB,QAAQxF,EAAEyF,WAAWnE,EAAE6E,mBAAmBxxB,EAAEY,GAAE6hB,OAAOoJ,EAAE4F,gBAAgBV,EAAEQ,UAAUrY,EAAE/B,QAAQU,EAAEoZ,SAASlC,GAAEltB,EAAE,MAAMqtB,EAAE6B,aAAa9wB,GAAE,SAASotB,EAAEvtB,EAAEC,EAAEF,EAAEO,GAAG,MAAMsG,EAAE,IAAIzG,GAAEF,EAAEF,GAAG,OAAOgY,EAAEnR,GAAGtG,QAAAA,EAAGJ,EAAE,CAAC8E,MAAM4B,EAAE1F,IAAIlB,EAAEyxB,UAAUrY,GAAG,CAAC,SAASnP,EAAEnJ,EAAEmJ,EAAE2nB,EAAEC,GAAG,MAAMzD,EAAEyD,EAAE,IAAIC,EAAE,GAAG1C,EAAE,CAAC,IAAIhB,EAAE,OAAOrW,EAAEkZ,GAAG/wB,EAAE,CAAC8E,MAAMisB,EAAE/vB,IAAIJ,EAAE2wB,UAAUrY,IAAI0Y,EAAE1D,CAAC,KAAK,CAAC,MAAMpuB,EAAEixB,EAAE,IAAIa,EAAE5Q,GAAE6K,EAAE/rB,EAAEc,EAAEsY,EAAG,CAAA,MAAMpZ,GAAG,IAAIouB,EAAE,OAAOb,EAAEzsB,EAAER,GAAE0qB,gBAAgBhrB,EAAEmE,QAAQiqB,GAAG0D,EAAE1D,CAAC,CAAC,CAAC,IAAmB,OAAOruB,GAAd+sB,GAAE1T,EAAEtY,GAAcgxB,EAAE7nB,EAAE,CAASlK,IAAG,MAAMI,EAAE,CAAE,EAAC,OAAO8H,OAAOme,KAAKrmB,GAAGoI,SAAS7H,IAAI,IAAIsG,EAAE,EAAE,MAAM2kB,EAAExrB,EAAEO,GAAG,IAAIwsB,EAAEA,EAAE,mBAAmBvB,EAAExrB,IAAI,MAAMI,EAAEorB,EAAExrB,GAAG,OAAOE,GAAEE,GAAGH,GAAEG,EAAE,CAACe,IAAIZ,EAAEsG,MAAMzG,CAAC,EAAEorB,EAAEprB,EAAEG,GAAGwsB,CAAC,IAAI3sB,CAAC,EAA1K,CAA4K8J,GAAGA,EAAE,CAAClB,MAAMnC,EAAEoqB,WAAWnE,EAAEqE,cAAc3F,EAAEwF,QAAQa,EAAEjP,OAAOoJ,EAAEoF,SAASlC,GAAI,CAAA,MAAMjvB,GAAG,IAAIC,EAAEF,EAAE,OAAOC,aAAaG,IAAGF,EAAED,EAAE8qB,KAAK/qB,EAAEC,EAAE+qB,kBAAkB9qB,EAAEK,GAAEgrB,iBAAiBvrB,EAAEC,EAAEmE,SAASopB,EAAEzsB,EAAEb,EAAEF,EAAEquB,EAAE,CAAC,CAAC,SAASwD,EAAE5xB,EAAEC,EAAEF,EAAEI,GAAG,MAAMyG,EAAEqD,EAAEjK,EAAEC,EAAEF,EAAEI,GAAG,MAAM,iBAAiByG,EAAE2mB,EAAEvtB,EAAEM,GAAE8qB,qBAAgB,GAAQxkB,CAAC,CAAC,OAAOgrB,EAAEG,KAAK9nB,EAAE2nB,EAAEI,OAAO,CAAChyB,EAAEC,EAAEF,EAAEI,IAAI8J,EAAEjK,EAAEC,EAAEF,EAAEI,GAAGyxB,EAAElQ,IAAI1hB,IAAI,GAAGovB,EAAE,OAAOrX,EAAEkZ,GAAG/wB,EAAE,CAAC8E,MAAMisB,EAAE/vB,IAAIlB,EAAEyxB,UAAUrY,IAAI,MAAMnZ,EAAEgxB,EAAE,IAAI,OAAO/P,GAAE6K,EAAE9rB,EAAED,EAAEoZ,EAAG,CAAA,MAAMnZ,GAAG,OAAOstB,EAAEvtB,EAAEM,GAAE0qB,gBAAgB/qB,EAAEkE,QAAQ,GAAGytB,EAAE3uB,IAAIjD,IAAI,GAAGovB,EAAE,OAAM,EAAG,IAAI,OAAOlO,GAAE6K,EAAEkF,EAAEjxB,EAAEoZ,IAAG,CAAG,CAAA,MAAAwI,GAAM,OAAM,CAAE,GAAGgQ,CAAE,EAArpC,CAAqpChpB,EAAAA,KAAKhC,GAAC,CAAA,EAAA,CAAC+qB,gBAAgBpG,IAAG,CAA6D,MAAM0F,GAAE,KAAK7X,GAAE,MAAMrB,GAAE,EAAEqB,GAAE6V,GAAE,OAAOG,GAAE,OAAO7B,GAAE,IAAInU,GAAEnP,GAAE,CAACkmB,OAAO,EAAE8B,QAAQ,EAAE/B,OAAO,GAAGlvB,QAAQ,GAAGivB,KAAKgB,GAAE5vB,MAAM4vB,GAAEpB,IAAIzW,GAAE8Y,KAAK9Y,GAAE+Y,KAAKpa,GAAEqa,MAAMra,GAAE6X,MAAMX,GAAEoD,OAAOpD,GAAEqD,QAAQlD,GAAEmD,SAASnD,GAAEM,KAAKnC,GAAEiF,MAAMjF,IAAy7D,SAASsE,GAACnvB,GAA4D,IAA1DquB,QAAQ/wB,EAAE0xB,mBAAmBzxB,EAAEmjB,SAASrjB,EAAEsX,QAAQlX,GAAOuC,EAAE,OAAAkG,EAAAA,EAAA,CAAA,EAAH2O,EAAA7U,EAAA8U,KAAc,CAAA,EAAA,CAACuZ,QAAQ/wB,QAAG,EAAOojB,SAASrjB,QAAG,EAAOsX,QAAQlX,GAAG0sB,GAAE6E,mBAAmBzxB,GAAGa,IAAE,CCAr5H,MAAMysB,GAAEvtB,QAAE,GAAQ,SAASmZ,GAACpX,GAA4F,IAA1F0wB,SAASzyB,EAAE+wB,QAAQzwB,EAAEoxB,mBAAmBvxB,EAAEwiB,OAAOmK,EAAE1J,SAAStiB,EAAEqB,IAAIjC,EAAEmX,QAAQwV,EAAEsE,SAASpF,GAAEhqB,EAAE,MAAMoX,EAAEpZ,GAAEwtB,IAAG0B,EAAEhvB,IAAG,KAAIkZ,aAAAA,EAAAA,EAAGpQ,QAAOnC,MAAK,CAACkmB,EAAE3T,aAAC,EAADA,EAAGpQ,QAAQkB,EAAEhK,IAAG,KAAIkZ,aAAAA,EAAAA,EAAG6X,aAAYzF,GAAE0D,IAAI,CAACA,EAAE9V,aAAAA,EAAAA,EAAG6X,aAAajZ,EAAE9X,IAAG,IAAA2I,EAAAA,EAASsY,CAAAA,EAAAA,GAAE,CAACyB,OAAOmK,EAAEiE,aAAQ,IAASzwB,EAAE6Y,aAAAA,EAAAA,EAAG4X,QAAQzwB,EAAEoxB,mBAAmBvxB,IAAGgZ,aAAC,EAADA,EAAGuY,oBAAmBtO,cAAS,IAAStiB,EAAEqY,aAAAA,EAAAA,EAAGiK,SAAStiB,EAAEqB,IAAIjC,IAAGiZ,aAAC,EAADA,EAAGhX,KAAIkV,QAAQwV,IAAG1T,aAAC,EAADA,EAAG9B,SAAQ8Z,SAASpF,IAAG5S,aAAC,EAADA,EAAGgY,aAAU,CAAA,EAAA,CAACH,WAAW/mB,EAAElB,MAAMkmB,KAAK,CAACA,EAAE3uB,EAAE2J,EAAE9J,EAAE2sB,EAAEhsB,EAAEZ,EAAE2sB,EAAE1T,EAAE4S,IAAI,OAAOkF,GAAE1D,GAAEmF,SAAS,CAAC1wB,MAAM+V,EAAE0a,SAASzyB,GAAG,CAAC,SAASivB,KAAI,MAAMjvB,EAAED,GAAEwtB,IAAG,IAAIvtB,EAAE,MAAM,IAAIuD,WAAM,GAAQ,OAAOvD,CAAC,CAAC,IAAIiK,IAAE,EAAG,MAAM8N,GAAE,oBAAoBrY,OAAO,SAAS0vB,GAAEpvB,GAAG,MAAO,EAASA,EAAED,KAAK,MAAMgJ,MAAM5I,EAAE4wB,QAAQnqB,EAAEoqB,WAAWzF,EAAEmG,mBAAmBxQ,EAAEyB,OAAOoJ,EAAE1U,QAAQ4Z,EAAEE,SAAS5D,GAAG0B,KAAI9V,EAAEnZ,EAA4P,KAAvPovB,EDAm1B,SAAWpvB,EAAEC,GAAG,OAAOD,IAAIC,OAAE,EAAOD,EAAEghB,OAAO/gB,EAAE,KAAKM,OAAO,CCA54BL,CAAEH,EAAmP,KAA9O,OAAOwtB,GAAGtjB,KAAI8N,KAAI9N,IAAE,EAAGgnB,EAAE,IAAInE,GAAEhsB,GAAEoqB,0BAAqB,KAAUjrB,IAAG,IAAI4sB,GAAE,CAAC9jB,MAAM5I,EAAE6wB,WAAWzF,EAAEmG,mBAAmBxQ,EAAEkC,SAASjK,EAAEsY,UAAUrC,EAAE/X,QAAQ4Z,EAAEF,QAAQnqB,EAAE+b,OAAOoJ,EAAEoF,SAAS5D,KAAK,CAACptB,EAAEorB,EAAErK,EAAE/H,EAAEiW,EAAE6B,EAAErqB,EAAEmlB,EAAEwB,GAAG,EAAvU,CAAyU,CAAC,IAAI0B,KAAI7L,UAAUpjB,EAAC,KAAA4B,OAAM5B,GAAI,IAAQ,CAA2W,SAAS8rB,KAAI,MAAMiF,QAAQ/wB,EAAEgxB,WAAWjxB,EAAE4iB,OAAOriB,EAAE6B,IAAIhC,EAAEkX,QAAQzQ,EAAEuqB,SAAS5F,GAAG0D,KAAI,OAAOhvB,IAAG,IDA6Y,SAAWD,GAAG,MAAM2yB,OAAO1yB,EAAEsrB,KAAIqH,YAAY7yB,EAAE6G,GAAE3G,GAAG8wB,QAAQjE,EAAEnK,OAAO7hB,EAAEuW,QAAQ6J,EAAE2L,GAAEsE,SAASjxB,GAAGF,EAAE,SAAS+rB,EAAE/rB,GAAE,IAAA6yB,EAAC,OAAQA,QAADA,EAAA7yB,aAAC6yB,GAADA,EAAG1B,WAAWjxB,EAAEF,EAAC4I,EAAAA,KAAK5I,GAAC,GAAA,CAACmxB,SAASjxB,IAAGghB,EAAE,IAAI/gB,GAAEG,GAAE4qB,0BAAqB,KAAUlrB,CAAC,CAAC,SAASovB,EAAEpvB,EAAEC,EAAEF,EAAE6G,EAAE2kB,GAAG,IAAIuB,EAAE,IAAIA,EAAE,EAAS9sB,EAAEC,EAAEF,KAAG,IAAI6G,EAAE,GAAG,iBAAiB3G,GAAa,GAAG2G,EAAE5G,aAAC,EAADA,EAAPC,IAAe2G,EAAE,CAAC,MAAM5G,EAAE,IAAIG,GAAEG,GAAE2qB,oBAAe,GAAQ,MAAM/J,EAAElhB,GAAGA,CAAC,OAAO4G,EAAE3G,EAAE,OAAOF,IAAI6G,EAACgC,EAAAA,EAAKhC,CAAAA,EAAAA,GAAK7G,IAAI6G,CAAC,EAAhK,CAAkK7G,EAAEC,EAAEC,EAAG,CAAA,MAAA6yB,GAAM,OAAOvH,GAAG,CAAC,IAAI,OAAO3kB,EAAEkmB,EAAG,CAAA,MAAM9sB,GAAG,OAAOkhB,EAAE,IAAI/gB,GAAEG,GAAEgrB,iBAAiBtrB,EAAEmE,UAAUonB,GAAG,CAAC,CAAC,SAASqG,EAAE5xB,EAAEC,EAAEE,GAAG,OAAOivB,EAAEnvB,EAAEE,EAAE2sB,eAAAA,EAAGtB,UAAUvrB,IAAIA,EAAE8rB,EAAE9rB,GAAGF,EAAEisB,kBAAkBlrB,EAAEb,GAAGuxB,OAAOxxB,MAAM,IAAIoN,OAAOpN,IAAI,CAAC,SAAS6xB,IAAI,OAAO7xB,EAAEmC,IAAInC,EAAEmC,KAAK+e,EAAE,IAAI/gB,GAAEG,GAAE4qB,0BAAqB,IAAS,IAAIhpB,KAAK,CAAC,MAAM,CAACspB,SAASoG,EAAEnG,OAAO,CAASzrB,EAAEC,EAAEE,IAAUivB,EAAEnvB,EAAEE,EAAE2sB,eAAAA,EAAGrB,QAAQxrB,GAAGF,EAAEosB,gBAAgBrrB,EAAEb,GAAGuxB,OAAOxxB,KAAK,IAAIoN,OAAOpN,KAAM0rB,aAAa,CAAS1rB,EAAEC,KAAG,IAAI,IAAIE,EAAEG,EAAE,MAAMsG,EAAE,CAAE,EAAC3G,aAAaiC,MAAM,iBAAiBjC,EAAEE,EAAE,IAAI+B,KAAKjC,GAAGA,IAAIE,EAAE,MAAMF,EAAEkC,IAAI,IAAID,KAAKjC,EAAEkC,KAAK0vB,IAAIvxB,EAAEL,EAAE8yB,KAAKnsB,EAAE6U,MAAMxb,EAAEwb,MAAM7U,EAAEosB,gBAAgB/yB,EAAE+yB,iBAAiB7yB,IAAIA,EAAE0xB,KAAK,MAAMtG,GAAG,IAAIrpB,KAAKlC,GAAGizB,UAAU9yB,EAAE8yB,WAAW,IAAI3yB,IAAIA,EAAE,CAASN,IAAG,MAAMC,EAAEoO,KAAK6kB,IAAIlzB,GAAG,OAAOC,EAAE,GAAG,SAASA,EAAEgxB,GAAE,SAAShxB,EAAEmZ,GAAE,OAAOnZ,EAAE8X,GAAE,MAAM9X,EAAEgvB,GAAE,OAAOhvB,EAAEstB,GAAE,QAAQ,MAAM,EAApH,CAAsHhC,IAAI3kB,EAAEusB,QAAQ,WAAW7yB,EAAE,OAAO,SAAS,MAAMwsB,EAAE,EAAS9sB,EAAEC,IAAUoO,KAAKC,MAAMtO,EAAEiK,GAAEhK,IAApC,CAAyCsrB,EAAEjrB,GAAG,OAAOP,EAAEwsB,sBAAsBzrB,EAAE8F,GAAG4qB,OAAO1E,EAAExsB,EAAG,CAAA,MAAML,GAAG,OAAOihB,EAAE,IAAI/gB,GAAEG,GAAEgrB,iBAAiBrrB,EAAEkE,UAAUiJ,OAAOpN,EAAE,CAAE,EAAC4rB,KAAK,CAAS5rB,EAAEC,EAAEE,KAAG,MAAMG,EAAE,GAAGsG,EAAE,IAAIkF,IAAI,IAAIyf,EAAE,EAAE,IAAI,MAAMtrB,KAAKD,EAAE,CAAC,IAAIA,EAAE,iBAAiBC,GAAGD,EAAEoN,OAAOme,GAAG3kB,EAAE9E,IAAI9B,EAAEC,IAAID,EAAEoN,OAAOnN,GAAGK,EAAE0K,KAAKhL,GAAGurB,GAAG,CAAC,OAAO6D,EAAEnvB,EAAEE,EAAE2sB,eAAAA,EAAGlB,MAAM5rB,IAAI,MAAMC,EAAEF,EAAE0sB,cAAc3rB,EAAEd,GAAGozB,cAAc9yB,GAAGiG,KAAKvG,GAAG,YAAYA,EAAEmB,KAAKnB,EAAEgC,MAAM4E,EAAEnE,IAAIzC,EAAEgC,QAAQhC,EAAEgC,QAAQ,OAAO4E,EAAEysB,KAAK,EAAEpzB,EAAEA,EAAE4b,KAAK,GAAG,IAAI,IAAIzO,OAAOpN,IAAK,EAACszB,cAAc,CAAStzB,EAAEC,EAAEE,EAAEG,IAAU8uB,EAAEjvB,EAAEG,EAAEwsB,aAAAA,EAAAA,EAAGtB,UAAUrrB,IAAIA,EAAE4rB,EAAE5rB,GAAGJ,EAAEisB,kBAAkBlrB,EAAEX,GAAGozB,YAAYvzB,EAAEC,MAAM,IAAI,CAAC2xB,EAAE5xB,GAAG4xB,EAAE3xB,IAAI4b,KAAK,SAAU2X,YAAY,CAASxzB,EAAEC,EAAEE,IAAUivB,EAAEnvB,EAAEE,EAAE2sB,aAAAA,EAAAA,EAAG0G,aAAavzB,GAAGF,EAAE4sB,gBAAgB7rB,EAAEb,GAAGwzB,GAAGzzB,KAAK,IAAIA,IAAK,CCA9zE+rB,CAAE,CAACgF,QAAQ/wB,EAAE2iB,OAAOriB,EAAE6B,IAAIhC,EAAEkX,QAAQzQ,EAAEuqB,SAAS5F,EAAEqH,YAAY7yB,KAAK,CAACC,EAAED,EAAEI,EAAEG,EAAEsG,EAAE2kB,GAAG,CCepxD,MAAMmI,GAAkB,CAC9BC,SAAU,GACVC,SAAU,EACVC,cAAe,EACfpc,QAAS,GAGGqc,GAAqBC,GACjC,MCbKC,GAAgBA,CACrBC,EACAC,KAEA,MAAO7hB,EAAOqb,GAAYyG,GAAYF,GAYtC,MAAO,CAAEjyB,MAAOqQ,EAAOvQ,IAVEiF,IACxB,IAAKmtB,EACJ,OAAOxG,EAAS3mB,GAEjB2mB,GAAS0G,IACR,MAAMlQ,E7BqKO,SACfnd,EACAstB,GAEA,MAAsB,mBAAXttB,EAGFA,EAA+BstB,GAEjCttB,CACR,C6B/KyButB,CAAsBvtB,EAAQqtB,GAEpD,OADAF,EAAoBhQ,GACbA,CAAa,GACnB,EAEmD,ECPjDqQ,GAAY,WAIyB,IAJxBC,YAClBA,GAAc,EAAKC,UACnBA,EACA5d,QAAS6d,GACUj0B,UAAAF,OAAAE,QAAA2B,IAAA3B,UAAA2B,GAAA3B,UAAA,GAAA,CAAE,EACrB,MAAM4R,EAAQ2hB,GAAuBQ,GAE/B3d,EAAUA,KACfxE,EAAMvQ,KAAI,GACV4yB,SAAAA,GAAe,EAWhB,MAAO,CACNC,SATD,WACC,MAAO,CACN3f,OAAQ3C,EAAMrQ,MACdyyB,UAAWA,IAAMA,aAAAA,EAAAA,EAAYpiB,GAC7BwE,UAEF,EAICxE,QAEF,EChCauiB,GAAgBb,GAC5B,ICTKc,GAAmBA,KACxB,MAAMtK,EAAUuK,GAAWF,IAC3B,IAAKrK,EACJ,MAAM,IAAIhnB,MACT,gEAGF,OAAOgnB,CAAO,ECJf,IAAewK,GAAA,CACdC,KAAM5sB,MAAOua,EAAgBC,KAC5B,MAAMqS,EAAyB,IAAIC,IAAG,IAAAtzB,OAAK+gB,GAAU/I,IAEjDgJ,IACHqS,EAAuBvY,UAAQ,IAAA9a,OAAQghB,EAAoB,yBAGtDtW,KACNlD,KAEA1J,OAAOiI,SAASkhB,KAAOoM,EAAuB/uB,UAAU,EAEzDivB,SAAUA,CAACxS,EAAgBC,KAC1B,MAAMwS,EAAkB,IAAIF,QAAGtzB,OAC1B+gB,EAAM,KAAA/gB,OAAIghB,EAAI,sBAClBhJ,IAGK8C,EAAWhd,OAAOiI,SAAS+U,SAE7BA,GAAyB,MAAbA,GACf0Y,EAAgBrtB,aAAa8V,OAAO,OAAQnB,GAG7Chd,OAAOiI,SAASkhB,KAAOuM,EAAgBlvB,UAAU,EAElDmvB,KAAMjtB,iBACL,KADuC3H,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,KAAAA,UAAA,GAEtC,UACO6L,IACN,CAAC,MAAOW,GACRxH,GAAOT,MAAM,+BAAgCiI,EAC9C,CAED7D,KACA1J,OAAOiI,SAAS2tB,QACjB,GCnCK,SAAUC,GACf1S,GAEA,clCmFA,MAAMhC,EAAOnhB,OAAOiI,SAAS+U,SAC7B,OAAOmE,EAAK/V,SAAS,UAAY+V,EAAK/V,SAAS,YAChD,CkCrFK0qB,GACH,MAAO,iBAER,IAAK3S,EAAa,CACjB,MAAMzhB,EAAaS,GAAQY,IAAYnB,IACvC,GAAIF,GAAcc,KAAKC,MAAQf,EAC9B,MAAO,kBAET,CACA,OAAO,IACR,CCCO,MAAMq0B,GAAgB1B,GAC5B,ICpBK2B,GAAmBA,KACxB,MAAMnL,EAAUuK,GAAWW,IAC3B,IAAKlL,EACJ,MAAM,IAAIhnB,MACT,gEAGF,OAAOgnB,CAAO,yBCAToL,GAAQ5zB,IAA6C,IAA5C6zB,IAAEA,EAAGvN,UAAEA,GAAiCtmB,EAAnB8rB,EAAKtW,EAAAxV,EAAAyV,IACxC,OACCqe,YACCD,IAAKA,G9BIP,6F8BHEvN,UAAW3iB,GAAG,WAAY2iB,IACtBwF,GACH,EChBEiI,GAAoB/zB,IAQrB,IARsB2R,QAC1BA,GAAU,EAAK6b,SACfA,EAAQkD,SACRA,GAKA1wB,EACA,OACM,IADE2R,EAEC6b,EAEAkD,CACT,2BCCKsD,GAAiB/zB,GAAyB,kBAAVA,EAAmB,GAAAJ,OAAMI,GAAoB,IAAVA,EAAc,IAAMA,EAChFg0B,GAAKx1B,EACLy1B,GAAMA,CAACC,EAAM3kB,IAAUsc,IAC5B,IAAIsI,EACJ,GAAyE,OAApE5kB,aAAuC,EAASA,EAAO6kB,UAAmB,OAAOJ,GAAGE,EAAMrI,aAAqC,EAASA,EAAMwI,MAAOxI,aAAqC,EAASA,EAAMxF,WAC9M,MAAM+N,SAAEA,EAAQE,gBAAEA,GAAoB/kB,EAChCglB,EAAuBtuB,OAAOme,KAAKgQ,GAAU7vB,KAAKiwB,IACpD,MAAMC,EAAc5I,aAAqC,EAASA,EAAM2I,GAClEE,EAAqBJ,aAAyD,EAASA,EAAgBE,GAC7G,GAAoB,OAAhBC,EAAsB,OAAO,KACjC,MAAME,EAAaZ,GAAcU,IAAgBV,GAAcW,GAC/D,OAAON,EAASI,GAASG,EAAW,IAElCC,EAAwB/I,GAAS5lB,OAAOC,QAAQ2lB,GAAOjjB,QAAO,CAACC,EAAKgsB,KACtE,IAAK31B,EAAKc,GAAS60B,EACnB,YAAcz0B,IAAVJ,IAGJ6I,EAAI3J,GAAOc,GAFA6I,CAGD,GACX,IACGisB,EAA+BvlB,SAAyG,QAAxD4kB,EAA2B5kB,EAAOwlB,wBAA2D,IAA7BZ,OAA1E,EAAyHA,EAAyBvrB,QAAO,CAACC,EAAKgsB,KACvO,IAAMR,MAAOW,EAAS3O,UAAW4O,GAA2CJ,EAA3BK,EAAsB3f,EAAKsf,EAAKrf,IACjF,OAAOvP,OAAOC,QAAQgvB,GAAwBtJ,OAAOiJ,IACjD,IAAK31B,EAAKc,GAAS60B,EACnB,OAAOz2B,MAAMC,QAAQ2B,GAASA,EAAM8I,SAASlC,EAAAA,KACtC0tB,GACAM,GACL11B,IAAQ0H,EAAAA,EACH0tB,CAAAA,EAAAA,GACAM,GACJ11B,KAASc,CAAK,IAChB,IACE6I,EACHmsB,EACAC,GACApsB,CAAG,GACR,IACH,OAAOmrB,GAAGE,EAAMK,EAAsBO,EAA8BjJ,aAAqC,EAASA,EAAMwI,MAAOxI,aAAqC,EAASA,EAAMxF,UAAU,wCCjD/L8O,GAAiBlB,GACtB,4DACA,CACCG,SAAU,CACTI,QAAS,CACRY,MAAO,uCACPC,KAAM,yCAGRf,gBAAiB,CAChBE,QAAS,WAoBZ,IAAec,GAAAA,IARAv1B,IAA4D,IAA3D0wB,SAAEA,EAAQpK,UAAEA,EAASmO,QAAEA,GAAgCz0B,EAApB8rB,EAAKtW,EAAAxV,EAAAyV,IACvD,OACCqe,cAAKxN,UAAW3iB,GAAGyxB,GAAe,CAAEX,YAAYnO,IAAgBwF,GAAK,GAAA,CACnE4E,SAAAA,IACI,2BC5BF8E,GAAWx1B,IAG4C,IAH3CsmB,UACjBA,GAEwDtmB,EADrD8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCqe,GACC,MAAAjtB,EAAAA,EAAA,CAAAyf,UAAW3iB,GACV,8DACA2iB,IAEGwF,GAAK,GAAA,CACT2J,KAAK,SAAQ/E,SAEboD,GAAM,OAAA,CAAAxN,UAAU,+BAA8BoK,SAAA,iBACzC,ECdFgF,GAAsBA,IAE1BC,UAAKrP,UAAU,2CACdoK,SAAA,CAAAoD,GAAA,MAAA,CAAKxN,UAAU,0EAAyEoK,SACvFoD,GAAC0B,GAAQ,CAAClP,UAAU,+BAErBwN,GAAK,MAAA,CAAAxN,UAAU,mFACdwN,GAAC0B,IAASlP,UAAU,+BAErBwN,GAAA,MAAA,CAAKxN,UAAU,0EACdoK,SAAAoD,GAAC0B,GAAQ,CAAClP,UAAU,+GCSlBsP,GAAc51B,IAQG,IARFgN,OACpBA,EAAMynB,QACNA,EAAOoB,kBACPA,EAAoB,EAACvP,UACrBA,EAAS3U,QACTA,GAAU,EAAK+e,SACfA,GAEkB1wB,EADf8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMqgB,EAAaD,QAAAA,EAAqB7oB,EAAOxO,OACzCu3B,EAAcD,EAAa9oB,EAAOxO,OAClCw3B,EAAaD,EAAcD,EAAa,EAAIA,EAElD,OACChC,GAACC,GAAkB,CAAAvG,SAAUsG,GAAC4B,GAAsB,IAAE/jB,QAASA,EAC7D+e,SAAA1jB,EAAOxO,OAAS,GAChBm3B,GAAA,MAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GAAG,kCAAmC2iB,IAC7CwF,GAAK,GAAA,CAAA4E,SAAA,CAER1jB,EAAOiS,MAAM,EAAG+W,GAAYxxB,KAAI,CAAA7D,EAAekV,KAAS,IAAvBge,IAAEA,EAAGoC,IAAEA,GAAKt1B,EAC7C,OACCmzB,GAACoC,GAAM,CACN5P,UAAU,WACV5M,MAAO,CACNyc,OAAQtgB,EAAQ,GAGjB4e,QAASA,EAAO/D,SAEhBoD,GAACF,GAAK,CACLtN,UAAU,gDACVuN,IAAKA,EACLoC,IAAKA,KANDpgB,EAQG,IAGVkgB,GACAjC,GAACoC,GAAM,CACNzB,QAASA,EACT/a,MAAO,CACNyc,OAAQH,EAAa,GAEtB1P,UAAU,mCAEVoK,SAAAiF,GAAA,OAAA,CAAMrP,UAAU,qCACboK,SAAA,CAAA,IAAA1jB,EAAOxO,OAASw3B,OAIpBtF,EAAWA,EAASsF,EAAa,GAAK,UAGtB,iBCpEhBI,GAAoBp2B,IAGa,IAAAq2B,EAAA,IAHZ1kB,QAC1BA,GAEkC3R,EAD/B8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAM3E,WAAEA,GAAe6iB,KAEjB2C,EAAkBC,IAAQ,KAAK,IAAAC,EAAAC,EAGpC,eAFsBD,EACA,QADAC,EACrB3lB,EAAW7Q,MAAMC,YAAjBu2B,IAAqBA,OAArBA,EAAAA,EAAuBplB,UAAUuC,0BAAkB,IAAA4iB,EAAAA,EAAI,IAChC3tB,QAAsB,CAACC,EAAKX,KACnD,IAAK,IAAIpJ,EAAI,EAAGA,EAAIoJ,EAAQkB,SAAUtK,IACrC+J,EAAIG,KAAK,CACR4qB,IAAK1rB,EAAQ0E,MACbopB,IAAK9tB,EAAQwF,QAGf,OAAO7E,CAAG,GACR,GAAG,GACJ,CAAsButB,QAAtBA,EAACvlB,EAAW7Q,MAAMC,gBAAIm2B,SAArBA,EAAuBhlB,UAAUuC,qBAErC,OACCkgB,GAAC8B,GAAW/uB,EAAA,CACX8K,QAASA,QAAAA,EAAWb,EAAW7Q,MAAM0R,QACrC8iB,QAAQ,QACRznB,OAAQspB,GACJxK,GACH,EC5BS4K,GAAgB1E,GAAqC,uBCL5D2E,GAAiB32B,IAAA,IAACsmB,UACvBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERqe,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,EACRC,QAAQ,WACRC,KAAK,eACLC,MAAM,6BACN1Q,UAASzmB,gCAAAA,OAAkCymB,GAAa,KACpDwF,GAAK,GAAA,CAAA4E,SAEToD,GAAM,OAAA,CAAAtI,EAAE,qSACH,mBCdDyL,GAAQj3B,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACnCkgB,cACCiB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,eACLC,MAAM,6BACN1Q,UAASzmB,sBAAAA,OAAwBymB,GAAa,KAC1CwF,GAAK,GAAA,CAET4E,SAAA,CAAAoD,GAAA,OAAA,CAAMtI,EAAE,mIACRsI,GAAA,OAAA,CAAMtI,EAAE,mIACH,mBCZD0L,GAAUl3B,IAA2D,IAA1DsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IACrC,OACCqe,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAM,QACNC,OAAO,QACPC,QAAQ,YACRE,MAAM,6BACND,KAAK,eACLzQ,UAASzmB,4BAAAA,OAA8BymB,GAAa,KAChDwF,GAAK,GAAA,CAAA4E,SAETiF,GACC,IAAA,CAAAjF,SAAA,CAAAoD,GAAA,OAAA,CAAMqD,QAAS,IAAM3L,EAAE,kBACvBsI,GAAA,OAAA,CAAMqD,QAAS,IAAM3L,EAAE,4CACvBsI,GAAA,OAAA,CAAMqD,QAAS,IAAM3L,EAAE,4CACvBsI,GAAM,OAAA,CAAAqD,QAAS,IAAM3L,EAAE,oBACvBsI,GAAM,OAAA,CAAAqD,QAAS,IAAM3L,EAAE,6CACvBsI,GAAM,OAAA,CAAAqD,QAAS,IAAM3L,EAAE,6CACvBsI,WAAMtI,EAAE,oBACRsI,GAAA,mBAAA,CACCsD,cAAc,YACdh4B,KAAK,SACLi4B,SAAS,WACTC,IAAI,QACJje,OAAO,+HACPke,YAAY,oBAGT,mFCtBFC,GAAiBtD,GACtB,6PACA,CACCG,SAAU,CACTI,QAAS,CACRgD,QACC,yJACDC,UACC,qIACDC,QACC,oJACDC,MACC,iHA8DL,IAAerC,GAAAA,IA/CAv1B,IASG,IATF0wB,SACfA,EAAQpK,UACRA,EACAuR,KAAMC,EAAIrD,QACVA,EAAU,UAAS9iB,QACnBA,GAAU,EAAKomB,SACfA,GAAW,EAAKC,aAChBA,EAAe,SAEFh4B,EADV8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCkgB,GACY,SAAA9uB,EAAAA,EAAA,CAAA,YAAA8K,EACXomB,SAAUA,GAAYpmB,EACtBvS,KAAK,SACLknB,UAAW3iB,GACV6zB,GAAe,CAAE/C,YACjB,YAAW,cAAA50B,OACG40B,GACdnO,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAER/e,GAAWmiB,GAACoD,IAAQ5Q,UAAU,4BAC/BwN,GAAA,OAAA,CACCxN,UAAU,kBACV5M,MAAO,CACNue,WAAYtmB,EAAU,SAAW,WACjC+e,SAEAA,MAECoH,GACFhE,GAACgE,EACA,CAAApe,MAAO,CACNue,WAAYtmB,EAAU,SAAW,WAElC2U,UAAW3iB,GACV,+DACiB,SAAjBq0B,EAA0B,WAAa,gBAIlC,gEC5BX,IAAeE,GAAA,CACdC,OAzCcn4B,IAAkD,IAAjDsmB,UAAEA,EAAS8R,QAAEA,GAAgCp4B,EAApB8rB,EAAKtW,EAAAxV,EAAAyV,IAC7C,MAAM4iB,EAAMtF,GAAW2D,IAEvB,OACC5C,GAACwE,GAAMzxB,EAAA,CACNyf,UAAW3iB,GACV,sEACA2iB,GAEDuR,KAAMlB,GACNyB,QAASjmB,IAAQ,IAAAomB,EAChBH,SAAAA,EAAUjmB,GACLA,EAAMqmB,kBAAkBH,iBAAGE,EAAHF,EAAK3F,iBAAS,IAAA6F,GAAdA,EAAA9hB,KAAA4hB,EAAkB,GAE5CvM,GACH,EA2BH2M,OAvBc93B,IAAkD,IAAjD2lB,UAAEA,EAAS8R,QAAEA,GAAgCz3B,EAApBmrB,EAAKtW,EAAA7U,EAAAud,IAC7C,MAAMma,EAAMtF,GAAW2D,IAEvB,OACC5C,GAACwE,GAAMzxB,EAAA,CACNyf,UAAW3iB,GACV,sEACA2iB,GAEDmO,QAAQ,UACRoD,KAAMZ,GACNe,aAAa,OACbI,QAASjmB,IAAQ,IAAAumB,EAChBN,SAAAA,EAAUjmB,GACLA,EAAMqmB,kBAAkBH,iBAAGK,EAAHL,EAAKvjB,eAAO,IAAA4jB,GAAZA,EAAAjiB,KAAA4hB,EAAgB,GAE1CvM,GACH,6DCzCE6M,GAAezE,GACpB,gFACA,CACCG,SAAU,CACTI,QAAS,CACRgD,QAAS,sDACTmB,MAAO,qCACP,gBACC,0FAEFtH,KAAM,CACLuH,GAAI,iBACJC,GAAI,mBAGNvE,gBAAiB,CAChBE,QAAS,UACTnD,KAAM,QAuBHwG,GAAO93B,IAOG,IANf63B,KAAMkB,EAAatE,QACnBA,EAAOnD,KACPA,EAAIhL,UACJA,EAASoK,SACTA,GAEW1wB,EADR8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCkgB,GAAA,MAAA9uB,EAAAA,EAAA,CAAA,eAAA,EAECyf,UAAW3iB,GAAGg1B,GAAa,CAAElE,UAASnD,SAAShL,IAC3CwF,GAAK,GAAA,CAAA4E,SAAA,CAERqI,GAAiBjF,GAACiF,EAAa,CAACzS,UAAU,cAC1CoK,KACI,4CChDFsI,GAAeh5B,IAKG,IALFsmB,UACrBA,EAAS2S,WACTA,EAAUC,UACVA,GAAY,GAEOl5B,EADhB8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,UAE1B,OACCxD,GACa,SAAA9uB,EAAAA,EAAA,CAAA,aAACqyB,OAAyB74B,EAAbnC,EAAE,SAC3BooB,UAAW3iB,GAAG,gCAAiC2iB,GAC/ClnB,KAAK,UACD0sB,GAAK,GAAA,CAER4E,SAAA,CAAAwI,GAAapF,GAAA,OAAAjtB,EAAAA,EAAA,CAAA,EAAUoyB,GAAU,GAAA,CAAAvI,SAAGxyB,EAAE,YACvC41B,GAACgE,GAAI,CACJxR,UAAU,6CACVuR,KAAMZ,QAEC,6BClBLmC,GAAgBp5B,IAIY,IAJX+E,GACtBA,EAAEs0B,SACFA,EAAW1H,GAAgBjc,QAAOjD,KAClCA,GACoBzS,EACpB,MAAMs5B,QAAEA,EAAOC,QAAEA,EAAOC,SAAEA,GCfJC,MACtB,MAAMjR,EAAUuK,GAAWhB,IAC3B,IAAKvJ,EACJ,MAAM,IAAIhnB,MAAM,4DAEjB,OAAOgnB,CAAO,EDUyBiR,GAWvC,OATAC,IAAU,KACT,GAAIjnB,EAEH,OADA6mB,EAAQ,CAAEv0B,KAAIs0B,aACP,IAAME,EAAQx0B,GAErBw0B,EAAQx0B,EACT,GACE,CAAC0N,EAAM1N,EAAIs0B,EAAUC,EAASC,IAE1B9mB,GAAQ+mB,IAAaz0B,CAAE,EE3BzB40B,GAAeA,KACpB,MAAOC,EAASC,GAAczH,IAAS,GAMvC,OAJAsH,IAAU,KACTG,GAAW,EAAK,GACd,IAEID,CAAO,ECPFE,GAAc9H,GAC1B,wDCKK+H,GAAiB/5B,IAMG,IANFo4B,QACvBA,EAAO9R,UACPA,EAASoK,SACTA,EAAQsJ,UACRA,GAAY,GAESh6B,EADlB8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMwkB,EAAaC,GAAoB,MAQvC,OACCpG,GAAA,QAAAjtB,EAAAA,EAAA,CACCuxB,QARF,SAAqBjmB,GAChBimB,GAAWjmB,EAAMgoB,SAAWF,EAAW1V,SAC1C6T,GAEF,EAKEgC,IAAKH,EACL3T,UAAW3iB,GACV,wFACAq2B,GAAa,2CACb1T,IAEGwF,GAAK,GAAA,CAER4E,SAAAA,IACM,oLC3BJ2J,GAAS,CACdC,MCqBmBt6B,IAaG,IAbFiT,OACpBA,EAAMyf,UACNA,EAAS5d,QACTA,EAAOylB,OACPA,GAAS,EAAIC,aACbA,GAAe,EAAIC,uBACnBA,GAAyB,EAAIC,gBAC7BA,GAAkB,EAAIC,QACtBA,EAAOtB,SACPA,EAAQuB,MACRA,GAAQ,EAAItU,UACZA,GAEkBtmB,EADf8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMolB,ECxCSC,MACf,MAAMtS,EAAUuK,GAAW+G,IAC3B,IAAKtR,EACJ,MAAM,IAAIhnB,MAAM,8CAEjB,MAAO,IACcgnB,EAAQjE,SAEpBjQ,SAASuC,eAAeoB,GAGhC,ED6Be6iB,GACVC,EAAYpB,KAEZqB,EAAcd,KACfc,EAAYzW,UAChByW,EAAYzW,QAAO1kB,UAAAA,OAAayM,KAAK0S,SAAS7a,SAAS,IAAI8a,MAAM,EAAG,MAErE,MAAMla,EAAK41B,QAAAA,EAAWK,EAAYzW,QAE5B0W,EAAW7B,GAAc,CAAEr0B,KAAIs0B,WAAU5mB,KAAMQ,GAAU2nB,IAIzDZ,EAAY/mB,KAAY2nB,GAASK,GAyBvC,GAvBAvB,IAAU,KACT,MAAMwB,EAAgB/oB,IACH,WAAdA,EAAMhT,MACTgT,EAAMgpB,iBACNrmB,IACD,EAWD,OARI4lB,IACCV,EACH1lB,SAASoE,iBAAiB,UAAWwiB,GAErC5mB,SAASpC,oBAAoB,UAAWgpB,IAInC,KACFR,GACHpmB,SAASpC,oBAAoB,UAAWgpB,EACzC,CACA,GACC,CAACR,EAAiB5lB,EAASklB,KAEzBA,IAAce,EAClB,OAAO,KAGR,MAAMx1B,EAAOs1B,IAEb,IAAKt1B,EAEJ,OADA7B,GAAOT,MAAM,0BACN,KAGR,MAAMm4B,EAA+B,CACpCnoB,SACAyf,YACA5d,WAGD,yEAAOumB,CACNvH,GAACiG,GAAc,CACdzT,UAAWiU,EAAS,uBAAoBl6B,EACxC25B,UAAWQ,EACXpC,QAASqC,EAAyB3lB,OAAUzU,EAASqwB,SAErDoD,GAAC4C,GAAc/F,SAAS,CAAA1wB,MAAOm7B,EAC9B1K,SAAAoD,GAAA,MAAAjtB,EAAA,CACCyf,UAAW3iB,GACV,qGACA2iB,IAEGwF,QAIPvmB,EACA,ED1GD+1B,MGRmBt7B,IAG2B,IAH1BsmB,UACpBA,GAE0CtmB,EADvC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCqe,GAAA,KAAAjtB,EAAA,CACCyf,UAAW3iB,GACV,sDACA2iB,IAEGwF,GACH,EHFHyP,SITsBv7B,IAG0B,IAHzBsmB,UACvBA,GAE4CtmB,EADzC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCqe,GAAA,IAAAjtB,EAAA,CACCyf,UAAW3iB,GACV,8EACA2iB,IAEGwF,GACH,EJDHqM,OAAQD,GAAaC,OACrBM,OAAQP,GAAaO,OACrB+C,KKPkBx7B,IAAsD,IAArDsmB,UAAEA,EAAS8R,QAAEA,GAAoCp4B,EAAxB8rB,EAAKtW,EAAAxV,EAAAyV,IACjD,MAAM4iB,EAAMtF,GAAW2D,IAEvB,OACC5C,GAACkF,GAAYnyB,EAAA,CACZuxB,QAASn6B,IACRm6B,SAAAA,EAAUn6B,GACLA,EAAEu6B,kBAAkBH,SAAAA,EAAKvjB,SAAS,EAExCwR,UAAW3iB,GAAG,yBAA0B2iB,IACpCwF,GACH,GCDE2P,GAAuBA,KAC5B,MACCjsB,QAAQsR,YAAEA,IACPgS,MAGG4I,GAAiBtJ,IAA+B,IACtDoB,GAAuB1S,KAGxB,OAAK4a,EAIE5H,GAAC6H,GAAc,CAACD,cAAeA,IAH9B,IAG+C,EAGxD,SAASC,GAAc37B,GAAoD,IAAnD07B,cAAEA,GAAiD17B,EAC1E,MAAM9B,EAAIi7B,GAAe,0BAAAt5B,OAA2B67B,KAC9CnsB,gBAAEA,GAAoBujB,KAK5B,SAAS8I,IACc,qBAAlBF,GACH57B,GAAQsB,OAAO7B,GAEjB,CAEA,MAAMs8B,EAAQrJ,GAAU,CACvBC,aAAa,EACbC,UAAWpiB,IACVA,EAAMvQ,KAAI,GACV67B,IACsB,mBAAlBF,GACHnsB,EAAgBxP,IAAIzC,EAAgBqV,KACrC,EAEDmC,QAASA,KACR8mB,IACA5I,GAAWM,MAAM,IAInB,OACCqC,GAAC0E,GAAOC,MAAKzzB,EAAAA,EAAA,CACZyf,UAAU,gDACNuV,EAAMjJ,YAAU,GAAA,CACpByG,SAAU1H,GAAgBE,SAE1BnB,SAAA,CAAAoD,GAACsC,GAAoB,CAAA,GACrBtC,GAACuG,GAAOiB,MAAK,CAAA5K,SAAExyB,EAAE,WACjB41B,GAACuG,GAAOkB,SAAQ,CAAA7K,SAAExyB,EAAE,aACpB41B,GAACuG,GAAOlC,OAAQ,CAAAzH,SAAAxyB,EAAE,aAClB41B,GAACuG,GAAO5B,OAAQ,CAAA/H,SAAAxyB,EAAE,eAGrB,CC5BO,MAAM49B,GAAkB9J,GAAuC,MC5ChE+J,GAAcA,KACnB,MAAMvT,EAAUuK,GAAW+I,IAC3B,IAAKtT,EACJ,MAAM,IAAIhnB,MAAM,sDAEjB,OAAOgnB,CAAO,ECNf,IAAYwT,GAKAC,GALZ,CAAYD,IACXA,EAAA,MAAA,OACA,EAFD,CAAYA,KAAAA,GAEX,CAAA,IAGD,CAAYC,IACXA,EAAA,QAAA,eACA,EAFD,CAAYA,KAAAA,GAEX,CAAA,IAIM,MAAMC,GAAY,CACxB,CAACF,GAAWG,OAAQ,CACnBp3B,GAAIi3B,GAAWG,MACfC,MAAO,CAAC,CAAEr3B,GAAIk3B,GAAkBI,UAChC3nB,QAAS,CAAE4nB,WAAW,EAAMC,SAAU,gBCflCC,GACG,UADHA,GAEU,UAFVA,GAGQ,UAHRA,GAIA,UAJAA,GAKE,UALFA,GAMA,UANAA,GAOI,UAGJC,GAAyBA,KAC9B,MAAMC,EhD6ZA,WAEN,IAAMt+B,EAAQ8J,GAAahK,KAAgB,IAC3C,IAAKE,EAAKitB,GAAS,CAIlB,IADA,IAAIP,EAAO9sB,GAAgB8uB,IACX,OAAThC,IAAkBA,EAAIkC,KAA2B,OAAjBlC,EAAIO,IAC1CP,EAAOA,EAAIO,GAGZ,IAAItsB,EAAO+rB,EAAIkC,MAAWlC,EAAIkC,IAAS,CAAC,EAAG,IAC3C5uB,EAAKitB,GAAU,IAAMtsB,EAAK,GAAK,IAAMA,EAAK,IAC3C,CAEA,OAAOX,EAAKitB,EACb,CgD7aasR,GAEZ,OACC7I,GAAK,MAAA,CAAAxN,UAAU,mCAAkCoK,SAChDiF,UACCrP,UAAU,sEACVyQ,KAAK,OACLF,OAAO,OACPD,MAAM,OACNE,QAAQ,cAERpG,SAAA,CAAAiF,GAAA,OAAA,CAAAjF,SAAA,CACCiF,qBACC5wB,GAAElF,GAAAA,OAAK68B,EAAO,MACdE,cAAc,iBACdC,aAAa,MACbC,GAAI,QACJC,GAAI,KACJC,IAAK,QACLC,GAAI,KAAKvM,SAAA,CAEToD,WAAMoJ,OAAO,KAAKC,UAAWX,KAC7B1I,GAAM,OAAA,CAAAoJ,OAAO,OAAOC,UAAWX,QAEhC7G,GAAA,iBAAA,CACC5wB,GAAElF,GAAAA,OAAK68B,EAAO,MACdE,cAAc,iBACdC,aAAa,MACbC,IAAK,OACLC,GAAI,QACJC,GAAI,OACJC,IAAK,QAELvM,SAAA,CAAAoD,GAAA,OAAA,CAAMoJ,OAAO,KAAKC,UAAWX,KAC7B1I,GAAA,OAAA,CAAMoJ,OAAO,OAAOC,UAAWX,QAEhC7G,GACC,iBAAA,CAAA5wB,GAAElF,GAAAA,OAAK68B,EAAO,MACdE,cAAc,iBACdC,aAAa,MACbC,GAAI,OACJC,GAAI,KACJC,IAAK,QACLC,GAAI,eAEJnJ,GAAM,OAAA,CAAAoJ,OAAO,KAAKC,UAAWX,KAC7B1I,GAAA,OAAA,CAAMoJ,OAAO,OAAOC,UAAWX,QAEhC7G,GACC,iBAAA,CAAA5wB,GAAElF,GAAAA,OAAK68B,EAAO,MACdE,cAAc,iBACdC,aAAa,MACbC,GAAI,OACJC,GAAI,KACJC,IAAK,QACLC,GAAI,KAEJvM,SAAA,CAAAoD,GAAA,OAAA,CAAMoJ,OAAO,KAAKC,UAAWX,KAC7B1I,GAAA,OAAA,CAAMoJ,OAAO,OAAOC,UAAWX,QAEhC7G,GACC,iBAAA,CAAA5wB,GAAElF,GAAAA,OAAK68B,EAAO,MACdE,cAAc,iBACdC,aAAa,MACbC,GAAI,QACJC,GAAI,KACJC,IAAK,QACLC,GAAI,KAEJvM,SAAA,CAAAoD,GAAA,OAAA,CAAMoJ,OAAO,KAAKC,UAAWX,KAC7B1I,WAAMoJ,OAAO,OAAOC,UAAWX,QAEhC1I,GAAQ,SAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SACrBoD,oBACCza,OAAO,0CACPja,KAAK,aAGP00B,GAAA,OAAA,CACC+C,OAAQ,IACRD,MAAO,IACPvf,GAAI,IACJkV,GAAI,IACJ6Q,iBAAiB,iBACjBC,UAAU,iBACV3jB,MAAO,CACN4jB,SAAU,SAED,YAAA,QACVv4B,GAAElF,GAAAA,OAAK68B,EAAO,eAEd5I,GAAG,IAAA,CAAAhsB,OAAMjI,QAAAA,OAAU68B,EAAQ,OAAEa,UAAU,0BAAyB7M,SAC/DoD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,WACCtI,EAAE,mLACFuL,KAAMyF,YAEN1I,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,y3DACPokB,SAAS,uFACTC,WAAW,6GACX3G,KAAK,sBAOXpB,QACC4H,UAAU,gCACVtF,WAAW,SACXlzB,GAAElF,GAAAA,OAAK68B,EAAO,MAEdhM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENjD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,GACC,OAAA,CAAAtI,EAAE,kSACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GAEN9L,SAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,qnCACPokB,SAAS,0BACTC,WAAW,wCACX3G,KAAK,kBAKTjD,GAAA,IAAA,CAAGgK,KAAIj+B,QAAAA,OAAU68B,EAAQ,OAAE33B,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACzCiF,QAAG4H,UAAU,6BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENpB,GAAA,IAAA,CAAG4H,UAAU,4BAA2B7M,SAAA,CACvCoD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAEa,UAAU,4BAA2B7M,SACxDoD,GACC,OAAA,CAAAiD,KAAIl3B,QAAAA,OAAU68B,EAAQ,OACtBiB,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRhR,EAAE,gXAGJsI,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAEa,UAAU,uCAC5BzJ,GACC,OAAA,CAAA6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAIl3B,QAAAA,OAAU68B,EAAQ,OACtBlR,EAAE,uRAMPsI,GAAA,IAAA,CAAGyJ,UAAU,0BAA0Bx4B,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACrDoD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,eAChB5I,GACC,OAAA,CAAAtI,EAAE,2FACFoS,YAAa,IACbC,OAAQrB,GAAa9L,SAErBoD,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,u/BACPokB,SAAS,uFACTC,WAAW,6GACX3G,KAAK,iBAKTjD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,QAAG4H,UAAU,6BAA4B7M,SAAA,CACxCoD,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,qCACZ5H,GAAG,IAAA,CAAAsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OACrChM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAG,IAAA,CAAA4H,UAAU,4BAA2B7M,SAAA,CACvCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+DACPokB,SAAS,2BACTC,WAAW,uCACX3G,KAAK,WAENpB,GAAG,IAAA,CAAA4H,UAAU,sCACZzJ,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAoD,GAAA,OAAA,CACCtI,EAAE,2SACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAIl3B,QAAAA,OAAU68B,EAAQ,gBAEtB5I,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,uvDACPokB,SAAS,8CACTC,WAAW,yEACX3G,KAAK,eAIRjD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAEa,UAAU,mCAC5BzJ,GACC,OAAA,CAAAtI,EAAE,mHACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GAAa9L,SAErBoD,cACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,6qBACPokB,SAAS,8CACTC,WAAW,yEACX3G,KAAK,+BAUdjD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAiF,GAAA,IAAA,CAAG4H,UAAU,uCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,4BACZ7M,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,GAAG,IAAA,CAAA4H,UAAU,sCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+DACPokB,SAAS,2BACTC,WAAW,uCACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OACrChM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAG,IAAA,CAAA4H,UAAU,6BAA4B7M,SAAA,CACxCoD,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,qEACPokB,SAAS,2BACTC,WAAW,4BACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BACZ7M,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAChBhM,SAAAoD,GAAA,OAAA,CACC6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GACNhR,EAAE,+SAYbsI,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,QAAG4H,UAAU,6BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,qCACZzJ,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,GAAG,IAAA,CAAA4H,UAAU,4BAA2B7M,SAAA,CACvCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+DACPokB,SAAS,2BACTC,WAAW,uCACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BAA2B7M,SACvCiF,GAAG,IAAA,CAAAsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SAAA,CACrCoD,GACC,UAAA,CAAAyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAA,IAAA,CAAG4H,UAAU,0BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,yDACPokB,SAAS,2BACTC,WAAW,4BACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BACZ7M,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAChBhM,SAAAoD,GAAA,OAAA,CACC6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GACNhR,EAAE,+SAYbsI,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,gBACjB/G,GAAG,IAAA,CAAA4H,UAAU,6BAA4B7M,SAAA,CACxCoD,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,qCACZzJ,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,GAAG,IAAA,CAAA4H,UAAU,4BAA2B7M,SAAA,CACvCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+DACPokB,SAAS,2BACTC,WAAW,uCACX3G,KAAK,WAENjD,GAAG,IAAA,CAAAyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OACrChM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAA,IAAA,CAAG4H,UAAU,6BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,qEACPokB,SAAS,2BACTC,WAAW,4BACX3G,KAAK,WAENjD,GAAG,IAAA,CAAAyJ,UAAU,4BAA2B7M,SACvCoD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,WACC6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GACNhR,EAAE,+SAYbsI,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,gBACjB/G,GAAG,IAAA,CAAA4H,UAAU,6BAA4B7M,SAAA,CACxCoD,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SAAA,CACrCoD,cACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAG,IAAA,CAAA4H,UAAU,4BAA2B7M,SAAA,CACvCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iEACPokB,SAAS,2BACTC,WAAW,oCACX3G,KAAK,WAENpB,QAAG4H,UAAU,4BACZ7M,SAAA,CAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBoD,WACCtI,EAAE,wSACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAIl3B,QAAAA,OAAU68B,EAAQ,OAEtBhM,SAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+9CACPokB,SAAS,qCACTC,WAAW,mDACX3G,KAAK,eAIRjD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAEa,UAAU,0BAC5B7M,SAAAoD,GAAA,OAAA,CACCtI,EAAE,mHACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GAER9L,SAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,2jBACPokB,SAAS,qCACTC,WAAW,mDACX3G,KAAK,+BAUdjD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,QAAG4H,UAAU,6BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,qCACZzJ,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAiF,GAAA,IAAA,CAAG4H,UAAU,4BAA2B7M,SAAA,CACvCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iEACPokB,SAAS,2BACTC,WAAW,oCACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SAAA,CACrCoD,cACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAA,IAAA,CAAG4H,UAAU,uCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,mEACPokB,SAAS,2BACTC,WAAW,4BACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,4BACZ7M,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,GACC,OAAA,CAAA6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GACNhR,EAAE,+SAYbsI,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,gBACjB/G,GAAG,IAAA,CAAA4H,UAAU,6BAA4B7M,SAAA,CACxCoD,uBACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,sFACPokB,SAAS,qCACTC,WAAW,yEACX3G,KAAK,WAENjD,QAAGyJ,UAAU,4BACZ7M,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SACjBiF,GAAG,IAAA,CAAA4H,UAAU,sCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iEACPokB,SAAS,2BACTC,WAAW,oCACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OACrChM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,QAAG4H,UAAU,8BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,uEACPokB,SAAS,2BACTC,WAAW,4BACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,qCACZzJ,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,GACC,OAAA,CAAA6J,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GACNhR,EAAE,+SAYbsI,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAiF,GAAA,IAAA,CAAG4H,UAAU,sCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iFACPokB,SAAS,qCACTC,WAAW,yDACX3G,KAAK,WAENjD,GAAG,IAAA,CAAAyJ,UAAU,4BAA2B7M,SACvCiF,QACC4H,UAAU,sBACVtF,WAAW,SACXlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAEfhM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENjD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAEa,UAAU,8BAA6B7M,SAC1DoD,GACC,OAAA,CAAAtI,EAAE,6WACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAIl3B,QAAAA,OAAU68B,EAAQ,OAEtBhM,SAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,65CACPokB,SAAS,2BACTC,WAAW,oCACX3G,KAAK,yBAQZpB,QAAGsC,WAAW,SAASlzB,GAAElF,GAAAA,OAAK68B,EAAQ,iBACrC5I,GACC,UAAA,CAAAyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENpB,GAAA,IAAA,CAAG4H,UAAU,4BACZ7M,SAAA,CAAAoD,GAAA,mBAAA,CACCyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iFACPokB,SAAS,qCACTC,WAAW,yDACX3G,KAAK,WAENpB,QAAG4H,UAAU,4BAA2B7M,SAAA,CACvCoD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAEa,UAAU,4BAA2B7M,SACxDoD,GACC,OAAA,CAAAtI,EAAE,wWACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GAEN9L,SAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,i+CACPokB,SAAS,2BACTC,WAAW,qCACX3G,KAAK,eAIRjD,QAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAEa,UAAU,4BAC5B7M,SAAAoD,GAAA,OAAA,CACCtI,EAAE,qJACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,YAER1I,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,mmBACPokB,SAAS,2BACTC,WAAW,qCACX3G,KAAK,wBAOXjD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAiF,GAAA,IAAA,CAAG4H,UAAU,sCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iFACPokB,SAAS,qCACTC,WAAW,yDACX3G,KAAK,WAENjD,GAAA,IAAA,CAAGyJ,UAAU,4BAA2B7M,SACvCoD,QAAGyJ,UAAU,kCAAkCx4B,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SAC7DiF,GACC,IAAA,CAAA4H,UAAU,sBACVtF,WAAW,SACXlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAAhM,SAAA,CAEfoD,cACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENjD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAEa,UAAU,2BAA0B7M,SACvDoD,WACCtI,EAAE,sPACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,GAAU9L,SAEhBoD,cACCyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,ihCACPokB,SAAS,2BACTC,WAAW,4CACX3G,KAAK,eAIRjD,GAAG,IAAA,CAAA/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OAAEa,UAAU,8BAC7B7M,SAAAoD,GAAA,OAAA,CACCtI,EAAE,kGACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GAAa9L,SAErBoD,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,+ZACPokB,SAAS,2BACTC,WAAW,4CACX3G,KAAK,2BASbjD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAQ,OACjBhM,SAAAiF,GAAA,IAAA,CAAG4H,UAAU,sCACZzJ,GACC,mBAAA,CAAAyD,YAAY,IACZn4B,KAAK,YACLg4B,cAAc,YACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,iFACPokB,SAAS,qCACTC,WAAW,yDACX3G,KAAK,WAENjD,GAAG,IAAA,CAAAyJ,UAAU,4BACZ7M,SAAAiF,GAAA,IAAA,CACC4H,UAAU,kCACVtF,WAAW,SACXlzB,GAAElF,GAAAA,OAAK68B,EAAQ,OAEfhM,SAAA,CAAAoD,GAAA,UAAA,CACCyD,YAAY,IACZiG,MAAM,KACNnG,SAAS,WACTC,IAAI,SACJje,OAAO,2BACPokB,SAAS,iBACTrG,cAAc,aACdL,KAAK,WAENjD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAEa,UAAU,+BAC5B7M,SAAAoD,GAAA,OAAA,CACCtI,EAAE,6PACFmS,iBAAkB,GAClBC,YAAa,IACbC,OAAQrB,GACRzF,KAAMyF,YAEN1I,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,mhCACPokB,SAAS,2BACTC,WAAW,4CACX3G,KAAK,yBAQZjD,QAAG7N,QAAQ,OAAOsX,UAAU,0BAA0Bx4B,GAAElF,GAAAA,OAAK68B,EAAQ,OACpEhM,SAAAoD,GAAA,IAAA,CAAG/uB,GAAElF,GAAAA,OAAK68B,EAAO,MAAAhM,SAChBoD,GACC,OAAA,CAAAtI,EAAE,mLACFuL,KAAMyF,YAEN1I,GACC,UAAA,CAAAyD,YAAY,IACZH,cAAc,IACdE,IAAI,SACJkG,MAAM,KACNnG,SAAS,SACThe,OAAO,y3DACPokB,SAAS,uFACTC,WAAW,6GACX3G,KAAK,qBAML,EClgCFgH,GAAsBA,KAC3B,MAAM7/B,EAAIi7B,GAAgB,mBACpB6E,aAAEA,EAAYxZ,KAAEA,GAASuX,KAE/B,OACCpG,GAAC0E,GAAOC,MAAK,CACZhU,UAAU,mGACVrT,OAAQ+qB,EAAa/B,GAAkBI,SACvC3J,UAAWlO,EACX1P,QAAS0P,EACTgW,cAAc,EACdC,wBAAwB,EACxBG,OAAO,EAAKlK,SAAA,CAEZoD,GAACuG,GAAOmB,KAAO,CAAA,GACf1H,GAAC2I,GAAsB,CAAA,GACvB3I,GAACuG,GAAOiB,MAAK,CAAChV,UAAU,oBAAYpoB,EAAE,WACtC41B,GAACuG,GAAOkB,SAAQ,CAAA7K,SAAExyB,EAAE,aACpB41B,GAACuG,GAAOlC,OAAO,CAAAN,KAAM,KAAInH,SAAGxyB,EAAE,eAChB,EC1BX+/B,GAAgBA,IAEpBtI,GACCuI,GAAA,CAAAxN,SAAA,CAAAoD,GAAC2H,GAAoB,CAAA,GACrB3H,GAACiK,GAAmB,OCAVI,GAAyB,IAUzBC,GAAepM,GAAoC,MCd1DqM,GAAWA,KAChB,MAAM7V,EAAUuK,GAAWqL,IAE3B,IAAK5V,EACJ,MAAM,IAAIhnB,MAAM,gDAGjB,OAAOgnB,CAAO,ECKT8V,GAAeA,KACpB,MAAM/uB,gBAAEA,EAAeC,OAAEA,GAAWsjB,KAC9BrjB,EAAgBkkB,KAChBjkB,EAAe2uB,KAGrB3E,IAAU,KrEsBL,SAAwB15B,GAU7B,IAV8BuP,gBAC9BA,EAAeE,cACfA,EAAaC,aACbA,EAAYF,OACZA,GAMAxP,EACAsP,GAAOC,gBAAkBA,EACzBD,GAAOG,cAAgBA,EACvBH,GAAOI,aAAeA,EACtBJ,GAAOE,OAASA,EAChBF,GAAOM,eAAgB,EAEvBgC,GAAU,QACX,CqEvCE2sB,CAAe,CAAEhvB,kBAAiBE,gBAAeC,eAAcF,WAExD,KACNM,IAAkB,IAEjB,CAACP,EAAiBE,EAAeC,EAAcF,IAGlDkqB,IAAU,KACKnqB,EAAgBtP,QAChB3C,EAAgBqV,KAC7Bf,GAAU,eAEVA,GAAU,eACX,GACE,CAACrC,EAAgBtP,QAGpBy5B,IAAU,KAAK,IAAA8E,EACd,MAAMj2B,EAAyCi2B,QAArCA,EAAG/uB,EAAcoB,UAAU5Q,MAAMC,YAA9Bs+B,IAAkCA,OAAlCA,EAAAA,EAAoCjtB,SAC7ChJ,GACHqJ,GAAU,eAAgBrJ,EAC3B,GACE,CAACkH,EAAcoB,UAAU5Q,MAAMC,OAGlCw5B,IAAU,KACT,MAAM1oB,EAAcvB,EAAcsB,iBAAiB9Q,MAAMC,KACrD8Q,GACHY,GAAU,sBAAuBZ,EAClC,GACE,CAACvB,EAAcsB,iBAAiB9Q,MAAMC,MAAM,ECrDhD,IAAYu+B,GAAZ,CAAYA,IACXA,EAAA,QAAA,gBACAA,EAAA,aAAA,gBACAA,EAAA,aAAA,eACA,EAJD,CAAYA,KAAAA,GAIX,CAAA,IAED,MAAMC,GAA8B,CACnC,IAAKD,GAAkBE,cAGlB,SAAUC,GAAsB7V,GACrC,OAAa,OAATA,GAAiBA,KAAQ2V,GACrBA,GACN3V,GAGK0V,GAAkBI,OAC1B,CCTA,SAASC,GACR1sB,GAAoC,IAAAsQ,EAEpChf,GAAOb,KAAK,kCAEZ,MAAMk8B,EAAgBphC,OAAOiJ,MAEH8b,QAA1BA,EAAA/kB,OAAOqhC,2BAAmBtc,IAAAA,IAA1B/kB,OAAOqhC,oBAAwBD,GAC/BphC,OAAOiJ,MAAMq4B,iBAAkB,EAE/B,MAAMC,EAAQ,IAAIC,MAAMJ,EAAe,CACtCzW,MAAOjiB,MAAgB8zB,EAAQjS,EAAKkX,KACnC,MAAMC,EAA2BD,EAAc,GAGzCz4B,QAAkB24B,QAAQhX,MAAM6R,EAAQjS,EAAKkX,GAK7CG,EAAiB54B,eAAAA,EAAU64B,QAOjC,OALAptB,SAAAA,EAAW,CACVzL,SAAU44B,EACVF,eAGM14B,CACR,IAMD,OAHAhJ,OAAOiJ,MAAQs4B,EAGPO,IACF9hC,OAAOqhC,sBAEZt7B,GAAOb,KAAK,+BACZlF,OAAOiJ,MAAQjJ,OAAOqhC,oBACtBrhC,OAAOiJ,MAAMq4B,iBAAkB,EAE3BQ,GACHC,cAAcD,GACf,CAEF,CCxCA,SAASE,GACRvtB,GAAkC,IAAAsQ,EAElChf,GAAOb,KAAK,gCAEZ,MAAM+8B,EAAcjiC,OAAOkiC,eACHnd,QAAxBA,EAAA/kB,OAAOmiC,yBAAiBpd,IAAAA,IAAxB/kB,OAAOmiC,kBAAsBF,GAG7B,MAAMG,EAAW,IAAIZ,MAAMS,EAAa,CACvCI,UAAW,SAAU7F,EAAQiF,GAE5B,MAAMa,EAAM,IAAI9F,KACXiF,GAICc,EAAeD,EAAIxtB,KACnB0tB,EAAeF,EAAIG,KAGzB,IAAIf,EAAqB,GA+DzB,OA5DAY,EAAIxtB,KAAO,SACV3L,EACAtB,EACAa,EACAg6B,EACAC,GAGA,OADAjB,EAAa75B,EACN06B,EAAazpB,KACnBpU,KACAyE,EACAtB,EACAa,SAAAA,EACAg6B,EACAC,EAED,EAGDL,EAAIG,KAAO,SAAUr5B,GAEpB,MAAMw5B,EAA6BN,EAAIO,mBAEvCP,EAAIO,mBAAqB,SAAUruB,GAOlC,GALIouB,GACHA,EAA2B9pB,KAAKpU,KAAM8P,GAInC8tB,EAAIQ,aAAeZ,eAAea,KACrC,IACCtuB,SAAAA,EAAWuuB,GAAkBV,EAAKZ,GAClC,CAAC,MAAOp8B,GACRS,GAAOT,MAAM,sCAAuCA,EACrD,CAED,EAGD,MAAM29B,EAAiBX,EAAIlZ,OAiB3B,OAfAkZ,EAAIlZ,OAAS,SAAU5U,GAMtB,GALIyuB,GACHA,EAAenqB,KAAKpU,KAAM8P,GAIvB8tB,EAAIQ,aAAeZ,eAAea,KACrC,IACCtuB,SAAAA,EAAWuuB,GAAkBV,EAAKZ,GAClC,CAAC,MAAOp8B,GACRS,GAAOT,MAAM,sCAAuCA,EACrD,CAED,EAEMk9B,EAAa1pB,KAAKpU,KAAM0E,EAC/B,EAEMk5B,CACR,IAQD,OAJAtiC,OAAOkiC,eAAeZ,iBAAkB,EACxCthC,OAAOkiC,eAAiBE,EAGhBN,IACF9hC,OAAOmiC,oBAEZp8B,GAAOb,KAAK,6BACZlF,OAAOkiC,eAAiBliC,OAAOmiC,kBAC/BniC,OAAOkiC,eAAeZ,iBAAkB,EAEpCQ,GACHC,cAAcD,GACf,CAEF,CAEA,SAASkB,GACRV,EACAz6B,GAAW,IAAAq7B,EAEX,IAAIl6B,EAEJ,MAAMm6B,EAAsC,SAArBb,EAAIc,aACrBC,EACgB,SAArBf,EAAIc,eACiC,QADVF,EAC3BZ,EAAIgB,kBAAkB,uBAAe,IAAAJ,OAAA,EAArCA,EAAuC93B,SAAS,qBAEjD,GAAI+3B,EACH,IACCn6B,EAAWnG,KAAKO,MAAMk/B,EAAIt5B,SAC1B,CAAC,MAAO1F,GACR,MAES+/B,IACVr6B,EAAWs5B,EAAIt5B,UAGhB,MAAO,CACNA,WACA04B,WAAY75B,EAEd,CCvIA,MAAM07B,GAAgB,CAAC,YAAa,gBAC9BC,GAAmB,CAAC,eAAgB,mBACpCC,GAAmB,CAAC,eAAgB,mBAGpCC,GAAY,CACjB1sB,IAAKusB,GACLI,OAAQH,GACRI,OAAQH,IAKHI,GAAyB,IAC3BN,MACAC,MACAC,GAbqB,cAAe,iBAevC,2BACA,uDCZM,MAAMK,GAAezP,GAA6B,ICbnD0P,GAAYA,KACjB,MAAMlZ,EAAUuK,GAAW0O,IAC3B,IAAKjZ,EACJ,MAAM,IAAIhnB,MAAM,kDAEjB,OAAOgnB,CAAO,ECWTmZ,GAAiBA,KACtB,MAAMzjC,EAAIi7B,MACFxkB,IAAKitB,GAAavD,MACpBxtB,UAAEA,EAASC,WAAEA,EAAUC,iBAAEA,GAAqB4iB,MAEnDnkB,QACCtP,MAAM+R,SAAEA,KAEN6gB,KACE+O,EAASH,KAET1vB,EAAYukB,IAAQ,IAAMnyB,GAAoB6N,IAAW,CAACA,IAE1D6vB,EAAYC,IACjB,CAACt9B,EAAuBu9B,KACvB,MAAMjd,EAAWid,aAAAA,EAAAA,EAAcr5B,MAAM/D,MACpC3G,GAAKA,EAAEmL,aAAe3E,EAAK2E,aAE5B,OAAK2b,GACEA,EAAS1b,WAAa5E,EAAK4E,QAAQ,GAE3C,IAGK44B,EAAmBF,IACxB,CACC7rB,EACA8rB,KAEA,MAAME,EAAmBhsB,EAAOzN,cAAcX,QAAOrD,GACpDq9B,EAAUr9B,EAAMu9B,KAEXG,EAAiBjsB,EAAOxN,YAAYZ,QAAOrD,GAChDq9B,EAAUr9B,EAAMu9B,KAGbE,EAAiB1jC,OAAS,GAC7BojC,EAAS,CACRhtB,KAAM,QACNxS,QAASlE,EAAE8xB,KAAK,+BAAgC,CAC/CoS,aAAcF,EAAiB,GAAGv0B,MAClC00B,EAAGC,GACFxO,GAAM,OAAA,CAAAxN,UAAU,8BAA+BoK,SAAA4R,QAM/CH,EAAe3jC,OAAS,GAC3BojC,EAAS,CACRhtB,KAAM,QACNxS,QAASlE,EAAE8xB,KAAK,8BAA+B,CAC9CoS,aAAcD,EAAe,GAAGx0B,MAChC00B,EAAGC,GACFxO,GAAM,OAAA,CAAAxN,UAAU,8BAA+BoK,SAAA4R,OAInD,GAED,CAACR,EAAW5jC,EAAG0jC,IA+HhB,MAAO,CACNW,mBA3H0BR,IAAY17B,UAAW,IAAAsK,EAAA6xB,EACjD,MAAMtxB,EAAQJ,EAAW7Q,MAAMC,KAC/B,IAAKgR,EAAO,OAAO,KAEnB,MAAM8wB,UAAYrxB,UAAA6xB,EAAG3xB,EAAU5Q,MAAMC,YAAI,IAAAsiC,OAAA,EAApBA,EAAsBjxB,gBAAQ,IAAAZ,EAAAA,EAAI,KAEvD,IAAI8xB,EACJ,IACCA,QAAkBz4B,IAAQ,EAC1B,CAAC,MAAOkB,GAMR,OALA2F,EAAU9Q,KAAIsyB,GAAIxrB,EAAAA,EAAA,GACdwrB,GAAI,GAAA,CACP1gB,SAAS,EACT1O,MAAOiI,MAED,IACR,CAEA,MAAMkG,EAAeF,EAAMG,UAAUD,aAC/B8E,EAAS5N,GAAcm6B,EAAWrxB,GAExC6wB,EAAiB/rB,EAAQ8rB,GAEzB,MAAM/wB,GACJ+wB,IACAz4B,GAAa,CACbC,MAAOw4B,EACPv4B,MAAOg5B,EACP56B,MAAOuJ,IAgBT,OAVAP,EAAU9Q,IAAI,CACbG,KAAM,CACLqR,SAAUkxB,EACV/wB,YAAawE,EAAO3N,MAErBoJ,SAAS,EACT1O,MAAO,OAERoH,GAAkBo4B,GAEX,CACNvxB,QACA8wB,eACAS,YACAhxB,gBAAiByE,EAAO3N,KACxB6I,eACAH,aACA,GACC,CAACH,EAAYD,EAAWoxB,IAwE1BS,kBAtEyBX,IACzB17B,UAA4B,IAAAs8B,EAAAC,EAC3B,MAAM1xB,EAAQJ,EAAW7Q,MAAMC,KAC/B,IAAKgR,EAAO,OAAO,KAEnB,MAAM8wB,UAAYW,UAAAC,EAAG/xB,EAAU5Q,MAAMC,YAAI,IAAA0iC,OAAA,EAApBA,EAAsBrxB,gBAAQ,IAAAoxB,EAAAA,EAAI,KACjDvxB,EAAeF,EAAMG,UAAUD,aAC/B8E,EAAS5N,GAAcC,EAAM6I,GAqBnC,OAnBA6wB,EAAiB/rB,EAAQ8rB,GAEzBnxB,EAAU9Q,IAAI,CACbG,KAAM,CACLqR,SAAUhJ,EACVmJ,YAAawE,EAAO3N,MAErBoJ,SAAS,EACT1O,MAAO,OAGRoH,GAAkB9B,SAEZwI,EAAiBe,MAAM,CAC5BvJ,KAAM2N,EAAO3N,KACbwJ,QAASb,EAAMG,UAAUtM,GACzBiN,cAGM,CAAEP,gBAAiByE,EAAO3N,KAAM6I,eAAc,GAEtD,CAACN,EAAYD,EAAWE,EAAkBiB,EAAWiwB,IAyCrDY,qBAtC4Bd,IAC5B17B,UACC,MAAMy8B,QHNFz8B,eACNM,GAEA,GAAKA,EAAL,CAEA,GAAIA,aAAoB0Y,SAEvB,aAAc1Y,EAASS,OAAO27B,OAAM,KAAe,IAG7C,GAAwB,iBAAbp8B,EAEjB,IACC,OAAOnG,KAAKO,MAAM4F,EAClB,CAAC,MAAAkZ,GACD,MACD,CAGD,OAAOlZ,CAhBwB,CAiBhC,CGd8Bq8B,CAA0Br8B,GAErD,GAAIm8B,EAAc,CACjB,IAAI33B,EAEJ,GAAI,WAAY23B,EAAc,CAC7B,MAAMnjB,EAAMmjB,EAAa33B,OACzBA,EAAwB,iBAARwU,EAAmBA,OAAMtf,CAC1C,CAEA,GAAI8K,IAAW02B,EAAO3gC,IAAIiK,GAAS,CAClC,MAAM83B,EAAWrE,GAAsBzzB,GACvC02B,EAAO54B,KAAK,CACXlE,GAAIk+B,EACJ7gC,QAASlE,EAAC,iBAAA2B,OAAkBojC,KAE9B,CACD,IAED,CAAC/kC,EAAG2jC,IAkBJqB,mBAf0BnB,IAC1B,CAACtwB,EAA8BM,KAC9BhB,EAAiBe,MAAM,CACtBvJ,KAAMkJ,EACNM,UACAC,aACC,GAEH,CAACjB,EAAkBiB,IAQnB,ECrMImxB,GAAsBA,KAC3B,MAAM5zB,gBACLA,EAAe6zB,gBACfA,EACA5zB,QACCkF,SAAS2uB,SACRA,EACAC,wBAAyBC,EACzBC,sBAAuBC,EAAaC,yBACpCA,EAAwBttB,0BACxBA,KAGC0c,MAEEyP,mBAAEA,EAAkBM,qBAAEA,EAAoBK,mBAAEA,GACjDvB,MAEMgC,EAAaC,GAAkBxR,IAAS,GAE/CsH,IAAU,KACT,GAAkC,SAA9BtjB,EAAsC,CACzC,IAAIytB,EAIJ,IAECA,WJAHzxB,GACmC,IAAnC0xB,yDAAiC,CAAE,EAEnC,MAAMC,QAAEA,GAAU,EAAKj9B,OAAEA,GAAWg9B,EAEpC,GAAe,SAAXh9B,EAIH,OAHApD,GAAOX,KACN,qFAEM,OAGR,IAAIihC,EACAC,EAEAC,EAwBAzE,EAtBJ,OAAQ34B,GACP,IAAK,QACJo9B,EAAiB,QACjBF,EAAsBlF,GAAuB1sB,GAC7C,MAED,IAAK,MACJ8xB,EAAiB,MACjBD,EAAoBtE,GAAqBvtB,GACzC,MAGD,QACC8xB,EAAiB,OACjBF,EAAsBlF,GAAuB1sB,GAC7C6xB,EAAoBtE,GAAqBvtB,GA0B3C,OArBA1O,GAAOb,KAAI,sCAAAhD,OAAuCqkC,IAI9CH,IACHrgC,GAAOb,KAAK,mCAEZ48B,EAAW0E,aAAY,KAClBH,IAAwBrmC,OAAOiJ,MAAMq4B,kBACxCv7B,GAAOb,KAAK,qCACZmhC,EAAoBvE,GACpBuE,EAAsBlF,GAAuB1sB,IAE1C6xB,IAAsBtmC,OAAOkiC,eAAeZ,kBAC/Cv7B,GAAOb,KAAK,mCACZohC,EAAkBxE,GAClBwE,EAAoBtE,GAAqBvtB,GAC1C,GACE,MAGG,KAAK,IAAAgyB,EAAAC,EACQ,QAAnBD,EAAAJ,SAAAI,IAAmBA,GAAnBA,EAAsB3E,GACL,QAAjB4E,EAAAJ,SAAAI,IAAiBA,GAAjBA,EAAoB5E,EAAS,CAE/B,CI9DuB6E,EAClBC,GACCjsB,GAAaK,QACZP,GAAoBosB,kBACpBD,IAEF,CACCR,QAASL,EACT58B,OAAQsP,IAGVwtB,GAAe,EACf,CAAC,MAAO3gC,GACRS,GAAOT,MAAM,wCAAyCA,EACvD,CAEA,MAAO,KAAK,IAAAwhC,EACK,QAAhBA,EAAAZ,SAAAY,IAAgBA,GAAhBA,GAAoB,CAEtB,CACAb,GAAe,EAAM,GACnB,CAACF,EAA0BttB,IAM9B,MAAMsuB,EAA0B3C,IAC/B17B,UAAuE,IAA9DuS,QAAQjS,SAAEA,EAAQ04B,WAAEA,IAAsCr/B,EAClE,MAAM2kC,EACLtF,aAAsBlM,IAAMkM,EAAWl7B,WAAak7B,EAE/CuF,EJuCO,SACfvF,EACAkE,GAEA,MACMsB,EAAuBxD,GADAkC,QAAAA,EAAmB,OAIhD,IAAKlE,GAAoC,iBAAfA,EACzB,MAAO,CACNyF,SAAS,EACTC,aAAa,EACbC,mBAAmB,EACnBH,wBAIF,MAGME,EAHmB,CAAC,KAAM,WAGKvf,MAAKC,GACzC4Z,EAAWt2B,SAAS0c,KAIfwf,EAA6BzD,GAAuBhc,MAAKngB,GAC9Dg6B,EAAWt2B,SAAS1D,KAIf2/B,EAAoBH,EAAqBrf,MAAKngB,GACnDg6B,EAAWt2B,SAAS1D,KAMrB,OAHiB0/B,GAAeE,EAYzB,CACNH,SAAS,EACTC,aAAa,EACbC,oBACAH,wBAZO,CACNC,SAAS,EACTC,cACAC,oBACAH,uBAUH,CI3FyBK,CACrBP,EACApB,IAEKuB,QAAEA,EAAOC,YAAEA,EAAWC,kBAAEA,GAAsBJ,EAEpD,IAAKE,GAAWC,EAKf,YAJArhC,GAAOb,KAAIhD,0BAAAA,OACgB8kC,EAAc,6BACxCC,GAKFlhC,GAAOb,KAAIhD,0BAAAA,OAA2B8kC,GAAkBC,GAExD,MAAM1uB,QAAeqsB,IACrB,IAAKrsB,EAAQ,OAEb,MAAMzE,gBAAEA,EAAeR,WAAEA,GAAeiF,EASxC,aAPM2sB,EAAqBl8B,GAEvBsK,GACHiyB,EAAmBzxB,EAAiByE,EAAOhF,MAAMG,UAAUtM,IAIpD0+B,GACP,IAAK,SACJ,IAAKxyB,EAAY,OACjB,MACD,IAAK,WACJ,IAAK+zB,EAAmB,OACxB,MAED,QACC,IAAKA,IAAsB/zB,EAAY,OAKzCmyB,EAAgBrjC,IAAIxC,EAAgBsV,YACnB,IAAbwwB,GACH9zB,EAAgBxP,IAAIzC,EAAgBqV,KACrC,GAED,CACC4vB,EACAM,EACAK,EACA3zB,EACA6zB,EACAC,EACAE,EACAE,IAeF,OAXA/J,IAAU,KAET,MAAM7gB,EAAcP,GAAaC,UAChCH,GAAoBosB,kBACpBE,GAED,MAAO,KACN7rB,GAAa,CACb,GACC,CAAC6rB,IAEG,CACNf,cACA,EC9IIwB,GAA4BA,KACjC,MAAM51B,gBACLA,EACAC,QACCkF,SAAS0wB,uBAAEA,KAETtS,KAGJ4G,IAAU,KACT,IAAK0L,EAAwB,OAE7B1hC,GAAOb,KAAK,uCAEZ,MAAMwiC,EAAyBC,MAAM7iB,UAAU0Y,eAe/C,OAZAmK,MAAM7iB,UAAU0Y,eAAiB,WAEjB,UAAd94B,KAAKjD,MACS,eAAdiD,KAAKjD,MACS,mBAAdiD,KAAKjD,MACS,cAAdiD,KAAKjD,MAINimC,EAAuB5uB,KAAKpU,KAC5B,EAEM,KACNijC,MAAM7iB,UAAU0Y,eAAiBkK,CAAsB,CACvD,GACC,CAACD,EAAwB71B,EAAgBtP,OAAO,EC9BpD,MAAMslC,GAAmBA,KACxB,MAAMh2B,gBACLA,EACAC,QACCkF,SAAS8wB,sBAAEA,KAET1S,KAEJ4G,IAAU,KACT,IAAK8L,EAAuB,OAE5B,MAAMC,EAAa,IAAIC,gBACjBC,EAAoB,IAAIC,QAExBC,EAAoB1zB,IACzBzO,GAAOb,KAAK,yBAA0BsP,GACtCA,EAAMgpB,iBACNhpB,EAAM2zB,kBACNv2B,EAAgBxP,IAAIzC,EAAgBqV,KAAK,EA4BpCozB,EAAuBA,KAC5B,IACC,MAAMC,EAAW1xB,SAAS2xB,iBAAiBT,GACvCQ,EAASxnC,OAAS,IACrBkF,GAAOb,KAAK,+CAAgDmjC,GA7B5BA,KAClCA,EAAS5/B,SAAQ8/B,IAEhB,IAAIP,EAAkBzkC,IAAIglC,GAE1B,IAEC,MAAM1G,EC3BL,CAAwD0G,IAC7D,MAAMC,EAASD,EAAQE,WACvB,GAAID,EAAQ,CACX,MAAME,EAAaH,EAAQI,WAAU,GAErC,OADAH,EAAOI,aAAaF,EAAYH,GACzBG,CACR,CACA,OAAOH,CACR,EDmBmBM,CAAuBN,GAGrC1G,EAAMiH,gBAAgB,WAGtBjH,EAAM9mB,iBAAiB,QAASmtB,EAAkB,CACjDa,OAAQjB,EAAWiB,SAIpBf,EAAkBhxB,IAAI6qB,EACtB,CAAC,MAAOv8B,GACRS,GAAOT,MAAM,8CAA+CA,EAC7D,IACC,EAQA0jC,CAA0BX,GAE3B,CAAC,MAAO/iC,GACRS,GAAOT,MAAM,wCAAyCA,EACvD,GAID8iC,IAGA,MAAMa,EAAW,IAAIC,kBAAiBC,IACrC,IAAIC,GAAqB,EAEzBD,EAAU1gC,SAAQ4gC,IAEjBA,EAASC,WAAW7gC,SAAQ8F,IAC3B,GAAIA,EAAKg7B,WAAaC,KAAKC,aAAc,CAAA,IAAAC,EAAAC,EACxC,MAAMpB,EAAUh6B,UAGhBm7B,EAAInB,EAAQqB,eAAO,IAAAF,GAAfA,EAAA5wB,KAAAyvB,EAAkBV,KACrBuB,GAAqB,IAIM,QAAxBO,EAAApB,EAAQD,wBAARqB,IAAwBA,OAAxBA,EAAAA,EAAA7wB,KAAAyvB,EAA2BV,GAAuBhnC,QAAS,IAC9DuoC,GAAqB,EAEvB,KAIDC,EAASQ,aAAaphC,SAAQ8F,IAC7B,GAAIA,EAAKg7B,WAAaC,KAAKC,aAAc,CAAA,IAAAK,EAAAC,EACxC,MAAMxB,EAAUh6B,EAGAu7B,QAAfA,EAAAvB,EAAQqB,eAARE,IAAeA,GAAfA,EAAAhxB,KAAAyvB,EAAkBV,YAClBkC,EAAAxB,EAAQD,wBAAgB,IAAAyB,GAAxBA,EAAAjxB,KAAAyvB,EAA2BV,GAAuBhnC,MAKpD,IACC,IAGCuoC,IACHrjC,GAAOb,KAAK,kCAEZsU,YAAW,KACV4uB,GAAsB,GACpB,GACJ,IAWD,OAPAa,EAASe,QAAQrzB,SAASvN,KAAM,CAC/B6gC,WAAW,EACXC,SAAS,EACThjB,YAAY,EACZijB,eAAe,IAGT,KAENrC,EAAWsC,QACXnB,EAASoB,YAAY,CACrB,GACC,CAACxC,EAAuBj2B,GAAiB,EEtHvC04B,GAAwBA,KAE7B9E,KAGAoC,KAGAJ,KCXyB+C,MACzB,MAAM34B,gBAAEA,GAAoBujB,MAEtByP,mBAAEA,EAAkBW,mBAAEA,GAAuBvB,KAG7CwG,EAAmBpG,IAAY,KACpCxyB,EAAgBxP,IAAIzC,EAAgBqV,KAAK,GACvC,CAACpD,IAEE64B,EAAoBrG,IAAY,KACrCxyB,EAAgBxP,IAAIzC,EAAgBuV,UAAU,GAC5C,CAACtD,IAEE84B,EAAqBtG,IAAY,KACtC,IAAIuG,EAGHA,EADG/4B,EAAgBtP,QAAU3C,EAAgBqV,KAC/BrV,EAAgBuV,UAEhBvV,EAAgBqV,KAG/BpD,EAAgBxP,IAAIuoC,EAAY,GAC9B,CAAC/4B,IAGEg5B,EAA2BxG,IAAY17B,UAC5C,MAAM6P,QAAeqsB,IACjBrsB,SAAAA,EAAQjF,YACXiyB,EAAmBhtB,EAAOzE,gBAAiByE,EAAOhF,MAAMG,UAAUtM,GACnE,GACE,CAACw9B,EAAoBW,IAElBsF,EAAoBzG,IAAY17B,gBAC/Bk8B,GAAoB,GACxB,CAACA,IAEEkG,EAAkC1G,IAAY17B,UACnD,MAAM6P,QAAeqsB,IACjBrsB,SAAAA,EAAQjF,YACXiyB,EAAmBhtB,EAAOzE,gBAAiByE,EAAOhF,MAAMG,UAAUtM,GACnE,GACE,CAACw9B,EAAoBW,IAElBwF,EAA6B3G,IAAY17B,UAC9C,MAAM6P,QAAeqsB,IACjBrsB,SAAAA,EAAQjF,aACXk3B,IACAjF,EAAmBhtB,EAAOzE,gBAAiByE,EAAOhF,MAAMG,UAAUtM,IACnE,GACE,CAACw9B,EAAoB4F,EAAkBjF,IAE1CxJ,IAAU,KAET,MAAMiP,EAAwBrwB,GAAaC,UAC1CF,GAAoBuwB,WACpBT,GAGKU,EAAyBvwB,GAAaC,UAC3CF,GAAoBywB,YACpBV,GAGKW,EAA0BzwB,GAAaC,UAC5CF,GAAoB2wB,aACpBX,GAGKY,EAAgC3wB,GAAaC,UAClDF,GAAoB6wB,mBACpBX,GAGKY,EAAyB7wB,GAAaC,UAC3CF,GAAoB+wB,YACpBZ,GAGKa,EAAuC/wB,GAAaC,UACzDF,GAAoBixB,0BACpBb,GAGKc,EACLjxB,GAAaC,UACZF,GAAoBmxB,qBACpBd,GAGF,MAAO,KACNC,IACAE,IACAE,IACAE,IACAE,IACAE,IACAE,GAAmD,CACnD,GACC,CACFpB,EACAC,EACAC,EACAE,EACAC,EACAC,EACAC,GACC,ED9FFR,GAGA5J,KEZ4BmL,MAAK,IAAAC,EAAAC,EACjC,MAAMzyB,MAAEA,EAAK+jB,SAAEA,EAAQ2O,eAAEA,EAAcC,gBAAEA,GAAoB9N,MACvDvsB,OAAEA,GAAWsjB,MACZgX,EAAUC,GAAe3X,IAAS,GAEnC4X,EAAoBzT,IACzB,IACCrwB,OAAOmT,OAAO6iB,IAAWt3B,MAAKgtB,IAAQ,IAAAqY,EAAA,eAAAA,EAAIrY,EAASld,eAAO,IAAAu1B,OAAA,EAAhBA,EAAkB3N,SAAS,KACtE,IAGK4N,EACoC,gBAAzCF,SAA0BN,QAATA,EAAjBM,EAAmBt1B,eAAnBg1B,IAA0BA,OAA1BA,EAAAA,EAA4BnN,UACzB/sB,EAAOsR,cAAgB+oB,EAAgBG,EAAkBjlC,KACxD8kC,EAAqC,QAAtBF,EAACK,aAAiB,EAAjBA,EAAmBjlC,UAAE4kC,IAAAA,EAAAA,EAAI,IAExCQ,IAAgBH,IAAsBF,GAAYI,EAElDE,EAAehR,GAAc,CAClCr0B,GAAIilC,EAAiBnqC,YAAAA,OAAemqC,EAAkBjlC,IAAO,WAC7Ds0B,SAAU1H,GAAgBC,SAC1Bnf,KAAM03B,IAIDE,EAAgBnQ,IAAO,GAC7BR,IAAU,KAER0Q,GACAJ,IACC/O,IACAoP,EAAc9lB,UAEf8lB,EAAc9lB,SAAU,EACxBrN,EAAM8yB,GACP,GACE,CAACI,EAAcJ,EAAmB/O,EAAU/jB,IAG/C,MAAMozB,EAAgBpQ,IAAO,GAC7BR,IAAU,KACOuB,IAAY2O,aAAc,EAAdA,EAAgB7kC,OAAOilC,aAAAA,EAAAA,EAAmBjlC,IAErEulC,EAAc/lB,SAAU,EACd+lB,EAAc/lB,UACxB+lB,EAAc/lB,SAAU,EACxBwlB,GAAY,GACb,GACE,CAAC9O,EAAU2O,EAAgBI,GAAmB,EFjCjDP,GAEO,MG1BFc,GAAYvqC,IAAyD,IAAxD0wB,SAAEA,GAAkD1wB,EAGtE,OAFgB25B,KAITjJ,EAFc,IAEN,ECIV8Z,GAAsBxqC,IAIvB,IAJwB0wB,SAC5BA,GAGA1wB,EACA,MAAOmG,EAASskC,GAAcrY,GAAwB,IAChDsY,EAASxQ,GAAO,GAEhBZ,EAAUyI,IAAa4I,IAC5BF,GAAWpY,IACV,MAAMtN,EAAWsN,EAAKztB,MAAKH,GAAQA,EAAKM,KAAO4lC,EAAM5lC,KAG/C6lC,EAAM7lB,EAAWA,EAAS6lB,IAAMF,EAAOnmB,UAE7C,MAAO,IADM8N,EAAKvqB,QAAOrD,GAAQA,EAAKM,KAAO4lC,EAAM5lC,KACpC8B,EAAAA,KAAO8jC,GAAK,GAAA,CAAEC,QAAM,GAClC,GACA,IAEGrR,EAAUwI,IAAah9B,IAC5B0lC,GAAWpY,GAAQA,EAAKvqB,QAAOrD,GAAQA,EAAKM,KAAOA,KAAI,GACrD,IAEGy0B,EAAWjD,IAAQ,IACD,IAAnBpwB,EAAQ3H,OACJ,KAED2H,EAAQ0C,QAAO,CAACgiC,EAAMF,IACxBA,EAAMtR,WAAawR,EAAKxR,SACpBsR,EAAMtR,SAAWwR,EAAKxR,SAAWsR,EAAQE,EAE1CF,EAAMC,IAAMC,EAAKD,IAAMD,EAAQE,IACpC9lC,IACD,CAACoB,IAEEi1B,EAAe7E,IACpB,KAA4B,CAC3B+C,UACAC,UACAC,cAED,CAACF,EAASC,EAASC,IAGpB,OACC1F,GAAC/B,GAAmBpB,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SAC9CA,GAC4B,eC5C1Boa,GAAgB9qC,IAIjB,IAAAw2B,EAAAhlB,EAAAb,EAAA6xB,EAAA,IAJkB9R,SACtBA,GAGA1wB,EACA,MAAM9B,EAAIi7B,KACV4R,ECHgB,WAEM,IADtBC,EAAoBtsC,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,GAAAA,UAAA,GAAA,GAEpB,MAAO8b,EAAOywB,GAAY7Y,GAAc4Y,GAElCjrC,EAAMgiC,IAAamJ,IACxBD,EAASC,EAAS,GAChB,IAEGjiC,EAAO84B,IAAat9B,IACzBwmC,GAAS5Y,IACR,GAAIh0B,MAAMC,QAAQmG,GAAO,CACxB,MAAM0mC,EAAW1mC,EAAKqD,QAAO/I,IAAMszB,EAAK7M,MAAKtd,GAAKA,EAAEnD,KAAOhG,EAAEgG,OAC7D,MAAO,IAAIstB,KAAS8Y,EACrB,CACA,OAAI9Y,EAAK7M,MAAKtd,GAAKA,EAAEnD,KAAON,EAAKM,KACzBstB,EAED,IAAIA,EAAM5tB,EAAK,GACrB,GACA,IAEGrD,EAAS2gC,IAAah9B,IAC3BkmC,GAAS5Y,GAAQA,EAAKvqB,QAAOrD,GAAQA,EAAKM,KAAOA,KAAI,GACnD,IAEGgL,EAAQgyB,IAAY,KACzBkJ,EAAS,GAAG,GACV,IAEG/pC,EAAM6gC,IACVh9B,GACOyV,EAAMgL,MAAK/gB,GAAQA,EAAKM,KAAOA,KAEvC,CAACyV,IAGF,MAAO,CACNA,QACAza,MACAkJ,OACA7H,SACA2O,QACA7O,MAEF,CD1CuCkqC,IAA9B5wB,MAAOqnB,GAAoBkJ,EAATM,EAAO71B,EAAAu1B,EAAAt1B,KAC3B5E,UAAEA,EAASC,WAAEA,EAAUC,iBAAEA,GAAqB4iB,KAE9CtiB,EAAiCmlB,QAAxBA,EAAG1lB,EAAW7Q,MAAMC,YAAjBs2B,IAAqBA,OAArBA,EAAAA,EAAuBnlB,UACnCi6B,EAAkD95B,QAA9BA,EAAGT,EAAiB9Q,MAAMC,YAAvBsR,IAA2BA,OAA3BA,EAAAA,EAA6BQ,UACpDu5B,UAAa56B,EAAuB,QAAvB6xB,EAAG3xB,EAAU5Q,MAAMC,YAAhBsiC,IAAoBA,OAApBA,EAAAA,EAAsB9wB,YAAYpI,kBAAU,IAAAqH,EAAAA,EAAI,EAIhE66B,EAAgCjV,IAAQ,KAC7C,MAAMkV,EAA+B,GACrC,GACCp6B,GACAi6B,GACAjtC,MAAMC,QAAQgtC,GACb,CAAA,IAAAI,EAED,MAAMC,mBAAEA,GAAqB,GAAgCD,QAA1BA,EAAGr6B,EAAUu6B,qBAAaF,IAAAA,EAAAA,EAAI,CAAE,EAE7DG,EAAU,wBAEhB,IAAKF,GAAwC,IAAlBJ,EAAqB,CAC/C,MAAMnpC,EAA6ClE,EAClD,gCAGDutC,EAAcxiC,KAAK,CAClBlE,GAAI8mC,EACJzpC,UACA0pC,UAAU,GAEZ,CAGA,MAAMC,EAAkBnkC,GACvByJ,EAAUD,aACV,aAEK46B,EAAgBV,EAAqBxjC,QAAOrD,IACjD,MAAMwnC,EAAa3kC,GAAe7C,EAAK0I,WACvC,QAAK8+B,GACEF,EAAgBhjC,SAASX,OAAO6jC,GAAY,IAGpD,GAAID,EAAcxtC,OAAS,GAAuB,IAAlB+sC,EAAqB,CACpD,MAAMW,EAAqBF,EACzBxnC,KAAIC,IACJ,MAAM0D,EAAUkJ,EAAUuC,mBAAmBhP,MAC5CsD,GAAKA,EAAEnD,KAAON,EAAKM,KAEpB,IAAKoD,EAAS,OAAO,KAErB,IAAIwF,EAAQxF,EAAQwF,MAIpB,OAHIxF,EAAQuF,eACXC,QAAK9N,OAASsI,EAAQuF,aAAe,MAE/BC,CAAK,IAEZ7F,OAAO7F,SACP6X,KAAK,MAED1X,EAAUlE,EAAE8xB,KAAK,0BAA2B,CACjDoS,aAAc8J,EACd7J,EAAGC,IACF,IAAKA,EAAQ,OAAO,KACpB,MAAM6J,EAAe7J,EACnBn+B,WACAqD,MAAM,MAER,OAAO2kC,EAAY3nC,KAAI,CAAC4nC,EAAOv2B,KAC9B,IAAIw2B,EAA+B,KAQnC,OANIx2B,IAAUs2B,EAAY3tC,OAAS,EAClC6tC,MAAaxsC,OAAO3B,EAAE,cAAgB,KAC5B2X,EAAQs2B,EAAY3tC,OAAS,IACvC6tC,EAAgB,MAIhB1W,GAAC2W,GACA,CAAA5b,SAAA,CAAAoD,GAAA,OAAA,CAAMxN,UAAU,iBAAkBoK,SAAA0b,IACjCC,IAFax2B,EAGJ,GAEX,IAIJ41B,EAAcxiC,KAAK,CAClBlE,GAAI8mC,EACJzpC,UACA0pC,UAAU,GAEZ,CACD,CAEA,OAAOL,EAAc5rC,OAAOgiC,EAAO,GACjC,CAACA,EAAQxwB,EAAWi6B,EAAsBC,EAAertC,IAEtDk9B,EAAYv0B,EAAA,CACjBg7B,OAAQ2J,GACLH,GAGJ,OACCvX,GAAC2N,GAAa9Q,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SACxCA,GACsB,EElEpB6b,GACLzgB,IAEA,MAAM/mB,GACLA,EAAEynC,aACFA,EAAe,KAAIC,QACnBA,EAAOC,YACPA,GAAc,EAAIp3B,QAClBA,EAAOq3B,WACPA,EAAa,GACV7gB,GAEGxb,EAAOqb,GAAYyG,GAAyB,CAClDlyB,KAAMssC,EACN76B,QAAS+6B,EACTzpC,MAAO,OAEF2pC,EAAgB1S,IAAO,IAEtB2S,EAAYC,GAAiB1a,GAASua,GACvCI,EAAW7S,GAAO2S,GAElB/6B,EAAQiwB,IACb,WAAyE,IAAA,IAAAz/B,EAAA5D,UAAAF,OAArE+D,EAA8ClE,IAAAA,MAAAiE,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAA9CD,EAA8CC,GAAA9D,UAAA8D,GACjD,MAAMob,EAASrb,EAAK,GAGdyqC,EAAeD,EAASxoB,QAAU,EACxCwoB,EAASxoB,QAAUyoB,EACnBF,EAAcE,GAEdrhB,GAAS0G,GAAIxrB,EAAAA,KACTwrB,GAAI,GAAA,CACP1gB,SAAS,EACT1O,MAAO,SAgER,MA7DYoD,WACX,IACC3C,GAAOb,KAAIhD,oCAAAA,OAC0BmtC,EAAY,KAChDjoC,EAAE,SAAAlF,OAAYkF,EAAE,KAAM,IAEvB,MAAM7E,QAA8B,IAAhBqC,EAAK/D,OACrBiuC,EAA8CO,GAC9CP,EACDO,EACApvB,IAIH,OAAImvB,EAASxoB,UAAYyoB,GACxBtpC,GAAOb,KAAIhD,6CAAAA,OACmCmtC,EAAY,eAAAntC,OAAcktC,EAASxoB,QAAO,KACvFxf,EAAElF,SAAAA,OAAYkF,EAAE,KAAM,IAEhB,OAIR4mB,EAAS,CACRzrB,OACAyR,SAAS,EACT1O,MAAO,OAERS,GAAOb,KAAI,qCAAAhD,OAC2BmtC,EACrCjoC,KAAAA,EAAElF,SAAAA,OAAYkF,EAAE,KAAM,GACtB7E,GAEMA,EACP,CAAC,MAAOgL,GAER,GAAI6hC,EAASxoB,UAAYyoB,EACxB,OAAO,KAIR,MAAM/pC,EAAQiI,EAEd,IAAI+hC,EAAc,mCAAAptC,OAAsCmtC,EAAe,KAcvE,OAZIjoC,IACHkoC,GAAcptC,SAAAA,OAAakF,EAAK,MAGjCrB,GAAOT,MAAKpD,GAAAA,OAAIotC,EAAcptC,KAAAA,IAAAA,OAASoD,EAAU2a,KAAAA,GAEjD+N,EAAS,CACRzrB,KAAM,KACNyR,SAAS,EACT1O,UAEDqS,SAAAA,EAAUrS,GACH,IACR,GAGMiqC,EACP,GACD,CAACT,EAAS1nC,EAAIuQ,IAGfokB,IAAU,KACT,GAAIkT,EAAcroB,SAAWmoB,EAAa,CACzCE,EAAcroB,SAAU,OAEFlkB,IADAyrB,GACa,kBADbA,EAEpBha,EAFoBga,EAGNqhB,eAGdr7B,GAEH,IACE,CAACA,EAAO46B,EAAa5gB,IAExB,MAAMshB,EAAe98B,EAAMqB,SAA0B,OAAfrB,EAAMpQ,KAE5C,MAAO,CACND,MAAOqQ,EACPvQ,IAAK4rB,EACL7Z,MAAOA,EACPu7B,MAAOR,EACPO,eACA,uDChLIE,GAAmB,IAAIvjC,IC+DtB1D,eAAeknC,GAAkB5sC,GAQvC,IAAA0iB,EAAA,IARwCvC,YACxCA,EAAW0sB,iBACXA,EAAgBC,QAChBA,GAKA9sC,EACA,MAAMwnB,KAAQtoB,OAAM2tC,EAAgB3tC,KAAAA,OAAI4tC,GAElC9mC,QDxEAN,eACNshB,EACAjT,GAEA,MAAMg5B,YACLA,GAAc,EAAIjsB,sBAClBA,GAAwB,EAAIksB,QAC5BA,GAAU,GAEPj5B,EADAk5B,EAAcp4B,EACdd,EAAOe,IAEX,GAAIgM,EAAuB,CAC1B,MAAMosB,EAAa/tC,GAAQY,IAAOktC,GAClC,GAAmB,OAAfC,EAMH,OALIF,GACHjqC,GAAOb,KAAIhD,yBAAAA,OACe+tC,EAAezuC,IAAG,UAAAU,OAAS+tC,EAAexuC,OAG9DyuC,CAET,CAEA,MAAMC,EAAW,GAAAjuC,OAAM+tC,EAAexuC,KAAI,KAAAS,OAAI+tC,EAAezuC,KACvDwS,EAAU27B,GAAiB5sC,IAAIotC,GACrC,GAAIn8B,EACH,OAAOA,EAGR,MAAM+M,EAAU,WACf,IACC,MAAMxI,QAAeyR,IAIrB,OAHI+lB,GACH5tC,GAAQC,IAAI6tC,EAAgB13B,GAEtBA,CACP,CAAC,MAAOjT,GAOR,MANI0qC,GACHjqC,GAAOT,MAAK,8BAAApD,OACmB+tC,EAAezuC,IAAGU,UAAAA,OAAS+tC,EAAexuC,MACxE6D,GAGIA,CACP,CAAU,QACTqqC,GAAiBh7B,OAAOw7B,EACzB,CACA,EAlBe,GAqBhB,OADAR,GAAiBvtC,IAAI+tC,EAAapvB,GAC3BA,CACR,CCqBwBqvB,EACtB,IACC/xB,GAAI8D,IAAI,gBAAiB,CACxBlC,OAAQ,CACP9L,MAAO,CACNiR,WAAYyqB,EACZQ,WAAYP,OAIhB,CACCtuC,IAAKgpB,EACL/oB,KAAM,iBACNqiB,uBAAwBX,IAI1B,GAAIna,EAAS1D,eAASogB,EAAC1c,EAASzG,YAAI,IAAAmjB,IAAbA,EAAexB,eAKrC,MAJAne,GAAOT,MAAKpD,qDAAAA,OAC0C2tC,EAAgB,kBAAA3tC,OAAiB4tC,GACtF9mC,EAAS1D,OAEJ,IAAIzB,MAAM,qCAGjB,OAAOmF,EAASzG,KAAK2hB,cACtB,CAOOxb,eAAe4nC,GAA0B9sC,GAK1B,IAAA+sC,EAAA7sC,EAAA8sC,EAAAC,EAAA,IAL2BttB,YAChDA,EACApM,SAAS25B,iBAAEA,GACXtpC,GAAIge,EACJ7iB,KAAM8G,GACe7F,EACjBmtC,EAAkC,KAEtC,GAAIxtB,EAAa,CAAA,IAAAytB,EAChB,MAAMC,EAAyC,QAAtBD,EAAGvnC,EAAMynC,qBAAa,IAAAF,EAAAA,EAAI,GAEnD,GAAIC,EAAoBhwC,OAAS,EAAG,CACnC,MAAMkwC,EAAcF,EAAoBhqC,KAAIC,IAAS,CACpDM,GAAIN,EAAKkD,UACT0B,SAAU5E,EAAK4E,aAEhB3F,GAAOb,KACN,iEACA6rC,GAGDJ,Q5FqDIjoC,eACNsC,GAKA,MAAMgmC,QAAoBpkC,KAE1B,GAAqB,IAAjB5B,EAAMnK,OACT,OAAOmwC,EAIR,GAAI7wC,IAAmB,CACtB,MAAMsM,EAAW5M,IACjB,GAAI4M,SAAAA,EAAU8F,SAAU,CACvB,MAAM0+B,EAAYjmC,EAAMnE,KAAIC,IAEpB,CACNoG,cAFqBnD,GAAiBjD,EAAKM,IAG3CsE,SAAU5E,EAAK4E,aAGjB3F,GAAOb,KACN,0DACA+rC,GAED,MAAMrmC,QAAa6B,EAAS8F,SAAS0+B,GAErC,OADAvkC,GAAkB9B,GACXA,CACR,CACA7E,GAAOb,KACN,4FAEF,CAUA,aAPMyD,GAA8C,eAAgB,CACnEQ,OAAQ,OACRC,KAAMvG,KAAKC,UAAU,CACpBkI,YAIKqB,IAAQ,EAChB,C4FlGuB6kC,CAAaH,EACjC,MAAUL,IACV3qC,GAAOb,KAAK,yDAEZyrC,QAAoB/jC,MAGrBF,GAAkBikC,GAGlB,MAAMQ,GACL,IAAI3uC,MAAO+wB,UAAY1xB,GAExBM,GAAQC,IAAIR,GAAmCuvC,GAG/C,MAAMtpC,EAAM,IAAI2tB,IAAIx1B,OAAOiI,SAASkhB,MAEpCthB,EAAIQ,aAAasM,OAAOyF,IAExBC,GAAc5R,SAAQ0uB,IACrBtvB,EAAIQ,aAAasM,OAAOwiB,EAAM,IAG/Bn3B,OAAOoxC,QAAQC,aAAa,KAAM,GAAIxpC,EACvC,CAEA1F,GAAQC,IAAIb,GAAqB6jB,GAEjC,MAAM0qB,UAAOS,EACwB7sC,QADxBA,EACkB,QADlB8sC,EACG,QADHC,EACXpnC,EAAMiL,gBAANm8B,IAAcA,OAAdA,EAAAA,EAAgB9pC,qBAAa,IAAA6pC,EAAAA,EAAI,cAAE9sC,SAApCA,EAAuCmD,KAAIC,GAAQA,EAAKM,KAAI+U,KAAK,YAAI,IAAAo0B,EAAAA,EAAI,GAQ1E,MAAO,CACN78B,gBAPuBk8B,GAAmB,CAC1CzsB,cACA0sB,iBAAkBzqB,EAClB0qB,YAKAa,cAEF,CC7IA,MAAMW,GAAwBjvC,IAA6C,IAA5C0wB,SAAEA,GAAsC1wB,EACtE,MAAMojC,gBAAEA,EAAe5zB,OAAEA,GAAWsjB,KAE9BhS,EAActR,EAAOsR,YAErBjQ,EAAY07B,GAA2D,CAC5ExnC,GAAI,OACJ2nC,aAAa,EACbD,QAASpmC,MACR6oC,EACAC,KAEA,MACMC,EADWzxC,OAAOiI,SAAS+U,SACLjV,WAAW,SAEjC2pC,EAA8B,IAAfH,EAEfI,GAAwBD,GAAgBD,EAExC7mC,QAAayB,IAASslC,GAEJ,IAApB/mC,EAAKe,YAAoB+lC,GAE5BjM,EAAgBrjC,IAAIxC,EAAgBsV,WAGrC,MAAQtK,KAAMkJ,GAAoBnJ,GACjCC,EACA4mC,EAAY99B,UAAUD,cAGvB,MAAO,CACNM,YAAaD,EACbF,SAAUhJ,EACV,IAKGuI,EAAay7B,GAAgD,CAClExnC,GAAI,QACJ0nC,QAASpmC,UACR,MAAM6P,QAAe+3B,GAA2Bz+B,GAEhD,GAAI0G,EAAOo4B,aAAextB,EAAa,CACtC,MAAQvY,KAAMgnC,GAAmBjnC,GAChC4N,EAAOo4B,YACPp4B,EAAO7E,UAAUD,cAElBP,EAAU9Q,IAAI,CACbG,KAAM,CACLqR,SAAU2E,EAAOo4B,YACjB58B,YAAa69B,GAEd59B,SAAS,EACT1O,MAAO,MAET,MACC4N,EAAUiB,MAAMoE,GAGjB,OAAOA,CAAM,IAITs5B,EAA0BjD,GAAc,CAC7CxnC,GAAI,qBACJ2nC,aAAa,EACbD,QAASpmC,MAAOpF,EAAYsjC,KAC3B,MAAMxhB,EAAavT,EAAOzK,GACtBge,SjF5EA1c,eACN0c,EACA7iB,GAEA,IAAI,IAAAuvC,EACH/rC,GAAOb,KAAK,wCAAyCkgB,EAAY7iB,GACjE,MAAMyG,QAAiBqV,GAAIoE,MAAM,yBAA0B,CAC1DxC,OAAQ,CAAEkB,KAAM,CAAE/Z,GAAIge,IACtBhc,KAAM,CAAE7G,UAKT,OAFAwD,GAAOb,KAAK,kCAAmC8D,WAE/C8oC,EAAO9oC,EAASzG,YAAI,IAAAuvC,OAAA,EAAbA,EAAe5tB,cACtB,CAAC,MAAO5e,GAER,MADAS,GAAOT,MAAM,+BAAgCA,GACvCA,CACP,CACD,CiF2DUysC,CAAmB3sB,EAAYwhB,EACtC,IAIIxzB,EAAmBw7B,GAGvB,CACDxnC,GAAI,cACJ2nC,aAAa,EACbD,QAASpmC,MAAOpF,EAAY2c,KAA6B,IAAA+xB,EAAAC,EACxD,MAAM7sB,EAAavT,EAAOzK,GACpB6pC,GAAuB,QAAXe,EAAA/xB,EAAOrV,YAAPonC,IAAWA,OAAXA,EAAAA,EAAahnC,QAAS,GAExC,GAAIoa,EAAY,CACf,MAAM8sB,EAAqBxxC,MAAMC,QAAQswC,GACtCA,EAAUpqC,KAAIC,G9F9Bf,SAAgCA,GAAqB,IAAAqrC,EAAAC,EAtB1D9vC,EAuBA,MAAO,CACN0H,UAAWlD,EAAK2E,WAChB2E,OAAQtJ,EAAKsJ,OACbN,OA1BDxN,EA0B8BwE,EAAKgJ,MAxB/B3J,GAAM7D,GACF,EAEDA,EAAQ,KAsBd0N,MAAOlJ,EAAKqJ,cACZJ,aAAgC,QAApBoiC,EAAErrC,EAAK2J,qBAAa,IAAA0hC,EAAAA,EAAI,GACpCjjC,MAAOpI,EAAKoI,MACZxD,SAAuB0mC,QAAfA,EAAEtrC,EAAK4E,gBAAQ0mC,IAAAA,EAAAA,EAAI,EAE7B,C8FoB6BC,CAAsBvrC,KAC5C,GAEH+qC,EAAwB19B,MAAM,CAC7B28B,cAAeoB,GAEjB,CAEA,MAAMI,GAAiCL,QAApBA,EAAApgC,EAAOtP,KAAK+R,oBAAQ29B,GAAU,QAAVA,EAApBA,EAAsBM,gBAAQ,IAAAN,OAAA,EAA9BA,EAAgCpxC,SAAU,EAC7D,aDtGI6H,eAA6BrG,EAEnCiwC,GAAkB,IAAAR,EAAA,IADlB19B,QAAEA,EAAOxJ,KAAEA,EAAIyJ,UAAEA,GAA8BhS,EAG/C,MAAMmwC,GAAuB5nC,EAAKI,OAAS,IAAInE,KAAIC,IAAS,CAC3DkD,0CAAS9H,OAAkC4E,EAAK2E,YAChDC,SAAU5E,EAAK4E,aAGV+mC,GAAsBp+B,GAAa,IAAIxN,KAAIC,IAAS,CACzDU,WAAYV,EAAKU,WACjBkE,SAAU,EACVrE,OAAQP,EAAKO,WAGR2B,QAAiBqV,GAAIgE,KAAK,sBAAuB,CACtDpC,OAAQ,CAAEkB,KAAM,CAAEuxB,KAAMt+B,IACxBhL,KAAM,CACLiL,UAAWo+B,EACXE,WAAYH,EACZI,YAAaN,KAIuC,IAAAO,EAAAC,EAAtD,GAAI9pC,EAAS1D,eAASwsC,EAAC9oC,EAASzG,YAAI,IAAAuvC,IAAbA,EAAe5tB,eAKrC,MAJAne,GAAOT,MAAK,iDAAApD,OACsCkS,GACjDpL,EAAS1D,OAEJ,IAAIzB,MAAK,gCAAA3B,OACyC,QADzC2wC,UAAAC,EACkB9pC,EAAS1D,aAAK,IAAAwtC,OAAA,EAAdA,EAAgBruC,eAAO,IAAAouC,EAAAA,EAAI,kBAI7D,OAAO7pC,EAASzG,KAAK2hB,cACtB,CCmEgBzO,CAAewK,EAAQqyB,EAAW,KAI1CtM,GC1IQ+M,EAACt+B,EAAyCu+B,KACzD,MAAMrgC,EAAQ8hB,IAAS,GACjBwe,EAAY1W,IAAO,GAYzB,OAVAR,IAAU,KACJkX,EAAUrsB,SACdnS,GAAS,KACR9B,EAAM,IAAG,GACTsgC,EAAUrsB,SAAU,CAAI,GAE1B,GAEEosB,GAEIrgC,CAAK,ED4HUogC,EACrBx7B,IAAU,IAAAvE,EACT,MAAMO,EAAQJ,EAAW7Q,MAAMC,KACzBqI,EAA2BoI,QAAvBA,EAAGE,EAAU5Q,MAAMC,YAAhByQ,IAAoBA,OAApBA,EAAAA,EAAsBe,YAC7BO,EAAWzC,EAAOtP,KAAK+R,SAE7B,GAAIf,GAAS3I,EAAM,CAClB2M,IACA,MAAMlD,EAAY5N,GAAoB6N,GACtClB,EAAiBe,MAAM,CACtBvJ,OACAwJ,QAASb,EAAMG,UAAUtM,GACzBiN,aAEF,IAED,CAAClB,EAAW7Q,MAAMC,KAAM2Q,EAAU5Q,MAAMC,KAAM6Q,EAAiBe,QAG1DmC,GACJ0vB,GAAe9yB,EAAU5Q,MAAM0R,SAAWZ,EAAiB9Q,MAAM0R,QAE7Dk/B,EAAeta,IACpB,IACCzlB,EAAW7Q,MAAMgD,OACjB4N,EAAU5Q,MAAMgD,OAChB8N,EAAiB9Q,MAAMgD,OACxB,CACC6N,EAAW7Q,MAAMgD,MACjB4N,EAAU5Q,MAAMgD,MAChB8N,EAAiB9Q,MAAMgD,QAInB6tC,EAAY7uC,QAAQ4uC,GAEpBzV,EAAe7E,IACpB,KAAuB,CACtBzlB,aACAD,YACAE,mBACAy+B,0BACAv7B,YACA68B,eAED,CACChgC,EACAD,EACAE,EACAy+B,EACAv7B,EACA68B,IAIF,OACChd,GAACJ,GAAc/C,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SACzCA,GACuB,EE1K3B,IAAYpzB,GAAZ,CAAYA,IACXA,EAAA,UAAA,YACAA,EAAA,KAAA,MACA,EAHD,CAAYA,KAAAA,GAGX,CAAA,IAeM,MAAMyzC,GAAsB,CAClCC,gBAAiB,UACjBC,sBAAuB,UACvBC,gBAAiB,UACjBC,oBAAqB,UACrBC,kBAAmB,UACnBC,sBAAuB,UACvBC,iBAAkB,UAClBC,mBAAoB,WCjDfC,GAAWA,KAChB,MACChiC,QAAQmV,MAAEA,IACPmO,KAEE2e,EAAiBlb,IAAQ,KAC9B,MAAMmb,EAAa7qC,EAAA,CAAA,EAAgCkqC,IACnD,IAAK,MAAO5xC,EAAKwyC,KAAUzrC,OAAOC,QAAQwe,QAAAA,EAAS,CAAE,GAChDgtB,IACHD,EAAcvyC,GAAOwyC,GAIvB,OAAOzrC,OAAOC,QAAQurC,GAAe7oC,QACpC,CAACC,EAAG9I,KAAkB,IAAfb,EAAKwyC,GAAM3xC,EACjB,MAAM4xC,ElGqBJ,SAAmBC,GAExBA,EAAMA,EAAI32B,QAAQ,IAAK,IAGvB,MAAMld,EAAImf,SAAS00B,EAAI72B,UAAU,EAAG,GAAI,IAAM,IACxCkU,EAAI/R,SAAS00B,EAAI72B,UAAU,EAAG,GAAI,IAAM,IACxCqnB,EAAIllB,SAAS00B,EAAI72B,UAAU,EAAG,GAAI,IAAM,IAExC82B,EAAMxlC,KAAKwlC,IAAI9zC,EAAGkxB,EAAGmT,GACrB0P,EAAMzlC,KAAKylC,IAAI/zC,EAAGkxB,EAAGmT,GACrB2P,EAAOF,EAAMC,EAGb/nB,GAAK8nB,EAAMC,GAAO,EAExB,IAAI/7B,EAAI,EACJwT,EAAI,EAER,GAAa,IAATwoB,EAKH,OAHAxoB,EAAIQ,EAAI,GAAMgoB,GAAQ,EAAIF,EAAMC,GAAOC,GAAQF,EAAMC,GAG7CD,GACP,KAAK9zC,EACJgY,IAAMkZ,EAAImT,GAAK2P,GAAQ9iB,EAAImT,EAAI,EAAI,IAAM,EACzC,MACD,KAAKnT,EACJlZ,IAAMqsB,EAAIrkC,GAAKg0C,EAAO,GAAK,EAC3B,MACD,KAAK3P,EACJrsB,IAAMhY,EAAIkxB,GAAK8iB,EAAO,GAAK,EAM9B,MAAMC,EAAO3lC,KAAKC,MAAU,IAAJyJ,GAClBk8B,EAAW5lC,KAAKC,MAAU,IAAJid,GACtB2oB,EAAW7lC,KAAKC,MAAU,IAAJyd,GAE5B,MAAAnqB,GAAAA,OAAUoyC,EAAIpyC,MAAAA,OAAKqyC,EAAQ,OAAAryC,OAAMsyC,EAAQ,IAC1C,CkGhE2BC,CAAST,GAGhC,OADA7oC,OADiBjJ,OAAqBV,ElGmEvC+b,QAAQ,qBAAsB,SAC9BA,QAAQ,wBAAyB,SACjCm3B,gBkGpEoBT,EACZ9oC,CAAG,GAEX,GACuB,GACtB,CAAC6b,IAEJ,MAAO,CACNA,QACA2tB,aAAcb,EACd,EC3BIc,GACLzmB,IAKA,MAAM0mB,EAAUtY,GAA8B,OACxCoY,aAAEA,GAAiBd,KAEzB,OACC1d,GAACgG,GAAYnJ,SAAS,CAAA1wB,MAAOuyC,EAC5B9hB,SAAAoD,GAAA,MAAAjtB,EAAA,CAGC4rC,aAAcx0C,GAAKA,EAAE6nC,kBACrBxf,UAAU,UACV8T,IAAKoY,EACLztC,GAAIkT,GACJyB,MAAO44B,GACHxmB,KAEiB,EChBnB4mB,GAAmB,IAAI37B,IAE7B,SAAS47B,KAAgB,IAAAC,EACxB,OAAwDA,QAAxDA,EAAO9yC,GAAQY,IAAcf,WAA2BizC,IAAAA,EAAAA,EAAI,EAC7D,CAEA,SAAS/I,GAAgBgJ,GACxB,OACCF,KAAmB5pC,SAAS8pC,IAAeH,GAAiBxxC,IAAI2xC,EAElE,CASA,SAASC,GAAYxiC,GACW,IAAAyiC,EAAAC,EAAV,WAAjB1iC,EAAMnF,SACgC,UAAf4nC,QAAtBA,EAAAziC,EAAMshB,SAASld,mBAAOq+B,SAAtBA,EAAwBxW,UAT9B,SAA0BsW,GACzB,MAAMI,EAAON,KACRM,EAAKlqC,SAAS8pC,IAClB/yC,GAAQC,IAAIJ,GAA4B,IAAIszC,EAAMJ,GAEpD,CAKGK,CAAiB5iC,EAAMshB,SAAS7sB,IACe,gBAAf,QAAtBiuC,EAAA1iC,EAAMshB,SAASld,eAAfs+B,IAAsBA,OAAtBA,EAAAA,EAAwBzW,WAClCmW,GAAiB/9B,IAAIrE,EAAMshB,SAAS7sB,KAGtC,MAAO,CAAEoG,OAAQ,WAClB,CAEA,MAAMgoC,GAAmBnzC,IAIpB,IAJqB0wB,SACzBA,GAGA1wB,EACA,MAAOsQ,EAAOqb,GAAYyG,GAAwB,CAAEjnB,OAAQ,aAEtD+L,EAAQ6qB,IAAanQ,IACI,IAA1BA,EAASwK,MAAM59B,SAGfqrC,GAAgBjY,EAAS7sB,KAG7B4mB,EAAS,CAAExgB,OAAQ,SAAUymB,WAAUwhB,UAAW,IAAI,GACpD,IAEGC,EAAOtR,IAAY,KACxBpW,GAAS0G,GAAQygB,GAAYzgB,IAAM,GACjC,IAEG7N,EAAOud,IAAY,KACxBpW,GAAS0G,IACR,GAAoB,WAAhBA,EAAKlnB,OACR,OAAOknB,EAER,MAAMihB,EAAYjhB,EAAK+gB,UAAY,EACnC,OAAIE,GAAajhB,EAAKT,SAASwK,MAAM59B,OAC7Bs0C,GAAYzgB,GAEpBxrB,EAAAA,EAAA,CAAA,EAAYwrB,GAAI,CAAA,EAAA,CAAE+gB,UAAWE,GAAS,GACrC,GACA,IAEGC,EAAWxR,IAAY,KAC5BpW,GAAS0G,GACY,WAAhBA,EAAKlnB,OACDknB,EAERxrB,EAAAA,EAAA,CAAA,EAAYwrB,GAAI,CAAA,EAAA,CAAE+gB,UAAW9mC,KAAKwlC,IAAI,EAAGzf,EAAK+gB,UAAY,MACzD,GACA,IAEGI,EAAWzR,IAAa0R,IAC7B9nB,GAAS0G,IACR,GAAoB,WAAhBA,EAAKlnB,OACR,OAAOknB,EAER,MAAMxc,EAAQwc,EAAKT,SAASwK,MAAM3wB,WAAUioC,GAAQA,EAAK3uC,KAAO0uC,IAChE,OAAe,IAAX59B,EACIwc,EAERxrB,EAAAA,EAAA,CAAA,EAAYwrB,GAAI,CAAA,EAAA,CAAE+gB,UAAWv9B,GAAK,GACjC,GACA,IAEG+zB,EAAkC,WAAjBt5B,EAAMnF,OAAsBmF,EAAMshB,SAAW,KAC9D+hB,EACY,WAAjBrjC,EAAMnF,OAAsBmF,EAAMshB,SAASwK,MAAM9rB,EAAM8iC,WAAa,KAE/DpV,EAAe+D,IACnB0R,IAAmBE,eAAAA,EAAa5uC,MAAO0uC,GACxC,CAACE,IAGIvY,EAAe7E,IACpB,KAAyB,CACxBjmB,QACAs5B,iBACA+J,cACA1Y,SAA2B,WAAjB3qB,EAAMnF,OAChB+L,QACAm8B,OACA7uB,OACA+uB,WACAC,WACAxV,eACA6L,sBAED,CACCv5B,EACAs5B,EACA+J,EACAz8B,EACAm8B,EACA7uB,EACA+uB,EACAC,EACAxV,IAIF,OACClK,GAACgI,GAAgBnL,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SAC3CA,GACyB,kBCtHvBkjB,GAAwB5zC,IAGG,IAHF0wB,SAC9BA,GAE4B1wB,EADzBwP,EAAMgG,EAAAxV,EAAAyV,IAGT,MAAMlG,EAAkB0iB,GACvB30B,EAAgBuV,WAChBvC,IACCgI,GAAaK,QAAQP,GAAoBy7B,kBAAmB,CAAEvjC,UjBxB1CgE,SAAS2xB,iBAAiB,WAClC7/B,SAAQ8/B,IACrBA,EAAQO,gBAAgB,QAAQ,GiBwBN,IAIrBrD,EAAkBnR,GAA+B10B,EAAgBoV,MAEjEyoB,EAAe7E,IACpB,KAAuB,CACtBhnB,kBACA6zB,kBACA5zB,YAED,CAACD,EAAiB6zB,EAAiB5zB,IAGpC,OACCskB,GAACjB,GAAclC,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SACzCA,GACuB,kBCnCrBojB,GAAgB9zC,IAIjB,IAJkB0wB,SACtBA,GAGA1wB,EACA,MAAO46B,EAAOmZ,GAAY3hB,GAAuB,IAE3ChxB,EAAS2gC,IAAah9B,IAC3BgvC,GAAS1hB,GACRA,EAAK7tB,KAAIwvC,IACa,IAAAC,EAAjBD,EAAMjvC,KAAOA,IAEH,QAAbkvC,EAAAD,EAAMl/B,eAAO,IAAAm/B,GAAbA,EAAAx9B,KAAAu9B,IAED,OAAOA,EAAMjvC,KAAOA,EAAE8B,EAAAA,EAAA,CAAA,EAAQmtC,GAAK,GAAA,CAAEha,WAAW,IAAUga,CAAK,MAIjE78B,YAAW,KACV48B,GAAS1hB,GAAQA,EAAKvqB,QAAOksC,GAASA,EAAMjvC,KAAOA,KAAI,G/BrBlB,I+BsBV,GAC1B,IAEG4P,EAAMotB,IACXphC,IAA0E,IAAzEkU,SAAEA,EAAWspB,IAAwDx9B,EAA7B+T,EAAOc,EAAA7U,EAAA8U,IAC/C,MAAM1Q,EAAK2P,EAAQ3P,IAgDrB,SAAAlF,OAAgByM,KAAK0S,SAAS7a,SAAS,IAAI+vC,OAAO,EAAG,IAlCnD,OAZAH,GAAS1hB,GAOD,IAAIA,EANGxrB,EAAAA,KACV6N,GAAO,GAAA,CACV3P,KACA8P,WACAmlB,WAAW,OAKb7iB,YAAW,IAAM/V,EAAO2D,IAAK8P,GAEtB9P,CAAE,GAEV,CAAC3D,IAGI2O,EAAQgyB,IAAY,KACzBgS,GAAS1hB,GACRA,EAAK7tB,KAAIwvC,IAAQ,IAAAG,EAGhB,OADa,QAAbA,EAAAH,EAAMl/B,eAAO,IAAAq/B,GAAbA,EAAA19B,KAAAu9B,GACAntC,EAAAA,EAAA,CAAA,EAAYmtC,GAAK,CAAA,EAAA,CAAEha,WAAW,GAAK,MAIrC7iB,YAAW,KACV48B,EAAS,GAAG,G/BxDyB,I+ByDV,GAC1B,IAEG3Y,EAA8B,CACnCR,QACAjmB,MACAvT,SACA2O,SAGD,OACC+jB,GAACsK,GAAazN,SAAQ,CAAC1wB,MAAOm7B,EAAY1K,SACxCA,GACsB,yBC9EpB0jB,GAAap0C,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACxCkgB,GACC,MAAA9uB,EAAAA,EAAA,CAAA+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,2BAAAA,OAA6BymB,GAAa,KAC/CwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GACC,OAAA,CAAAvH,EAAG,GACHlV,EAAG,KACHuf,MAAO,GACPC,OAAQ,GACRwd,GAAI,GACJ/tB,UAAU,oCAEXwN,WACCwgB,SAAS,UACTC,SAAS,UACT/oB,EAAE,qWACFlF,UAAU,uCAEN,mBCxBDkuB,GAAWx0C,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACtCkgB,GACC,MAAA9uB,EAAAA,EAAA,CAAA+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,yBAAAA,OAA2BymB,GAAa,KAC7CwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GACC,OAAA,CAAAxN,UAAU,kCACVkF,EAAE,qCAEHsI,GAAA,OAAA,CACCxN,UAAU,kCACVkF,EAAE,iWAEE,mBClBDipB,GAAez0C,IAAA,IAACsmB,UACrBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERkgB,GACC,MAAA9uB,EAAAA,EAAA,CAAA+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRE,MAAM,6BACN1Q,UAASzmB,qEAAAA,OAAuEymB,GAAa,KACzFwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,WAAMtI,EAAE,yRACRsI,GAAA,OAAA,CAAMtI,EAAE,+ZACH,mBCdDkpB,GAAc10C,IAAA,IAACsmB,UACpBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERkgB,GACC,MAAA9uB,EAAAA,EAAA,CAAA+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRE,MAAM,6BACN1Q,UAASzmB,4DAAAA,OAA8DymB,GAAa,KAChFwF,GAAK,GAAA,CAET4E,SAAA,CAAAoD,GAAA,OAAA,CAAMtI,EAAE,qHACRsI,GAAA,OAAA,CAAMtI,EAAE,uaACRsI,GAAA,OAAA,CAAMtI,EAAE,8QACH,ECbDmpB,GAAiBA,IACf7gB,GAAC0B,GAAQ,CAAClP,UAAU,oGCOtB+N,GAAWH,GAChB,mGACA,CACCG,SAAU,CACTzf,KAAM,CACL/R,KAAM,oGACN+xC,IAAK,iGACL5vC,OACC,0GACD/B,MACC,uGACD4xC,SACC,6EAEFC,OAAQ,CACPC,OAAQ,2DAGVxgB,gBAAiB,CAChB3f,KAAM,UAiCHogC,GAAmD,CACxD1uB,UAAW,kBACXsQ,MAAO,GACPC,OAAQ,IAGT,SAASoe,GAAWpd,GACnB,OAAQA,GACP,IAAK,SACJ,OAAO/D,GAACsgB,GAAUvtC,EAAKmuC,CAAAA,EAAAA,KACxB,IAAK,QACJ,OAAOlhB,GAAC4gB,GAAW7tC,EAAKmuC,CAAAA,EAAAA,KACzB,IAAK,WACJ,OAAOlhB,GAAC2gB,GAAY5tC,EAAKmuC,CAAAA,EAAAA,KAC1B,QACC,OAAOlhB,GAAC0gB,GAAQ3tC,EAAKmuC,CAAAA,EAAAA,KAExB,CAEA,IAAezf,GAAAA,IAtCAv1B,IAQG,IAAAW,EAAA,IARF2lB,UACfA,EAASoK,SACTA,EAAQ9b,KACRA,EAAIkgC,OACJA,EAAMjd,KACNA,EAAIlmB,QACJA,GAAU,GAEG3R,EADV8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCqe,GAACC,GAAkB,CAAAvG,SAAUsG,GAAC6gB,GAAiB,IAAEhjC,QAASA,EACzD+e,SAAAiF,GAAA,QAAA9uB,EAAAA,EAAA,CAAOyf,UAAW3iB,GAAG0wB,GAAS,CAAEzf,OAAMkgC,WAAWxuB,IAAgBwF,GAAK,GAAA,CAAA4E,SAAA,CACpEukB,GAAuBt0C,QAAbA,EAACk3B,QAAAA,EAAQjjB,SAAIjU,IAAAA,EAAAA,EAAI,QAC5BmzB,GAAA,OAAA,CAAMxN,UAAU,yBAAwBoK,SAAEA,SAExB,ICrDtB,MAAMwkB,GAAiBA,KAAK,IAAA1e,EAAAC,EAAAjlB,EAAA2jC,EAC3B,MAAMj3C,EAAIi7B,GAAgB,WACpBroB,WAAEA,EAAUC,iBAAEA,GAAqB4iB,KAEnCyhB,UAAkB5e,EACF,QADEC,EACvB3lB,EAAW7Q,MAAMC,YAAjBu2B,IAAqBA,OAArBA,EAAAA,EAAuBplB,UAAUqC,uBAAe,IAAA8iB,GAAAA,EAC3C6e,UAAgB7jC,UAAA2jC,EAAGpkC,EAAiB9Q,MAAMC,YAAI,IAAAi1C,OAAA,EAA3BA,EAA6BE,wBAAgB,IAAA7jC,EAAAA,EAAI,EAE1E,OAAKV,EAAW7Q,MAAMC,MAAS6Q,EAAiB9Q,MAAMC,KAMpD4zB,GAACwhB,GAFCF,GAEM9uB,UAAU,qBAAqB1R,KAAK,kBAC1C1W,EAAE,kBAKmB,IAArBm3C,GAEM/uB,UAAU,qBAAqB1R,KAAK,eAC1C1W,EAAE,wBAKS,CAAAooB,UAAU,qBAAsBoK,SAAAxyB,EAAE,mBAnBzC41B,GAAC6gB,GAAc,GAmBoD,+CChBtEY,GAAc,WAA6C,IAAA5kC,EAAAa,EAAA,IAA5CgkC,EAAsC92C,UAAAF,OAAA,QAAA6B,IAAA3B,UAAA,GAAAA,UAAA,GAAA,CAAE,EAC5D,MAAM8Q,OAAEA,GAAWsjB,MACb/hB,iBAAEA,EAAgBF,UAAEA,GAAc8iB,KAElC8hB,EAAmC,QAAvB9kC,EAAGE,EAAU5Q,MAAMC,YAAhByQ,IAAoBA,OAApBA,EAAAA,EAAsBe,YAAY8R,SACjDkyB,EAA0C,QAA9BlkC,EAAGT,EAAiB9Q,MAAMC,YAAvBsR,IAA2BA,OAA3BA,EAAAA,EAA6BgS,SAASmyB,cAErDC,EACLJ,EAAYhyB,UACZkyB,GACAlmC,EAAOgU,UACPiyB,GrGrBsC,MqGwBjCI,EAAYC,KAEZC,EAAoBhU,IACzB,CAAC9hC,EAAe+1C,KAAyB,IAAAb,EACxC,MAAMc,EAA4Cd,QAA9BA,EAAGpkC,EAAiB9Q,MAAMC,YAAvBi1C,IAA2BA,OAA3BA,EAAAA,EAA6B3xB,SAGpD,OAAOvjB,GADN+1C,QAAAA,EAAgBjyC,GAAckyC,aAAAA,EAAAA,EAAgBD,aAAc,GAC1B,GAEpC,CAACjlC,EAAiB9Q,MAAMC,OAiCzB,MAAO,CAAEuvB,OA9BMsS,IACd,CAAC9hC,EAAwByU,KACH,iBAAVzU,IACVA,EAAQgE,WAAWhE,IAGpB,MAAAi2C,EAAArvC,EAAAA,EACI2uC,CAAAA,EAAAA,GACA9gC,IAFEyhC,eAAEA,EAAiB,GAAqBD,EAAfE,EAAa5gC,EAAA0gC,EAAAzgC,IAI5C4gC,EAAAxvC,EAAA,CACC2c,SAAUoyB,EACVU,sBAAuBH,EACvBI,sBAAuBJ,GACpBC,IAJEI,gBAAEA,GAAmCH,EAAfI,EAAajhC,EAAA6gC,EAAAn4B,IAOzC,MAAwB,SAApBs4B,EACIX,EAAUnsB,OAAOzpB,EAAOw2C,GAGzBZ,EAAUnsB,OAAOzpB,EAAK4G,EAAA,CAC5B6S,MAAO,WACP88B,mBACGC,GACF,GAEH,CAACZ,EAAWL,EAAaI,IAGTG,oBAAmBvyB,SAAUoyB,EAC/C,EC1DMc,GAAiBA,KAAK,IAAA/lC,EAAA6xB,EAC3B,MAAMuT,kBAAEA,GAAsBR,MACxBxkC,iBAAEA,EAAgBF,UAAEA,GAAc8iB,KAElCprB,EAAOsI,EAAU5Q,MAAMC,KACvB8Q,EAAcD,EAAiB9Q,MAAMC,KAoD3C,OAAA2G,EAAA,CACC+B,kBAnDc+H,EAAuB,QAAvB6xB,EAAG3xB,EAAU5Q,MAAMC,YAAhBsiC,IAAoBA,OAApBA,EAAAA,EAAsB9wB,YAAYpI,kBAAU,IAAAqH,EAAAA,EAAI,GAEb4lB,IAAQ,KAAK,IAAAogB,EACjE,IAAK3lC,IAAgBzI,EACpB,MAAO,CACNquC,WAAY,EACZC,UAAW,EACXC,YAAa,EACbC,cAAe,EACfC,mBAAoB,EACpBC,oBAAqB,EACrB5B,iBAAkB,EAClB6B,aAAa,GAGf,MACCC,cAAeP,EAAUQ,eACzBA,EAAcC,MACdA,EAAKC,cACLA,EAAaC,SACbA,EAAQN,oBACRA,EAAmB5B,iBACnBA,GACGrkC,EAGEgmC,EAAqBjB,EACqB,QADJY,EAC3CY,aAAQ,EAARA,EAAUC,gBAAgBC,6BAAqBd,IAAAA,EAAAA,EAAI,GAG9CI,EAAgBhzC,GACrBgyC,EAAkBuB,aAAAA,EAAAA,EAAezC,WAG5BgC,EAAYd,EAAkBqB,GAAkBL,EAEhDD,EAAcxqC,KAAK6kB,IAAI4kB,EAAkBsB,IAE/C,MAAO,CACNT,WAAYb,EAAkBa,GAC9BC,YACAC,cACAC,gBACAC,qBACAC,oBAAqBlB,EAAkBkB,GACvC5B,iBAAkBU,EAAkBV,GACpC6B,YAAaG,EAAQ,EACrB,GACC,CAACrmC,EAAazI,EAAMwtC,IAIL,mBC3Eb2B,GAAW13C,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACtCqe,cACC8C,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,yBAAAA,OAA2BymB,GAAa,KAC7CwF,GAAK,GAAA,CAAA4E,SAEToD,GACC,OAAA,CAAAtI,EAAE,mGACFuL,KAAK,eACL8G,OAAO,eACPD,YAAa,MACb+Z,cAAc,QACdC,eAAe,YAEX,iEC+BP,SAASC,GAAWC,GAAiC,IAApBC,yDAAmB,EACnD,OAAO3vC,OAAO0vC,EAAIE,QAAQD,GAC3B,CAEA,IAAexiB,GAAAA,IAzCDv1B,IAOG,IAPFC,MACdA,EAAQ,EAACg4C,eACTA,EAActmC,QACdA,EAAO+e,SACPA,EAAQpK,UACRA,GAEYtmB,EADT8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAQga,OAAQyoB,GAAqB3C,KAE/B4C,GACJr0C,GAAMm0C,IAAmBJ,GAAWI,GAAkBJ,GAAW53C,GAEnE,OACC6zB,GAACC,GAAiB,CACjBvG,SAAUsG,GAAC0B,GAAS,CAAAlP,UAAU,SAC9B3U,QAASA,EAAO+e,SAEhBiF,GACC,OAAA9uB,EAAAA,EAAA,CAAAyf,UAAW3iB,GACV,gEACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GAAM,OAAA,CAAAxN,UAAU,kBAAmBoK,SAAAwnB,EAAiBj4C,KACnDk4C,GACArkB,GAAM,OAAA,CAAAxN,UAAU,6DACdoK,SAAAwnB,EAAiBD,KAGnBvnB,OAEiB,IC3CtB,MAAM0nB,GAA2BA,IAE/BziB,UAAKrP,UAAU,0CACdoK,SAAA,CAAAoD,GAAC0B,GAAQ,CAAClP,UAAU,eACpBwN,GAAC0B,GAAS,CAAAlP,UAAU,kBCIjB+xB,GAAmBA,KACxB,MAAMn6C,EAAIi7B,MACF1J,OAAQyoB,GAAqB3C,MAC/BxkC,iBAAEA,GAAqB4iB,MAEvBkjB,UACLA,EAASE,cACTA,EAAaE,oBACbA,EAAmB5B,iBACnBA,EAAgB2B,mBAChBA,GACGN,KAEE4B,EAAkBtB,EAAqB,EACvCuB,EAAkBxB,EAAgB,EAClCyB,EAAoBnD,EAAmB,EAE7C,OAAKtkC,EAAiB9Q,MAAMC,KAS3B4zB,GAAA,MAAA,CAAKxN,UAAU,wDACdoK,SAAAoD,GAAA,QAAA,CAAOxN,UAAU,qCAAoCoK,SACpDiF,GAAO,QAAA,CAAArP,UAAU,6BAA4BoK,SAAA,CAC3C4nB,GACAxkB,GAAC2kB,GAAG,CAACx4C,OAA6B,EAAtB+2C,EAAyB1wB,UAAU,4BAC7CpoB,EAAE,gCAGJs6C,GACA1kB,GAAC2kB,GAAG,CAACx4C,MAAOo1C,EAAkB/uB,UAAU,iBAAgBoK,SACtDxyB,EAAE,gCAGJ24C,EAAY,GACZ/iB,GAAC2kB,GAAI,CAAAx4C,MAAO42C,EAASnmB,SAAGxyB,EAAE,4BAE1Bq6C,GACA5iB,GAAC8iB,GAAI,CAAAnyB,UAAU,eAAermB,MAAO82C,EAAarmB,SAAA,CACjDiF,GAAM,OAAA,CAAArP,UAAU,yBACfwN,GAAC2gB,GAAa,CAAAnuB,UAAU,4BAA6B,IACpDpoB,EAAE,6BAEH+4C,EAAsB,GACtBthB,GAAM,OAAA,CAAArP,UAAU,mCAAkCoK,SAAA,CAAA,IAC/CwnB,EAAiBjB,GAAsB,IACzCnjB,GAAC4jB,GAAS,CAAApxB,UAAU,gCAhC1BwN,GAAK,MAAA,CAAAxN,UAAU,gEACdoK,SAAAoD,GAACskB,GAAwB,CAAA,IAsCrB,EAIR,SAASK,GAAGz4C,GAMiC,IANhCC,MACZA,EAAKywB,SACLA,EAAQpK,UACRA,GAG4CtmB,EAC5C,OACC21B,GAAI,KAAA,CAAArP,UAAW3iB,GAAG,0CAA2C2iB,aAC5DwN,GACC,KAAA,CAAA4kB,MAAM,MACNpyB,UAAU,8GAEToK,SAAAA,IAEFoD,GAAA,KAAA,CAAIxN,UAAU,yCACboK,SAAAoD,GAAC6kB,GAAK,CAAC14C,MAAOA,QAIlB,wBCxFM24C,GAAsB54C,IAGe,IAHdsmB,UAC5BA,GAEsCtmB,EADnC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCkgB,GAAA,MAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,oDACA2iB,IAEGwF,GAAK,GAAA,CAET4E,SAAA,CAAAoD,GAAA,MAAA,CAAKxN,UAAU,yCAAwCoK,SACtDoD,GAACohB,GAAiB,CAAA,KAEnBphB,GAACukB,GAAgB,OACZ,EChBFQ,GAAiBA,KAAK,IAAAloC,EAC3B,MAAMzS,EAAIi7B,GAAgB,iBACpBtoB,UAAEA,GAAc8iB,KAEhB/qB,EAAgC,QAAvB+H,EAAGE,EAAU5Q,MAAMC,YAAhByQ,IAAoBA,OAApBA,EAAAA,EAAsBe,YAAYpI,WAE9CwvC,EAAmC,KAApBlwC,QAAAA,EAAa,GAAW,SAAW,SAExD,OACC+sB,GAAK,MAAA,CAAArP,UAAU,+IACdwN,GAACsC,GAAoB,CAAA,GACrBT,UAAKrP,UAAU,yCACdoK,SAAA,CAAAoD,GAAA,OAAA,CAAMxN,UAAU,iDACdoK,SAAAxyB,EAAE,eAEJ41B,GAAA,OAAA,CAAMxN,UAAU,iCAAkCoK,SAAAxyB,EAAE46C,UAEhD,uDCbFC,GAAc/4C,IAKG,IALFsmB,UACpBA,EAAS0yB,aACTA,EAAe,qBAAoBC,mBACnCA,EAAqB,+BAEHj5C,EADf8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCqe,GACC,MAAAjtB,EAAAA,EAAA,CAAAyf,UAAW3iB,GAAG,gCAAiC2iB,GAC/CmP,KAAK,QACK,YAAA,aACN3J,GAAK,GAAA,CAET4E,SAAAiF,GAAA,MAAA,CAAKrP,UAAU,gIAA+HoK,SAAA,CAC7IoD,GAAC4gB,GAAY,CAAApuB,UAAU,wBAAuB,cAAa,SAC3DwN,GAAA,IAAA,CACCxN,UAAU,0CACVvhB,GAAG,gBAAe2rB,SAEjBsoB,IAEFllB,GAAG,IAAA,CAAAxN,UAAU,+BAAgCoK,SAAAuoB,SAEzC,EC3BFC,GAAgBA,KACrB,MAAMt4B,E5FL6wCsM,KAAItM,Q4FOtxCpR,QACCtP,MAAM2gB,KAAEA,KAENiS,KAEJ,IAAKjS,EACJ,MAAM,IAAIrf,MACT,+EAIF,MAAO,CACNyxB,KAAMA,IAAMD,GAAWC,KAAKrS,EAAQC,GACpCuS,SAAUA,IAAMJ,GAAWI,SAASxS,EAAQC,GAC5CyS,KAAMN,GAAWM,KACjB,ECfI6lB,GAAuBC,IAC5B,MAAMl7C,EAAIi7B,GAAgB,yBAE1B,OACCxD,GAAC0E,GAAOC,MAAKzzB,EAAAA,EAAA,CACZyf,UAAU,gDACN8yB,GAAM,GAAA,CACV/f,SAAU1H,GAAgBG,cAE1BpB,SAAA,CAAAoD,GAACsC,GACC,CAAA1F,SAAAyF,GACArC,GAACoC,IAAO5P,UAAU,OAAO5M,MAAO,CAAEyc,UACjCzF,SAAAoD,GAAC4gB,GAAY,CAAApuB,UAAU,mDAI1BwN,GAACuG,GAAOiB,MAAO,CAAA5K,SAAAxyB,EAAE,WACjB41B,GAACuG,GAAOkB,mBAAUr9B,EAAE,aACpB41B,GAACuG,GAAOlC,OAAQ,CAAAzH,SAAAxyB,EAAE,aAClB41B,GAACuG,GAAO5B,iBAAQv6B,EAAE,eACJ,EChBXm7C,GAAuBA,KAC5B,MAAMn7C,EAAIi7B,GAAgB,gBACpBnG,EAAakmB,MAEbnoC,iBACLA,EAAgBy+B,wBAChBA,EACAv7B,UAAWqlC,EAAkBxI,UAC7BA,GACGnd,MACEujB,YAAEA,EAAWJ,YAAEA,EAAWluC,UAAEA,GAAc8tC,MAC1C7U,OAAEA,GAAWH,KAEb6X,EAAiB1X,EAAO/5B,QAAO7E,GAASA,EAAM6oC,WAE9C0N,GACJ1I,IACAwI,IACA9J,EAAwBvvC,MAAM0R,SACL,IAA1B4nC,EAAe/6C,OAEVi7C,EAAsB7wC,EAAY,EAExC,SAAS8wC,IACHF,GAELxmB,EAAWI,UACZ,CAEA,MAAMumB,EAAsBnnB,GAAU,CACrCE,UAAWpiB,IACVA,EAAMvQ,KAAI,GACV25C,GAAoB,IAetB,OACC/jB,GAAA,MAAA,CAAKrP,UAAU,2FACdoK,SAAA,CAAAiF,GAAA,MAAA,CAAKrP,UAAU,0EAAyEoK,SAAA,CACvFoD,GAAI,KAAA,CAAAxN,UAAU,8CAA6CoK,SAC3CxyB,EAAdg5C,EAAgB,eAAoB,oBAEtCpjB,GAAC6kB,GAAM,CAAA14C,MAAO62C,EAAanlC,QAASZ,EAAiB9Q,MAAM0R,aAE5DmiB,GAACwE,GACA,CAAAP,UAAWyhB,EACXphB,QArBH,WACMohB,IAEAC,EAKLC,IAJCC,EAAoBrpC,MAAMvQ,KAAI,GAKhC,EAaGumB,UAAU,SACVuR,KAAMlB,GAAcjG,SAEpBoD,oBAEI51B,EADFu7C,EACI,mBACA,2BAGP3lB,GAAG,IAAA,CAAAxN,UAAU,uGAETpoB,EADFu7C,EACI,sBACA,4BAEN3lB,GAACqlB,GAAmBtyC,EAAK8yC,CAAAA,EAAAA,EAAoB/mB,eACxC,EC/EFgnB,GAAiBA,KACtB,MAAM17C,EAAIi7B,GAAgB,WACpB5pB,gBAAEA,GAAoBujB,KAE5B,OACC6C,UAAKrP,UAAU,wFACdoK,SAAA,CAAAoD,GAAA,KAAA,CAAIxN,UAAU,kDAAiDoK,SAC7DxyB,EAAE,WAEJ41B,GAACkF,GACA,CAAAE,WACA,EAAA5S,UAAU,mCACV2S,WAAY,CAAE3S,UAAW,kCACzB8R,QAASA,IAAM7oB,EAAgBxP,IAAIzC,EAAgBuV,eAE/C,mBCpBFgnC,GAAW75C,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACtCqe,GACC,MAAAjtB,EAAAA,EAAA,CAAA+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,yBAAAA,OAA2BymB,GAAa,KAC7CwF,GAAK,GAAA,CAET4E,SAAAoD,GAAA,OAAA,CACCtI,EAAE,uzCACFuL,KAAK,mBAED,ECTD+iB,GAAsBA,KAC3B,MAAM57C,EAAIi7B,GAAgB,yBACpB5pB,gBAAEA,GAAoBujB,KAE5B,OACCgB,GAAA,MAAA,CAAKxN,UAAU,0CAAyCoK,SACvDiF,GAAK,MAAA,CAAArP,UAAU,sKACdoK,SAAA,CAAAoD,GAAC+lB,GAAQ,CAACvzB,UAAU,mBACpBwN,GAAA,OAAA,CAAMxN,UAAU,gCAA+BoK,SAC7CxyB,EAAE,iBAEJ41B,GACC,SAAA,CAAAsE,QAASA,IAAM7oB,EAAgBxP,IAAIzC,EAAgBuV,WACnDyT,UAAU,4KACVlnB,KAAK,SAEJsxB,SAAAxyB,EAAE,kBAGA,ECrBF67C,GAAgBA,KACrB,MAAMlY,OAAEA,GAAWH,KAEnB,OAAsB,IAAlBG,EAAOrjC,OACH,KAIPs1B,GAAK,MAAA,CAAAxN,UAAU,sFACbub,EAAOr9B,KAAIxE,IAAA,IAAC+E,GAAEA,EAAE3C,QAAEA,GAASpC,EAAA,OAC3B8zB,GAACwhB,GAEA,CAAAhvB,UAAU,sDACV1R,KAAK,QAEJ8b,SAAAtuB,GAJI2C,EAKG,KAEL,kBCRKi1C,GAAiD,CAC7DjI,IAAK,CAAEkI,MAAO,EAAGliB,UAAU,GAC3B+Z,IAAK,CAAEmI,MAAO,GAAIliB,UAAU,IAuBb,SAAAmiB,GACfC,EAGAhyC,GAEA,MAAMnE,EAAQnE,aAAAA,OAAgBsI,EAAQ4F,QACtC,IAAKosC,EAAe,OAAOn2C,EAC3B,IACC,MAAMwB,EAAM20C,EAAchyC,GAC1B,MAAsB,iBAAR3C,GAAoBA,EAAMA,EAAMxB,CAC9C,CAAC,MAAA6b,GACD,OAAO7b,CACR,CACD,kGCjCMo2C,GAAiBp6C,IASG,IATFq6C,YACvBA,EAAWC,YACXA,EAAWC,YACXA,EAAcP,GAAmB3wC,SACjCA,EAAQsI,QACRA,GAAU,EAAKomB,SACfA,GAAW,EAAKzR,UAChBA,GAEqBtmB,EADlB8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAM+kC,EAAa7oC,GAAWomB,EAExB0iB,EAAUpxC,IAAakxC,EAAYxI,IAAIkI,MACvCS,EAAUrxC,IAAakxC,EAAYzI,IAAImI,MAEvCU,EAAqBJ,EAAYzI,IAAI/Z,UAAY2iB,GAAYF,EAC7DI,EAAqBL,EAAYxI,IAAIha,UAAY0iB,GAAYD,EAE7DK,EAAkB9Y,IAAY17B,UACnC,IAAIs0C,EACJ,UACON,EAAYK,EAClB,CAAC,MAAOxvC,GACRxH,GAAOT,MAAM,oBAAqBiI,EACnC,IACE,CAACyvC,EAAmBN,EAAaK,IAE9BI,EAAkB/Y,IAAY17B,UACnC,IAAIu0C,EACJ,UACON,EAAYG,EAClB,CAAC,MAAOvvC,GACRxH,GAAOT,MAAM,oBAAqBiI,EACnC,IACE,CAAC0vC,EAAmBN,EAAaG,IAE9BM,WDAN1xC,GAC4D,IAA5DkxC,yDAAyCP,GAEzC,OAAO1tC,KAAKwlC,IACXyI,EAAYxI,IAAIkI,MAChB3tC,KAAKylC,IAAI1oC,EAAUkxC,EAAYzI,IAAImI,OAErC,CCPyBe,CAAc3xC,EAAUkxC,GAEhD,OACC5kB,cACCrP,UAAW3iB,GACV,iIACA62C,GACC,6DACDl0B,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,aACC10B,KAAK,SACLknB,UAAU,oIACVyR,SAAU6iB,EACVxiB,QAAS0iB,WAEThnB,GAACgE,IAAKrD,QAAQ,gBAAgBnD,KAAK,KAAIZ,SACtCoD,WAAMxN,UAAU,oEAEToK,SAAA,UAGToD,GAAA,MAAA,CAAKxN,UAAU,uDACboK,SAAAqqB,IAEFjnB,GAAA,SAAA,CACC10B,KAAK,SACLknB,UAAU,oIACVyR,SAAU4iB,EACVviB,QAASyiB,EAETnqB,SAAAoD,GAACgE,GAAK,CAAArD,QAAQ,gBAAgBnD,KAAK,cAClCwC,GAAM,OAAA,CAAAxN,UAAU,oEAAmEoK,SAAA,aAKhF,ECkBR,IAAe6E,GAAAA,IA1FQv1B,IAIG,IAJF2H,UACvBA,EAAS0B,SACTA,EAAQ4xC,aACRA,GACqBj7C,EACrB,MAAM9B,EAAIi7B,GAAgB,YACnBllB,EAAWinC,GAAgB9oB,IAAS,IACrCvhB,UAAEA,EAAWoD,UAAWknC,GAAoBxnB,KAC5CkO,EAASH,MACTgB,kBAAEA,GAAsBf,KAExByZ,EAAuBrZ,IAC5B17B,UACC60C,GAAa,GAEb,MAAMrP,EAAUpN,GAAkBE,aAElC,IAEC9tB,EAAU9Q,KAAIsyB,GAAIxrB,EAAAA,EAAA,GACdwrB,GAAI,GAAA,CACP1gB,SAAS,EACT1O,MAAO,SAGR,MAAMqrC,QAAoB9jC,GAAuB,CAChD7C,YACA0B,SAAUgyC,UAGL3Y,EAAkB4L,GAGpBzM,EAAO3gC,IAAI2qC,IACdhK,EAAOzgC,OAAOyqC,EAEf,CAAC,MAAO3gC,GACR,MACMmB,EAAS8Q,SADDjS,EACgB9I,SACxBk5C,EAAYp3C,MAAMmI,GAAU,KAAOA,EAEzCwE,EAAU9Q,KAAIsyB,GAAIxrB,EAAAA,EAAA,GACdwrB,GAAI,GAAA,CACP1gB,SAAS,MAGVkwB,EAAO54B,KAAK,CACXlE,GAAI8mC,EACJzpC,QAASlE,EAAC2B,SAAAA,OAAU++B,GAAsB0c,MAE5C,CAAU,QACTJ,GAAa,EACd,IAED,CAACrqC,EAAWlJ,EAAWk6B,EAAQ3jC,EAAGwkC,IAGnC,GAAI5+B,GAAMuF,GACT,OAAO,KAGR,MAAMqC,UAAEA,EAAS6uC,YAAEA,GFjEd,SACLU,GAA8C,IAAAM,EAAAC,EAAAC,EAE9C,MAAMC,EAA+BH,QAApBA,EAAGN,aAAY,EAAZA,EAAclJ,WAAGwJ,IAAAA,EAAAA,EAAI,EACnCI,EAA+BH,QAApBA,EAAGP,aAAY,EAAZA,EAAcnJ,WAAG0J,IAAAA,EAAAA,EAAI,GAQzC,MAAO,CACNzJ,IAAK2J,EACL5J,IAAK6J,EACLjwC,UAVwC+vC,QAA1BA,EAAGR,aAAY,EAAZA,EAAcvvC,iBAAS+vC,IAAAA,EAAAA,EAAI,EAW5ClB,YAT8C,CAC9CxI,IAAK,CAAEkI,MAAOyB,EAAa3jB,UAAU,GACrC+Z,IAAK,CAAEmI,MAAO0B,EAAa5jB,UAAU,IASvC,CE+CoC6jB,CAA0BX,GAE7D,OACCtlB,UAAKrP,UAAU,uCACdoK,SAAA,CAAAoD,GAACsmB,GAAc,CACdzoC,QAASwpC,GAAmBlnC,EAC5BsmC,YAAaA,EACbD,YAAauB,IAEZT,EADoBS,EAAY,EAAIxyC,EAAWqC,EACd,EAElC2uC,YAAaA,KAEZe,EADoB/xC,EAAWqC,EACE,EAElCrC,SAAUA,IAEXyqB,GACC,SAAA,CAAAiE,SAAUojB,GAAmBlnC,EAC7BqS,UAAU,gJACV8R,QAASA,IAAMgjB,EAAqB,GACpCh8C,KAAK,SAAQsxB,SAEZxyB,EAAE,cAEC,oFCpGF49C,GAAO97C,IAQG,IARFsmB,UACbA,EAASQ,KACTA,EAAIi1B,SACJA,GAAW,EAAK3jB,QAChBA,EAAO4jB,gBACPA,EAAejkB,SACfA,GAAW,GAEA/3B,EADR8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAM+kC,EAAaziB,IAAajR,EAWhC,OACCgN,GAAA,IAAAjtB,EAAA,CACCuxB,QAXF,SAAqBn6B,GACpB,GAAI85B,EAGH,OAFA95B,EAAEk9B,sBACF6gB,SAAAA,EAAkB/9C,IAGnBm6B,SAAAA,EAAUn6B,EACX,EAKE6oB,KAAM0zB,OAAan6C,EAAYymB,EAChB,gBAAA0zB,EACfl0B,UAAW3iB,GACV,iBACCo4C,GAAY,qBACbvB,EACGuB,EACC,iBACA,gCACD,iBACHz1B,IAEGwF,GACH,6HCgDJ,IAAeyJ,GAAAA,IAnEWv1B,IAYG,IAZF2N,MAC1BA,EAAKD,aACLA,EAAYiE,QACZA,GAAU,EAAKlE,MACfA,EAAKwuC,eACLA,EAAc31B,UACdA,EAASjd,SACTA,EAAW,EAACyd,KACZA,EAAIo1B,aACJA,GAAe,EAAIlG,aACnBA,GAEwBh2C,EADrB8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,MACJ4c,kBAAEA,GAAsBR,KACxB4G,EAAoB9yC,EAAW,GAAK6yC,EAEpCE,EAAqBt4C,GAAMm4C,QAE9B57C,EADA01C,EAAkBhyC,GAAck4C,GAAiBjG,GAG9CqG,EAAgBtG,EAAkBhyC,GAAc0J,GAAQuoC,GAE9D,OACCrgB,GACC,MAAA9uB,EAAAA,EAAA,CAAAyf,UAAW3iB,GACV,yEACA2iB,IAEGwF,GAAK,GAAA,CAET4E,SAAA,CAAAiF,GAAA,MAAA,CAAKrP,UAAU,uDACbQ,EACAgN,GAACgoB,IAAKC,UAAQ,EAACj1B,KAAMA,EAAMR,UAAU,8BAA6BoK,SACjEoD,SAAIxN,UAAU,kEACZoK,SAAA/iB,MAIHmmB,GAAA,KAAA,CAAIxN,UAAU,kEACZoK,SAAA/iB,KAGDD,GAAgByuC,IACjBxmB,GAAA,KAAA,CAAIrP,UAAU,0DACZ5Y,EAAc,IACdyuC,GACAxmB,GAAA,OAAA,CAAMrP,UAAU,gDAEdpoB,EAAE,QAAS,CACXmvC,MAAOhkC,IACN,aAOPyqB,GAAC6kB,GAAK,CACLhnC,QAASA,EACT1R,MAAOo8C,EACPpE,eAAgBmE,OAEZ,IC5DR,IAAe7mB,GAAAA,IAjBMv1B,IAAoD,IAAnDs8C,YAAEA,EAAW3uC,MAAEA,EAAKmZ,KAAEA,GAAyB9mB,EACpE,MAAMuP,gBAAEA,GAAoBujB,KAK5B,OACCgB,GAAA,IAAA,CAAGxN,UAAU,mBAAmBQ,KAAMA,EAAMsR,QAJnBmkB,IACzBhtC,EAAgBxP,IAAIzC,EAAgBuV,WAInC6d,SAAAoD,GAACF,GAAK,CACLtN,UAAU,sFACVuN,IAAKyoB,EACLrmB,IAAKtoB,KAEH,wDCJA6uC,GAAUx8C,IAIG,IAHlBmI,SAAS6I,YAAEA,GAAyBsV,UACpCA,GAEctmB,EAHamI,EAAOqN,EAAAxV,EAAlCmI,QAAOsN,IAEJqW,EAAKtW,EAAAxV,EAAAke,IAER,MACC1O,QAAQkF,QAAEA,IACPoe,KAEEhM,EAAOozB,GAAkBxlC,EAAQylC,cAAehyC,GAEtD,OACCwtB,GACC,KAAA9uB,EAAAA,EAAA,CAAAyf,UAAW3iB,GAAG,0CAA2C2iB,IACrDwF,GAAK,GAAA,WAETgI,GAAC2oB,GACA,CAAAH,YAAan0C,EAAQ0E,MACrBc,MAAOxF,EAAQ2F,cACfgZ,KAAMA,IAEP6O,GAAA,MAAA,CAAKrP,UAAU,uCACdoK,SAAA,CAAAoD,GAAC4oB,GAAiB,CACjBp2B,UAAU,SACVQ,KAAMA,EACNnZ,MAAOxF,EAAQ2F,cACfJ,aAAcvF,EAAQiG,cACtBuD,SAAUX,EACVvD,MAAOuD,aAAAA,EAAAA,EAAavD,MACpBwuC,eAAgBjrC,aAAAA,EAAAA,EAAairC,eAC7B5yC,SAAUlB,EAAQkB,SAClB6yC,cAAc,IAEfpoB,GAAC6oB,GAAc,CACdh1C,UAAWQ,EAAQiB,WACnBC,SAAUlB,EAAQkB,SAClB4xC,aAAc9yC,EAAQy0C,sBAGpB,ECxDDC,GAAcA,KACnB,MAAMjO,UAAEA,GCMYkO,MAAK,IAAAnsC,EAAAa,EACzB,MAAMX,UAAEA,EAASE,iBAAEA,GAAqB4iB,KAElCliB,EAAsCd,QAAvBA,EAAGE,EAAU5Q,MAAMC,YAAhByQ,IAAoBA,OAApBA,EAAAA,EAAsBe,YACxCqrC,EACsBvrC,QADPA,EACpBT,EAAiB9Q,MAAMC,gBAAIsR,WAAAA,EAA3BA,EAA6B+lC,gBAAQ,IAAA/lC,OAAA,EAArCA,EAAuCurC,gBA0DxC,MAAO,CAAEnO,UAxDmCrY,IAAQ,KACnD,MAAM5tB,EAAQ8I,aAAAA,EAAAA,EAAiB9I,MAE/B,OAAKA,EAEEA,EAAMnE,KAAIC,IAChB,IAAIuM,EAEJ,MAAMgsC,EAAsBD,aAAAA,EAAAA,EAAiBj1C,QAAOm1C,GAC/CA,EAAat1C,UAEfS,OAAOd,GAAe21C,EAAat1C,cAAgBlD,EAAK2E,WAIzDhB,OAAOd,GAAe21C,EAAa9vC,cAAgB1I,EAAKuE,aAkC1D,OA9BIg0C,GAAuBA,EAAoBx+C,OAAS,IAEvDwS,EAAcgsC,EAAoBn0C,QACjC,CAACC,EAAG9I,KAA2B,IAAAk9C,EAAAv8C,EAAAw8C,EAAA,IAAzBC,SAAEA,GAAmBp9C,EAANq9C,EAAI7nC,EAAAxV,EAAAyV,IACxB,MAAM6nC,UAAiBJ,EAAGE,aAAAA,EAAAA,EAAUG,yBAAiB,IAAAL,EAAAA,EAAIG,EAAK5vC,MAExD2uC,EAC6C,QAD5Bz7C,UAAAw8C,EACtBC,aAAAA,EAAAA,EAAUI,yBAAiB,IAAAL,EAAAA,EAAIE,EAAKpB,sBAAc,IAAAt7C,EAAAA,EAAI,KAWvD,OATIy7C,IACEtzC,EAAImzC,eAGRnzC,EAAImzC,gBAAkBG,EAFtBtzC,EAAImzC,eAAiBG,GAKvBtzC,EAAI2E,OAAS6vC,EAEbz2C,EAAAA,EACIw2C,CAAAA,EAAAA,GACAv0C,EAAG,GAGR,CACC2E,MAAO,EACPwuC,eAAgB,QAKnBp1C,EAAAA,EAAA,CAAA,EACIpC,GAAI,CAAA,EAAA,CACPuM,eAAW,IAhDM,EAkDjB,GACA,CAACS,EAAiBsrC,IAED,EDrEED,GAEtB,OACChpB,GAAA,KAAA,CAAIxN,UAAU,6DACZoK,SAAAke,EAAUpqC,KAAI,CAAC2D,EAASpJ,KACxB,MAAMI,EAAGU,GAAAA,OAAMsI,EAAQpD,GAAElF,KAAAA,OAAId,GAC7B,OAAO+0B,GAAC0oB,GAAkB,CAAAr0C,QAASA,GAAdhJ,EAAyB,KAE3C,mBEZDs+C,GAAgBz9C,IAAA,IAACsmB,UACtBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERqe,GACC,MAAAjtB,EAAAA,EAAA,CAAA+vB,MAAO,EACPC,OAAQ,GACRC,QAAQ,WACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,+BAAAA,OAAiCymB,GAAa,KACnDwF,GAAK,GAAA,CAET4E,SAAAoD,GAAA,OAAA,CACCtI,EAAE,iTACFuL,KAAK,mBAED,mBCjBD2mB,GAAc19C,IAAA,IAACsmB,UACpBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERqe,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,EACRC,QAAQ,WACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,4BAAAA,OAA8BymB,GAAa,KAChDwF,GAAK,GAAA,CAET4E,SAAAoD,GAAA,OAAA,CACCwgB,SAAS,UACTC,SAAS,UACT/oB,EAAE,kPACFuL,KAAK,mBAED,2FCND4mB,GAAW39C,IASG,IATFiT,OACjBA,EAAMqT,UACNA,EAAS5M,MACTA,EAAKgX,SACLA,EAAQktB,cACRA,EAAgB,IAAGC,eACnBA,EAAcC,SACdA,GAEe99C,EADZ8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAOsoC,EAAYC,GAAiB5rB,GAASnf,IACtC4jB,EAAQonB,GAAa7rB,GAC3Bnf,OAAS5S,EAAY,GAEhB69C,EAAehkB,GAAuB,MACtCikB,EAAqBjkB,KACrBkkB,EAAsBlkB,KAGtBmkB,EAAgBA,KACrB,MAAMznC,EAAYsnC,EAAa35B,QAC3B3N,GACHqnC,EAAUrnC,EAAU0nC,aACrB,EA0DD,OAtDA5kB,IAAU,KACLykB,EAAmB55B,SACtB4I,aAAagxB,EAAmB55B,SAE7B65B,EAAoB75B,SACvB4I,aAAaixB,EAAoB75B,SAG9BtR,GAEH+qC,GAAc,GAGVH,GAAkBC,IACrBM,EAAoB75B,QAAUpN,YAAW,KACxC2mC,GAAS,EAAM,GACbD,MAIJI,EAAU,GACVE,EAAmB55B,QAAUpN,YAAW,KACvC6mC,GAAc,EAAM,GAClBJ,IAGG,KACFO,EAAmB55B,SACtB4I,aAAagxB,EAAmB55B,SAE7B65B,EAAoB75B,SACvB4I,aAAaixB,EAAoB75B,QAClC,IAEC,CAACtR,EAAQ2qC,EAAeC,EAAgBC,IAG3CpkB,IAAU,KACT,GAAIqkB,GAAc9qC,EAAQ,CAEzB,MAAMsrC,EAAQtxB,uBAAsB,KACnCoxB,GAAe,IAEhB,MAAO,IAAMjxB,qBAAqBmxB,EACnC,IACE,CAACR,EAAY9qC,EAAQyd,IAGxBgJ,IAAU,KACLzmB,GAAU8qC,GACbM,GACD,GACE,CAAC3tB,EAAUzd,EAAQ8qC,IAEjBA,EAGJjqB,GAAA,MAAAjtB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,sEACA2iB,GAED5M,MAAK7S,EAAA,CACJgwB,YAAmBx2B,IAAXw2B,KAAoBh3B,OAAMg3B,EAAa,MAAA,QAC1B,iBAAVnd,EAAqBA,EAAQ,CAAE,IAEvCoS,GAAK,GAAA,CAET4E,SAAAoD,GAAA,MAAA,CAAKsG,IAAK8jB,EAAYxtB,SAAGA,OAdH,IAejB,0BChGF8tB,GAAqBx+C,IAIG,IAJFsmB,UAC3BA,EAASlnB,KACTA,GAEyBY,EADtB8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,iBAE1B,MACM,aADE/5B,EAGLu2B,GACC,MAAA9uB,EAAAA,EAAA,CAAAyf,UAAW3iB,GACV,6GACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GAAC2gB,GAAa,CAAAnuB,UAAU,4BAA4B,IAAEpoB,EAAE,gBAInD,IACT,uECvBKugD,GAAuBz+C,IAOG,IAPF2R,QAC7BA,GAAU,EAAK+sC,QACfA,GAAU,EAAK53B,KACfA,EAAI63B,eACJA,EAAcpC,kBACdA,GAE2Bv8C,EADxBuV,EAAIC,EAAAxV,EAAAyV,IAEP,MAAMvX,EAAIi7B,GAAgB,WAQ1B,OACCxD,UAAKrP,UAAU,yFACdoK,SAAA,CAAAoD,GAACgoB,GACA,CAAAE,gBATH,WACK0C,IACHC,SAAAA,IAEF,EAMG5mB,SAAUpmB,GAAW+sC,EACrBtmB,QAASmkB,EACTj2B,UAAU,kDACVQ,KAAMA,EAAI4J,SAETxyB,EAAE,mBAEJ41B,GAAC0qB,GAAkB33C,EAAA,CAAA,EAAK0O,MACnB,8DCRFqpC,GAAgB5+C,IAKG,IAAA6+C,EAAAC,EAAAC,EAAAC,EAAA,IAJxB72C,SAAS6I,YAAEA,GAAyBiuC,YACpCA,EAAW34B,UACXA,GAEoBtmB,EAJOmI,EAAOqN,EAAAxV,EAAlCmI,QAAOsN,IAGJqW,EAAKtW,EAAAxV,EAAAke,IAER,MAAMhgB,EAAIi7B,GAAgB,kBACnB6f,EAAckG,GAAmB9sB,GAAwB,OAE1D7iB,gBACLA,EACAC,QAAQkF,QACPA,EACAxU,MAAM+R,SAAEA,KAEN6gB,KAEEhM,EAAOozB,GAAkBxlC,EAAQylC,cAAehyC,GAEtD,SAASo0C,IACRhtC,EAAgBxP,IAAIzC,EAAgBuV,UACrC,CAEA,MAAMssC,EAAuBN,QAApBA,EAAG12C,aAAO,EAAPA,EAASkB,gBAAQw1C,IAAAA,EAAAA,EAAI,EAE3BpxC,WAAQqxC,EAAC9tC,aAAW,EAAXA,EAAavD,aAAK,IAAAqxC,EAAAA,EAAI,GAAKK,EACpClD,WAAiB8C,EAAC/tC,aAAW,EAAXA,EAAaouC,qBAAa,IAAAL,EAAAA,EAAI,GAAKI,EAErDE,EAA8B9oB,IAAQ,KAC3C,MAAM+oB,EAAaL,EACjBj3C,SAAQvD,IAAO,IAAA86C,EAAAC,EACf,GAAI/6C,EAAKM,KAAOoD,EAAQpD,GACvB,OAAO,KAER,MAAM06C,EAAcxtC,SAAuBstC,QAAfA,EAARttC,EAAU3N,qBAAVi7C,IAAuBA,OAAvBA,EAAAA,EAAyBz3C,QAC5C43C,GAAcA,EAAWv6C,aAAeV,EAAKk7C,gBAE9C,OAAKF,GAAsC,IAAvBA,EAAYjhD,eAIhCghD,EAAO/6C,EAAKuM,mBAAW,IAAAwuC,OAAA,EAAhBA,EAAkBx6C,OAHjB,IAGuB,IAE/B8C,QAAOrD,IAASX,GAAMW,KAElBm7C,EAAgB,IAAI7oC,IAAIuoC,GAAYhuB,KAAO,EAE3CtsB,EAASgM,aAAAA,EAAAA,EAAahM,OAE5B,OAAI46C,IAAkB56C,EACd,KAIF,aADEA,EAEC,WAEA,IACT,GACE,CAACgM,eAAAA,EAAahM,OAAQi6C,EAAa92C,EAAQpD,GAAIkN,eAAAA,EAAU3N,gBAEtDu7C,IAAa7uC,SAAAA,EAAarJ,WAEhC,SAASm4C,IACHD,GAGLX,EAAgBhhD,EAAE,uBACnB,CAEA,OACCy3B,aACCrP,UAAW3iB,GACV,oEACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GAACgoB,GAAI,CACJ/jB,SAAU8nB,EACV7D,gBAAiB8D,EACjBx5B,UAAU,gCACV8R,QAASmkB,EACTz1B,KAAMA,EACNi1B,UAEA,EAAArrB,SAAAoD,GAACF,GACA,CAAAtN,UAAU,uFACVuN,IAAK1rB,EAAQ0E,MACbopB,IAAK9tB,EAAQwF,UAGfgoB,GAAK,MAAA,CAAArP,UAAU,4EAA2EoK,SAAA,CACzFoD,GAAC4oB,GAAiB,CACjBp2B,UAAU,iBACVQ,KAAMA,EACNnZ,MAAOxF,EAAQwF,MACfD,aAAcvF,EAAQuF,aACtBiE,SAAUX,EACVvD,MAAOA,EACPwuC,eAAgBA,EAChB5yC,SAAUlB,EAAQkB,SAClB2sC,aAAuC,QAA3BgJ,EAAEhuC,aAAW,EAAXA,EAAaglC,oBAAY,IAAAgJ,EAAAA,EAAI,IAE5ClrB,GAAC2qB,GAAoB,CACpB9sC,SAAUX,EACV0tC,QAASmB,EACT/4B,KAAMA,EACN63B,eAAgBmB,EAChBvD,kBAAmBA,EACnBn9C,KAAMigD,OAGRvrB,GAAC6pB,GACA,CAAAr3B,UAAU,gBACVrT,SAAU+lC,EACV6E,eAAgB,IAChBC,SAAUiC,GAAQb,EAAiBa,EAAc/G,EAAP,MAAoBtoB,SAE9DoD,UAAKxN,UAAU,OAAMoK,SACpBoD,GAACwhB,IAAO1gC,KAAK,QAAS8b,SAAAsoB,WAGpB,mBCxJDgH,GAAwBhgD,IAGY,IAHXsmB,UAC9BA,GAEqCtmB,EADlC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,OACCkgB,GAAA,KAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,uDACA2iB,IAEGwF,GAAK,GAAA,WAETgI,GAAC0B,GAAS,CAAAlP,UAAU,2BACpBqP,UAAKrP,UAAU,qFAAoFoK,SAAA,CAClGiF,GAAK,MAAA,CAAArP,UAAU,uDACdwN,GAAC0B,GAAS,CAAAlP,UAAU,aACpBwN,GAAC0B,GAAS,CAAAlP,UAAU,wBAErBwN,GAAC0B,GAAS,CAAAlP,UAAU,wBAErBwN,GAAC0B,GAAS,CAAAlP,UAAU,eAChB,ECTD25B,GAAoBA,KAAK,IAAAzuC,EAAAglB,EAC9B,MAAMt4B,EAAIi7B,GAAgB,oBACpBiK,gBAAEA,GAAoBtQ,MACtBhiB,WAAEA,EAAUC,iBAAEA,GAAqB4iB,MAEnCijB,WAAEA,GAAeF,KAEjBziC,EAAYlD,EAAiBq8B,aAE7Bp7B,EAAuCR,QAA9BA,EAAGT,EAAiB9Q,MAAMC,YAAvBsR,IAA2BA,OAA3BA,EAAAA,EAA6BQ,UACzCkuC,EAAwC,QAAxB1pB,EAAG1lB,EAAW7Q,MAAMC,YAAjBs2B,IAAqBA,OAArBA,EAAAA,EAAuBnlB,UAAUuC,mBAEpDusC,EAAmD5pB,IAAQ,IAC3DvkB,GAAckuC,EAIZA,EAAiB17C,KAAI47C,IAC3B,MAAMC,EAAWruC,EAAUpN,MAC1BH,GAAQA,EAAKU,aAAei7C,EAAgBT,gBAG7C,OAAA94C,EAAAA,EAAA,CAAA,EACIu5C,GAAe,CAAA,EAAA,CAClBpvC,YAAaqvC,GAAQ,IAVf,IAaN,CAACruC,EAAWkuC,IAETI,EAAkBr+C,QACvBk+C,aAAiB,EAAjBA,EAAmB36B,MAAK/gB,IAAI,IAAA+6C,EAAA,MAAiC,cAAbA,QAAhBA,EAAA/6C,EAAKuM,mBAALwuC,IAAgBA,OAAhBA,EAAAA,EAAkBx6C,OAAqB,KAWxE,OACC2wB,UACCrP,UAAU,uIACE,aAAA8c,EAAgBnjC,MAE5BywB,SAAA,CAAAiF,GAAA,MAAA,CAAKrP,UAAU,0EACdoK,SAAA,CAAAiF,GAAA,SAAA,CACCrP,UAAU,4EACV8R,QAhBJ,WACCgL,EAAgBrjC,KAAIsyB,GACnBA,IAAS90B,EAAgBsV,UACtBtV,EAAgBoV,KAChBpV,EAAgBsV,WAErB,EAWIzT,KAAK,SAAQsxB,SAAA,CAEboD,GAAM,OAAA,CAAAxN,UAAU,+CACdpoB,EAAE,YAEJ41B,GAAC4pB,GAAW,CACXp3B,UAASzmB,8CAAAA,OACRujC,EAAgBnjC,QAAU1C,EAAgBoV,KACvC,aACA,iBAINmhB,GAAC6kB,GAAM,CAAA14C,MAAO22C,EAAYjlC,QAASsC,OAGpC0hB,GAAA,MAAA,CAAKrP,UAAU,qFAAkFoK,SAAA,CAC/F4vB,GACAxsB,GAAA,MAAA,CAAKxN,UAAU,gDAA+CoK,SAC7DoD,GAACwhB,GAAO,CAAAhvB,UAAU,iCAAiC1R,KAAK,WACtD8b,SAAAxyB,EAAE,uBAIN41B,GAAA,KAAA,CAAIxN,UAAU,0DAAyDoK,SACtEoD,GAACC,GACA,CAAApiB,QAASsC,EACTuZ,SACCmI,GACCuI,GAAA,CAAAxN,SAAA,CAAAoD,GAACksB,GAAqB,CAAA,GACtBlsB,GAACksB,GAAqB,OACpBtvB,SAGHyvB,EAAkB37C,KAAI67C,GACtBvsB,GAAC8qB,GAAa,CACbt4B,UAAU,aAEVne,QAASk4C,EACTpB,YAAakB,GAFRE,EAASt7C,UAOlB+uB,GAACgE,GAAI,CACJxR,UAAU,sDACVmO,QAAQ,QACRoD,KAAM4lB,UAGH,EC5GF8C,GAAkBvgD,IAA2C,IAA1Ck+C,aAAEA,GAAoCl+C,EAC9D,MAAMwgD,cAAEA,EAAaC,QAAEA,GCKvBrmB,KAEA,MAAOomB,EAAeE,GAAoBtuB,IAAS,KAC5CuuB,YAAEA,EAAWF,QAAEA,GAAWG,GAAkBxuB,GAAsB,CACxEquB,SAAS,EACTE,aAAa,IAqDd,OAlDAjnB,IAAU,KACT,MAAMwM,EAAU9L,EAAI7V,QACpB,IAAK2hB,EAAS,OAEd,MAAM2a,EAAkBA,KACvB,MAAMC,EAAa5a,EAAQoY,aAAepY,EAAQ6a,aAClDL,EAAiBI,EAAW,EAGvBE,EAAeA,KACpB,MACMC,EADmB/a,EAAQgb,UACM,EACvCN,GAAevuB,IAAS,CACvBouB,UAASQ,GAAqB5uB,EAAKouB,QACnCE,YAAaM,KACX,EAIJJ,IACAG,IAGA,MAAMG,EAAiB,IAAIC,gBAAe,KACzCP,GAAiB,IAElBM,EAAexZ,QAAQzB,GAGvB,MAAMmb,EAAmB,IAAIxa,kBAAiB,KAC7Cga,GAAiB,IAalB,OAVAQ,EAAiB1Z,QAAQzB,EAAS,CACjC0B,WAAW,EACXC,SAAS,EACThjB,YAAY,EACZy8B,gBAAiB,CAAC,QAAS,WAI5Bpb,EAAQxtB,iBAAiB,SAAUsoC,EAAc,CAAEO,SAAS,IAErD,KACNJ,EAAenZ,aACfqZ,EAAiBrZ,aACjB9B,EAAQh0B,oBAAoB,SAAU8uC,EAAa,CACnD,GACC,CAAC5mB,IAEG,CAAEomB,gBAAeG,cAAaF,UAAS,ED/DXe,CAAetD,GAE5ClkB,GAAaymB,GAAWD,EAE9B,OACC1sB,GACC,MAAA,CAAAxN,UAAU,oLACV5M,MAAO,CACNyd,QAAS6C,EAAY,EAAI,EACzB/B,WAAY+B,EAAY,UAAY,UAGrCtJ,SAAAiF,GAAA,MAAA,CAAKrP,UAAU,kHACdwN,GAAM,OAAA,CAAAxN,UAAU,4BAAyCoK,SAAA,WAAC,IAC1DoD,GAAC2pB,GAAa,CAACn3B,UAAU,sCAErB,EERFm7B,GAAiBA,KACtB,MAAM5wC,UAAEA,EAASigC,UAAEA,GAAcnd,MAC3BpkB,gBAAEA,GAAoBujB,KAEtB4uB,EAAqBxnB,GAAuB,MAE5CynB,EAAepyC,EAAgBtP,QAAU3C,EAAgBqV,KAEzDivC,EACL/wC,EAAU5Q,MAAMC,OACf2Q,EAAU5Q,MAAMgD,OAC+B,IAAhD4N,EAAU5Q,MAAMC,KAAKwR,YAAYpI,WAElC,OACCqsB,UACCrP,UAAW3iB,GACV,qPACAg+C,EACG,0DACA,uFAES,eAACA,EACdE,OAAQF,EACRG,SAAWH,OAAoBthD,GAAJ,EAAaqwB,SAAA,CAExCoD,GAAC8lB,GAAc,IACf9lB,GAAC+kB,GAAc,CAAA,GACfljB,GACC,MAAA,CAAArP,UAAU,kEACV8T,IAAKsnB,EAAkBhxB,SAAA,CAEtBogB,EACAhd,GAACilB,GAAc,IAEfpjB,GAAAuI,GAAA,CAAAxN,SAAA,CACCoD,GAACmsB,GAAoB,CAAA,GACTnsB,GAAX8tB,EAAY/E,GAAkB/C,GAAP,CAAA,GACxBhmB,GAACimB,GAAa,OAGhBjmB,GAAC8kB,GAAoB,CAAAtyB,UAAU,sCAEhCqP,GAAK,MAAA,CAAArP,UAAU,qCACdoK,SAAA,CAAAoD,GAACysB,GAAgB,CAAArC,aAAcwD,IAC/B5tB,GAACulB,GAAuB,SAEpB,qCCzCF0I,GAAQ/hD,IAKG,IAJhB0U,SAAS3P,GAAEA,EAAE6P,KAAEA,EAAO,OAAMxS,QAAEA,EAAO43B,UAAEA,GAAW1T,UAClDA,EAAS5M,MACTA,GAEY1Z,EADT8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMrU,OAAEA,GAAWi9B,KAEnB,OACCvK,GAAA,MAAAjtB,EAAAA,EAAA,CACCuxB,QAASA,IAAMh3B,EAAO2D,GACtBuhB,UAAW3iB,GACV,uGAAyF9D,OAC5E+U,GACb0R,IAEGwF,GAAK,GAAA,CACTpS,MAAK7S,EAAA,CACJoxB,WAAY+B,EAAY,UAAY,SACpC7C,QAAS6C,EAAY,EAAI,EACzBuD,UAAYvD,OAAkC35B,EAAtB,oBACxB2hD,WAAU,OAAAniD,O3ElC0B,I2EkCO,mBACtB,iBAAV6Z,EAAqBA,OAAQrZ,GACxCqwB,SAEDoD,GAACwhB,GAAM,CAAC1gC,KAAMA,EAAM0R,UAAU,cAAcwuB,OAAO,SAAQpkB,SACzDtuB,MAEG,EC9CF6/C,GAAiBA,KACtB,MAAMrnB,MAAEA,GAAUyD,KAElB,OAAqB,IAAjBzD,EAAMp8B,OACF,KAIPs1B,GAAA,MAAA,CAAKxN,UAAU,0CAAyCoK,SACtDkK,EAAMp2B,KAAIwvC,GACVlgB,GAACiuB,GAAqB,CAAArtC,QAASs/B,GAAnBA,EAAMjvC,OAEd,mBCfFm9C,GAAgBliD,IAAA,IAACsmB,UACtBA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERqe,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,EACRC,QAAQ,WACRC,KAAK,eACLC,MAAM,6BACN1Q,UAASzmB,+BAAAA,OAAiCymB,GAAa,KACnDwF,GAAK,GAAA,CAAA4E,SAEToD,GAAM,OAAA,CAAAtI,EAAE,2SACH,mBCPD22B,GAAaniD,IAGiC,IAHhCsmB,UACnBA,GAE+CtmB,EAD5C8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,YACpBroB,WAAEA,GAAe6iB,KACjBX,EAAakmB,KAEbjlC,EAAYnD,EAAW7Q,MAAM0R,QAQnC,OACCmiB,GAACwE,GAAMzxB,EAAAA,EAAA,CACN4tB,QAAQ,QACRoD,KAAMqqB,GACNlqB,aAAa,OACbI,QAXF/xB,iBACK4N,GAEJ+e,EAAWC,MACZ,EAQE8E,SAAU9jB,EACVqS,UAAW3iB,GACV,gKACA2iB,GAEDlnB,KAAK,UACD0sB,GAAK,GAAA,CAAA4E,SAEToD,WAAMxN,UAAU,uBAAsBoK,SAAExyB,EAAE,YAClC,ECtCLkkD,GAA2Bt2B,GAChCgI,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,IACRC,QAAQ,aACRC,KAAK,OACLC,MAAM,8BACFlL,GAAK,GAAA,CAAA4E,SAEToD,WACCtI,EAAE,wOACFqS,OAAO,eACPD,YAAa,IACb+Z,cAAc,8BCLX0K,GAA4BriD,IAGG,IAAAsiD,EAAA,IAHFh8B,UAClCA,GAEgCtmB,EAD7B8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,kBAG1B,OAA2BmpB,QAAvBA,EAFavmB,KAEJ6N,sBAAT0Y,IAAuBA,OAAvBA,EAAAA,EAAyBv9C,MAAOi3B,GAAWG,MACvC,KAIPxG,GAAA,MAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,oKACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,WAAMxN,UAAU,kHAAiHoK,SAC/HxyB,EAAE,mBAEJ41B,GAACsuB,GAAuB,CAAC97B,UAAU,8BAC9B,EC7BFi8B,GAAwBA,IAE5B5sB,UAAKrP,UAAU,wFACdoK,SAAA,CAAAoD,GAAC0B,GAAQ,CAAClP,UAAU,sBACpBwN,GAAC0B,GAAS,CAAAlP,UAAU,0CCGjBk8B,GAAgBxiD,IAGqB,IAAAw2B,EAAA,IAHpBlQ,UACtBA,GAEsCtmB,EADnC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,YACpBroB,WAAEA,EAAUmD,UAAEA,GAAc0f,MAE5BijB,WAAEA,EAAUC,UAAEA,GAAcH,KAE5BjjC,EAAiC,QAAxB+iB,EAAG1lB,EAAW7Q,MAAMC,YAAjBs2B,IAAqBA,OAArBA,EAAAA,EAAuBnlB,UAAUoC,UAEnD,OACCqgB,GAACC,GAAiB,CAACvG,SAAUsG,GAACyuB,GAAwB,IAAE5wC,QAASsC,EAChEyc,SAAAiF,GAAA,MAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,wFACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,GAAC2uB,GACA,CAAAjpC,MACC/F,EACGvV,EAAE,cAAe,CAAEuV,cACnBvV,EAAE,uBAEN+B,MAAO22C,EAAUlmB,SAEjBoD,GAACuuB,GAAyB,CAAA,KAE3BvuB,GAAC2uB,GACA,CAAAjpC,MAAOtb,EAAE,iBACT+B,MAAOqM,KAAKwlC,IAAI,EAAG+E,UAGF,EAItB,SAAS4L,GAAgB9hD,GAQxB,IARyB6Y,MACzBA,EAAKvZ,MACLA,EAAKywB,SACLA,GAKA/vB,EACA,OACCg1B,GAAA,MAAA,CAAKrP,UAAU,uDAAsDoK,SAAA,CACpEoD,GAAM,OAAA,CAAAxN,UAAU,0CAA2CoK,SAAAlX,IAC3Dsa,GAAC6kB,GAAM,CAAAryB,UAAU,+BAA+BrmB,MAAOA,EACrDywB,SAAAA,MAIL,wBCjEMgyB,GAAU1iD,IAAA,IAACsmB,UAAEA,GAAoDtmB,EAAtC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OACrCqe,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,6BACN1Q,UAASzmB,wBAAAA,OAA0BymB,GAAa,KAC5CwF,GAAK,GAAA,CAET4E,SAAAoD,GAAA,OAAA,CACCwgB,SAAS,UACTC,SAAS,UACT/oB,EAAE,gqBACFuL,KAAK,mBAED,EChBD4rB,GAA6B72B,GAClCgI,GAAA,MAAAjtB,EAAAA,EAAA,CACC+vB,MAAO,GACPC,OAAQ,GACRC,QAAQ,YACRC,KAAK,OACLC,MAAM,8BACFlL,GAAK,GAAA,CAAA4E,SAEToD,WACCtI,EAAE,+NACFqS,OAAO,eACPD,YAAa,EACb+Z,cAAc,8BCLXiL,GAA2B5iD,IAGG,IAAAsiD,EAAA,IAHFh8B,UACjCA,GAE+BtmB,EAD5B8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMvX,EAAIi7B,GAAgB,kBAG1B,OAA2BmpB,QAAvBA,EAFavmB,KAEJ6N,sBAAT0Y,IAAuBA,OAAvBA,EAAAA,EAAyBv9C,MAAOi3B,GAAWG,MACvC,KAIPxG,GAAA,MAAA9uB,EAAAA,EAAA,CACCyf,UAAW3iB,GACV,6KACA2iB,IAEGwF,GAAK,GAAA,CAAA4E,SAAA,CAEToD,WAAMxN,UAAU,yFAAwFoK,SACtGxyB,EAAE,kBAEJ41B,GAAC6uB,GAAyB,CAACr8B,UAAU,8BAChC,mBCrBFu8B,GAAiB7iD,IAAiD,IAAhDsmB,UAAEA,GAA0CtmB,EAA5B8rB,EAAKtW,EAAAxV,EAAAyV,IAC5C,MAAMvX,EAAIi7B,GAAgB,YACpB5pB,gBAAEA,GAAoBujB,KAE5B,OACC6C,GAAK,MAAA9uB,EAAAA,EAAA,CAAAyf,UAAW3iB,GAAG,WAAY2iB,IAAgBwF,GAAK,GAAA,CACnD4E,SAAA,CAAAoD,GAAC8uB,GAA2B,CAAA,GAC5B9uB,GAACwE,GAAM,CACNhS,UAAU,uEACV8R,QAASA,IACR7oB,EAAgBxP,KAAIsyB,GACnBA,IAAS/0B,EAAgBuV,UACtBvV,EAAgBqV,KAChBrV,EAAgBuV,YAGrBglB,KAAM6qB,GAAOhyB,SAEZxyB,EAAE,kBAEC,mBCpBF4kD,GAAkBA,KAAK,IAAAR,EAC5B,MAAMpkD,EAAIi7B,GAAgB,WAG1B,OACCxD,GACC,MAAA,CAAArP,UAAU,8FACV5M,MAAO,CACNyc,QACwBmsB,QAAvBA,EAPavmB,KAOJ6N,0BAAc0Y,SAAvBA,EAAyBv9C,MAAOi3B,GAAWG,MAAQ,QAAK97B,GACzDqwB,SAAA,CAEDoD,GAACmuB,GAAc,CAAA,GACftsB,GAAK,MAAA,CAAArP,UAAU,qLAAoLoK,SAAA,CAClMiF,GAAK,MAAA,CAAArP,UAAU,yHAAwHoK,SAAA,CACtIoD,GAACquB,GAAU,CAAC77B,UAAU,yCACtBwN,GAACivB,GAAO,CAACz8B,UAAU,uBACnBqP,GAAA,MAAA,CAAKrP,UAAU,mDACdoK,SAAA,CAAAoD,GAACsC,GAAoB,CAAA,GACrBtC,WAAMxN,UAAU,gCAA+BoK,SAAExyB,EAAE,iBAGrD41B,GAACivB,GAAO,CAACz8B,UAAU,mBACnBqP,GAAA,MAAA,CAAKrP,UAAU,2IACdoK,SAAA,CAAAoD,GAAC+uB,GAAiB,CAAA,GAClB/uB,GAACivB,GAAO,CAACz8B,UAAU,uBACnBwN,GAAC0uB,GAAa,YAGX,EAIFO,GAAU/iD,IAAA,IAACsmB,UAChBA,GAEsCtmB,EADnC8rB,EAAKtW,EAAAxV,EAAAyV,IAAA,OAERqe,YACCxN,UAAW3iB,GACV,sGACA2iB,IAEGwF,GACH,mBChDGk3B,GAAWhjD,IAG0B,IAHzBsmB,UACjBA,GAEsCtmB,EADnC8rB,EAAKtW,EAAAxV,EAAAyV,IAER,MAAMlG,gBAAEA,GAAoBujB,KACtBlB,EAAWmK,KAcjB,OACCjI,GAAA,MAAAjtB,EAAA,CAAA,eAAA,EAECuxB,QAbF,WACKxG,EAASqJ,SACZrJ,EAASyhB,OAET9jC,EAAgBxP,IAAIzC,EAAgBuV,UAEtC,EAQEyT,UAAW3iB,GACV,6GAjBkB4L,EAAgBtP,QAAU3C,EAAgBqV,MAU7Bif,EAASqJ,SASrC,sBACA,2CACH3U,IAEGwF,GACH,EChCEm3B,GAASA,IAEbttB,GAAAuI,GAAA,CAAAxN,SAAA,CACCoD,GAACgvB,OACDhvB,GAACkvB,GAAQ,IACTlvB,GAAC2tB,GAAiB,CAAA,mDCOIjyC,IACxB,MAAMoR,OAAEA,EAAMS,SAAEA,GAAa7R,EAE7B,OACCskB,GAACyW,GACA,CAAA7Z,SAAAoD,GAACovB,GAAY,CAAC7hC,SAAUA,EAAUT,OAAQA,EAAM8P,SAC/CoD,GAAC8f,GAAqB/sC,EAAAA,EAAA,GAAK2I,GAAM,GAAA,CAChCkhB,SAAAoD,GAACmb,GAAqB,CAAAve,SACrBoD,GAACgX,GACA,CAAApa,SAAAoD,GAACye,GAAY,CAAA7hB,SACZoD,GAACggB,GACA,CAAApjB,SAAAoD,GAACqf,GAAgB,CAAAziB,SAChBiF,GAAC6U,GACA,CAAA9Z,SAAA,CAAAoD,GAACmvB,GAAM,CAAA,GACPnvB,GAACmK,GAAa,IACdnK,GAACmU,GAAqB,CAAA,sBASnB","x_google_ignoreList":[2,3,12,16,24,25,26,27,28,29,30,31,32,33,45]}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/widget/lib/types/index.ts","../src/widget/lib/utils/cart-provider-store.ts","../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../node_modules/.pnpm/tailwind-merge@3.6.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/widget/lib/utils/storage.ts","../src/widget/lib/utils/logger.ts","../src/widget/lib/utils/helpers.ts","../src/widget/lib/utils/shopify.ts","../src/widget/lib/utils/cart.ts","../src/api/storefront-cart.ts","../src/api/state-bridge.ts","../src/api/widget-api.ts","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/dist/preact.module.js","../src/widget/lib/constants.ts","../src/widget/lib/utils/custom-events.ts","../src/widget/lib/utils/i18n.ts","../node_modules/.pnpm/openapi-fetch@0.17.0/node_modules/openapi-fetch/dist/index.mjs","../src/widget/lib/utils/api-client.ts","../src/widget/lib/utils/initialization/settings.ts","../src/widget/lib/utils/initialization/dataset.ts","../src/widget/lib/utils/session.ts","../src/widget/lib/utils/initialization/font.ts","../src/widget/lib/utils/initialization/styles.ts","../src/widget/lib/utils/initialization/index.ts","../node_modules/.pnpm/@formatjs+fast-memoize@3.1.3/node_modules/@formatjs/fast-memoize/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/formatters-CJcico0N.js","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/hooks/dist/hooks.module.js","../node_modules/.pnpm/preact@10.26.9/node_modules/preact/compat/dist/compat.module.js","../node_modules/.pnpm/@formatjs+icu-skeleton-parser@2.1.6/node_modules/@formatjs/icu-skeleton-parser/index.js","../node_modules/.pnpm/@formatjs+icu-messageformat-parser@3.5.6/node_modules/@formatjs/icu-messageformat-parser/index.js","../node_modules/.pnpm/intl-messageformat@11.2.3/node_modules/intl-messageformat/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/format-message/index.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/initializeConfig-CHgjheii.js","../node_modules/.pnpm/use-intl@4.11.0_react@18.3.1/node_modules/use-intl/dist/esm/production/react.js","../src/widget/lib/context/dialog-queue-context.ts","../src/widget/lib/hooks/common/use-value-state.ts","../src/widget/lib/hooks/common/use-dialog.ts","../src/widget/lib/context/widget-context.ts","../src/widget/lib/hooks/context/use-widget-context.ts","../src/widget/lib/utils/navigation.ts","../src/widget/lib/utils/return-decision.ts","../src/widget/lib/context/return-context.ts","../src/widget/lib/hooks/context/use-return-context.ts","../src/widget/components/ui/image.tsx","../src/widget/components/ui/skeleton/skeleton-container.tsx","../node_modules/.pnpm/class-variance-authority@0.7.1/node_modules/class-variance-authority/dist/index.mjs","../src/widget/components/ui/avatar/avatar.tsx","../src/widget/components/ui/skeleton/skeleton.tsx","../src/widget/components/ui/avatar/avatar-stack-skeleton.tsx","../src/widget/components/ui/avatar/avatar-stack.tsx","../src/widget/components/return-avatar-stack.tsx","../src/widget/lib/context/dialog-context.ts","../src/widget/components/icons/arrow-right.tsx","../src/widget/components/icons/x.tsx","../src/widget/components/icons/spinner.tsx","../src/widget/components/ui/button.tsx","../src/widget/components/dialog/common/dialog-button.tsx","../src/widget/components/icons/icon.tsx","../src/widget/components/ui/reject-button.tsx","../src/widget/lib/hooks/common/use-dialog-slot.ts","../src/widget/lib/hooks/context/use-dialog-queue.ts","../src/widget/lib/hooks/common/use-is-mounted.ts","../src/widget/lib/context/root-context.ts","../src/widget/components/dialog/common/dialog-backdrop.tsx","../src/widget/components/dialog/common/index.ts","../src/widget/components/dialog/common/dialog-modal.tsx","../src/widget/lib/hooks/context/use-root.ts","../src/widget/components/dialog/common/dialog-title.tsx","../src/widget/components/dialog/common/dialog-subtitle.tsx","../src/widget/components/dialog/common/dialog-exit.tsx","../src/widget/components/dialog/return-decision-dialog.tsx","../src/widget/lib/context/tutorial-context.ts","../src/widget/lib/hooks/context/use-tutorial.ts","../src/widget/lib/tutorials.ts","../src/widget/components/tutorial/intro/tutorial-intro-animation.tsx","../src/widget/components/tutorial/intro/tutorial-intro-dialog.tsx","../src/widget/components/handlers/dialog-handler.tsx","../src/widget/lib/context/toast-context.ts","../src/widget/lib/hooks/context/use-toast.ts","../src/widget/lib/hooks/feature/use-api-bridge.ts","../src/widget/lib/utils/errors.ts","../src/widget/lib/utils/interceptor/fetch.ts","../src/widget/lib/utils/interceptor/xhr.ts","../src/widget/lib/utils/interceptor/index.ts","../src/widget/lib/context/error-context.ts","../src/widget/lib/hooks/context/use-errors.ts","../src/widget/lib/hooks/feature/use-cart-actions.tsx","../src/widget/lib/hooks/feature/use-fetch-interceptor.tsx","../src/widget/lib/hooks/feature/use-override-scroll-blocking.ts","../src/widget/lib/hooks/feature/use-cart-activator.ts","../src/widget/lib/utils/dom.ts","../src/widget/components/handlers/initialization-handler.tsx","../src/widget/lib/hooks/feature/use-external-events.ts","../src/widget/lib/hooks/feature/use-tutorial-autostart.ts","../src/widget/components/is-mounted.tsx","../src/widget/components/providers/dialog-queue-provider.tsx","../src/widget/components/providers/error-provider.tsx","../src/widget/lib/hooks/common/use-array.ts","../src/widget/lib/hooks/common/use-async-state.ts","../src/widget/lib/utils/persistence.ts","../src/widget/lib/utils/queries.ts","../src/widget/components/providers/return-context-provider.tsx","../src/widget/lib/hooks/common/use-once.ts","../src/api/types.ts","../src/widget/lib/hooks/context/use-theme.ts","../src/widget/components/providers/root-provider.tsx","../src/widget/components/providers/tutorial-provider.tsx","../src/widget/components/providers/widget-context-provider.tsx","../src/widget/components/toast/toast-provider.tsx","../src/widget/components/icons/banner/action.tsx","../src/widget/components/icons/banner/info.tsx","../src/widget/components/icons/giftcard.tsx","../src/widget/components/icons/warning.tsx","../src/widget/components/ui/banner/banner-skeleton.tsx","../src/widget/components/ui/banner/banner.tsx","../src/widget/components/drawer/adjustments/exchange-banner.tsx","../src/widget/lib/hooks/context/use-currency.ts","../src/widget/lib/hooks/context/use-calculation.ts","../src/widget/components/icons/star.tsx","../src/widget/components/ui/price.tsx","../src/widget/components/drawer/adjustments/table/adjustments-table-skeleton.tsx","../src/widget/components/drawer/adjustments/table/adjustments-table.tsx","../src/widget/components/drawer/adjustments/exchange-adjustments.tsx","../src/widget/components/drawer/annoucement-bar.tsx","../src/widget/components/drawer/error-screen.tsx","../src/widget/lib/hooks/context/use-navigation.ts","../src/widget/components/dialog/empty-exchange-dialog.tsx","../src/widget/components/drawer/exchange-confirmation.tsx","../src/widget/components/drawer/exchange-header.tsx","../src/widget/components/icons/cart.tsx","../src/widget/components/drawer/exchange-placeholder.tsx","../src/widget/components/drawer/product/product-errors.tsx","../src/widget/components/drawer/product/product.utils.ts","../src/widget/components/drawer/product/quantity-picker.tsx","../src/widget/components/drawer/product/product-actions.tsx","../src/widget/components/ui/link.tsx","../src/widget/components/drawer/product/product-attributes.tsx","../src/widget/components/drawer/product/product-image.tsx","../src/widget/components/drawer/product/product.tsx","../src/widget/components/drawer/product/product-list.tsx","../src/widget/lib/hooks/context/use-cart-items.ts","../src/widget/components/icons/arrow-down.tsx","../src/widget/components/icons/chevron.tsx","../src/widget/components/ui/expander.tsx","../src/widget/components/drawer/return/return-product-badge.tsx","../src/widget/components/drawer/return/return-product-actions.tsx","../src/widget/components/drawer/return/return-product.tsx","../src/widget/components/drawer/return/return-product-skeleton.tsx","../src/widget/components/drawer/return/return-product-list.tsx","../src/widget/components/drawer/scroll-indicator.tsx","../src/widget/lib/hooks/common/use-y-scrollable.ts","../src/widget/components/drawer/exchange-drawer.tsx","../src/widget/components/toast/toast.tsx","../src/widget/components/toast/toast-container.tsx","../src/widget/components/icons/arrow-left.tsx","../src/widget/components/summary/back-button.tsx","../src/widget/components/tutorial/tutorial-arrow-curve-right.tsx","../src/widget/components/tutorial/intro/tutorial-intro-pointer-total.tsx","../src/widget/components/summary/exchange-total-skeleton.tsx","../src/widget/components/summary/exchange-total.tsx","../src/widget/components/icons/bag.tsx","../src/widget/components/tutorial/tutorial-arrow-straight-down.tsx","../src/widget/components/tutorial/intro/tutorial-intro-pointer-cart.tsx","../src/widget/components/summary/view-cart-button.tsx","../src/widget/components/summary/exchange-summary.tsx","../src/widget/components/ui/backdrop.tsx","../src/widget/components/widget.tsx","../src/widget/components/widget-container.tsx"],"sourcesContent":["import { ShopOverlayDataResponse } from \"../utils/queries\";\n\nexport type ProductRule = ShopOverlayDataResponse[\"productRules\"][number];\n\nexport type OrderProduct = {\n\tid: string;\n\tshopifyLineId: string;\n\ttitle: string;\n\tvariantTitle: string;\n\timage: string;\n\thandle: string;\n\tprice: number;\n\tquantity: number;\n};\n\nexport type {\n\tShopifyCart,\n\tShopifyCartAddResponse,\n\tShopifyCartChangeResponse,\n\tShopifyCartItem,\n\tShopifyErrorResponse\n} from \"./shopify\";\n\nexport enum WidgetViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n\nexport enum ReturnViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n","import type { CartInput, CartProvider, ShopifyCart } from \"../../../api/types\";\n\ninterface ReturnflowsGlobal {\n\t_cartProvider?: CartProvider | null;\n}\n\nexport function getInternalCartProvider<\n\tT extends CartInput = ShopifyCart\n>(): CartProvider<T> | null {\n\tif (typeof window === \"undefined\") {\n\t\treturn null;\n\t}\n\treturn ((window as unknown as { Returnflows?: ReturnflowsGlobal }).Returnflows\n\t\t?._cartProvider ?? null) as CartProvider<T> | null;\n}\n\nexport function hasCartProvider(): boolean {\n\tif (typeof window === \"undefined\") {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(window as unknown as { Returnflows?: ReturnflowsGlobal }).Returnflows\n\t\t\t?._cartProvider != null\n\t);\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n postfixLookupClassGroupIds: createPostfixLookupClassGroupIds(config),\n ...createClassGroupUtils(config)\n});\nconst createPostfixLookupClassGroupIds = config => {\n const lookup = Object.create(null);\n const classGroupIds = config.postfixLookupClassGroups;\n if (classGroupIds) {\n for (let i = 0; i < classGroupIds.length; i++) {\n lookup[classGroupIds[i]] = true;\n }\n }\n return lookup;\n};\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers,\n postfixLookupClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId;\n if (hasPostfixModifier) {\n const baseClassNameWithoutPostfix = baseClassName.substring(0, maybePostfixModifierPosition);\n classGroupId = getClassGroupId(baseClassNameWithoutPostfix);\n const classGroupIdWithPostfix = classGroupId && postfixLookupClassGroupIds[classGroupId] ? getClassGroupId(baseClassName) : undefined;\n if (classGroupIdWithPostfix && classGroupIdWithPostfix !== classGroupId) {\n classGroupId = classGroupIdWithPostfix;\n hasPostfixModifier = false;\n }\n } else {\n classGroupId = getClassGroupId(baseClassName);\n }\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isNamedContainerQuery = value => value.startsWith('@container') && (value[10] === '/' && value[11] !== undefined || value[11] === 's' && value[16] !== undefined && value.startsWith('-size/', 10) || value[11] === 'n' && value[18] !== undefined && value.startsWith('-normal/', 10));\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNamedContainerQuery,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Container Type\n * @see https://tailwindcss.com/docs/responsive-design#container-queries\n */\n 'container-type': [{\n '@container': ['', 'normal', 'size', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Container Name\n * @see https://tailwindcss.com/docs/responsive-design#named-containers\n */\n 'container-named': [isNamedContainerQuery],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Tab Size\n * @see https://tailwindcss.com/docs/tab-size\n */\n 'tab-size': [{\n tab: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n /**\n * Zoom\n * @see https://tailwindcss.com/docs/zoom\n */\n zoom: [{\n zoom: [isInteger, isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scrollbar Thumb Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-thumb-color': [{\n 'scrollbar-thumb': scaleColor()\n }],\n /**\n * Scrollbar Track Color\n * @see https://tailwindcss.com/docs/scrollbar-color\n */\n 'scrollbar-track-color': [{\n 'scrollbar-track': scaleColor()\n }],\n /**\n * Scrollbar Gutter\n * @see https://tailwindcss.com/docs/scrollbar-gutter\n */\n 'scrollbar-gutter': [{\n 'scrollbar-gutter': ['auto', 'stable', 'both']\n }],\n /**\n * Scrollbar Width\n * @see https://tailwindcss.com/docs/scrollbar-width\n */\n 'scrollbar-w': [{\n scrollbar: ['auto', 'thin', 'none']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n 'container-named': ['container-type'],\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n postfixLookupClassGroups: ['container-type'],\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'postfixLookupClassGroups', override.postfixLookupClassGroups);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'postfixLookupClassGroups');\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","function hoursToMilliseconds(hours: number): number {\n\treturn hours * 60 * 60 * 1000;\n}\nfunction minutesToMilliseconds(minutes: number): number {\n\treturn minutes * 60 * 1000;\n}\n\nexport type StorageType = \"sessionStorage\" | \"localStorage\";\n\ninterface StorageData<T = unknown> {\n\tvalue: T;\n\texpiration?: number; // Timestamp in milliseconds\n}\n\nexport interface StorageKey {\n\tkey: string;\n\ttype: StorageType;\n\texpiration?: number; // Expiration time in milliseconds\n}\n\n// Storage keys and expiration times\nexport const STORAGE_SESSION_KEY = {\n\tkey: \"session_id\",\n\ttype: \"sessionStorage\",\n\texpiration: hoursToMilliseconds(1)\n} satisfies StorageKey;\n\nexport const STORAGE_OVERLAY_DIALOG_EXPIRY_KEY = {\n\tkey: \"dialog_expiration\",\n\ttype: \"sessionStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_OVERLAY_DIALOG_EXPIRATION = minutesToMilliseconds(10);\n\nexport const STORAGE_CART_KEY = {\n\tkey: \"cart\",\n\ttype: \"sessionStorage\",\n\texpiration: minutesToMilliseconds(5) // 5 minutes\n} satisfies StorageKey;\n\nexport const STORAGE_DEBUG_MODE_KEY = {\n\tkey: \"debug_mode\",\n\ttype: \"sessionStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_TUTORIALS_SEEN_KEY = {\n\tkey: \"tutorials_seen\",\n\ttype: \"localStorage\"\n} satisfies StorageKey;\n\nexport const STORAGE_PREFIX = \"rflows_\";\n\nfunction getStorageKey(key: string): string {\n\treturn `${STORAGE_PREFIX}${key}`;\n}\n\nexport const storage = {\n\tset: <T>({ key, type, expiration }: StorageKey, value: T) => {\n\t\tconst data: StorageData = {\n\t\t\tvalue,\n\t\t\texpiration: expiration ? Date.now() + expiration : undefined\n\t\t};\n\t\tconst storage = getStorage(type);\n\t\tstorage.setItem(getStorageKey(key), JSON.stringify(data));\n\t},\n\n\tget: <T>({ key, type }: StorageKey): T | null => {\n\t\tconst storage = getStorage(type);\n\n\t\tconst storageItem = storage.getItem(getStorageKey(key));\n\n\t\tif (!storageItem) return null;\n\n\t\ttry {\n\t\t\tconst parsedData = JSON.parse(storageItem) as StorageData<T>;\n\t\t\tif (parsedData.expiration && Date.now() > parsedData.expiration) {\n\t\t\t\t// Expired\n\t\t\t\tstorage.removeItem(getStorageKey(key));\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn parsedData.value;\n\t\t} catch (_) {\n\t\t\treturn null;\n\t\t}\n\t},\n\n\thas: ({ key, type }: StorageKey): boolean => {\n\t\treturn storage.get({ key, type }) !== null;\n\t},\n\n\tremove: ({ key, type }: StorageKey) => {\n\t\tgetStorage(type).removeItem(getStorageKey(key));\n\t}\n};\n\nfunction getStorage(type: StorageType): Storage {\n\tif (type === \"sessionStorage\") {\n\t\treturn sessionStorage;\n\t} else if (type === \"localStorage\") {\n\t\treturn localStorage;\n\t} else {\n\t\tthrow new Error(`Invalid storage type: ${type}`);\n\t}\n}\n\nexport default storage;\n","/* eslint-disable no-restricted-syntax */\nimport storage, { STORAGE_DEBUG_MODE_KEY } from \"./storage\";\n\nconst LOG_PREFIX = \"[RF]\";\n\nenum LogLevel {\n\tDEBUG = 0,\n\tINFO = 1,\n\tWARN = 2,\n\tERROR = 3\n}\n\nclass Logger {\n\tprivate static instance: Logger;\n\n\tprivate constructor() {}\n\n\tpublic static getInstance(): Logger {\n\t\tif (!Logger.instance) {\n\t\t\tLogger.instance = new Logger();\n\t\t}\n\t\treturn Logger.instance;\n\t}\n\n\tprivate checkDebugMode(): boolean {\n\t\tconst storedDebugModeValue = storage.get<boolean>(STORAGE_DEBUG_MODE_KEY);\n\t\treturn Boolean(storedDebugModeValue);\n\t}\n\n\tprivate log(level: LogLevel, message: string, ...args: unknown[]): void {\n\t\tif (!this.checkDebugMode()) {\n\t\t\treturn; // Skip logs if the script data attribute is not set\n\t\t}\n\t\tswitch (level) {\n\t\t\tcase LogLevel.DEBUG:\n\t\t\t\tconsole.debug(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.INFO:\n\t\t\t\tconsole.info(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.WARN:\n\t\t\t\tconsole.warn(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t\tcase LogLevel.ERROR:\n\t\t\t\tconsole.error(`${LOG_PREFIX} ${message}`, ...args);\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tdebug(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.DEBUG, message, ...args);\n\t}\n\n\tinfo(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.INFO, message, ...args);\n\t}\n\n\twarn(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.WARN, message, ...args);\n\t}\n\n\terror(message: string, ...args: unknown[]): void {\n\t\tthis.log(LogLevel.ERROR, message, ...args);\n\t}\n}\n\nexport const logger = Logger.getInstance();\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { logger } from \"./logger\";\nimport { CalculationParams } from \"./queries\";\nimport { SessionCache } from \"./session\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n\nexport function assert(variable: unknown, message: string): asserts variable {\n\tif (isNil(variable) || variable === \"\") {\n\t\tthrow new Error(message);\n\t}\n}\n\nexport async function wait(ms: number) {\n\treturn new Promise(resolve => setTimeout(resolve, ms));\n}\n\nexport function isNil(value: unknown): value is null | undefined {\n\treturn value === null || value === undefined;\n}\n\nexport function ensureHttpUrl(url: string, secure: boolean = true): string {\n\tif (!url.startsWith(\"http://\") && !url.startsWith(\"https://\")) {\n\t\tif (secure) {\n\t\t\treturn `https://${url}`;\n\t\t}\n\t\treturn `http://${url}`;\n\t}\n\treturn url;\n}\n\nexport function isNumber(value: unknown): value is number {\n\tif (typeof value === \"number\") {\n\t\treturn true;\n\t}\n\treturn !isNaN(Number(value)) && isFinite(Number(value));\n}\n\nexport function hexToHsl(hex: string): string {\n\t// Remove the hash if present\n\thex = hex.replace(\"#\", \"\");\n\n\t// Parse hex values\n\tconst r = parseInt(hex.substring(0, 2), 16) / 255;\n\tconst g = parseInt(hex.substring(2, 4), 16) / 255;\n\tconst b = parseInt(hex.substring(4, 6), 16) / 255;\n\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst diff = max - min;\n\n\t// Calculate lightness\n\tconst l = (max + min) / 2;\n\n\tlet h = 0;\n\tlet s = 0;\n\n\tif (diff !== 0) {\n\t\t// Calculate saturation\n\t\ts = l > 0.5 ? diff / (2 - max - min) : diff / (max + min);\n\n\t\t// Calculate hue\n\t\tswitch (max) {\n\t\t\tcase r:\n\t\t\t\th = ((g - b) / diff + (g < b ? 6 : 0)) / 6;\n\t\t\t\tbreak;\n\t\t\tcase g:\n\t\t\t\th = ((b - r) / diff + 2) / 6;\n\t\t\t\tbreak;\n\t\t\tcase b:\n\t\t\t\th = ((r - g) / diff + 4) / 6;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Convert to degrees and percentages\n\tconst hDeg = Math.round(h * 360);\n\tconst sPercent = Math.round(s * 100);\n\tconst lPercent = Math.round(l * 100);\n\n\treturn `${hDeg}, ${sPercent}%, ${lPercent}%`;\n}\n\nexport function camelToKebab(str: string): string {\n\treturn str\n\t\t.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1-$2\")\n\t\t.toLowerCase();\n}\n\nexport function isOnCartPage(): boolean {\n\tconst path = window.location.pathname;\n\treturn path.includes(\"/cart\") || path.includes(\"/checkout\");\n}\n\ninterface WrapperOptions {\n\tshouldThrow?: boolean;\n\tlogError?: boolean;\n\tfallbackValue?: unknown;\n}\n\nexport function attempt<T, TThrow extends boolean = false>(\n\tfn: () => T,\n\terrorMessage: string,\n\toptions: WrapperOptions & { shouldThrow?: TThrow } = {}\n): TThrow extends true ? T : T | undefined {\n\tconst {\n\t\tshouldThrow = false as TThrow,\n\t\tlogError = true,\n\t\tfallbackValue\n\t} = options;\n\n\ttry {\n\t\treturn fn() as TThrow extends true ? T : T | undefined;\n\t} catch (err) {\n\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\n\t\tif (logError) {\n\t\t\tlogger.error(`${errorMessage} (${error.message})`);\n\t\t}\n\n\t\tif (shouldThrow) {\n\t\t\tthrow error;\n\t\t}\n\n\t\treturn ((fallbackValue as T) ?? undefined) as TThrow extends true\n\t\t\t? T\n\t\t\t: T | undefined;\n\t}\n}\n\nexport function parseToNumber(\n\tvalue: string | number | null | undefined,\n\tfallback = 0\n): number {\n\tif (isNil(value) || value === \"\") return fallback;\n\tif (typeof value !== \"number\") value = parseFloat(value);\n\tif (isNaN(value) || value.toString() === \"Infinity\") return fallback;\n\treturn value;\n}\n\n// Conversion functions for time units to milliseconds\nexport function daysToMilliseconds(days: number): number {\n\treturn days * 24 * 60 * 60 * 1000;\n}\nexport function secondsToMilliseconds(seconds: number): number {\n\treturn seconds * 1000;\n}\n\nexport function setNestedValue<T>(\n\tobj: Record<string, unknown>,\n\tpath: string,\n\tvalue: T\n): T {\n\tconst keys = path.split(\".\");\n\tconst lastKey = keys.pop();\n\n\tif (!lastKey) {\n\t\tthrow new Error(\"Invalid path\");\n\t}\n\n\tconst target = keys.reduce(\n\t\t(current: unknown, key: string): Record<string, unknown> => {\n\t\t\tif (current && typeof current === \"object\" && key in current) {\n\t\t\t\tconst next = (current as Record<string, unknown>)[key];\n\t\t\t\tif (next && typeof next === \"object\") {\n\t\t\t\t\treturn next as Record<string, unknown>;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow new Error(`Cannot access property '${key}' on path '${path}'`);\n\t\t},\n\t\tobj\n\t);\n\n\ttarget[lastKey] = value;\n\treturn value;\n}\n\nexport function getResolvedSearchParams(): URLSearchParams {\n\tconst searchString = window.__rf_original_search ?? window.location.search;\n\treturn new URLSearchParams(searchString);\n}\n\nexport function resolveSetStateAction<T>(\n\taction: React.SetStateAction<T>,\n\tcurrentState: T\n): T {\n\tif (typeof action === \"function\") {\n\t\t// TypeScript needs a type assertion here because SetStateAction<T>\n\t\t// could be T | ((prevState: T) => T), and TS can't narrow the function type automatically\n\t\treturn (action as (prevState: T) => T)(currentState);\n\t}\n\treturn action;\n}\n\nexport default function deepClone<T>(value: T): T {\n\ttry {\n\t\tif (typeof value !== \"object\" || value === null) {\n\t\t\treturn value;\n\t\t}\n\t\treturn structuredClone(value);\n\t} catch {\n\t\tlogger.warn(\"structuredClone failed, falling back to JSON clone\");\n\t\ttry {\n\t\t\treturn JSON.parse(JSON.stringify(value));\n\t\t} catch (jsonError) {\n\t\t\tlogger.error(\n\t\t\t\t\"JSON clone also failed (circular reference or non-serializable value)\"\n\t\t\t);\n\t\t\tthrow jsonError;\n\t\t}\n\t}\n}\n\ntype ReturnAction = \"exchange\" | \"giftcard\" | \"refund\";\n\nexport function formatSelectedAction<T extends ReturnAction>(\n\taction: T\n): Uppercase<T>;\nexport function formatSelectedAction(\n\taction: ReturnAction | undefined\n): Uppercase<ReturnAction>;\nexport function formatSelectedAction(\n\taction: ReturnAction | undefined\n): Uppercase<ReturnAction> {\n\treturn (action ?? \"refund\").toUpperCase() as Uppercase<ReturnAction>;\n}\n\nexport function formatSelectedItems(\n\tcacheData: SessionCache[\"data\"][\"formData\"]\n): NonNullable<CalculationParams[\"lineItems\"]> {\n\tconst selectedItems = cacheData?.selectedItems;\n\tconst selectedActions = cacheData?.selectedActions;\n\n\tif (!selectedItems || !Array.isArray(selectedItems)) {\n\t\tlogger.warn(\"No selected items found in cache data\");\n\t\treturn [];\n\t}\n\n\treturn selectedItems.map(item => {\n\t\tconst matchedAction = selectedActions?.find(\n\t\t\ta => a.itemId === item.id\n\t\t)?.action;\n\t\tconst formattedAction = formatSelectedAction(matchedAction);\n\t\treturn {\n\t\t\tid: item.id,\n\t\t\tlineItemId: item.lineItemId,\n\t\t\taction: formattedAction\n\t\t};\n\t});\n}\n","import { ShopifyCartItem, ShopifyErrorResponse } from \"../types\";\nimport { assert, ensureHttpUrl, isNil } from \"./helpers\";\nimport storage, {\n\tSTORAGE_CART_KEY,\n\tSTORAGE_DEBUG_MODE_KEY,\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"./storage\";\n\nexport function constructShopifyUrl(\n\tendpoint: string,\n\tqueryParams?: Record<string, string>\n) {\n\tconst root = ensureHttpUrl(window.location.host);\n\n\tassert(root, \"Shopify root URL is not defined\");\n\n\tconst searchParams = new URLSearchParams();\n\n\tif (queryParams) {\n\t\tObject.entries(queryParams).forEach(([key, value]) => {\n\t\t\tsearchParams.set(key, value);\n\t\t});\n\t}\n\n\tlet url = root;\n\n\tif (!endpoint.startsWith(\"/\")) {\n\t\turl += \"/\";\n\t}\n\turl += endpoint;\n\n\tif (searchParams.toString()) {\n\t\turl += `?${searchParams.toString()}`;\n\t}\n\n\treturn url;\n}\n\nexport async function handleShopifyFetch<T = unknown>(\n\tendpoint: string,\n\tinit?: RequestInit\n): Promise<T> {\n\tconst fetchUrl = constructShopifyUrl(endpoint, {\n\t\trf: \"true\"\n\t});\n\tconst response = await fetch(fetchUrl, {\n\t\tmethod: init?.method ?? (init?.body ? \"POST\" : \"GET\"),\n\t\tcache: \"no-cache\",\n\t\theaders: {\n\t\t\t\"Content-Type\": \"application/json\"\n\t\t},\n\t\t...init\n\t});\n\n\tif (!response.ok) {\n\t\tconst errorResponse = (await response.json()) as ShopifyErrorResponse;\n\t\tif (errorResponse && \"message\" in errorResponse) {\n\t\t\tthrow errorResponse;\n\t\t}\n\t\tthrow new Error(\"Unknown error\");\n\t}\n\n\tconst json = (await response.json()) as T;\n\treturn json;\n}\n\nexport function clearSession() {\n\tstorage.remove(STORAGE_CART_KEY);\n\tstorage.remove(STORAGE_SESSION_KEY);\n\tstorage.remove(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\tstorage.remove(STORAGE_DEBUG_MODE_KEY);\n}\n\nexport function normalizeShopifyPrice(\n\tvalue: number | null | undefined\n): number {\n\tif (isNil(value)) {\n\t\treturn 0;\n\t}\n\treturn value / 100;\n}\n\nexport function formatShopifyId(id: number | string, type: string): string {\n\tif (typeof id === \"string\" && id.startsWith(\"gid://\")) return id;\n\treturn `gid://shopify/${type}/${id}`;\n}\n\nexport function stripShopifyId(id: string | number | null | undefined): string {\n\tif (!id) return \"\";\n\n\tconst segment = id.toString().split(\"/\").pop();\n\tif (!segment) return \"\";\n\n\treturn segment;\n}\n\nexport function formatShopifyCartItem(item: ShopifyCartItem) {\n\treturn {\n\t\tvariantId: item.variant_id,\n\t\thandle: item.handle,\n\t\tprice: normalizeShopifyPrice(item.price), // Convert cents to dollars\n\t\ttitle: item.product_title,\n\t\tvariantTitle: item.variant_title ?? \"\",\n\t\timage: item.image,\n\t\tquantity: item.quantity ?? 1\n\t};\n}\n","import { ProductRule, ShopifyCart, ShopifyCartChangeResponse } from \"../types\";\nimport {\n\tgetInternalCartProvider,\n\thasCartProvider\n} from \"./cart-provider-store\";\nimport { isNil, parseToNumber } from \"./helpers\";\nimport { logger } from \"./logger\";\nimport { formatShopifyId, handleShopifyFetch, stripShopifyId } from \"./shopify\";\nimport storage, { STORAGE_CART_KEY } from \"./storage\";\n\nfunction toMerchandiseGid(variantId: number | string): string {\n\treturn formatShopifyId(variantId, \"ProductVariant\");\n}\n\nexport function getRuleProductIds(\n\trules: ProductRule[],\n\ttype: ProductRule[\"type\"]\n) {\n\treturn rules\n\t\t.filter(rule => rule.type === type)\n\t\t.flatMap(rule =>\n\t\t\trule.products\n\t\t\t\t.filter(p => p !== null)\n\t\t\t\t.map(product => Number(stripShopifyId(product.shopifyProductId)))\n\t\t);\n}\n\nexport interface NormalizeCartResult<T extends ShopifyCart> {\n\tcart: T;\n\texcludedItems: T[\"items\"];\n\tbundleItems: T[\"items\"];\n}\n\n// Normalizes the cart by merging items with the same variant_id\nexport function normalizeCart<T extends ShopifyCart>(\n\tcart: T,\n\trules: ProductRule[]\n): NormalizeCartResult<T> {\n\tconst noExchangeTo = getRuleProductIds(rules, \"NO_EXCHANGE_TO\");\n\n\tconst excludedItems: T[\"items\"] = [];\n\tconst bundleItems: T[\"items\"] = [];\n\n\tconst { items, itemCount } = (cart.items || []).reduce<{\n\t\titems: ShopifyCart[\"items\"];\n\t\titemCount: number;\n\t}>(\n\t\t(acc, item) => {\n\t\t\t// Blocked product id exclusion\n\t\t\tif (noExchangeTo.includes(item.product_id)) {\n\t\t\t\texcludedItems.push(item);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// Bundle product exclusion\n\t\t\tif (item.has_components) {\n\t\t\t\tbundleItems.push(item);\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// Find existing item in the accumulated items\n\t\t\tconst existingItem = acc.items.find(\n\t\t\t\ti => i.variant_id === item.variant_id\n\t\t\t);\n\n\t\t\tacc.itemCount += item.quantity || 0;\n\n\t\t\tif (existingItem) {\n\t\t\t\t// If the item already exists, merge the quantities\n\t\t\t\texistingItem.quantity += item.quantity;\n\t\t\t\treturn acc;\n\t\t\t}\n\t\t\t// If the item does not exist, add it to the list\n\t\t\tacc.items.push({ ...item });\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\titems: [],\n\t\t\titemCount: 0\n\t\t}\n\t);\n\n\tconst normalizedCart: T = {\n\t\t...cart,\n\t\titems,\n\t\titem_count: itemCount\n\t};\n\n\treturn {\n\t\tcart: normalizedCart,\n\t\texcludedItems,\n\t\tbundleItems\n\t};\n}\n\n// Compares two Shopify carts to see if they are the same\nexport function compareCarts({\n\tcart1,\n\tcart2,\n\trules\n}: {\n\tcart1: ShopifyCart;\n\tcart2: ShopifyCart;\n\trules: ProductRule[];\n}): boolean {\n\tconst { cart: normalizedCart1 } = normalizeCart(cart1, rules);\n\tconst { cart: normalizedCart2 } = normalizeCart(cart2, rules);\n\n\tconst items1 = normalizedCart1.items || [];\n\tconst items2 = normalizedCart2.items || [];\n\n\tif (items1.length !== items2.length) {\n\t\treturn false;\n\t}\n\n\tconst quantityMap1 = new Map(\n\t\titems1.map(item => [item.variant_id, item.quantity])\n\t);\n\n\tfor (const item of items2) {\n\t\tif (quantityMap1.get(item.variant_id) !== item.quantity) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nexport async function getCart(\n\tpreferStorage: boolean = true\n): Promise<ShopifyCart> {\n\tlet cart: ShopifyCart | undefined = undefined;\n\tlet usedStore: boolean = false;\n\tlet usedProvider: boolean = false;\n\n\tif (preferStorage) {\n\t\tconst storedCart = getCartStorage();\n\t\tif (storedCart) {\n\t\t\tusedStore = true;\n\t\t\tcart = storedCart;\n\t\t}\n\t}\n\n\tif (!cart) {\n\t\t// Use cart provider if configured (for headless/external setups)\n\t\tif (hasCartProvider()) {\n\t\t\tconst provider = getInternalCartProvider();\n\t\t\tif (provider) {\n\t\t\t\tlogger.info(\"[CartProvider] Using provider.getCart()\");\n\t\t\t\tcart = await provider.getCart();\n\t\t\t\tusedProvider = true;\n\t\t\t}\n\t\t}\n\n\t\t// Fall back to direct Shopify fetch if no provider\n\t\tif (!cart) {\n\t\t\tlogger.info(\"[CartProvider] No provider, falling back to /cart.js\");\n\t\t\tcart = await handleShopifyFetch<ShopifyCart>(\"/cart.js\");\n\t\t}\n\n\t\tupdateCartStorage(cart);\n\t}\n\n\tconst source = usedStore ? \"Storage\" : usedProvider ? \"Provider\" : \"API\";\n\tlogger.info(`Fetched cart (${source})`, cart);\n\n\treturn cart;\n}\n\nexport async function clearCart(): Promise<ShopifyCart> {\n\t// Use cart provider if configured and has clearCart method\n\tif (hasCartProvider()) {\n\t\tconst provider = getInternalCartProvider();\n\t\tif (provider?.clearCart) {\n\t\t\tlogger.info(\"[CartProvider] Using provider.clearCart()\");\n\t\t\tconst cart = await provider.clearCart();\n\t\t\tupdateCartStorage(cart);\n\t\t\treturn cart;\n\t\t}\n\t\tlogger.info(\n\t\t\t\"[CartProvider] Provider exists but clearCart not implemented, falling back to /cart/clear.js\"\n\t\t);\n\t}\n\n\t// Fall back to direct Shopify fetch\n\tconst cart = await handleShopifyFetch<ShopifyCart>(\"/cart/clear.js\", {\n\t\tmethod: \"POST\"\n\t});\n\tupdateCartStorage(cart);\n\treturn cart;\n}\n\nexport async function setCartItems(\n\titems: Array<{\n\t\tid: number;\n\t\tquantity: number;\n\t}>\n): Promise<ShopifyCart> {\n\tconst clearedCart = await clearCart();\n\n\tif (items.length === 0) {\n\t\treturn clearedCart;\n\t}\n\n\t// Use cart provider if configured and has addItems method\n\tif (hasCartProvider()) {\n\t\tconst provider = getInternalCartProvider();\n\t\tif (provider?.addItems) {\n\t\t\tconst cartItems = items.map(item => {\n\t\t\t\tconst merchandiseId = toMerchandiseGid(item.id);\n\t\t\t\treturn {\n\t\t\t\t\tmerchandiseId,\n\t\t\t\t\tquantity: item.quantity\n\t\t\t\t};\n\t\t\t});\n\t\t\tlogger.info(\n\t\t\t\t\"[CartProvider] Using provider.addItems() (setCartItems)\",\n\t\t\t\tcartItems\n\t\t\t);\n\t\t\tconst cart = await provider.addItems(cartItems);\n\t\t\tupdateCartStorage(cart);\n\t\t\treturn cart;\n\t\t}\n\t\tlogger.info(\n\t\t\t\"[CartProvider] Provider exists but addItems not implemented, falling back to /cart/add.js\"\n\t\t);\n\t}\n\n\t// Fall back to direct Shopify fetch\n\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/add.js\", {\n\t\tmethod: \"POST\",\n\t\tbody: JSON.stringify({\n\t\t\titems\n\t\t})\n\t});\n\n\treturn getCart(false);\n}\n\nexport async function updateCartItemQuantity({\n\tvariantId,\n\tquantity,\n\tisRetry = false\n}: {\n\tvariantId: number;\n\tquantity: number;\n\tisRetry?: boolean;\n}): Promise<ShopifyCart> {\n\ttry {\n\t\tif (isNil(quantity)) {\n\t\t\tthrow new Error(\"Quantity cannot be null or undefined\");\n\t\t}\n\n\t\t// Use cart provider if configured\n\t\tif (hasCartProvider()) {\n\t\t\tconst provider = getInternalCartProvider();\n\t\t\tif (provider) {\n\t\t\t\t// Get current cart (storage is synced by wrapped provider)\n\t\t\t\t// On retry, bypass storage to get fresh cart data\n\t\t\t\tconst currentCart = await getCart(!isRetry);\n\t\t\t\tconst item = currentCart.items.find(i => i.variant_id === variantId);\n\n\t\t\t\tif (!item) {\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t`[CartProvider] Item with variantId ${variantId} not found in cart`\n\t\t\t\t\t);\n\t\t\t\t\t// If first attempt and item not found, retry with fresh cart\n\t\t\t\t\tif (!isRetry) {\n\t\t\t\t\t\tlogger.info(\"[CartProvider] Retrying with fresh cart data...\");\n\t\t\t\t\t\treturn updateCartItemQuantity({\n\t\t\t\t\t\t\tvariantId,\n\t\t\t\t\t\t\tquantity,\n\t\t\t\t\t\t\tisRetry: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t\treturn getCart(false);\n\t\t\t\t}\n\n\t\t\t\tconst lineId = item.line_id;\n\t\t\t\tconst merchandiseId =\n\t\t\t\t\titem.merchandise_id || toMerchandiseGid(variantId);\n\n\t\t\t\tif (!lineId) {\n\t\t\t\t\tlogger.warn(\"[CartProvider] No line_id on cart item\");\n\t\t\t\t\t// If first attempt and no line_id, retry with fresh cart\n\t\t\t\t\tif (!isRetry) {\n\t\t\t\t\t\tlogger.info(\"[CartProvider] Retrying with fresh cart data...\");\n\t\t\t\t\t\treturn updateCartItemQuantity({\n\t\t\t\t\t\t\tvariantId,\n\t\t\t\t\t\t\tquantity,\n\t\t\t\t\t\t\tisRetry: true\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tlogger.warn(\n\t\t\t\t\t\t\"[CartProvider] Still no line_id after retry, falling back to /cart/change.js\"\n\t\t\t\t\t);\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t\treturn getCart(false);\n\t\t\t\t}\n\n\t\t\t\tif (quantity === 0 && provider.removeItems) {\n\t\t\t\t\tlogger.info(`[CartProvider] Using provider.removeItems([${lineId}])`);\n\t\t\t\t\tawait provider.removeItems([lineId]);\n\t\t\t\t} else if (provider.updateItems) {\n\t\t\t\t\tconst updateItem = { id: lineId, merchandiseId, quantity };\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\"[CartProvider] Using provider.updateItems()\",\n\t\t\t\t\t\tupdateItem\n\t\t\t\t\t);\n\t\t\t\t\tawait provider.updateItems([updateItem]);\n\t\t\t\t} else {\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\"[CartProvider] Provider exists but removeItems/updateItems not implemented, falling back to /cart/change.js\"\n\t\t\t\t\t);\n\t\t\t\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\t\t\t}\n\n\t\t\t\t// Always fetch fresh cart to get complete data (e.g. has_components)\n\t\t\t\treturn getCart(false);\n\t\t\t}\n\t\t}\n\n\t\t// Fall back to direct Shopify fetch\n\t\tawait updateCartItemQuantityViaShopify(variantId, quantity);\n\t\treturn getCart(false);\n\t} catch (err) {\n\t\tconst error = err as Error | { status: number; message: string };\n\t\tlogger.error(\"Error updating cart item quantity:\", error);\n\t\tif (\"status\" in error) {\n\t\t\tthrow new Error(error.status.toString());\n\t\t}\n\t\tthrow new Error(error.message);\n\t}\n}\n\n/**\n * Internal: Update cart item quantity via direct Shopify API calls.\n * Used when no cart provider is configured.\n */\nasync function updateCartItemQuantityViaShopify(\n\tvariantId: number,\n\tquantity: number\n): Promise<void> {\n\tif (quantity === 0) {\n\t\t// If quantity is 0, remove the item from the cart\n\t\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/change.js\", {\n\t\t\tbody: JSON.stringify({\n\t\t\t\tid: String(variantId), // Shopify expects variantId as a string\n\t\t\t\tquantity\n\t\t\t})\n\t\t});\n\t\treturn;\n\t}\n\n\t// This calculation is necessary to handle cases where there are multiple identical items in the cart.\n\tconst existingCart = await getCart();\n\n\tconst existingItems = existingCart.items || [];\n\n\tconst itemsWtihSameVariantId = existingItems.filter(\n\t\titem => item.variant_id === variantId\n\t);\n\tconst totalQuantity = itemsWtihSameVariantId.reduce(\n\t\t(acc, item) => acc + (item.quantity || 0),\n\t\t0\n\t);\n\tconst existingItemIndex = existingItems.findIndex(\n\t\titem => item.variant_id === variantId\n\t);\n\n\tconst increment = quantity - totalQuantity;\n\n\tconst existingQuantity = parseToNumber(\n\t\texistingItems[existingItemIndex]?.quantity\n\t);\n\tconst calculatedQuantity = existingQuantity + increment;\n\n\tif (existingItemIndex !== -1) {\n\t\tconst cartChange = {\n\t\t\tline: String(existingItemIndex + 1), // Shopify uses 1-based index\n\t\t\tquantity: calculatedQuantity\n\t\t};\n\t\tawait handleShopifyFetch<ShopifyCartChangeResponse>(\"/cart/change.js\", {\n\t\t\tbody: JSON.stringify(cartChange)\n\t\t});\n\t}\n}\n\nexport function updateCartStorage(cart: ShopifyCart | null): void {\n\tif (cart) {\n\t\tstorage.set(STORAGE_CART_KEY, cart);\n\t\treturn;\n\t}\n\tstorage.remove(STORAGE_CART_KEY);\n}\n\nexport function getCartStorage(): ShopifyCart | null {\n\treturn storage.get<ShopifyCart>(STORAGE_CART_KEY);\n}\n","import { updateCartStorage } from \"../widget/lib/utils/cart\";\nimport { stripShopifyId } from \"../widget/lib/utils/shopify\";\nimport type {\n\tCartInput,\n\tCartProvider,\n\tConnection,\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart,\n\tStorefrontCartLine\n} from \"./types\";\n\nfunction resolveConnection<T extends object>(connections: Connection<T>): T[] {\n\tif (\"edges\" in connections) {\n\t\treturn connections.edges.map(edge => edge.node);\n\t}\n\treturn connections.map(edge => {\n\t\tif (\"node\" in edge) {\n\t\t\treturn edge.node;\n\t\t}\n\t\treturn edge;\n\t});\n}\n\nfunction isStorefrontCart(cart: CartInput): cart is StorefrontCart {\n\tif (!(\"lines\" in cart)) return false;\n\tconst lines = (cart as StorefrontCart).lines;\n\treturn (\n\t\tArray.isArray(lines) ||\n\t\t(lines != null && typeof lines === \"object\" && \"edges\" in lines)\n\t);\n}\n\nfunction toCents(amount: string): number {\n\tconst parsed = parseFloat(amount);\n\treturn Number.isNaN(parsed) ? 0 : Math.round(parsed * 100);\n}\n\nfunction resolveLineImage(line: StorefrontCartLine): string {\n\tif (line.merchandise.image?.url) {\n\t\treturn line.merchandise.image.url;\n\t}\n\tif (line.merchandise.product.featuredImage?.url) {\n\t\treturn line.merchandise.product.featuredImage.url;\n\t}\n\tconst productImages = resolveConnection(\n\t\tline.merchandise.product.images ?? []\n\t);\n\tif (productImages.length > 0) {\n\t\treturn productImages[0].url;\n\t}\n\treturn \"\";\n}\n\nfunction normalizeStorefrontLine(line: StorefrontCartLine): ShopifyCartItem {\n\tconst { merchandise, quantity } = line;\n\tconst { product } = merchandise;\n\n\tconst variantId = Number(stripShopifyId(merchandise.id));\n\tconst productId = Number(stripShopifyId(product.id));\n\n\t// Prefer line.cost, fall back to merchandise.price\n\tlet unitPrice: number;\n\tlet lineTotal: number;\n\n\tif (line.cost?.amountPerQuantity) {\n\t\tunitPrice = toCents(line.cost.amountPerQuantity.amount);\n\t\tlineTotal = line.cost.totalAmount\n\t\t\t? toCents(line.cost.totalAmount.amount)\n\t\t\t: unitPrice * quantity;\n\t} else if (merchandise.price) {\n\t\tunitPrice = toCents(merchandise.price.amount);\n\t\tlineTotal = unitPrice * quantity;\n\t} else {\n\t\tunitPrice = 0;\n\t\tlineTotal = 0;\n\t}\n\n\tconst variantTitle = merchandise.title;\n\tconst productTitle = product.title;\n\n\tconst isDefaultVariant =\n\t\t!variantTitle ||\n\t\tvariantTitle === \"Default Title\" ||\n\t\tvariantTitle === \"Default\";\n\n\tconst title = isDefaultVariant\n\t\t? productTitle\n\t\t: `${productTitle} - ${variantTitle}`;\n\n\treturn {\n\t\tvariant_id: variantId,\n\t\tquantity,\n\t\ttitle,\n\t\tprice: unitPrice,\n\t\tproduct_id: productId,\n\t\tproduct_title: productTitle,\n\t\thandle: product.handle,\n\t\timage: resolveLineImage(line),\n\t\tgrams: 0,\n\t\tline_price: lineTotal,\n\t\tfinal_price: unitPrice,\n\t\tfinal_line_price: lineTotal,\n\t\tline_id: line.id,\n\t\tmerchandise_id: merchandise.id,\n\t\tvariant_title: isDefaultVariant ? undefined : variantTitle,\n\t\tsku: merchandise.sku,\n\t\tvendor: product.vendor,\n\t\tproduct_type: product.productType,\n\t\trequires_shipping: merchandise.requiresShipping\n\t};\n}\n\nfunction normalizeStorefrontCart(cart: StorefrontCart): ShopifyCart {\n\tconst lines = resolveConnection(cart.lines);\n\tconst items = lines.map(normalizeStorefrontLine);\n\tconst itemCount =\n\t\tcart.totalQuantity ?? items.reduce((sum, i) => sum + i.quantity, 0);\n\n\treturn {\n\t\titems,\n\t\titem_count: itemCount,\n\t\ttoken: cart.id,\n\t\tnote: cart.note ?? \"\"\n\t};\n}\n\nexport function normalizeCartInput(cart: CartInput): ShopifyCart {\n\tif (isStorefrontCart(cart)) {\n\t\treturn normalizeStorefrontCart(cart);\n\t}\n\treturn cart;\n}\n\nfunction normalizeAndStore(cart: CartInput): ShopifyCart {\n\tconst normalized = normalizeCartInput(cart);\n\tupdateCartStorage(normalized);\n\treturn normalized;\n}\n\nexport function wrapCartProvider(provider: CartProvider): CartProvider {\n\treturn {\n\t\tasync getCart(): Promise<ShopifyCart | undefined> {\n\t\t\tconst cart = await provider.getCart();\n\t\t\treturn cart ? normalizeAndStore(cart) : undefined;\n\t\t},\n\t\tclearCart: async () => normalizeAndStore(await provider.clearCart()),\n\t\taddItems: async items => normalizeAndStore(await provider.addItems(items)),\n\t\tupdateItems: async items =>\n\t\t\tnormalizeAndStore(await provider.updateItems(items)),\n\t\tremoveItems: async ids => normalizeAndStore(await provider.removeItems(ids))\n\t};\n}\n","import type { IReturnContext } from \"../widget/lib/context/return-context\";\nimport type { IToastContext } from \"../widget/lib/context/toast-context\";\nimport type { ValueState } from \"../widget/lib/hooks/common/use-value-state\";\nimport { WidgetViewState } from \"../widget/lib/types\";\nimport {\n\tcompareCarts,\n\tnormalizeCart,\n\tupdateCartStorage\n} from \"../widget/lib/utils/cart\";\nimport { formatSelectedItems } from \"../widget/lib/utils/helpers\";\nimport type { WidgetConfiguration } from \"../widget/lib/utils/initialization/types\";\nimport { CalculationResponse } from \"../widget/lib/utils/queries\";\nimport { normalizeCartInput, wrapCartProvider } from \"./storefront-cart\";\nimport type {\n\tCartInput,\n\tCartProvider,\n\tEventCallback,\n\tEventName,\n\tOrderData,\n\tSetCartOutput,\n\tShopifyCart\n} from \"./types\";\n\ninterface StateBridge {\n\twidgetViewState: ValueState<WidgetViewState> | null;\n\tconfig: WidgetConfiguration | null;\n\treturnContext: IReturnContext | null;\n\ttoastContext: IToastContext | null;\n\tcartProvider: CartProvider | null;\n\tisInitialized: boolean;\n\teventListeners: Map<string, Set<EventCallback<EventName>>>;\n}\n\nconst bridge: StateBridge = {\n\twidgetViewState: null,\n\tconfig: null,\n\treturnContext: null,\n\ttoastContext: null,\n\tcartProvider: null,\n\tisInitialized: false,\n\teventListeners: new Map()\n};\n\nexport function registerBridge({\n\twidgetViewState,\n\treturnContext,\n\ttoastContext,\n\tconfig\n}: {\n\twidgetViewState: ValueState<WidgetViewState>;\n\treturnContext: IReturnContext;\n\ttoastContext: IToastContext;\n\tconfig: WidgetConfiguration;\n}): void {\n\tbridge.widgetViewState = widgetViewState;\n\tbridge.returnContext = returnContext;\n\tbridge.toastContext = toastContext;\n\tbridge.config = config;\n\tbridge.isInitialized = true;\n\n\temitEvent(\"ready\");\n}\n\nexport function unregisterBridge(): void {\n\tbridge.widgetViewState = null;\n\tbridge.returnContext = null;\n\tbridge.toastContext = null;\n\tbridge.config = null;\n\tbridge.cartProvider = null;\n\tbridge.isInitialized = false;\n\tbridge.eventListeners.clear();\n}\n\nexport function setCartProvider(provider: CartProvider | null): void {\n\tconst wrapped = provider ? wrapCartProvider(provider) : null;\n\n\tbridge.cartProvider = wrapped;\n\n\tif (typeof window !== \"undefined\") {\n\t\tconst rf = (\n\t\t\twindow as Window & {\n\t\t\t\tReturnflows?: { _cartProvider?: CartProvider | null };\n\t\t\t}\n\t\t).Returnflows;\n\t\tif (rf) {\n\t\t\trf._cartProvider = wrapped;\n\t\t}\n\t}\n\n\tif (provider) {\n\t\tconsole.info(`[RF] Cart provider registered.`);\n\t} else {\n\t\tconsole.info(\"[RF] Cart provider cleared.\");\n\t}\n}\n\nexport function getCartProvider(): CartProvider | null {\n\treturn bridge.cartProvider;\n}\n\nexport function isInitialized(): boolean {\n\treturn bridge.isInitialized;\n}\n\nexport function getDrawerState(): WidgetViewState | null {\n\treturn bridge.widgetViewState?.value ?? null;\n}\n\nexport function setDrawerState(state: WidgetViewState): void {\n\tif (!bridge.widgetViewState) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn;\n\t}\n\tbridge.widgetViewState.set(state);\n}\n\nexport function isDrawerOpen(): boolean {\n\treturn bridge.widgetViewState?.value === WidgetViewState.Open;\n}\n\nexport function getCart(): ShopifyCart | null {\n\tconst cartState = bridge.returnContext?.cartState;\n\tif (!cartState?.value.data) return null;\n\treturn cartState.value.data.original as ShopifyCart;\n}\n\nexport function getCalculation(): CalculationResponse | null {\n\treturn bridge.returnContext?.calculationState.value.data ?? null;\n}\n\nexport function getOrder(): OrderData | null {\n\tconst orderData = bridge.returnContext?.orderState.value.data?.orderData;\n\tif (!orderData) return null;\n\n\treturn {\n\t\tid: orderData.id,\n\t\torderId: orderData.orderId,\n\t\torderName: orderData.orderName,\n\t\tinstantExchange: orderData.instantExchange,\n\t\tfreeExchangeLabel: orderData.freeExchangeLabel,\n\t\tproductsToExchange: orderData.productsToExchange,\n\t\ttotalPrice: orderData.totalPrice\n\t};\n}\n\nexport function isLoading(): boolean {\n\treturn bridge.returnContext?.isPending ?? true;\n}\n\nexport async function setCart(cart: CartInput): Promise<SetCartOutput> {\n\tconst cartState = bridge.returnContext?.cartState;\n\tconst orderState = bridge.returnContext?.orderState;\n\tconst calculationState = bridge.returnContext?.calculationState;\n\n\tif (!cartState || !orderState?.value.data) {\n\t\tconsole.warn(\"[RF] Widget not initialized or order not loaded.\");\n\t\treturn {\n\t\t\tcart: null,\n\t\t\tcalculation: null,\n\t\t\thasChanged: false\n\t\t};\n\t}\n\n\tconst order = orderState.value.data;\n\n\tconst normalizedInput = normalizeCartInput(cart);\n\tconst productRules = order.orderData.productRules || [];\n\n\t// Check if cart has actually changed\n\tconst currentCart = cartState.value.data?.original as ShopifyCart | undefined;\n\tif (\n\t\tcurrentCart &&\n\t\tcompareCarts({\n\t\t\tcart1: currentCart,\n\t\t\tcart2: normalizedInput,\n\t\t\trules: productRules\n\t\t})\n\t) {\n\t\treturn {\n\t\t\tcart: currentCart,\n\t\t\tcalculation: calculationState?.value.data ?? null,\n\t\t\thasChanged: false\n\t\t};\n\t}\n\n\tconst { cart: transformedCart } = normalizeCart(\n\t\tnormalizedInput,\n\t\tproductRules\n\t);\n\n\tcartState.set({\n\t\tdata: {\n\t\t\toriginal: normalizedInput,\n\t\t\ttransformed: transformedCart\n\t\t},\n\t\tpending: false,\n\t\terror: null\n\t});\n\n\tupdateCartStorage(normalizedInput);\n\n\temitEvent(\"cart:updated\", normalizedInput);\n\n\tconst calculationResponse = await calculationState?.query({\n\t\tcart: transformedCart,\n\t\torderId: order.orderData.id,\n\t\tlineItems: formatSelectedItems(bridge.config?.data.formData)\n\t});\n\n\treturn {\n\t\tcart: transformedCart,\n\t\tcalculation: calculationResponse ?? null,\n\t\thasChanged: true\n\t};\n}\n\nexport async function refetchCart(): Promise<SetCartOutput | void> {\n\tconst cartState = bridge.returnContext?.cartState;\n\tconst orderState = bridge.returnContext?.orderState;\n\n\tif (!cartState || !orderState?.value.data) {\n\t\tconsole.warn(\"[RF] Widget not initialized or order not loaded.\");\n\t\treturn;\n\t}\n\n\tif (bridge.cartProvider) {\n\t\ttry {\n\t\t\tconst cart = await bridge.cartProvider.getCart();\n\t\t\tif (!cart) return;\n\t\t\treturn setCart(cart);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[RF] Cart provider getCart failed:\", error);\n\t\t\temitEvent(\n\t\t\t\t\"error\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error))\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tawait cartState.query(orderState.value.data);\n}\n\nexport async function clearCart(): Promise<SetCartOutput | void> {\n\tif (!bridge.isInitialized) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn;\n\t}\n\n\tif (bridge.cartProvider?.clearCart) {\n\t\ttry {\n\t\t\tconst cart = await bridge.cartProvider.clearCart();\n\t\t\treturn setCart(cart);\n\t\t} catch (error) {\n\t\t\tconsole.error(\"[RF] Cart provider clearCart failed:\", error);\n\t\t\temitEvent(\n\t\t\t\t\"error\",\n\t\t\t\terror instanceof Error ? error : new Error(String(error))\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t}\n\n\tdocument.dispatchEvent(new CustomEvent(\"RF_CART_AND_CALCULATION_REFETCH\"));\n}\n\nexport function showToast(options: {\n\tmessage: string;\n\ttone?: \"info\" | \"tip\" | \"action\" | \"error\" | \"giftcard\";\n\tduration?: number;\n\tonClose?: () => void;\n}): string {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized. Call init() first.\");\n\t\treturn \"\";\n\t}\n\n\treturn bridge.toastContext.add({\n\t\tmessage: options.message,\n\t\ttone: options.tone,\n\t\tduration: options.duration,\n\t\tonClose: options.onClose\n\t});\n}\n\nexport function dismissToast(id: string): void {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized.\");\n\t\treturn;\n\t}\n\tbridge.toastContext.remove(id);\n}\n\nexport function clearToasts(): void {\n\tif (!bridge.toastContext) {\n\t\tconsole.warn(\"[RF] Widget not initialized.\");\n\t\treturn;\n\t}\n\tbridge.toastContext.clear();\n}\n\nexport function addEventListener<K extends EventName>(\n\tevent: K,\n\tcallback: EventCallback<K>\n): void {\n\tif (!bridge.eventListeners.has(event)) {\n\t\tbridge.eventListeners.set(event, new Set());\n\t}\n\tbridge.eventListeners.get(event)!.add(callback as EventCallback<EventName>);\n}\n\nexport function removeEventListener<K extends EventName>(\n\tevent: K,\n\tcallback: EventCallback<K>\n): void {\n\tbridge.eventListeners\n\t\t.get(event)\n\t\t?.delete(callback as EventCallback<EventName>);\n}\n\nexport function emitEvent<K extends EventName>(\n\tevent: K,\n\t...args: K extends \"error\"\n\t\t? [Error]\n\t\t: K extends \"calculation:updated\"\n\t\t\t? [CalculationResponse]\n\t\t\t: K extends \"cart:updated\"\n\t\t\t\t? [ShopifyCart]\n\t\t\t\t: []\n): void {\n\tconst listeners = bridge.eventListeners.get(event);\n\tif (!listeners) return;\n\n\tlisteners.forEach(callback => {\n\t\ttry {\n\t\t\t// @ts-expect-error - TypeScript can't verify the callback signature matches the args\n\t\t\tcallback(...args);\n\t\t} catch (error) {\n\t\t\tconsole.error(`[RF] Error in ${event} event handler:`, error);\n\t\t}\n\t});\n}\n","import { WidgetViewState } from \"../widget/lib/types\";\nimport * as bridge from \"./state-bridge\";\nimport type {\n\tCartAPI,\n\tCartInput,\n\tCartProvider,\n\tDataAPI,\n\tDrawerAPI,\n\tEventCallback,\n\tEventName,\n\tReturnflowsAPI,\n\tReturnflowsConfig,\n\tToastAPI,\n\tToastOptions\n} from \"./types\";\n\ndeclare const __VERSION__: string;\n\nclass ReturnflowsWidget implements ReturnflowsAPI {\n\tprivate _initPromise: Promise<void> | null = null;\n\n\t/** @internal */\n\t_cartProvider: CartProvider | null = null;\n\n\tpublic readonly version =\n\t\ttypeof __VERSION__ !== \"undefined\" ? __VERSION__ : \"0.0.0\";\n\n\tpublic readonly drawer: DrawerAPI = {\n\t\topen: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.setDrawerState(WidgetViewState.Open);\n\t\t},\n\n\t\tclose: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.setDrawerState(WidgetViewState.Collapsed);\n\t\t},\n\n\t\ttoggle: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tconst current = bridge.getDrawerState();\n\t\t\tbridge.setDrawerState(\n\t\t\t\tcurrent === WidgetViewState.Open\n\t\t\t\t\t? WidgetViewState.Collapsed\n\t\t\t\t\t: WidgetViewState.Open\n\t\t\t);\n\t\t},\n\n\t\tisOpen: (): boolean => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.isDrawerOpen();\n\t\t}\n\t};\n\n\tpublic readonly data: DataAPI = {\n\t\tgetCart: () => bridge.getCart(),\n\t\tgetCalculation: () => bridge.getCalculation(),\n\t\tgetOrder: () => bridge.getOrder(),\n\t\tisLoading: () => bridge.isLoading()\n\t};\n\n\tpublic readonly cart: CartAPI = {\n\t\tsetCart: async (cart: CartInput): ReturnType<CartAPI[\"setCart\"]> => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.setCart(cart);\n\t\t},\n\n\t\trefetch: async (): Promise<void> => {\n\t\t\tthis._ensureInitialized();\n\t\t\tawait bridge.refetchCart();\n\t\t},\n\n\t\tclear: async (): Promise<void> => {\n\t\t\tthis._ensureInitialized();\n\t\t\tawait bridge.clearCart();\n\t\t}\n\t};\n\n\tpublic readonly toast: ToastAPI = {\n\t\tshow: (options: ToastOptions): string => {\n\t\t\tthis._ensureInitialized();\n\t\t\treturn bridge.showToast(options);\n\t\t},\n\n\t\tdismiss: (id: string): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.dismissToast(id);\n\t\t},\n\n\t\tclear: (): void => {\n\t\t\tthis._ensureInitialized();\n\t\t\tbridge.clearToasts();\n\t\t}\n\t};\n\n\tasync init(config: ReturnflowsConfig = {}): Promise<void> {\n\t\tif (this._initPromise) {\n\t\t\tconsole.warn(\"[RF] Already initializing. Returning existing promise.\");\n\t\t\treturn this._initPromise;\n\t\t}\n\n\t\tif (bridge.isInitialized()) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[RF] Already initialized. Call destroy() first to reinitialize.\"\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\n\t\tthis._initPromise = new Promise<void>((resolve, reject) => {\n\t\t\t(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst { onReady, onError, cartProvider, ...rest } = config;\n\n\t\t\t\t\tif (cartProvider) {\n\t\t\t\t\t\tbridge.setCartProvider(cartProvider);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst { default: initialize } =\n\t\t\t\t\t\tawait import(\"../widget/lib/utils/initialization\");\n\t\t\t\t\tconst { default: WidgetContainer } =\n\t\t\t\t\t\tawait import(\"../widget/components/widget-container\");\n\t\t\t\t\tconst { h } = await import(\"preact\");\n\n\t\t\t\t\tconst result = await initialize(\n\t\t\t\t\t\twidgetConfig => h(WidgetContainer, widgetConfig),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnetworkInterceptionMethod: \"none\",\n\t\t\t\t\t\t\t...rest\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!result.success) {\n\t\t\t\t\t\tif (result.reason === \"CONTAINER_EXISTS\") {\n\t\t\t\t\t\t\tawait this._waitForBridge();\n\t\t\t\t\t\t\tconfig.onReady?.();\n\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (result.reason === \"MISSING_SESSION_ID\") {\n\t\t\t\t\t\t\tthis._initPromise = null;\n\t\t\t\t\t\t\treturn resolve();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`Widget initialization failed: ${result.message} (${result.reason})`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait this._waitForBridge();\n\t\t\t\t\tconfig.onReady?.();\n\t\t\t\t\tresolve();\n\t\t\t\t} catch (err) {\n\t\t\t\t\tconst error = err instanceof Error ? err : new Error(String(err));\n\t\t\t\t\tconfig.onError?.(error);\n\t\t\t\t\tbridge.setCartProvider(null);\n\t\t\t\t\tthis._initPromise = null;\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t})();\n\t\t});\n\n\t\treturn this._initPromise;\n\t}\n\n\tdestroy(): void {\n\t\tbridge.setCartProvider(null);\n\t\tbridge.unregisterBridge();\n\n\t\tif (typeof document !== \"undefined\") {\n\t\t\tconst container = document.getElementById(\"rf-overlay-widget\");\n\t\t\tif (container) {\n\t\t\t\tcontainer.remove();\n\t\t\t}\n\t\t}\n\n\t\tthis._initPromise = null;\n\t}\n\n\tisInitialized(): boolean {\n\t\treturn bridge.isInitialized();\n\t}\n\n\ton<K extends EventName>(event: K, callback: EventCallback<K>): () => void {\n\t\tbridge.addEventListener(event, callback);\n\t\treturn () => bridge.removeEventListener(event, callback);\n\t}\n\n\toff<K extends EventName>(event: K, callback: EventCallback<K>): void {\n\t\tbridge.removeEventListener(event, callback);\n\t}\n\n\tprivate _ensureInitialized(): void {\n\t\tif (!bridge.isInitialized()) {\n\t\t\tthrow new Error(\"[RF] Widget not initialized. Call init() first.\");\n\t\t}\n\t}\n\n\tprivate async _waitForBridge(timeout = 10000): Promise<void> {\n\t\tconst start = Date.now();\n\t\twhile (!bridge.isInitialized()) {\n\t\t\tif (Date.now() - start > timeout) {\n\t\t\t\tthrow new Error(\"[RF] Initialization timeout\");\n\t\t\t}\n\t\t\tawait new Promise(r => setTimeout(r, 50));\n\t\t}\n\t}\n}\n\nexport const Returnflows = new ReturnflowsWidget();\n\nif (typeof window !== \"undefined\") {\n\t(window as Window & { Returnflows?: ReturnflowsWidget }).Returnflows =\n\t\tReturnflows;\n}\n\nexport default Returnflows;\n","var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,w=Array.isArray;function d(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){var l,u;if(null!=(n=n.__)&&null!=n.__c){for(n.__e=n.__c.base=null,l=0;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e){n.__e=n.__c.base=u.__e;break}return C(n)}}function M(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!$.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)($)}function $(){for(var n,u,t,r,o,f,c,s=1;i.length;)i.length>s&&i.sort(e),n=i.shift(),s=i.length,n.__d&&(t=void 0,o=(r=(u=n).__v).__e,f=[],c=[],u.__P&&((t=d({},r)).__v=r.__v+1,l.vnode&&l.vnode(t),O(u.__P,t,r,u.__n,u.__P.namespaceURI,32&r.__u?[o]:null,f,null==o?S(r):o,!!(32&r.__u),c),t.__v=r.__v,t.__.__k[t.__i]=t,z(f,t,c),t.__e!=o&&C(t)));$.__r=0}function I(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,w,d,g,_=t&&t.__k||v,m=l.length;for(f=P(u,l,_,f,m),a=0;a<m;a++)null!=(y=u.__k[a])&&(h=-1==y.__i?p:_[y.__i]||p,y.__i=a,g=O(n,y,h,i,r,o,e,f,c,s),w=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&q(h.ref,null,y),s.push(y.ref,y.__c||w,y)),null==d&&null!=w&&(d=w),4&y.__u||h.__k===y.__k?f=A(y,f,n):\"function\"==typeof y.type&&void 0!==g?f=g:w&&(f=w.nextSibling),y.__u&=-7);return u.__e=d,f}function P(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(f=r+h,(o=n.__k[r]=\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?m(null,o,null,null,null):w(o)?m(k,{children:o},null,null,null):null==o.constructor&&o.__b>0?m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):o).__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=L(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),B(e,e));return t}function A(n,l,u){var t,i;if(\"function\"==typeof n.type){for(t=n.__k,i=0;t&&i<t.length;i++)t[i]&&(t[i].__=n,l=A(t[i],l,u));return l}n.__e!=l&&(l&&n.type&&!u.contains(l)&&(l=S(n)),u.insertBefore(n.__e,l||null),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function H(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(w(n)?n.some(function(n){H(n,l)}):l.push(n)),l}function L(n,l,u,t){var i,r,o=n.key,e=n.type,f=l[u];if(null===f&&null==n.key||f&&o==f.key&&e==f.type&&0==(2&f.__u))return u;if(t>(null!=f&&0==(2&f.__u)?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;){if(i>=0){if((f=l[i])&&0==(2&f.__u)&&o==f.key&&e==f.type)return i;i--}if(r<l.length){if((f=l[r])&&0==(2&f.__u)&&o==f.key&&e==f.type)return r;r++}}return-1}function T(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function j(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||T(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||T(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function F(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function O(n,u,t,i,r,o,e,f,c,s){var a,h,p,v,y,_,m,b,S,C,M,$,P,A,H,L,T,j=u.type;if(null!=u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof j)try{if(b=u.props,S=\"prototype\"in j&&j.prototype.render,C=(a=j.contextType)&&i[a.__c],M=a?C?C.props.value:a.__:i,t.__c?m=(h=u.__c=t.__c).__=h.__E:(S?u.__c=h=new j(b,M):(u.__c=h=new x(b,M),h.constructor=j,h.render=D),C&&C.sub(h),h.props=b,h.state||(h.state={}),h.context=M,h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),S&&null==h.__s&&(h.__s=h.state),S&&null!=j.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=d({},h.__s)),d(h.__s,j.getDerivedStateFromProps(b,h.__s))),v=h.props,y=h.state,h.__v=u,p)S&&null==j.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),S&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(S&&null==j.getDerivedStateFromProps&&b!==v&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(b,M),!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(b,h.__s,M)||u.__v==t.__v){for(u.__v!=t.__v&&(h.props=b,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),$=0;$<h._sb.length;$++)h.__h.push(h._sb[$]);h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(b,h.__s,M),S&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(v,y,_)})}if(h.context=M,h.props=b,h.__P=n,h.__e=!1,P=l.__r,A=0,S){for(h.state=h.__s,h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),H=0;H<h._sb.length;H++)h.__h.push(h._sb[H]);h._sb=[]}else do{h.__d=!1,P&&P(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=d(d({},i),h.getChildContext())),S&&!p&&null!=h.getSnapshotBeforeUpdate&&(_=h.getSnapshotBeforeUpdate(v,y)),L=a,null!=a&&a.type===k&&null==a.key&&(L=N(a.props.children)),f=I(n,w(L)?L:[L],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),m&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else for(T=o.length;T--;)g(o[T]);else u.__e=t.__e,u.__k=t.__k;l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=V(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function z(n,u,t){for(var i=0;i<t.length;i++)q(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function N(n){return\"object\"!=typeof n||null==n||n.__b&&n.__b>0?n:w(n)?n.map(N):d({},n)}function V(u,t,i,r,o,e,f,c,s){var a,h,v,y,d,_,m,b=i.props,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((d=e[a])&&\"setAttribute\"in d==!!x&&(x?d.localName==x:3==d.nodeType)){u=d,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),b=i.props||p,!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(d=u.attributes[a]).name]=d.value;for(a in b)if(d=b[a],\"children\"==a);else if(\"dangerouslySetInnerHTML\"==a)v=d;else if(!(a in k)){if(\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k)continue;j(u,a,null,d,o)}for(a in k)d=k[a],\"children\"==a?y=d:\"dangerouslySetInnerHTML\"==a?h=d:\"value\"==a?_=d:\"checked\"==a?m=d:c&&\"function\"!=typeof d||b[a]===d||j(u,a,d,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),I(\"template\"==t.type?u.content:u,w(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&j(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&j(u,a,m,b[a],o))}return u}function q(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function B(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||q(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&B(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function D(n,l,u){return this.constructor(n,u)}function E(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],O(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),z(e,u,f)}function G(n,l){E(n,l,G)}function J(l,u,t){var i,r,o,e,f=d({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function K(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,M(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&null==n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=d({},this.state),\"function\"==typeof n&&(n=n(d({},u),this.props)),n&&d(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),M(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),M(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},$.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=F(!1),a=F(!0),h=0;export{x as Component,k as Fragment,J as cloneElement,K as createContext,_ as createElement,b as createRef,_ as h,G as hydrate,t as isValidElement,l as options,E as render,H as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","export function resolveEnvVar<T = undefined>(\n\tvarKey: string,\n\tfallback?: T\n): string | T {\n\tlet value;\n\ttry {\n\t\tvalue = process.env?.[varKey];\n\t} catch (err) {\n\t\tvalue = import.meta.env?.[varKey];\n\t\tvoid err;\n\t}\n\tvalue ??= fallback;\n\treturn value;\n}\n\n// General\nexport const IMAGE_FALLBACK_URL =\n\t\"https://cdn.shopify.com/s/files/1/0849/6526/1638/files/RF-SO-Placeholder2.png?v=1735826638\";\n\n// URLs\nexport const API_URL = resolveEnvVar(\"VITE_API_URL\", \"http://localhost:8080\");\nexport const PLATFORM_URL = resolveEnvVar(\n\t\"VITE_PLATFORM_URL\",\n\t\"http://localhost:3000\"\n);\nexport const WIDGET_BASE_URL = resolveEnvVar(\n\t\"VITE_WIDGET_BASE_URL\",\n\t\"http://localhost:3334\"\n);\n\n/* Consistent Search Params */\nexport const SEARCH_PARAM_ID_NAME = \"rflowsId\";\n\n/* Legacy Search Params */\nexport const LEGACY_PARAMS = [\"lineItems\", \"slug\", \"locale\", \"currency\"];\n\n/* Element Indendifiers */\nexport const ROOT_ELEMENT_ID = \"root\";\nexport const SHADOW_ROOT_ELEMENT_ID = \"shadow-root\";\nexport const CONTAINER_ELEMENT_ID = \"rf-overlay-widget\";\nexport const CUSTOM_CSS_DATA_ATTR = \"rf-custom-css\";\n\nexport const SCRIPT_ID = \"rf-embedded-script\";\nexport const SETTINGS_SCRIPT_ID = \"rf-settings-json\";\n","import { WidgetViewState } from \"../types\";\nimport { WidgetConfiguration } from \"./initialization/types\";\n\n// Define a union of allowed event names\nexport const enum InternalCustomEvent {\n\tFetchInterception = \"RF_FETCH_INTERCEPTION\",\n\tXHRInterception = \"RF_XHR_INTERCEPTION\",\n\tDrawerStateChange = \"RF_DRAWER_STATE_CHANGE\",\n\tWidgetInitialization = \"RF_WIDGET_INITIALIZATION\"\n}\n\nexport const enum ExternalCustomEvent {\n\tDrawerOpen = \"RF_DRAWER_OPEN\",\n\tDrawerClose = \"RF_DRAWER_CLOSE\",\n\tDrawerToggle = \"RF_DRAWER_TOGGLE\",\n\tCalculationRefetch = \"RF_CALCULATION_REFETCH\",\n\tCartRefetch = \"RF_CART_REFETCH\",\n\tCartAndCalculationRefetch = \"RF_CART_AND_CALCULATION_REFETCH\",\n\tDrawerOpenAndRefetch = \"RF_DRAWER_OPEN_AND_REFETCH\"\n}\n\nexport type XHRResponse = string | Record<string, unknown> | undefined;\nexport type FetchResponse = Response | undefined;\n\nexport type InterceptionResponse = XHRResponse | FetchResponse;\n\nexport interface InterceptionPayload {\n\tresponse: InterceptionResponse;\n\trequestUrl: string | URL;\n}\n\n// Define the expected data types for each event\nexport type CustomEventPayloadMap = {\n\t[InternalCustomEvent.FetchInterception]: InterceptionPayload;\n\t[InternalCustomEvent.XHRInterception]: InterceptionPayload;\n\t[InternalCustomEvent.DrawerStateChange]: { state: WidgetViewState };\n\t[InternalCustomEvent.WidgetInitialization]: WidgetConfiguration;\n\t[ExternalCustomEvent.DrawerOpen]: undefined;\n\t[ExternalCustomEvent.DrawerClose]: undefined;\n\t[ExternalCustomEvent.DrawerToggle]: undefined;\n\t[ExternalCustomEvent.CalculationRefetch]: undefined;\n\t[ExternalCustomEvent.CartRefetch]: undefined;\n\t[ExternalCustomEvent.CartAndCalculationRefetch]: undefined;\n\t[ExternalCustomEvent.DrawerOpenAndRefetch]: undefined;\n};\n\n// Subscribe function with typed event name and payload\nfunction subscribe<K extends keyof CustomEventPayloadMap>(\n\teventName: K,\n\tcallback: (event: CustomEvent<CustomEventPayloadMap[K]>) => void\n): () => void {\n\tconst handler = (event: CustomEvent<CustomEventPayloadMap[K]>) =>\n\t\tcallback(event);\n\tdocument.addEventListener(eventName, handler as EventListener);\n\treturn () => {\n\t\tdocument.removeEventListener(eventName, handler as EventListener);\n\t};\n}\n\n// Publish function with typed event name and payload\nfunction publish<K extends InternalCustomEvent>(\n\teventName: K,\n\t...args: K extends keyof CustomEventPayloadMap\n\t\t? [detail: CustomEventPayloadMap[K]]\n\t\t: [detail?: undefined]\n): void {\n\tconst event = new CustomEvent(eventName, {\n\t\tdetail: args[0]\n\t});\n\tdocument.dispatchEvent(event);\n}\n\n// Unsubscribe function\nfunction unsubscribe<K extends keyof CustomEventPayloadMap>(\n\teventName: K,\n\tcallback: (event: CustomEvent<CustomEventPayloadMap[K]>) => void\n): void {\n\tdocument.removeEventListener(eventName, callback as EventListener);\n}\n\n// Exported object\nconst customEvents = {\n\tsubscribe,\n\tpublish,\n\tunsubscribe\n};\n\nexport default customEvents;\n","import { Messages } from \"use-intl\";\nimport { WIDGET_BASE_URL } from \"../constants\";\nimport { logger } from \"./logger\";\n\nexport type Locale = string;\n\nexport const DEFAULT_LOCALE: Locale = \"en\";\nexport const DEFAULT_CURRENCY: string = \"DKK\";\n\nexport async function loadMessages(\n\t...locales: Locale[]\n): Promise<{ messages: Messages; locale: Locale }> {\n\t// If no locales provided, use default\n\tconst localesList = locales.length > 0 ? locales : [DEFAULT_LOCALE];\n\n\tfor (const locale of localesList) {\n\t\ttry {\n\t\t\tconst response = await fetch(\n\t\t\t\t`${WIDGET_BASE_URL}/messages/${locale}.json`\n\t\t\t);\n\t\t\tif (response.ok) {\n\t\t\t\tconst messages = await response.json();\n\t\t\t\treturn { messages, locale };\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tlogger.error(`Error loading messages for locale ${locale}:`, error);\n\t\t}\n\t}\n\n\t// If all locales fail, throw an error\n\tthrow new Error(\n\t\t`No messages found for any of the locales: ${localesList.join(\", \")}`\n\t);\n}\n","const PATH_PARAM_RE = /\\{[^{}]+\\}/g;\nconst supportsRequestInitExt = () => {\n return typeof process === \"object\" && Number.parseInt(process?.versions?.node?.substring(0, 2)) >= 18 && process.versions.undici;\n};\nfunction randomID() {\n return Math.random().toString(36).slice(2, 11);\n}\nfunction createClient(clientOptions) {\n let {\n baseUrl = \"\",\n Request: CustomRequest = globalThis.Request,\n fetch: baseFetch = globalThis.fetch,\n querySerializer: globalQuerySerializer,\n bodySerializer: globalBodySerializer,\n pathSerializer: globalPathSerializer,\n headers: baseHeaders,\n requestInitExt = void 0,\n ...baseOptions\n } = { ...clientOptions };\n requestInitExt = supportsRequestInitExt() ? requestInitExt : void 0;\n baseUrl = removeTrailingSlash(baseUrl);\n const globalMiddlewares = [];\n async function coreFetch(schemaPath, fetchOptions) {\n const {\n baseUrl: localBaseUrl,\n fetch = baseFetch,\n Request = CustomRequest,\n headers,\n params = {},\n parseAs = \"json\",\n querySerializer: requestQuerySerializer,\n bodySerializer = globalBodySerializer ?? defaultBodySerializer,\n pathSerializer: requestPathSerializer,\n body,\n middleware: requestMiddlewares = [],\n ...init\n } = fetchOptions || {};\n let finalBaseUrl = baseUrl;\n if (localBaseUrl) {\n finalBaseUrl = removeTrailingSlash(localBaseUrl) ?? baseUrl;\n }\n let querySerializer = typeof globalQuerySerializer === \"function\" ? globalQuerySerializer : createQuerySerializer(globalQuerySerializer);\n if (requestQuerySerializer) {\n querySerializer = typeof requestQuerySerializer === \"function\" ? requestQuerySerializer : createQuerySerializer({\n ...typeof globalQuerySerializer === \"object\" ? globalQuerySerializer : {},\n ...requestQuerySerializer\n });\n }\n const pathSerializer = requestPathSerializer || globalPathSerializer || defaultPathSerializer;\n const serializedBody = body === void 0 ? void 0 : bodySerializer(\n body,\n // Note: we declare mergeHeaders() both here and below because it’s a bit of a chicken-or-egg situation:\n // bodySerializer() needs all headers so we aren’t dropping ones set by the user, however,\n // the result of this ALSO sets the lowest-priority content-type header. So we re-merge below,\n // setting the content-type at the very beginning to be overwritten.\n // Lastly, based on the way headers work, it’s not a simple “present-or-not” check becauase null intentionally un-sets headers.\n mergeHeaders(baseHeaders, headers, params.header)\n );\n const finalHeaders = mergeHeaders(\n // with no body, we should not to set Content-Type\n serializedBody === void 0 || // if serialized body is FormData; browser will correctly set Content-Type & boundary expression\n serializedBody instanceof FormData ? {} : {\n \"Content-Type\": \"application/json\"\n },\n baseHeaders,\n headers,\n params.header\n );\n const finalMiddlewares = [...globalMiddlewares, ...requestMiddlewares];\n const requestInit = {\n redirect: \"follow\",\n ...baseOptions,\n ...init,\n body: serializedBody,\n headers: finalHeaders\n };\n let id;\n let options;\n let request = new Request(\n createFinalURL(schemaPath, { baseUrl: finalBaseUrl, params, querySerializer, pathSerializer }),\n requestInit\n );\n let response;\n for (const key in init) {\n if (!(key in request)) {\n request[key] = init[key];\n }\n }\n if (finalMiddlewares.length) {\n id = randomID();\n options = Object.freeze({\n baseUrl: finalBaseUrl,\n fetch,\n parseAs,\n querySerializer,\n bodySerializer,\n pathSerializer\n });\n for (const m of finalMiddlewares) {\n if (m && typeof m === \"object\" && typeof m.onRequest === \"function\") {\n const result = await m.onRequest({\n request,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (result instanceof Request) {\n request = result;\n } else if (result instanceof Response) {\n response = result;\n break;\n } else {\n throw new Error(\"onRequest: must return new Request() or Response() when modifying the request\");\n }\n }\n }\n }\n }\n if (!response) {\n try {\n response = await fetch(request, requestInitExt);\n } catch (error2) {\n let errorAfterMiddleware = error2;\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onError === \"function\") {\n const result = await m.onError({\n request,\n error: errorAfterMiddleware,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (result instanceof Response) {\n errorAfterMiddleware = void 0;\n response = result;\n break;\n }\n if (result instanceof Error) {\n errorAfterMiddleware = result;\n continue;\n }\n throw new Error(\"onError: must return new Response() or instance of Error\");\n }\n }\n }\n }\n if (errorAfterMiddleware) {\n throw errorAfterMiddleware;\n }\n }\n if (finalMiddlewares.length) {\n for (let i = finalMiddlewares.length - 1; i >= 0; i--) {\n const m = finalMiddlewares[i];\n if (m && typeof m === \"object\" && typeof m.onResponse === \"function\") {\n const result = await m.onResponse({\n request,\n response,\n schemaPath,\n params,\n options,\n id\n });\n if (result) {\n if (!(result instanceof Response)) {\n throw new Error(\"onResponse: must return new Response() when modifying the response\");\n }\n response = result;\n }\n }\n }\n }\n }\n const contentLength = response.headers.get(\"Content-Length\");\n if (response.status === 204 || request.method === \"HEAD\" || contentLength === \"0\" && !response.headers.get(\"Transfer-Encoding\")?.includes(\"chunked\")) {\n return response.ok ? { data: void 0, response } : { error: void 0, response };\n }\n if (response.ok) {\n const getResponseData = async () => {\n if (parseAs === \"stream\") {\n return response.body;\n }\n if (parseAs === \"json\" && !contentLength) {\n const raw = await response.text();\n return raw ? JSON.parse(raw) : void 0;\n }\n return await response[parseAs]();\n };\n return { data: await getResponseData(), response };\n }\n let error = await response.text();\n try {\n error = JSON.parse(error);\n } catch {\n }\n return { error, response };\n }\n return {\n request(method, url, init) {\n return coreFetch(url, { ...init, method: method.toUpperCase() });\n },\n /** Call a GET endpoint */\n GET(url, init) {\n return coreFetch(url, { ...init, method: \"GET\" });\n },\n /** Call a PUT endpoint */\n PUT(url, init) {\n return coreFetch(url, { ...init, method: \"PUT\" });\n },\n /** Call a POST endpoint */\n POST(url, init) {\n return coreFetch(url, { ...init, method: \"POST\" });\n },\n /** Call a DELETE endpoint */\n DELETE(url, init) {\n return coreFetch(url, { ...init, method: \"DELETE\" });\n },\n /** Call a OPTIONS endpoint */\n OPTIONS(url, init) {\n return coreFetch(url, { ...init, method: \"OPTIONS\" });\n },\n /** Call a HEAD endpoint */\n HEAD(url, init) {\n return coreFetch(url, { ...init, method: \"HEAD\" });\n },\n /** Call a PATCH endpoint */\n PATCH(url, init) {\n return coreFetch(url, { ...init, method: \"PATCH\" });\n },\n /** Call a TRACE endpoint */\n TRACE(url, init) {\n return coreFetch(url, { ...init, method: \"TRACE\" });\n },\n /** Register middleware */\n use(...middleware) {\n for (const m of middleware) {\n if (!m) {\n continue;\n }\n if (typeof m !== \"object\" || !(\"onRequest\" in m || \"onResponse\" in m || \"onError\" in m)) {\n throw new Error(\"Middleware must be an object with one of `onRequest()`, `onResponse() or `onError()`\");\n }\n globalMiddlewares.push(m);\n }\n },\n /** Unregister middleware */\n eject(...middleware) {\n for (const m of middleware) {\n const i = globalMiddlewares.indexOf(m);\n if (i !== -1) {\n globalMiddlewares.splice(i, 1);\n }\n }\n }\n };\n}\nclass PathCallForwarder {\n constructor(client, url) {\n this.client = client;\n this.url = url;\n }\n GET = (init) => {\n return this.client.GET(this.url, init);\n };\n PUT = (init) => {\n return this.client.PUT(this.url, init);\n };\n POST = (init) => {\n return this.client.POST(this.url, init);\n };\n DELETE = (init) => {\n return this.client.DELETE(this.url, init);\n };\n OPTIONS = (init) => {\n return this.client.OPTIONS(this.url, init);\n };\n HEAD = (init) => {\n return this.client.HEAD(this.url, init);\n };\n PATCH = (init) => {\n return this.client.PATCH(this.url, init);\n };\n TRACE = (init) => {\n return this.client.TRACE(this.url, init);\n };\n}\nclass PathClientProxyHandler {\n constructor() {\n this.client = null;\n }\n // Assume the property is an URL.\n get(coreClient, url) {\n const forwarder = new PathCallForwarder(coreClient, url);\n this.client[url] = forwarder;\n return forwarder;\n }\n}\nfunction wrapAsPathBasedClient(coreClient) {\n const handler = new PathClientProxyHandler();\n const proxy = new Proxy(coreClient, handler);\n function Client() {\n }\n Client.prototype = proxy;\n const client = new Client();\n handler.client = client;\n return client;\n}\nfunction createPathBasedClient(clientOptions) {\n return wrapAsPathBasedClient(createClient(clientOptions));\n}\nfunction serializePrimitiveParam(name, value, options) {\n if (value === void 0 || value === null) {\n return \"\";\n }\n if (typeof value === \"object\") {\n throw new Error(\n \"Deeply-nested arrays/objects aren\\u2019t supported. Provide your own `querySerializer()` to handle these.\"\n );\n }\n return `${name}=${options?.allowReserved === true ? value : encodeURIComponent(value)}`;\n}\nfunction serializeObjectParam(name, value, options) {\n if (!value || typeof value !== \"object\") {\n return \"\";\n }\n const values = [];\n const joiner = {\n simple: \",\",\n label: \".\",\n matrix: \";\"\n }[options.style] || \"&\";\n if (options.style !== \"deepObject\" && options.explode === false) {\n for (const k in value) {\n values.push(k, options.allowReserved === true ? value[k] : encodeURIComponent(value[k]));\n }\n const final2 = values.join(\",\");\n switch (options.style) {\n case \"form\": {\n return `${name}=${final2}`;\n }\n case \"label\": {\n return `.${final2}`;\n }\n case \"matrix\": {\n return `;${name}=${final2}`;\n }\n default: {\n return final2;\n }\n }\n }\n for (const k in value) {\n const finalName = options.style === \"deepObject\" ? `${name}[${k}]` : k;\n values.push(serializePrimitiveParam(finalName, value[k], options));\n }\n const final = values.join(joiner);\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${final}` : final;\n}\nfunction serializeArrayParam(name, value, options) {\n if (!Array.isArray(value)) {\n return \"\";\n }\n if (options.explode === false) {\n const joiner2 = { form: \",\", spaceDelimited: \"%20\", pipeDelimited: \"|\" }[options.style] || \",\";\n const final = (options.allowReserved === true ? value : value.map((v) => encodeURIComponent(v))).join(joiner2);\n switch (options.style) {\n case \"simple\": {\n return final;\n }\n case \"label\": {\n return `.${final}`;\n }\n case \"matrix\": {\n return `;${name}=${final}`;\n }\n // case \"spaceDelimited\":\n // case \"pipeDelimited\":\n default: {\n return `${name}=${final}`;\n }\n }\n }\n const joiner = { simple: \",\", label: \".\", matrix: \";\" }[options.style] || \"&\";\n const values = [];\n for (const v of value) {\n if (options.style === \"simple\" || options.style === \"label\") {\n values.push(options.allowReserved === true ? v : encodeURIComponent(v));\n } else {\n values.push(serializePrimitiveParam(name, v, options));\n }\n }\n return options.style === \"label\" || options.style === \"matrix\" ? `${joiner}${values.join(joiner)}` : values.join(joiner);\n}\nfunction createQuerySerializer(options) {\n return function querySerializer(queryParams) {\n const search = [];\n if (queryParams && typeof queryParams === \"object\") {\n for (const name in queryParams) {\n const value = queryParams[name];\n if (value === void 0 || value === null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 0) {\n continue;\n }\n search.push(\n serializeArrayParam(name, value, {\n style: \"form\",\n explode: true,\n ...options?.array,\n allowReserved: options?.allowReserved || false\n })\n );\n continue;\n }\n if (typeof value === \"object\") {\n search.push(\n serializeObjectParam(name, value, {\n style: \"deepObject\",\n explode: true,\n ...options?.object,\n allowReserved: options?.allowReserved || false\n })\n );\n continue;\n }\n search.push(serializePrimitiveParam(name, value, options));\n }\n }\n return search.join(\"&\");\n };\n}\nfunction defaultPathSerializer(pathname, pathParams) {\n let nextURL = pathname;\n for (const match of pathname.match(PATH_PARAM_RE) ?? []) {\n let name = match.substring(1, match.length - 1);\n let explode = false;\n let style = \"simple\";\n if (name.endsWith(\"*\")) {\n explode = true;\n name = name.substring(0, name.length - 1);\n }\n if (name.startsWith(\".\")) {\n style = \"label\";\n name = name.substring(1);\n } else if (name.startsWith(\";\")) {\n style = \"matrix\";\n name = name.substring(1);\n }\n if (!pathParams || pathParams[name] === void 0 || pathParams[name] === null) {\n continue;\n }\n const value = pathParams[name];\n if (Array.isArray(value)) {\n nextURL = nextURL.replace(match, serializeArrayParam(name, value, { style, explode }));\n continue;\n }\n if (typeof value === \"object\") {\n nextURL = nextURL.replace(match, serializeObjectParam(name, value, { style, explode }));\n continue;\n }\n if (style === \"matrix\") {\n nextURL = nextURL.replace(match, `;${serializePrimitiveParam(name, value)}`);\n continue;\n }\n nextURL = nextURL.replace(match, style === \"label\" ? `.${encodeURIComponent(value)}` : encodeURIComponent(value));\n }\n return nextURL;\n}\nfunction defaultBodySerializer(body, headers) {\n if (body instanceof FormData) {\n return body;\n }\n if (headers) {\n const contentType = headers.get instanceof Function ? headers.get(\"Content-Type\") ?? headers.get(\"content-type\") : headers[\"Content-Type\"] ?? headers[\"content-type\"];\n if (contentType === \"application/x-www-form-urlencoded\") {\n return new URLSearchParams(body).toString();\n }\n }\n return JSON.stringify(body);\n}\nfunction createFinalURL(pathname, options) {\n let finalURL = `${options.baseUrl}${pathname}`;\n if (options.params?.path) {\n finalURL = options.pathSerializer(finalURL, options.params.path);\n }\n let search = options.querySerializer(options.params.query ?? {});\n if (search.startsWith(\"?\")) {\n search = search.substring(1);\n }\n if (search) {\n finalURL += `?${search}`;\n }\n return finalURL;\n}\nfunction mergeHeaders(...allHeaders) {\n const finalHeaders = new Headers();\n for (const h of allHeaders) {\n if (!h || typeof h !== \"object\") {\n continue;\n }\n const iterator = h instanceof Headers ? h.entries() : Object.entries(h);\n for (const [k, v] of iterator) {\n if (v === null) {\n finalHeaders.delete(k);\n } else if (Array.isArray(v)) {\n for (const v2 of v) {\n finalHeaders.append(k, v2);\n }\n } else if (v !== void 0) {\n finalHeaders.set(k, v);\n }\n }\n }\n return finalHeaders;\n}\nfunction removeTrailingSlash(url) {\n if (url.endsWith(\"/\")) {\n return url.substring(0, url.length - 1);\n }\n return url;\n}\n\nexport { createFinalURL, createPathBasedClient, createQuerySerializer, createClient as default, defaultBodySerializer, defaultPathSerializer, mergeHeaders, randomID, removeTrailingSlash, serializeArrayParam, serializeObjectParam, serializePrimitiveParam, wrapAsPathBasedClient };\n//# sourceMappingURL=index.mjs.map\n","// lib/api-client.ts\nimport createClient from \"openapi-fetch\";\nimport type { paths } from \"../../lib/types/schema\";\nimport { API_URL } from \"../constants\";\n\ntype ApiPath = keyof paths;\nexport type HttpMethod =\n\t| \"get\"\n\t| \"put\"\n\t| \"post\"\n\t| \"delete\"\n\t| \"options\"\n\t| \"head\"\n\t| \"patch\"\n\t| \"trace\";\ntype ApiMethod<Path extends ApiPath> = Extract<keyof paths[Path], HttpMethod>;\n\n// Request parameter types\ntype ApiQueryParams<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { query?: infer Q } } ? Q : never;\n\ntype ApiPathParams<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { path?: infer P } } ? P : never;\n\ntype ApiHeaders<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends { parameters: { header?: infer H } }\n\t? H\n\t: never;\n\ntype ApiRequestBody<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends {\n\trequestBody?: { content: { \"application/json\": infer B } };\n}\n\t? B\n\t: never;\n\n// Response types\ntype SuccessStatus = 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226;\ntype JsonContent<T> = T extends { content: { \"application/json\": infer R } }\n\t? R\n\t: never;\ntype SuccessJson<Responses> =\n\tResponses extends Record<number, unknown>\n\t\t? {\n\t\t\t\t[K in Extract<keyof Responses, SuccessStatus>]: JsonContent<\n\t\t\t\t\tResponses[K]\n\t\t\t\t>;\n\t\t\t}[Extract<keyof Responses, SuccessStatus>]\n\t\t: never;\n\ntype ApiResponse<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>\n> = paths[Path][Method] extends {\n\tresponses: infer R;\n}\n\t? SuccessJson<R>\n\t: never;\n\ntype ApiResponseObject<Path extends ApiPath, Method extends ApiMethod<Path>> =\n\tApiResponse<Path, Method> extends { responseObject?: infer O } ? O : never;\n\ntype ApiErrorResponse<\n\tPath extends ApiPath,\n\tMethod extends ApiMethod<Path>,\n\tStatusCode extends number = 400\n> = paths[Path][Method] extends {\n\tresponses: {\n\t\t[K in StatusCode]: { content: { \"application/json\": infer E } };\n\t};\n}\n\t? E\n\t: never;\n\nconst api = createClient<paths>({\n\tbaseUrl: API_URL,\n\theaders: {\n\t\t\"Content-Type\": \"application/json\"\n\t}\n});\n\n// Export the API client instance\nexport default api;\n\n// Export utility types\nexport type {\n\tApiErrorResponse,\n\tApiHeaders,\n\tApiMethod,\n\tApiPath,\n\tApiPathParams,\n\tApiQueryParams,\n\tApiRequestBody,\n\tApiResponse,\n\tApiResponseObject\n};\n","import { SETTINGS_SCRIPT_ID } from \"../../constants\";\nimport api from \"../api-client\";\nimport { Locale } from \"../i18n\";\nimport { logger } from \"../logger\";\nimport {\n\tRemoteWidgetSettingsResponse,\n\tResolvedWidgetSettings,\n\tUnresolvedWidgetSettings\n} from \"./types\";\n\nexport async function getWidgetSettings({\n\tlocale,\n\tslug,\n\tisFirstLoad = false\n}: {\n\tlocale: Locale;\n\tslug: string | undefined;\n\tisFirstLoad: boolean;\n}): Promise<ResolvedWidgetSettings | null> {\n\tlet settings: ResolvedWidgetSettings | null = getSettingsFromScript(locale);\n\n\tif (!settings) {\n\t\tconst remoteSettings = await getRemoteSettings({\n\t\t\tlocale,\n\t\t\tslug,\n\t\t\tshouldUseCachedResult: !isFirstLoad\n\t\t});\n\t\tif (remoteSettings) {\n\t\t\tlogger.info(\"Using remote settings:\", remoteSettings);\n\t\t\tsettings = remoteSettings;\n\t\t} else {\n\t\t\tlogger.warn(\"No settings found in script or remotely\");\n\t\t}\n\t}\n\n\treturn settings;\n}\n\nfunction getSettingsFromScript(locale: Locale): ResolvedWidgetSettings | null {\n\tconst scriptElement = document.getElementById(\n\t\tSETTINGS_SCRIPT_ID\n\t) as HTMLScriptElement | null;\n\n\tif (!scriptElement) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst settings: UnresolvedWidgetSettings = JSON.parse(\n\t\t\tscriptElement.innerHTML\n\t\t);\n\n\t\tconst localizedMessages = settings.translations?.messages?.[locale];\n\n\t\t// Translations in the Shopify metafield are formatted as { \"messages\": { \"en\": { \"key\": \"value\" } } }\n\t\t// We only need the messages within the current locale, so we extract those and format them as { \"key\": \"value\" } before returning the settings\n\t\tconst formattedMessages = localizedMessages\n\t\t\t? { messages: localizedMessages }\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\t...settings,\n\t\t\ttranslations: formattedMessages\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"Failed to parse widget settings JSON\", error);\n\t\treturn null;\n\t}\n}\n\nasync function getRemoteSettings({\n\tlocale,\n\tslug,\n\tshouldUseCachedResult = true\n}: {\n\tlocale: Locale;\n\tslug: string | undefined;\n\tshouldUseCachedResult?: boolean;\n}): Promise<RemoteWidgetSettingsResponse | null> {\n\tif (!slug) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst configResponse = await api.GET(\"/shop-overlay/config\", {\n\t\t\tparams: {\n\t\t\t\tquery: { locale, slug }\n\t\t\t},\n\t\t\tclientStorage: {\n\t\t\t\tkey: `remote_settings_${slug}_${locale}`,\n\t\t\t\ttype: \"sessionStorage\",\n\t\t\t\tshouldUseCachedResult\n\t\t\t}\n\t\t});\n\n\t\tconst responseObject = configResponse.data?.responseObject;\n\t\tif (configResponse.error || !responseObject) {\n\t\t\tlogger.error(\n\t\t\t\t\"Error response from config endpoint:\",\n\t\t\t\tconfigResponse.error ?? \"No data returned\"\n\t\t\t);\n\t\t\treturn null;\n\t\t}\n\n\t\treturn responseObject;\n\t} catch (error) {\n\t\tlogger.error(`Error fetching remote settings for locale ${locale}:`, error);\n\t\treturn null;\n\t}\n}\n","import { SEARCH_PARAM_ID_NAME } from \"../../constants\";\nimport deepClone, {\n\tgetResolvedSearchParams,\n\tisNil,\n\tisNumber,\n\tsetNestedValue\n} from \"../helpers\";\nimport { DEFAULT_CURRENCY, DEFAULT_LOCALE, loadMessages } from \"../i18n\";\nimport { logger } from \"../logger\";\nimport { getSessionCache } from \"../session\";\nimport storage, {\n\tSTORAGE_DEBUG_MODE_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"../storage\";\nimport { getWidgetSettings } from \"./settings\";\nimport { InitResult, ModuleInitOptions, WidgetConfiguration } from \"./types\";\n\nexport function isDOMStringMap(\n\tvalue: DOMStringMap | ModuleInitOptions\n): value is DOMStringMap {\n\treturn (\n\t\t(typeof DOMStringMap !== \"undefined\" && value instanceof DOMStringMap) ||\n\t\tObject.prototype.toString.call(value) === \"[object DOMStringMap]\"\n\t);\n}\n\n// Get and parse dataset options from the script element\nexport function parseScriptDataset(dataset: DOMStringMap): ModuleInitOptions {\n\tconst datasetRecord: Record<PropertyKey, unknown> = {};\n\n\tObject.entries(dataset).forEach(([key, value]) => {\n\t\tif (isNil(value)) return value;\n\n\t\tlet resolvedValue: unknown = value;\n\n\t\tif (value === \"true\") {\n\t\t\tresolvedValue = true;\n\t\t} else if (value === \"false\") {\n\t\t\tresolvedValue = false;\n\t\t} else if (isNumber(value)) {\n\t\t\tresolvedValue = Number(value);\n\t\t} else if (value === \"null\") {\n\t\t\tresolvedValue = null;\n\t\t} else if (value === \"undefined\") {\n\t\t\tresolvedValue = undefined;\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tresolvedValue = JSON.parse(value);\n\t\t\t} catch {\n\t\t\t\t// Keep as string if JSON parsing fails\n\t\t\t}\n\t\t}\n\n\t\tdatasetRecord[key] = resolvedValue;\n\t});\n\n\treturn datasetRecord;\n}\n\nfunction determineDebugMode({\n\toptions,\n\tsearchParams\n}: {\n\toptions: ModuleInitOptions;\n\tsearchParams: URLSearchParams;\n}) {\n\tconst isDevEnvironment =\n\t\toptions.env === \"development\" || options.env === \"test\";\n\tconst hasDebugParameter = searchParams.get(\"debug\") === \"true\";\n\n\tconst storedDebugModeValue = storage.get<boolean>(STORAGE_DEBUG_MODE_KEY);\n\n\tif (isDevEnvironment || hasDebugParameter) {\n\t\tstorage.set(STORAGE_DEBUG_MODE_KEY, true);\n\t}\n\n\tconst isDebugModeEnabled = Boolean(\n\t\tisDevEnvironment || hasDebugParameter || storedDebugModeValue\n\t);\n\n\treturn isDebugModeEnabled;\n}\n\nexport async function prepareInitializationOptions(\n\tdataset: DOMStringMap | ModuleInitOptions\n): Promise<InitResult> {\n\tconst options = isDOMStringMap(dataset)\n\t\t? parseScriptDataset(dataset)\n\t\t: dataset;\n\n\tconst searchParams = getResolvedSearchParams();\n\n\tconst searchParamsId = searchParams.get(SEARCH_PARAM_ID_NAME);\n\tconst isFirstLoad = Boolean(searchParamsId);\n\n\tconst internalId = searchParamsId || storage.get(STORAGE_SESSION_KEY);\n\n\tif (!internalId) {\n\t\tconst message = \"Session ID is missing from URL and storage\";\n\t\tlogger.warn(message);\n\t\treturn { success: false, reason: \"MISSING_SESSION_ID\", message };\n\t}\n\n\tconst isDebugModeEnabled = determineDebugMode({ options, searchParams });\n\n\tconst cache = await getSessionCache(internalId);\n\n\tif (!cache) {\n\t\tconst message = `No session cache found for id: ${internalId}`;\n\t\tlogger.warn(message);\n\t\treturn { success: false, reason: \"SESSION_NOT_FOUND\", message };\n\t}\n\n\tconst resolvedCurrency =\n\t\tcache.data.currency || options.defaultCurrency || DEFAULT_CURRENCY;\n\n\tconst localesList = [\n\t\tcache.data.locale,\n\t\toptions.defaultLocale,\n\t\tDEFAULT_LOCALE\n\t].filter(val => val !== undefined);\n\n\tconst { locale: resolvedLocale, messages } = await loadMessages(\n\t\t...localesList\n\t);\n\n\tconst settings = await getWidgetSettings({\n\t\tlocale: resolvedLocale,\n\t\tslug: cache.data.slug,\n\t\tisFirstLoad\n\t});\n\n\tconst customMessages = deepClone(settings?.translations?.messages);\n\n\tif (customMessages) {\n\t\tlogger.info(\"Merging custom translations into messages...\");\n\t\tObject.entries(customMessages).forEach(([key, value]) => {\n\t\t\ttry {\n\t\t\t\tsetNestedValue(messages, key, value);\n\t\t\t} catch (error) {\n\t\t\t\tlogger.warn(`Skipping unknown custom translation key \"${key}\"`, error);\n\t\t\t}\n\t\t});\n\t}\n\n\tconst config: WidgetConfiguration = {\n\t\tlocale: resolvedLocale,\n\t\tcurrency: resolvedCurrency,\n\t\tdebugMode: isDebugModeEnabled,\n\t\tisFirstLoad,\n\t\tmessages,\n\t\toptions,\n\t\ttheme: settings?.theme ?? null,\n\t\t...cache\n\t};\n\n\treturn { success: true, config };\n}\n","import api, { ApiRequestBody, ApiResponseObject } from \"./api-client\";\nimport { logger } from \"./logger\";\n\nexport interface SessionExchangeItem {\n\tvariantId: number;\n\thandle: string;\n\tprice: number;\n\ttitle: string;\n\tvariantTitle: string;\n\timage: string;\n\tquantity: number;\n}\n\nexport type SessionPayload = ApiRequestBody<\n\t\"/userflow/session/{id}\",\n\t\"post\"\n>[\"data\"];\n\nexport type SessionPatchPayload = ApiRequestBody<\n\t\"/userflow/session/{id}\",\n\t\"patch\"\n>[\"data\"];\n\nexport interface SessionMetadata {\n\tcreatedAt: string; // ISO date string\n\tupdatedAt: string; // ISO date string\n\tttl: number; // Time to live in seconds\n}\n\nexport type SessionCache = NonNullable<\n\tApiResponseObject<\"/userflow/session/{id}\", \"get\">\n>;\n\nexport async function updateSessionCache(\n\tinternalId: string,\n\tdata: SessionPatchPayload\n) {\n\ttry {\n\t\tlogger.info(\"Setting session cache for internalId:\", internalId, data);\n\t\tconst response = await api.PATCH(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } },\n\t\t\tbody: { data }\n\t\t});\n\n\t\tlogger.info(\"Session cache set successfully:\", response);\n\n\t\treturn response.data?.responseObject;\n\t} catch (error) {\n\t\tlogger.error(\"Error setting session cache:\", error);\n\t\tthrow error;\n\t}\n}\n\nexport async function getSessionCache(\n\tinternalId?: string\n): Promise<SessionCache | null> {\n\tif (!internalId) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tconst response = await api.GET(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } }\n\t\t});\n\n\t\tlogger.info(\"Session cache retrieved successfully:\", response);\n\n\t\treturn response.data?.responseObject ?? null;\n\t} catch (error) {\n\t\tlogger.error(\"Error getting session cache:\", error);\n\t\treturn null;\n\t}\n}\n\nexport async function clearSessionCache(internalId: string) {\n\ttry {\n\t\treturn await api.DELETE(\"/userflow/session/{id}\", {\n\t\t\tparams: { path: { id: internalId } }\n\t\t});\n\t} catch (error) {\n\t\tlogger.error(\"Error clearing session cache:\", error);\n\t\tthrow error;\n\t}\n}\n","import { logger } from \"../logger\";\n\ntype InjectFontReturn = Promise<\n\t[HTMLLinkElement, HTMLLinkElement, HTMLLinkElement]\n>;\n\n// Function responsible for injecting font styles into the document head\nexport function injectFont(): InjectFontReturn {\n\treturn new Promise((resolve, reject) => {\n\t\t// Preconnect to the font provider\n\t\tconst preconnect = createSafeLinkElement({\n\t\t\trel: \"preconnect\",\n\t\t\thref: \"https://fonts.googleapis.com\"\n\t\t});\n\n\t\t// Preconnect to the font provider (gstatic)\n\t\tconst preconnect2 = createSafeLinkElement({\n\t\t\trel: \"preconnect\",\n\t\t\thref: \"https://fonts.gstatic.com\",\n\t\t\tcrossOrigin: \"anonymous\"\n\t\t});\n\n\t\tconst fontLink = createSafeLinkElement({\n\t\t\trel: \"stylesheet\",\n\t\t\thref: \"https://fonts.googleapis.com/css2?family=Caveat:wght@400..700&family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\"\n\t\t});\n\n\t\tfontLink.onload = () => {\n\t\t\tlogger.info(\"Font stylesheet loaded successfully\");\n\t\t\tresolve([preconnect, preconnect2, fontLink]);\n\t\t};\n\t\tfontLink.onerror = () => {\n\t\t\tlogger.error(\"Failed to load font stylesheet\");\n\t\t\treject(new Error(\"Failed to load font stylesheet\"));\n\t\t};\n\n\t\tdocument.head.appendChild(fontLink);\n\t});\n}\n\n// Creates a link element only if a same link does not already exist in the document head\nfunction createSafeLinkElement<T extends Partial<HTMLLinkElement>>(\n\tattributes: T\n): HTMLLinkElement {\n\tconst selector = Object.entries(attributes)\n\t\t.filter(\n\t\t\t([_, value]) => typeof value === \"string\" || typeof value === \"number\"\n\t\t)\n\t\t.map(([key, value]) => `[${key}=\"${value}\"]`)\n\t\t.join(\"\");\n\n\tconst existing = document.querySelector<HTMLLinkElement>(`link${selector}`);\n\n\tif (existing) {\n\t\tlogger.warn(\n\t\t\t`Link element with attributes ${JSON.stringify(attributes)} already exists.`\n\t\t);\n\t\treturn existing;\n\t}\n\n\tconst link = document.createElement(\"link\");\n\tObject.assign(link, attributes);\n\tdocument.head.appendChild(link);\n\n\treturn link;\n}\n","import {\n\tCUSTOM_CSS_DATA_ATTR,\n\tresolveEnvVar,\n\tWIDGET_BASE_URL\n} from \"../../constants\";\nimport { logger } from \"../logger\";\n\n// Lightweight CSS validation without heavy parsing library\nexport function validateCSS(css: string): boolean {\n\t// Basic CSS validation - check for balanced braces and common patterns\n\tconst openBraces = (css.match(/{/g) || []).length;\n\tconst closeBraces = (css.match(/}/g) || []).length;\n\n\tif (openBraces !== closeBraces) {\n\t\treturn false;\n\t}\n\n\t// Check for dangerous patterns (script injection, etc.)\n\tconst dangerousPatterns = [\n\t\t/javascript:/gi,\n\t\t/expression\\s*\\(/gi,\n\t\t/behavior\\s*:/gi,\n\t\t/binding\\s*:/gi,\n\t\t/@import.*url\\s*\\(\\s*[\"']?javascript:/gi\n\t];\n\n\treturn !dangerousPatterns.some(pattern => pattern.test(css));\n}\n\nexport function injectCustomCSS(\n\tcss: string | undefined,\n\tcontainer: HTMLElement = document.head\n) {\n\tif (!css) return;\n\n\tif (!validateCSS(css)) {\n\t\tthrow new Error(\n\t\t\t\"Invalid CSS detected. Please check your CSS syntax and remove any dangerous patterns.\"\n\t\t);\n\t}\n\n\t// Create a style element and inject the custom CSS directly\n\tconst styleElement = document.createElement(\"style\");\n\tstyleElement.setAttribute(`data-${CUSTOM_CSS_DATA_ATTR}`, \"true\");\n\tstyleElement.textContent = css;\n\n\tlogger.info(\"Injecting custom CSS...\");\n\t// Append the style element to parent document body\n\tcontainer.appendChild(styleElement);\n\n\treturn styleElement;\n}\n\n// Dev-only: inject a Vite/Tailwind-compiled CSS string directly into the shadow\n// DOM, so newly added utility classes apply without rebuilding widget.css.\nexport function injectInlineStyle(\n\tshadowRoot: HTMLElement,\n\tcss: string\n): HTMLStyleElement {\n\tconst styleElement = document.createElement(\"style\");\n\tstyleElement.textContent = css;\n\tshadowRoot.appendChild(styleElement);\n\treturn styleElement;\n}\n\n// Function responsible for injecting the styles into the shadow DOM\nexport function injectStyle(shadowRoot: HTMLElement): HTMLLinkElement {\n\tconst link = document.createElement(\"link\");\n\tlink.rel = \"stylesheet\";\n\n\tconst fileName = resolveEnvVar(\"WIDGET_NAME\") || \"widget\";\n\tlink.href = `${WIDGET_BASE_URL}/${fileName}.css`;\n\n\tlink.onload = () => {\n\t\tlogger.info(\"Stylesheet loaded successfully\");\n\t};\n\n\tshadowRoot.appendChild(link);\n\n\treturn link;\n}\n\n// Function responsible for injecting public CSS variables into the document head\nexport function injectPublicVariables(): HTMLLinkElement {\n\tconst link = document.createElement(\"link\");\n\tlink.rel = \"stylesheet\";\n\n\tlink.href = `${WIDGET_BASE_URL}/variables.css`;\n\n\tlink.onload = () => {\n\t\tlogger.info(\"Public CSS variables loaded successfully\");\n\t};\n\n\tlink.onerror = () => {\n\t\tlogger.warn(\"Failed to load public CSS variables\");\n\t};\n\n\tdocument.head.appendChild(link);\n\n\treturn link;\n}\n","import { ComponentChild, render } from \"preact\";\nimport { CONTAINER_ELEMENT_ID, SHADOW_ROOT_ELEMENT_ID } from \"../../constants\";\nimport customEvents, { InternalCustomEvent } from \"../custom-events\";\nimport { logger } from \"../logger\";\nimport { prepareInitializationOptions } from \"./dataset\";\nimport { injectFont } from \"./font\";\nimport {\n\tinjectCustomCSS,\n\tinjectInlineStyle,\n\tinjectPublicVariables,\n\tinjectStyle\n} from \"./styles\";\nimport { InitResult, ModuleInitOptions, WidgetConfiguration } from \"./types\";\n\ntype ContainerElement = HTMLDivElement;\ntype ShadowRootElement = HTMLDivElement;\ntype ShadowRootResult =\n\t| { success: true; value: [ContainerElement, ShadowRootElement] }\n\t| { success: false; reason: \"CONTAINER_EXISTS\"; message: string };\n\nfunction createShadowRoot(): ShadowRootResult {\n\tconst existingContainer = document.getElementById(CONTAINER_ELEMENT_ID);\n\n\tif (existingContainer) {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\treason: \"CONTAINER_EXISTS\",\n\t\t\tmessage: `Container with ID \"${CONTAINER_ELEMENT_ID}\" already exists`\n\t\t};\n\t}\n\n\tconst container = document.createElement(\"div\");\n\tcontainer.id = CONTAINER_ELEMENT_ID;\n\tcontainer.style.display = \"block\";\n\n\tconst shadow = container.attachShadow({ mode: \"closed\" });\n\tconst shadowRoot = document.createElement(\"div\");\n\n\tshadowRoot.className = \"rf-container\";\n\tshadowRoot.id = SHADOW_ROOT_ELEMENT_ID;\n\tshadowRoot.style.display = \"none\";\n\n\tshadow.appendChild(shadowRoot);\n\n\treturn { success: true, value: [container, shadowRoot] };\n}\n\ntype RenderNode = (config: WidgetConfiguration) => ComponentChild;\n\nfunction injectWidget(\n\trenderNode: RenderNode,\n\tshadowRoot: HTMLElement,\n\tconfig: WidgetConfiguration\n) {\n\tlogger.info(\"Injecting widget with options...\", config);\n\trender(renderNode(config), shadowRoot);\n}\n\nasync function initialize(\n\trenderNode: RenderNode,\n\toptions: DOMStringMap | ModuleInitOptions\n): Promise<InitResult> {\n\ttry {\n\t\tconst result = await prepareInitializationOptions(options);\n\n\t\tif (!result.success) {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst containerResult = createShadowRoot();\n\t\tif (!containerResult.success) {\n\t\t\treturn containerResult;\n\t\t}\n\n\t\tconst [container, shadowRoot] = containerResult.value;\n\n\t\tconst { config } = result;\n\t\tconst {\n\t\t\toptions: { customCssOverlay, customCssPage }\n\t\t} = config;\n\n\t\tconst devStyles = \"devStyles\" in options ? options.devStyles : undefined;\n\t\tif (devStyles) {\n\t\t\tinjectInlineStyle(shadowRoot, devStyles);\n\t\t} else {\n\t\t\tinjectStyle(shadowRoot);\n\t\t}\n\t\tinjectPublicVariables();\n\t\tinjectFont();\n\t\tinjectCustomCSS(customCssPage);\n\t\tinjectCustomCSS(customCssOverlay, shadowRoot);\n\t\tinjectWidget(renderNode, shadowRoot, config);\n\n\t\tdocument.body.appendChild(container);\n\t\tcustomEvents.publish(InternalCustomEvent.WidgetInitialization, config);\n\n\t\treturn { success: true, config };\n\t} catch (err) {\n\t\tconst message = err instanceof Error ? err.message : String(err);\n\t\tlogger.error(\"Initialization failed\", err);\n\t\treturn { success: false, reason: \"UNKNOWN_ERROR\", message };\n\t}\n}\n\nexport type { InitResult };\nexport default initialize;\n","//#region packages/fast-memoize/index.ts\nfunction memoize(fn, options) {\n\tconst cache = options && options.cache ? options.cache : cacheDefault;\n\tconst serializer = options && options.serializer ? options.serializer : serializerDefault;\n\treturn (options && options.strategy ? options.strategy : strategyDefault)(fn, {\n\t\tcache,\n\t\tserializer\n\t});\n}\nfunction isPrimitive(value) {\n\treturn value == null || typeof value === \"number\" || typeof value === \"boolean\";\n}\nfunction monadic(fn, cache, serializer, arg) {\n\tconst cacheKey = isPrimitive(arg) ? arg : serializer(arg);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.call(this, arg);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction variadic(fn, cache, serializer) {\n\tconst args = Array.prototype.slice.call(arguments, 3);\n\tconst cacheKey = serializer(args);\n\tlet computedValue = cache.get(cacheKey);\n\tif (typeof computedValue === \"undefined\") {\n\t\tcomputedValue = fn.apply(this, args);\n\t\tcache.set(cacheKey, computedValue);\n\t}\n\treturn computedValue;\n}\nfunction assemble(fn, context, strategy, cache, serialize) {\n\treturn strategy.bind(context, fn, cache, serialize);\n}\nfunction strategyDefault(fn, options) {\n\tconst strategy = fn.length === 1 ? monadic : variadic;\n\treturn assemble(fn, this, strategy, options.cache.create(), options.serializer);\n}\nfunction strategyVariadic(fn, options) {\n\treturn assemble(fn, this, variadic, options.cache.create(), options.serializer);\n}\nfunction strategyMonadic(fn, options) {\n\treturn assemble(fn, this, monadic, options.cache.create(), options.serializer);\n}\nconst serializerDefault = function() {\n\treturn JSON.stringify(arguments);\n};\nvar ObjectWithoutPrototypeCache = class {\n\tconstructor() {\n\t\tthis.cache = Object.create(null);\n\t}\n\tget(key) {\n\t\treturn this.cache[key];\n\t}\n\tset(key, value) {\n\t\tthis.cache[key] = value;\n\t}\n};\nconst cacheDefault = { create: function create() {\n\treturn new ObjectWithoutPrototypeCache();\n} };\nconst strategies = {\n\tvariadic: strategyVariadic,\n\tmonadic: strategyMonadic\n};\n//#endregion\nexport { memoize, strategies };\n\n//# sourceMappingURL=index.js.map","import{memoize as e,strategies as t}from\"@formatjs/fast-memoize\";class a extends Error{constructor(e,t){let a=e;t&&(a+=\": \"+t),super(a),this.code=e,t&&(this.originalMessage=t)}}var r=function(e){return e.MISSING_MESSAGE=\"MISSING_MESSAGE\",e.MISSING_FORMAT=\"MISSING_FORMAT\",e.ENVIRONMENT_FALLBACK=\"ENVIRONMENT_FALLBACK\",e.INSUFFICIENT_PATH=\"INSUFFICIENT_PATH\",e.INVALID_MESSAGE=\"INVALID_MESSAGE\",e.INVALID_KEY=\"INVALID_KEY\",e.FORMATTING_ERROR=\"FORMATTING_ERROR\",e}(r||{});function s(){return{dateTime:{},number:{},message:{},relativeTime:{},pluralRules:{},list:{},displayNames:{}}}function i(a,r){return e(a,{cache:(s=r,{create:()=>({get:e=>s[e],set(e,t){s[e]=t}})}),strategy:t.variadic});var s}function I(e,t){return i(((...t)=>new e(...t)),t)}function l(e){return{getDateTimeFormat:I(Intl.DateTimeFormat,e.dateTime),getNumberFormat:I(Intl.NumberFormat,e.number),getPluralRules:I(Intl.PluralRules,e.pluralRules),getRelativeTimeFormat:I(Intl.RelativeTimeFormat,e.relativeTime),getListFormat:I(Intl.ListFormat,e.list),getDisplayNames:I(Intl.DisplayNames,e.displayNames)}}export{a as I,r as a,s as b,l as c,i as m};\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return!!n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.forEach(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();)if(n.__P&&n.__H)try{n.__H.__h.forEach(z),n.__H.__h.forEach(B),n.__H.__h=[]}catch(t){n.__H.__h=[],c.__e(t,n.__v)}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.forEach(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.forEach(z),i.__h.forEach(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.forEach(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.forEach(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.forEach(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","import{Component as n,createElement as t,options as e,toChildArray as r,Fragment as u,render as o,hydrate as i,createContext as l,createRef as c,cloneElement as f}from\"preact\";export{Component,Fragment,createContext,createElement,createRef}from\"preact\";import{useState as a,useLayoutEffect as s,useEffect as h,useCallback as v,useContext as d,useDebugValue as m,useId as p,useImperativeHandle as y,useMemo as _,useReducer as b,useRef as S}from\"preact/hooks\";export*from\"preact/hooks\";function g(n,t){for(var e in t)n[e]=t[e];return n}function E(n,t){for(var e in n)if(\"__source\"!==e&&!(e in t))return!0;for(var r in t)if(\"__source\"!==r&&n[r]!==t[r])return!0;return!1}function C(n,t){var e=t(),r=a({t:{__:e,u:t}}),u=r[0].t,o=r[1];return s(function(){u.__=e,u.u=t,x(u)&&o({t:u})},[n,e,t]),h(function(){return x(u)&&o({t:u}),n(function(){x(u)&&o({t:u})})},[n]),e}function x(n){var t,e,r=n.u,u=n.__;try{var o=r();return!((t=u)===(e=o)&&(0!==t||1/t==1/e)||t!=t&&e!=e)}catch(n){return!0}}function R(n){n()}function w(n){return n}function k(){return[!1,R]}var I=s;function N(n,t){this.props=n,this.context=t}function M(n,e){function r(n){var t=this.props.ref,r=t==n.ref;return!r&&t&&(t.call?t(null):t.current=null),e?!e(this.props,n)||!r:E(this.props,n)}function u(e){return this.shouldComponentUpdate=r,t(n,e)}return u.displayName=\"Memo(\"+(n.displayName||n.name)+\")\",u.prototype.isReactComponent=!0,u.__f=!0,u}(N.prototype=new n).isPureReactComponent=!0,N.prototype.shouldComponentUpdate=function(n,t){return E(this.props,n)||E(this.state,t)};var T=e.__b;e.__b=function(n){n.type&&n.type.__f&&n.ref&&(n.props.ref=n.ref,n.ref=null),T&&T(n)};var A=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.forward_ref\")||3911;function D(n){function t(t){var e=g({},t);return delete e.ref,n(e,t.ref||null)}return t.$$typeof=A,t.render=t,t.prototype.isReactComponent=t.__f=!0,t.displayName=\"ForwardRef(\"+(n.displayName||n.name)+\")\",t}var L=function(n,t){return null==n?null:r(r(n).map(t))},O={map:L,forEach:L,count:function(n){return n?r(n).length:0},only:function(n){var t=r(n);if(1!==t.length)throw\"Children.only\";return t[0]},toArray:r},F=e.__e;e.__e=function(n,t,e,r){if(n.then)for(var u,o=t;o=o.__;)if((u=o.__c)&&u.__c)return null==t.__e&&(t.__e=e.__e,t.__k=e.__k),u.__c(n,t);F(n,t,e,r)};var U=e.unmount;function V(n,t,e){return n&&(n.__c&&n.__c.__H&&(n.__c.__H.__.forEach(function(n){\"function\"==typeof n.__c&&n.__c()}),n.__c.__H=null),null!=(n=g({},n)).__c&&(n.__c.__P===e&&(n.__c.__P=t),n.__c.__e=!0,n.__c=null),n.__k=n.__k&&n.__k.map(function(n){return V(n,t,e)})),n}function W(n,t,e){return n&&e&&(n.__v=null,n.__k=n.__k&&n.__k.map(function(n){return W(n,t,e)}),n.__c&&n.__c.__P===t&&(n.__e&&e.appendChild(n.__e),n.__c.__e=!0,n.__c.__P=e)),n}function P(){this.__u=0,this.o=null,this.__b=null}function j(n){var t=n.__.__c;return t&&t.__a&&t.__a(n)}function z(n){var e,r,u;function o(o){if(e||(e=n()).then(function(n){r=n.default||n},function(n){u=n}),u)throw u;if(!r)throw e;return t(r,o)}return o.displayName=\"Lazy\",o.__f=!0,o}function B(){this.i=null,this.l=null}e.unmount=function(n){var t=n.__c;t&&t.__R&&t.__R(),t&&32&n.__u&&(n.type=null),U&&U(n)},(P.prototype=new n).__c=function(n,t){var e=t.__c,r=this;null==r.o&&(r.o=[]),r.o.push(e);var u=j(r.__v),o=!1,i=function(){o||(o=!0,e.__R=null,u?u(l):l())};e.__R=i;var l=function(){if(!--r.__u){if(r.state.__a){var n=r.state.__a;r.__v.__k[0]=W(n,n.__c.__P,n.__c.__O)}var t;for(r.setState({__a:r.__b=null});t=r.o.pop();)t.forceUpdate()}};r.__u++||32&t.__u||r.setState({__a:r.__b=r.__v.__k[0]}),n.then(i,i)},P.prototype.componentWillUnmount=function(){this.o=[]},P.prototype.render=function(n,e){if(this.__b){if(this.__v.__k){var r=document.createElement(\"div\"),o=this.__v.__k[0].__c;this.__v.__k[0]=V(this.__b,r,o.__O=o.__P)}this.__b=null}var i=e.__a&&t(u,null,n.fallback);return i&&(i.__u&=-33),[t(u,null,e.__a?null:n.children),i]};var H=function(n,t,e){if(++e[1]===e[0]&&n.l.delete(t),n.props.revealOrder&&(\"t\"!==n.props.revealOrder[0]||!n.l.size))for(e=n.i;e;){for(;e.length>3;)e.pop()();if(e[1]<e[0])break;n.i=e=e[2]}};function Z(n){return this.getChildContext=function(){return n.context},n.children}function Y(n){var e=this,r=n.h;if(e.componentWillUnmount=function(){o(null,e.v),e.v=null,e.h=null},e.h&&e.h!==r&&e.componentWillUnmount(),!e.v){for(var u=e.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;e.h=r,e.v={nodeType:1,parentNode:r,childNodes:[],__k:{__m:u.__m},contains:function(){return!0},insertBefore:function(n,t){this.childNodes.push(n),e.h.insertBefore(n,t)},removeChild:function(n){this.childNodes.splice(this.childNodes.indexOf(n)>>>1,1),e.h.removeChild(n)}}}o(t(Z,{context:e.context},n.__v),e.v)}function $(n,e){var r=t(Y,{__v:n,h:e});return r.containerInfo=e,r}(B.prototype=new n).__a=function(n){var t=this,e=j(t.__v),r=t.l.get(n);return r[0]++,function(u){var o=function(){t.props.revealOrder?(r.push(u),H(t,n,r)):u()};e?e(o):o()}},B.prototype.render=function(n){this.i=null,this.l=new Map;var t=r(n.children);n.revealOrder&&\"b\"===n.revealOrder[0]&&t.reverse();for(var e=t.length;e--;)this.l.set(t[e],this.i=[1,0,this.i]);return n.children},B.prototype.componentDidUpdate=B.prototype.componentDidMount=function(){var n=this;this.l.forEach(function(t,e){H(n,e,t)})};var q=\"undefined\"!=typeof Symbol&&Symbol.for&&Symbol.for(\"react.element\")||60103,G=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,J=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,K=/[A-Z0-9]/g,Q=\"undefined\"!=typeof document,X=function(n){return(\"undefined\"!=typeof Symbol&&\"symbol\"==typeof Symbol()?/fil|che|rad/:/fil|che|ra/).test(n)};function nn(n,t,e){return null==t.__k&&(t.textContent=\"\"),o(n,t),\"function\"==typeof e&&e(),n?n.__c:null}function tn(n,t,e){return i(n,t),\"function\"==typeof e&&e(),n?n.__c:null}n.prototype.isReactComponent={},[\"componentWillMount\",\"componentWillReceiveProps\",\"componentWillUpdate\"].forEach(function(t){Object.defineProperty(n.prototype,t,{configurable:!0,get:function(){return this[\"UNSAFE_\"+t]},set:function(n){Object.defineProperty(this,t,{configurable:!0,writable:!0,value:n})}})});var en=e.event;function rn(){}function un(){return this.cancelBubble}function on(){return this.defaultPrevented}e.event=function(n){return en&&(n=en(n)),n.persist=rn,n.isPropagationStopped=un,n.isDefaultPrevented=on,n.nativeEvent=n};var ln,cn={enumerable:!1,configurable:!0,get:function(){return this.class}},fn=e.vnode;e.vnode=function(n){\"string\"==typeof n.type&&function(n){var t=n.props,e=n.type,u={},o=-1===e.indexOf(\"-\");for(var i in t){var l=t[i];if(!(\"value\"===i&&\"defaultValue\"in t&&null==l||Q&&\"children\"===i&&\"noscript\"===e||\"class\"===i||\"className\"===i)){var c=i.toLowerCase();\"defaultValue\"===i&&\"value\"in t&&null==t.value?i=\"value\":\"download\"===i&&!0===l?l=\"\":\"translate\"===c&&\"no\"===l?l=!1:\"o\"===c[0]&&\"n\"===c[1]?\"ondoubleclick\"===c?i=\"ondblclick\":\"onchange\"!==c||\"input\"!==e&&\"textarea\"!==e||X(t.type)?\"onfocus\"===c?i=\"onfocusin\":\"onblur\"===c?i=\"onfocusout\":J.test(i)&&(i=c):c=i=\"oninput\":o&&G.test(i)?i=i.replace(K,\"-$&\").toLowerCase():null===l&&(l=void 0),\"oninput\"===c&&u[i=c]&&(i=\"oninputCapture\"),u[i]=l}}\"select\"==e&&u.multiple&&Array.isArray(u.value)&&(u.value=r(t.children).forEach(function(n){n.props.selected=-1!=u.value.indexOf(n.props.value)})),\"select\"==e&&null!=u.defaultValue&&(u.value=r(t.children).forEach(function(n){n.props.selected=u.multiple?-1!=u.defaultValue.indexOf(n.props.value):u.defaultValue==n.props.value})),t.class&&!t.className?(u.class=t.class,Object.defineProperty(u,\"className\",cn)):(t.className&&!t.class||t.class&&t.className)&&(u.class=u.className=t.className),n.props=u}(n),n.$$typeof=q,fn&&fn(n)};var an=e.__r;e.__r=function(n){an&&an(n),ln=n.__c};var sn=e.diffed;e.diffed=function(n){sn&&sn(n);var t=n.props,e=n.__e;null!=e&&\"textarea\"===n.type&&\"value\"in t&&t.value!==e.value&&(e.value=null==t.value?\"\":t.value),ln=null};var hn={ReactCurrentDispatcher:{current:{readContext:function(n){return ln.__n[n.__c].props.value},useCallback:v,useContext:d,useDebugValue:m,useDeferredValue:w,useEffect:h,useId:p,useImperativeHandle:y,useInsertionEffect:I,useLayoutEffect:s,useMemo:_,useReducer:b,useRef:S,useState:a,useSyncExternalStore:C,useTransition:k}}},vn=\"18.3.1\";function dn(n){return t.bind(null,n)}function mn(n){return!!n&&n.$$typeof===q}function pn(n){return mn(n)&&n.type===u}function yn(n){return!!n&&!!n.displayName&&(\"string\"==typeof n.displayName||n.displayName instanceof String)&&n.displayName.startsWith(\"Memo(\")}function _n(n){return mn(n)?f.apply(null,arguments):n}function bn(n){return!!n.__k&&(o(null,n),!0)}function Sn(n){return n&&(n.base||1===n.nodeType&&n)||null}var gn=function(n,t){return n(t)},En=function(n,t){return n(t)},Cn=u,xn=mn,Rn={useState:a,useId:p,useReducer:b,useEffect:h,useLayoutEffect:s,useInsertionEffect:I,useTransition:k,useDeferredValue:w,useSyncExternalStore:C,startTransition:R,useRef:S,useImperativeHandle:y,useMemo:_,useCallback:v,useContext:d,useDebugValue:m,version:\"18.3.1\",Children:O,render:nn,hydrate:tn,unmountComponentAtNode:bn,createPortal:$,createElement:t,createContext:l,createFactory:dn,cloneElement:_n,createRef:c,Fragment:u,isValidElement:mn,isElement:xn,isFragment:pn,isMemo:yn,findDOMNode:Sn,Component:n,PureComponent:N,memo:M,forwardRef:D,flushSync:En,unstable_batchedUpdates:gn,StrictMode:Cn,Suspense:P,SuspenseList:B,lazy:z,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:hn};export{O as Children,N as PureComponent,Cn as StrictMode,P as Suspense,B as SuspenseList,hn as __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_n as cloneElement,dn as createFactory,$ as createPortal,Rn as default,Sn as findDOMNode,En as flushSync,D as forwardRef,tn as hydrate,xn as isElement,pn as isFragment,yn as isMemo,mn as isValidElement,z as lazy,M as memo,nn as render,R as startTransition,bn as unmountComponentAtNode,gn as unstable_batchedUpdates,w as useDeferredValue,I as useInsertionEffect,C as useSyncExternalStore,k as useTransition,vn as version};\n//# sourceMappingURL=compat.module.js.map\n","//#region packages/icu-skeleton-parser/date-time.ts\n/**\n* https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* Credit: https://github.com/caridy/intl-datetimeformat-pattern/blob/master/index.js\n* with some tweaks\n*/\nconst DATE_TIME_REGEX = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n/**\n* Parse Date time skeleton into Intl.DateTimeFormatOptions\n* Ref: https://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n* @public\n* @param skeleton skeleton string\n*/\nfunction parseDateTimeSkeleton(skeleton) {\n\tconst result = {};\n\tskeleton.replace(DATE_TIME_REGEX, (match) => {\n\t\tconst len = match.length;\n\t\tswitch (match[0]) {\n\t\t\tcase \"G\":\n\t\t\t\tresult.era = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"y\":\n\t\t\t\tresult.year = len === 2 ? \"2-digit\" : \"numeric\";\n\t\t\t\tbreak;\n\t\t\tcase \"Y\":\n\t\t\tcase \"u\":\n\t\t\tcase \"U\":\n\t\t\tcase \"r\": throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");\n\t\t\tcase \"q\":\n\t\t\tcase \"Q\": throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");\n\t\t\tcase \"M\":\n\t\t\tcase \"L\":\n\t\t\t\tresult.month = [\n\t\t\t\t\t\"numeric\",\n\t\t\t\t\t\"2-digit\",\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\"\n\t\t\t\t][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"w\":\n\t\t\tcase \"W\": throw new RangeError(\"`w/W` (week) patterns are not supported\");\n\t\t\tcase \"d\":\n\t\t\t\tresult.day = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"D\":\n\t\t\tcase \"F\":\n\t\t\tcase \"g\": throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");\n\t\t\tcase \"E\":\n\t\t\t\tresult.weekday = len === 4 ? \"long\" : len === 5 ? \"narrow\" : \"short\";\n\t\t\t\tbreak;\n\t\t\tcase \"e\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 4];\n\t\t\t\tbreak;\n\t\t\tcase \"c\":\n\t\t\t\tif (len < 4) throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");\n\t\t\t\tresult.weekday = [\n\t\t\t\t\t\"short\",\n\t\t\t\t\t\"long\",\n\t\t\t\t\t\"narrow\",\n\t\t\t\t\t\"short\"\n\t\t\t\t][len - 4];\n\t\t\t\tbreak;\n\t\t\tcase \"a\":\n\t\t\t\tresult.hour12 = true;\n\t\t\t\tbreak;\n\t\t\tcase \"b\":\n\t\t\tcase \"B\": throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");\n\t\t\tcase \"h\":\n\t\t\t\tresult.hourCycle = \"h12\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"H\":\n\t\t\t\tresult.hourCycle = \"h23\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"K\":\n\t\t\t\tresult.hourCycle = \"h11\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"k\":\n\t\t\t\tresult.hourCycle = \"h24\";\n\t\t\t\tresult.hour = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"j\":\n\t\t\tcase \"J\":\n\t\t\tcase \"C\": throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");\n\t\t\tcase \"m\":\n\t\t\t\tresult.minute = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"s\":\n\t\t\t\tresult.second = [\"numeric\", \"2-digit\"][len - 1];\n\t\t\t\tbreak;\n\t\t\tcase \"S\":\n\t\t\tcase \"A\": throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");\n\t\t\tcase \"z\":\n\t\t\t\tresult.timeZoneName = len < 4 ? \"short\" : \"long\";\n\t\t\t\tbreak;\n\t\t\tcase \"Z\":\n\t\t\tcase \"O\":\n\t\t\tcase \"v\":\n\t\t\tcase \"V\":\n\t\t\tcase \"X\":\n\t\t\tcase \"x\": throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\");\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-skeleton-parser-regex.js\nconst WHITE_SPACE_REGEX = /[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;\n//#endregion\n//#region packages/icu-skeleton-parser/number.ts\nfunction parseNumberSkeletonFromString(skeleton) {\n\tif (skeleton.length === 0) throw new Error(\"Number skeleton cannot be empty\");\n\tconst stringTokens = skeleton.split(WHITE_SPACE_REGEX).filter((x) => x.length > 0);\n\tconst tokens = [];\n\tfor (const stringToken of stringTokens) {\n\t\tlet stemAndOptions = stringToken.split(\"/\");\n\t\tif (stemAndOptions.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\tconst [stem, ...options] = stemAndOptions;\n\t\tfor (const option of options) if (option.length === 0) throw new Error(\"Invalid number skeleton\");\n\t\ttokens.push({\n\t\t\tstem,\n\t\t\toptions\n\t\t});\n\t}\n\treturn tokens;\n}\nfunction icuUnitToEcma(unit) {\n\treturn unit.replace(/^(.*?)-/, \"\");\n}\nconst FRACTION_PRECISION_REGEX = /^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g;\nconst SIGNIFICANT_PRECISION_REGEX = /^(@+)?(\\+|#+)?[rs]?$/g;\nconst INTEGER_WIDTH_REGEX = /(\\*)(0+)|(#+)(0+)|(0+)/g;\nconst CONCISE_INTEGER_WIDTH_REGEX = /^(0+)$/;\nfunction parseSignificantPrecision(str) {\n\tconst result = {};\n\tif (str[str.length - 1] === \"r\") result.roundingPriority = \"morePrecision\";\n\telse if (str[str.length - 1] === \"s\") result.roundingPriority = \"lessPrecision\";\n\tstr.replace(SIGNIFICANT_PRECISION_REGEX, function(_, g1, g2) {\n\t\tif (typeof g2 !== \"string\") {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length;\n\t\t} else if (g2 === \"+\") result.minimumSignificantDigits = g1.length;\n\t\telse if (g1[0] === \"#\") result.maximumSignificantDigits = g1.length;\n\t\telse {\n\t\t\tresult.minimumSignificantDigits = g1.length;\n\t\t\tresult.maximumSignificantDigits = g1.length + (typeof g2 === \"string\" ? g2.length : 0);\n\t\t}\n\t\treturn \"\";\n\t});\n\treturn result;\n}\nfunction parseSign(str) {\n\tswitch (str) {\n\t\tcase \"sign-auto\": return { signDisplay: \"auto\" };\n\t\tcase \"sign-accounting\":\n\t\tcase \"()\": return { currencySign: \"accounting\" };\n\t\tcase \"sign-always\":\n\t\tcase \"+!\": return { signDisplay: \"always\" };\n\t\tcase \"sign-accounting-always\":\n\t\tcase \"()!\": return {\n\t\t\tsignDisplay: \"always\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-except-zero\":\n\t\tcase \"+?\": return { signDisplay: \"exceptZero\" };\n\t\tcase \"sign-accounting-except-zero\":\n\t\tcase \"()?\": return {\n\t\t\tsignDisplay: \"exceptZero\",\n\t\t\tcurrencySign: \"accounting\"\n\t\t};\n\t\tcase \"sign-never\":\n\t\tcase \"+_\": return { signDisplay: \"never\" };\n\t}\n}\nfunction parseConciseScientificAndEngineeringStem(stem) {\n\tlet result;\n\tif (stem[0] === \"E\" && stem[1] === \"E\") {\n\t\tresult = { notation: \"engineering\" };\n\t\tstem = stem.slice(2);\n\t} else if (stem[0] === \"E\") {\n\t\tresult = { notation: \"scientific\" };\n\t\tstem = stem.slice(1);\n\t}\n\tif (result) {\n\t\tconst signDisplay = stem.slice(0, 2);\n\t\tif (signDisplay === \"+!\") {\n\t\t\tresult.signDisplay = \"always\";\n\t\t\tstem = stem.slice(2);\n\t\t} else if (signDisplay === \"+?\") {\n\t\t\tresult.signDisplay = \"exceptZero\";\n\t\t\tstem = stem.slice(2);\n\t\t}\n\t\tif (!CONCISE_INTEGER_WIDTH_REGEX.test(stem)) throw new Error(\"Malformed concise eng/scientific notation\");\n\t\tresult.minimumIntegerDigits = stem.length;\n\t}\n\treturn result;\n}\nfunction parseNotationOptions(opt) {\n\tconst result = {};\n\tconst signOpts = parseSign(opt);\n\tif (signOpts) return signOpts;\n\treturn result;\n}\n/**\n* https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options\n*/\nfunction parseNumberSkeleton(tokens) {\n\tlet result = {};\n\tfor (const token of tokens) {\n\t\tswitch (token.stem) {\n\t\t\tcase \"percent\":\n\t\t\tcase \"%\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tcontinue;\n\t\t\tcase \"%x100\":\n\t\t\t\tresult.style = \"percent\";\n\t\t\t\tresult.scale = 100;\n\t\t\t\tcontinue;\n\t\t\tcase \"currency\":\n\t\t\t\tresult.style = \"currency\";\n\t\t\t\tresult.currency = token.options[0];\n\t\t\t\tcontinue;\n\t\t\tcase \"group-off\":\n\t\t\tcase \",_\":\n\t\t\t\tresult.useGrouping = false;\n\t\t\t\tcontinue;\n\t\t\tcase \"precision-integer\":\n\t\t\tcase \".\":\n\t\t\t\tresult.maximumFractionDigits = 0;\n\t\t\t\tcontinue;\n\t\t\tcase \"measure-unit\":\n\t\t\tcase \"unit\":\n\t\t\t\tresult.style = \"unit\";\n\t\t\t\tresult.unit = icuUnitToEcma(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-short\":\n\t\t\tcase \"K\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"compact-long\":\n\t\t\tcase \"KK\":\n\t\t\t\tresult.notation = \"compact\";\n\t\t\t\tresult.compactDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scientific\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"scientific\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"engineering\":\n\t\t\t\tresult = {\n\t\t\t\t\t...result,\n\t\t\t\t\tnotation: \"engineering\",\n\t\t\t\t\t...token.options.reduce((all, opt) => ({\n\t\t\t\t\t\t...all,\n\t\t\t\t\t\t...parseNotationOptions(opt)\n\t\t\t\t\t}), {})\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\tcase \"notation-simple\":\n\t\t\t\tresult.notation = \"standard\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-narrow\":\n\t\t\t\tresult.currencyDisplay = \"narrowSymbol\";\n\t\t\t\tresult.unitDisplay = \"narrow\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-short\":\n\t\t\t\tresult.currencyDisplay = \"code\";\n\t\t\t\tresult.unitDisplay = \"short\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-full-name\":\n\t\t\t\tresult.currencyDisplay = \"name\";\n\t\t\t\tresult.unitDisplay = \"long\";\n\t\t\t\tcontinue;\n\t\t\tcase \"unit-width-iso-code\":\n\t\t\t\tresult.currencyDisplay = \"symbol\";\n\t\t\t\tcontinue;\n\t\t\tcase \"scale\":\n\t\t\t\tresult.scale = parseFloat(token.options[0]);\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-floor\":\n\t\t\t\tresult.roundingMode = \"floor\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-ceiling\":\n\t\t\t\tresult.roundingMode = \"ceil\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-down\":\n\t\t\t\tresult.roundingMode = \"trunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-up\":\n\t\t\t\tresult.roundingMode = \"expand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-even\":\n\t\t\t\tresult.roundingMode = \"halfEven\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-down\":\n\t\t\t\tresult.roundingMode = \"halfTrunc\";\n\t\t\t\tcontinue;\n\t\t\tcase \"rounding-mode-half-up\":\n\t\t\t\tresult.roundingMode = \"halfExpand\";\n\t\t\t\tcontinue;\n\t\t\tcase \"integer-width\":\n\t\t\t\tif (token.options.length > 1) throw new RangeError(\"integer-width stems only accept a single optional option\");\n\t\t\t\ttoken.options[0].replace(INTEGER_WIDTH_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\t\tif (g1) result.minimumIntegerDigits = g2.length;\n\t\t\t\t\telse if (g3 && g4) throw new Error(\"We currently do not support maximum integer digits\");\n\t\t\t\t\telse if (g5) throw new Error(\"We currently do not support exact integer digits\");\n\t\t\t\t\treturn \"\";\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t}\n\t\tif (CONCISE_INTEGER_WIDTH_REGEX.test(token.stem)) {\n\t\t\tresult.minimumIntegerDigits = token.stem.length;\n\t\t\tcontinue;\n\t\t}\n\t\tif (FRACTION_PRECISION_REGEX.test(token.stem)) {\n\t\t\tif (token.options.length > 1) throw new RangeError(\"Fraction-precision stems only accept a single optional option\");\n\t\t\ttoken.stem.replace(FRACTION_PRECISION_REGEX, function(_, g1, g2, g3, g4, g5) {\n\t\t\t\tif (g2 === \"*\") result.minimumFractionDigits = g1.length;\n\t\t\t\telse if (g3 && g3[0] === \"#\") result.maximumFractionDigits = g3.length;\n\t\t\t\telse if (g4 && g5) {\n\t\t\t\t\tresult.minimumFractionDigits = g4.length;\n\t\t\t\t\tresult.maximumFractionDigits = g4.length + g5.length;\n\t\t\t\t} else {\n\t\t\t\t\tresult.minimumFractionDigits = g1.length;\n\t\t\t\t\tresult.maximumFractionDigits = g1.length;\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t});\n\t\t\tconst opt = token.options[0];\n\t\t\tif (opt === \"w\") result = {\n\t\t\t\t...result,\n\t\t\t\ttrailingZeroDisplay: \"stripIfInteger\"\n\t\t\t};\n\t\t\telse if (opt) result = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(opt)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tif (SIGNIFICANT_PRECISION_REGEX.test(token.stem)) {\n\t\t\tresult = {\n\t\t\t\t...result,\n\t\t\t\t...parseSignificantPrecision(token.stem)\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t\tconst signOpts = parseSign(token.stem);\n\t\tif (signOpts) result = {\n\t\t\t...result,\n\t\t\t...signOpts\n\t\t};\n\t\tconst conciseScientificAndEngineeringOpts = parseConciseScientificAndEngineeringStem(token.stem);\n\t\tif (conciseScientificAndEngineeringOpts) result = {\n\t\t\t...result,\n\t\t\t...conciseScientificAndEngineeringOpts\n\t\t};\n\t}\n\treturn result;\n}\n//#endregion\nexport { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString };\n\n//# sourceMappingURL=index.js.map","import { parseDateTimeSkeleton, parseNumberSkeleton, parseNumberSkeletonFromString } from \"@formatjs/icu-skeleton-parser\";\n//#region packages/icu-messageformat-parser/error.ts\nlet ErrorKind = /* @__PURE__ */ function(ErrorKind) {\n\t/** Argument is unclosed (e.g. `{0`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_CLOSING_BRACE\"] = 1] = \"EXPECT_ARGUMENT_CLOSING_BRACE\";\n\t/** Argument is empty (e.g. `{}`). */\n\tErrorKind[ErrorKind[\"EMPTY_ARGUMENT\"] = 2] = \"EMPTY_ARGUMENT\";\n\t/** Argument is malformed (e.g. `{foo!}``) */\n\tErrorKind[ErrorKind[\"MALFORMED_ARGUMENT\"] = 3] = \"MALFORMED_ARGUMENT\";\n\t/** Expect an argument type (e.g. `{foo,}`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_TYPE\"] = 4] = \"EXPECT_ARGUMENT_TYPE\";\n\t/** Unsupported argument type (e.g. `{foo,foo}`) */\n\tErrorKind[ErrorKind[\"INVALID_ARGUMENT_TYPE\"] = 5] = \"INVALID_ARGUMENT_TYPE\";\n\t/** Expect an argument style (e.g. `{foo, number, }`) */\n\tErrorKind[ErrorKind[\"EXPECT_ARGUMENT_STYLE\"] = 6] = \"EXPECT_ARGUMENT_STYLE\";\n\t/** The number skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_NUMBER_SKELETON\"] = 7] = \"INVALID_NUMBER_SKELETON\";\n\t/** The date time skeleton is invalid. */\n\tErrorKind[ErrorKind[\"INVALID_DATE_TIME_SKELETON\"] = 8] = \"INVALID_DATE_TIME_SKELETON\";\n\t/** Exepct a number skeleton following the `::` (e.g. `{foo, number, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_NUMBER_SKELETON\"] = 9] = \"EXPECT_NUMBER_SKELETON\";\n\t/** Exepct a date time skeleton following the `::` (e.g. `{foo, date, ::}`) */\n\tErrorKind[ErrorKind[\"EXPECT_DATE_TIME_SKELETON\"] = 10] = \"EXPECT_DATE_TIME_SKELETON\";\n\t/** Unmatched apostrophes in the argument style (e.g. `{foo, number, 'test`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\"] = 11] = \"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\";\n\t/** Missing select argument options (e.g. `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_OPTIONS\"] = 12] = \"EXPECT_SELECT_ARGUMENT_OPTIONS\";\n\t/** Expecting an offset value in `plural` or `selectordinal` argument (e.g `{foo, plural, offset}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 13] = \"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Offset value in `plural` or `selectordinal` is invalid (e.g. `{foo, plural, offset: x}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\"] = 14] = \"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\";\n\t/** Expecting a selector in `select` argument (e.g `{foo, select}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR\"] = 15] = \"EXPECT_SELECT_ARGUMENT_SELECTOR\";\n\t/** Expecting a selector in `plural` or `selectordinal` argument (e.g `{foo, plural}`) */\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR\"] = 16] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Expecting a message fragment after the `select` selector (e.g. `{foo, select, apple}`) */\n\tErrorKind[ErrorKind[\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\"] = 17] = \"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/**\n\t* Expecting a message fragment after the `plural` or `selectordinal` selector\n\t* (e.g. `{foo, plural, one}`)\n\t*/\n\tErrorKind[ErrorKind[\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\"] = 18] = \"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\";\n\t/** Selector in `plural` or `selectordinal` is malformed (e.g. `{foo, plural, =x {#}}`) */\n\tErrorKind[ErrorKind[\"INVALID_PLURAL_ARGUMENT_SELECTOR\"] = 19] = \"INVALID_PLURAL_ARGUMENT_SELECTOR\";\n\t/**\n\t* Duplicate selectors in `plural` or `selectordinal` argument.\n\t* (e.g. {foo, plural, one {#} one {#}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\"] = 20] = \"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\";\n\t/** Duplicate selectors in `select` argument.\n\t* (e.g. {foo, select, apple {apple} apple {apple}})\n\t*/\n\tErrorKind[ErrorKind[\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\"] = 21] = \"DUPLICATE_SELECT_ARGUMENT_SELECTOR\";\n\t/** Plural or select argument option must have `other` clause. */\n\tErrorKind[ErrorKind[\"MISSING_OTHER_CLAUSE\"] = 22] = \"MISSING_OTHER_CLAUSE\";\n\t/** The tag is malformed. (e.g. `<bold!>foo</bold!>) */\n\tErrorKind[ErrorKind[\"INVALID_TAG\"] = 23] = \"INVALID_TAG\";\n\t/** The tag name is invalid. (e.g. `<123>foo</123>`) */\n\tErrorKind[ErrorKind[\"INVALID_TAG_NAME\"] = 25] = \"INVALID_TAG_NAME\";\n\t/** The closing tag does not match the opening tag. (e.g. `<bold>foo</italic>`) */\n\tErrorKind[ErrorKind[\"UNMATCHED_CLOSING_TAG\"] = 26] = \"UNMATCHED_CLOSING_TAG\";\n\t/** The opening tag has unmatched closing tag. (e.g. `<bold>foo`) */\n\tErrorKind[ErrorKind[\"UNCLOSED_TAG\"] = 27] = \"UNCLOSED_TAG\";\n\treturn ErrorKind;\n}({});\n//#endregion\n//#region packages/icu-messageformat-parser/types.ts\nlet TYPE = /* @__PURE__ */ function(TYPE) {\n\t/**\n\t* Raw text\n\t*/\n\tTYPE[TYPE[\"literal\"] = 0] = \"literal\";\n\t/**\n\t* Variable w/o any format, e.g `var` in `this is a {var}`\n\t*/\n\tTYPE[TYPE[\"argument\"] = 1] = \"argument\";\n\t/**\n\t* Variable w/ number format\n\t*/\n\tTYPE[TYPE[\"number\"] = 2] = \"number\";\n\t/**\n\t* Variable w/ date format\n\t*/\n\tTYPE[TYPE[\"date\"] = 3] = \"date\";\n\t/**\n\t* Variable w/ time format\n\t*/\n\tTYPE[TYPE[\"time\"] = 4] = \"time\";\n\t/**\n\t* Variable w/ select format\n\t*/\n\tTYPE[TYPE[\"select\"] = 5] = \"select\";\n\t/**\n\t* Variable w/ plural format\n\t*/\n\tTYPE[TYPE[\"plural\"] = 6] = \"plural\";\n\t/**\n\t* Only possible within plural argument.\n\t* This is the `#` symbol that will be substituted with the count.\n\t*/\n\tTYPE[TYPE[\"pound\"] = 7] = \"pound\";\n\t/**\n\t* XML-like tag\n\t*/\n\tTYPE[TYPE[\"tag\"] = 8] = \"tag\";\n\treturn TYPE;\n}({});\nlet SKELETON_TYPE = /* @__PURE__ */ function(SKELETON_TYPE) {\n\tSKELETON_TYPE[SKELETON_TYPE[\"number\"] = 0] = \"number\";\n\tSKELETON_TYPE[SKELETON_TYPE[\"dateTime\"] = 1] = \"dateTime\";\n\treturn SKELETON_TYPE;\n}({});\n/**\n* Type Guards\n*/\nfunction isLiteralElement(el) {\n\treturn el.type === TYPE.literal;\n}\nfunction isArgumentElement(el) {\n\treturn el.type === TYPE.argument;\n}\nfunction isNumberElement(el) {\n\treturn el.type === TYPE.number;\n}\nfunction isDateElement(el) {\n\treturn el.type === TYPE.date;\n}\nfunction isTimeElement(el) {\n\treturn el.type === TYPE.time;\n}\nfunction isSelectElement(el) {\n\treturn el.type === TYPE.select;\n}\nfunction isPluralElement(el) {\n\treturn el.type === TYPE.plural;\n}\nfunction isPoundElement(el) {\n\treturn el.type === TYPE.pound;\n}\nfunction isTagElement(el) {\n\treturn el.type === TYPE.tag;\n}\nfunction isNumberSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === SKELETON_TYPE.number);\n}\nfunction isDateTimeSkeleton(el) {\n\treturn !!(el && typeof el === \"object\" && el.type === SKELETON_TYPE.dateTime);\n}\nfunction createLiteralElement(value) {\n\treturn {\n\t\ttype: TYPE.literal,\n\t\tvalue\n\t};\n}\nfunction createNumberElement(value, style) {\n\treturn {\n\t\ttype: TYPE.number,\n\t\tvalue,\n\t\tstyle\n\t};\n}\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+unicode@0.0.0/node_modules/@formatjs_generated/unicode/icu-messageformat-parser-regex.js\nconst SPACE_SEPARATOR_REGEX = /[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/;\n//#endregion\n//#region node_modules/.aspect_rules_js/@formatjs_generated+cldr.core@0.0.0/node_modules/@formatjs_generated/cldr.core/time-data.js\nconst timeData = {\n\t\"001\": [\"H\", \"h\"],\n\t\"419\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AD\": [\"H\", \"hB\"],\n\t\"AE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"AF\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"AG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"AL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AM\": [\"H\", \"hB\"],\n\t\"AO\": [\"H\", \"hB\"],\n\t\"AR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"AS\": [\"h\", \"H\"],\n\t\"AT\": [\"H\", \"hB\"],\n\t\"AU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"AW\": [\"H\", \"hB\"],\n\t\"AX\": [\"H\"],\n\t\"AZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"BE\": [\"H\", \"hB\"],\n\t\"BF\": [\"H\", \"hB\"],\n\t\"BG\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"BH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"BI\": [\"H\", \"h\"],\n\t\"BJ\": [\"H\", \"hB\"],\n\t\"BL\": [\"H\", \"hB\"],\n\t\"BM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BN\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"BO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"BQ\": [\"H\"],\n\t\"BR\": [\"H\", \"hB\"],\n\t\"BS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"BT\": [\"h\", \"H\"],\n\t\"BW\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"BY\": [\"H\", \"h\"],\n\t\"BZ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CA\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"CC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CD\": [\"hB\", \"H\"],\n\t\"CF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CG\": [\"H\", \"hB\"],\n\t\"CH\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"CI\": [\"H\", \"hB\"],\n\t\"CK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CL\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"CN\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"CO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CP\": [\"H\"],\n\t\"CR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CU\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"CV\": [\"H\", \"hB\"],\n\t\"CW\": [\"H\", \"hB\"],\n\t\"CX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"CZ\": [\"H\"],\n\t\"DE\": [\"H\", \"hB\"],\n\t\"DG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"DJ\": [\"h\", \"H\"],\n\t\"DK\": [\"H\"],\n\t\"DM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"DO\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"DZ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EC\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"EE\": [\"H\", \"hB\"],\n\t\"EG\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"EH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ER\": [\"h\", \"H\"],\n\t\"ES\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"ET\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"FI\": [\"H\"],\n\t\"FJ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"FM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"FO\": [\"H\", \"h\"],\n\t\"FR\": [\"H\", \"hB\"],\n\t\"GA\": [\"H\", \"hB\"],\n\t\"GB\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GD\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GE\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"GF\": [\"H\", \"hB\"],\n\t\"GG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GH\": [\"h\", \"H\"],\n\t\"GI\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GL\": [\"H\", \"h\"],\n\t\"GM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GN\": [\"H\", \"hB\"],\n\t\"GP\": [\"H\", \"hB\"],\n\t\"GQ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\"\n\t],\n\t\"GR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"GT\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"GU\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"GW\": [\"H\", \"hB\"],\n\t\"GY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"HK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"HN\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"HR\": [\"H\", \"hB\"],\n\t\"HU\": [\"H\", \"h\"],\n\t\"IC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ID\": [\"H\"],\n\t\"IE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IL\": [\"H\", \"hB\"],\n\t\"IM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IN\": [\"h\", \"H\"],\n\t\"IO\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"IQ\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"IR\": [\"hB\", \"H\"],\n\t\"IS\": [\"H\"],\n\t\"IT\": [\"H\", \"hB\"],\n\t\"JE\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"JM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"JO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"JP\": [\n\t\t\"H\",\n\t\t\"K\",\n\t\t\"h\"\n\t],\n\t\"KE\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"KG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KH\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hb\"\n\t],\n\t\"KI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KN\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KP\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"KW\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"KY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"KZ\": [\"H\", \"hB\"],\n\t\"LA\": [\n\t\t\"H\",\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LB\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"LC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LI\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"LK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"LR\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"LS\": [\"h\", \"H\"],\n\t\"LT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"LU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"LV\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"LY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MC\": [\"H\", \"hB\"],\n\t\"MD\": [\"H\", \"hB\"],\n\t\"ME\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"MF\": [\"H\", \"hB\"],\n\t\"MG\": [\"H\", \"h\"],\n\t\"MH\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MK\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ML\": [\"H\"],\n\t\"MM\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"MN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MO\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MP\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MQ\": [\"H\", \"hB\"],\n\t\"MR\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"MS\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"MT\": [\"H\", \"h\"],\n\t\"MU\": [\"H\", \"h\"],\n\t\"MV\": [\"H\", \"h\"],\n\t\"MW\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"MX\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"MY\": [\n\t\t\"hb\",\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"MZ\": [\"H\", \"hB\"],\n\t\"NA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NC\": [\"H\", \"hB\"],\n\t\"NE\": [\"H\"],\n\t\"NF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NG\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NI\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"NL\": [\"H\", \"hB\"],\n\t\"NO\": [\"H\", \"h\"],\n\t\"NP\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"NR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NU\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"NZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"OM\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PA\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"PG\": [\"h\", \"H\"],\n\t\"PH\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PK\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"H\"\n\t],\n\t\"PL\": [\"H\", \"h\"],\n\t\"PM\": [\"H\", \"hB\"],\n\t\"PN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"PR\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"PS\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"PT\": [\"H\", \"hB\"],\n\t\"PW\": [\"h\", \"H\"],\n\t\"PY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"QA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"RE\": [\"H\", \"hB\"],\n\t\"RO\": [\"H\", \"hB\"],\n\t\"RS\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"RU\": [\"H\"],\n\t\"RW\": [\"H\", \"h\"],\n\t\"SA\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SB\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SC\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SD\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SE\": [\"H\"],\n\t\"SG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SI\": [\"H\", \"hB\"],\n\t\"SJ\": [\"H\"],\n\t\"SK\": [\"H\"],\n\t\"SL\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"SM\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SN\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"SO\": [\"h\", \"H\"],\n\t\"SR\": [\"H\", \"hB\"],\n\t\"SS\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ST\": [\"H\", \"hB\"],\n\t\"SV\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"SX\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"SY\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"SZ\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"TC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TD\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TF\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"TG\": [\"H\", \"hB\"],\n\t\"TH\": [\"H\", \"h\"],\n\t\"TJ\": [\"H\", \"h\"],\n\t\"TL\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t],\n\t\"TM\": [\"H\", \"h\"],\n\t\"TN\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"TO\": [\"h\", \"H\"],\n\t\"TR\": [\"H\", \"hB\"],\n\t\"TT\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"TW\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"TZ\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"UG\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"h\"\n\t],\n\t\"UM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"US\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"UY\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"UZ\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"VA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"VC\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VE\": [\n\t\t\"h\",\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"VG\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VI\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"VN\": [\"H\", \"h\"],\n\t\"VU\": [\"h\", \"H\"],\n\t\"WF\": [\"H\", \"hB\"],\n\t\"WS\": [\"h\", \"H\"],\n\t\"XK\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"h\"\n\t],\n\t\"YE\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"YT\": [\"H\", \"hB\"],\n\t\"ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"ZM\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"ZW\": [\"H\", \"h\"],\n\t\"af-ZA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"ar-001\": [\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"ca-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"en-001\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-HK\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"en-IL\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"hB\"\n\t],\n\t\"en-MY\": [\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\",\n\t\t\"hB\"\n\t],\n\t\"es-BR\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"es-GQ\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\",\n\t\t\"hb\"\n\t],\n\t\"fr-CA\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gl-ES\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"gu-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"hi-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"it-CH\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"it-IT\": [\n\t\t\"H\",\n\t\t\"h\",\n\t\t\"hB\"\n\t],\n\t\"kn-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ku-SY\": [\"H\", \"hB\"],\n\t\"ml-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"mr-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"pa-IN\": [\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"ta-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"hb\",\n\t\t\"H\"\n\t],\n\t\"te-IN\": [\n\t\t\"hB\",\n\t\t\"h\",\n\t\t\"H\"\n\t],\n\t\"zu-ZA\": [\n\t\t\"H\",\n\t\t\"hB\",\n\t\t\"hb\",\n\t\t\"h\"\n\t]\n};\n//#endregion\n//#region packages/icu-messageformat-parser/date-time-pattern-generator.ts\n/**\n* Returns the best matching date time pattern if a date time skeleton\n* pattern is provided with a locale. Follows the Unicode specification:\n* https://www.unicode.org/reports/tr35/tr35-dates.html#table-mapping-requested-time-skeletons-to-patterns\n* @param skeleton date time skeleton pattern that possibly includes j, J or C\n* @param locale\n*/\nfunction getBestPattern(skeleton, locale) {\n\tlet skeletonCopy = \"\";\n\tfor (let patternPos = 0; patternPos < skeleton.length; patternPos++) {\n\t\tconst patternChar = skeleton.charAt(patternPos);\n\t\tif (patternChar === \"j\") {\n\t\t\tlet extraLength = 0;\n\t\t\twhile (patternPos + 1 < skeleton.length && skeleton.charAt(patternPos + 1) === patternChar) {\n\t\t\t\textraLength++;\n\t\t\t\tpatternPos++;\n\t\t\t}\n\t\t\tlet hourLen = 1 + (extraLength & 1);\n\t\t\tlet dayPeriodLen = extraLength < 2 ? 1 : 3 + (extraLength >> 1);\n\t\t\tlet dayPeriodChar = \"a\";\n\t\t\tlet hourChar = getDefaultHourSymbolFromLocale(locale);\n\t\t\tif (hourChar == \"H\" || hourChar == \"k\") dayPeriodLen = 0;\n\t\t\twhile (dayPeriodLen-- > 0) skeletonCopy += dayPeriodChar;\n\t\t\twhile (hourLen-- > 0) skeletonCopy = hourChar + skeletonCopy;\n\t\t} else if (patternChar === \"J\") skeletonCopy += \"H\";\n\t\telse skeletonCopy += patternChar;\n\t}\n\treturn skeletonCopy;\n}\n/**\n* Maps the [hour cycle type](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle)\n* of the given `locale` to the corresponding time pattern.\n* @param locale\n*/\nfunction getDefaultHourSymbolFromLocale(locale) {\n\tlet hourCycle = locale.hourCycle;\n\tif (hourCycle === void 0 && locale.hourCycles && locale.hourCycles.length) hourCycle = locale.hourCycles[0];\n\tif (hourCycle) switch (hourCycle) {\n\t\tcase \"h24\": return \"k\";\n\t\tcase \"h23\": return \"H\";\n\t\tcase \"h12\": return \"h\";\n\t\tcase \"h11\": return \"K\";\n\t\tdefault: throw new Error(\"Invalid hourCycle\");\n\t}\n\tconst languageTag = locale.language;\n\tlet regionTag;\n\tif (languageTag !== \"root\") regionTag = locale.maximize().region;\n\treturn (timeData[regionTag || \"\"] || timeData[languageTag || \"\"] || timeData[`${languageTag}-001`] || timeData[\"001\"])[0];\n}\n//#endregion\n//#region packages/icu-messageformat-parser/parser.ts\nconst SPACE_SEPARATOR_START_REGEX = new RegExp(`^${SPACE_SEPARATOR_REGEX.source}*`);\nconst SPACE_SEPARATOR_END_REGEX = new RegExp(`${SPACE_SEPARATOR_REGEX.source}*$`);\nfunction createLocation(start, end) {\n\treturn {\n\t\tstart,\n\t\tend\n\t};\n}\nconst hasNativeFromEntries = !!Object.fromEntries;\nconst hasTrimStart = !!String.prototype.trimStart;\nconst hasTrimEnd = !!String.prototype.trimEnd;\nconst fromEntries = hasNativeFromEntries ? Object.fromEntries : function fromEntries(entries) {\n\tconst obj = {};\n\tfor (const [k, v] of entries) obj[k] = v;\n\treturn obj;\n};\nconst trimStart = hasTrimStart ? function trimStart(s) {\n\treturn s.trimStart();\n} : function trimStart(s) {\n\treturn s.replace(SPACE_SEPARATOR_START_REGEX, \"\");\n};\nconst trimEnd = hasTrimEnd ? function trimEnd(s) {\n\treturn s.trimEnd();\n} : function trimEnd(s) {\n\treturn s.replace(SPACE_SEPARATOR_END_REGEX, \"\");\n};\nconst IDENTIFIER_PREFIX_RE = /* @__PURE__ */ new RegExp(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\", \"yu\");\nfunction matchIdentifierAtIndex(s, index) {\n\tIDENTIFIER_PREFIX_RE.lastIndex = index;\n\treturn IDENTIFIER_PREFIX_RE.exec(s)[1] ?? \"\";\n}\nvar Parser = class {\n\tconstructor(message, options = {}) {\n\t\tthis.message = message;\n\t\tthis.position = {\n\t\t\toffset: 0,\n\t\t\tline: 1,\n\t\t\tcolumn: 1\n\t\t};\n\t\tthis.ignoreTag = !!options.ignoreTag;\n\t\tthis.locale = options.locale;\n\t\tthis.requiresOtherClause = !!options.requiresOtherClause;\n\t\tthis.shouldParseSkeletons = !!options.shouldParseSkeletons;\n\t}\n\tparse() {\n\t\tif (this.offset() !== 0) throw Error(\"parser can only be used once\");\n\t\treturn this.parseMessage(0, \"\", false);\n\t}\n\tparseMessage(nestingLevel, parentArgType, expectingCloseTag) {\n\t\tlet elements = [];\n\t\twhile (!this.isEOF()) {\n\t\t\tconst char = this.char();\n\t\t\tif (char === 123) {\n\t\t\t\tconst result = this.parseArgument(nestingLevel, expectingCloseTag);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else if (char === 125 && nestingLevel > 0) break;\n\t\t\telse if (char === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\")) {\n\t\t\t\tconst position = this.clonePosition();\n\t\t\t\tthis.bump();\n\t\t\t\telements.push({\n\t\t\t\t\ttype: TYPE.pound,\n\t\t\t\t\tlocation: createLocation(position, this.clonePosition())\n\t\t\t\t});\n\t\t\t} else if (char === 60 && !this.ignoreTag && this.peek() === 47) if (expectingCloseTag) break;\n\t\t\telse return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\telse if (char === 60 && !this.ignoreTag && _isAlpha(this.peek() || 0)) {\n\t\t\t\tconst result = this.parseTag(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t} else {\n\t\t\t\tconst result = this.parseLiteral(nestingLevel, parentArgType);\n\t\t\t\tif (result.err) return result;\n\t\t\t\telements.push(result.val);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tval: elements,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* A tag name must start with an ASCII lower/upper case letter. The grammar is based on the\n\t* [custom element name][] except that a dash is NOT always mandatory and uppercase letters\n\t* are accepted:\n\t*\n\t* ```\n\t* tag ::= \"<\" tagName (whitespace)* \"/>\" | \"<\" tagName (whitespace)* \">\" message \"</\" tagName (whitespace)* \">\"\n\t* tagName ::= [a-z] (PENChar)*\n\t* PENChar ::=\n\t* \"-\" | \".\" | [0-9] | \"_\" | [a-z] | [A-Z] | #xB7 | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x37D] |\n\t* [#x37F-#x1FFF] | [#x200C-#x200D] | [#x203F-#x2040] | [#x2070-#x218F] | [#x2C00-#x2FEF] |\n\t* [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n\t* ```\n\t*\n\t* [custom element name]: https://html.spec.whatwg.org/multipage/custom-elements.html#valid-custom-element-name\n\t* NOTE: We're a bit more lax here since HTML technically does not allow uppercase HTML element but we do\n\t* since other tag-based engines like React allow it\n\t*/\n\tparseTag(nestingLevel, parentArgType) {\n\t\tconst startPosition = this.clonePosition();\n\t\tthis.bump();\n\t\tconst tagName = this.parseTagName();\n\t\tthis.bumpSpace();\n\t\tif (this.bumpIf(\"/>\")) return {\n\t\t\tval: {\n\t\t\t\ttype: TYPE.literal,\n\t\t\t\tvalue: `<${tagName}/>`,\n\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t\telse if (this.bumpIf(\">\")) {\n\t\t\tconst childrenResult = this.parseMessage(nestingLevel + 1, parentArgType, true);\n\t\t\tif (childrenResult.err) return childrenResult;\n\t\t\tconst children = childrenResult.val;\n\t\t\tconst endTagStartPosition = this.clonePosition();\n\t\t\tif (this.bumpIf(\"</\")) {\n\t\t\t\tif (this.isEOF() || !_isAlpha(this.char())) return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\tconst closingTagNameStartPosition = this.clonePosition();\n\t\t\t\tif (tagName !== this.parseTagName()) return this.error(ErrorKind.UNMATCHED_CLOSING_TAG, createLocation(closingTagNameStartPosition, this.clonePosition()));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\">\")) return this.error(ErrorKind.INVALID_TAG, createLocation(endTagStartPosition, this.clonePosition()));\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.tag,\n\t\t\t\t\t\tvalue: tagName,\n\t\t\t\t\t\tchildren,\n\t\t\t\t\t\tlocation: createLocation(startPosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t} else return this.error(ErrorKind.UNCLOSED_TAG, createLocation(startPosition, this.clonePosition()));\n\t\t} else return this.error(ErrorKind.INVALID_TAG, createLocation(startPosition, this.clonePosition()));\n\t}\n\t/**\n\t* This method assumes that the caller has peeked ahead for the first tag character.\n\t*/\n\tparseTagName() {\n\t\tconst startOffset = this.offset();\n\t\tthis.bump();\n\t\twhile (!this.isEOF() && _isPotentialElementNameChar(this.char())) this.bump();\n\t\treturn this.message.slice(startOffset, this.offset());\n\t}\n\tparseLiteral(nestingLevel, parentArgType) {\n\t\tconst start = this.clonePosition();\n\t\tlet value = \"\";\n\t\twhile (true) {\n\t\t\tconst parseQuoteResult = this.tryParseQuote(parentArgType);\n\t\t\tif (parseQuoteResult) {\n\t\t\t\tvalue += parseQuoteResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseUnquotedResult = this.tryParseUnquoted(nestingLevel, parentArgType);\n\t\t\tif (parseUnquotedResult) {\n\t\t\t\tvalue += parseUnquotedResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst parseLeftAngleResult = this.tryParseLeftAngleBracket();\n\t\t\tif (parseLeftAngleResult) {\n\t\t\t\tvalue += parseLeftAngleResult;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tconst location = createLocation(start, this.clonePosition());\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: TYPE.literal,\n\t\t\t\tvalue,\n\t\t\t\tlocation\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseLeftAngleBracket() {\n\t\tif (!this.isEOF() && this.char() === 60 && (this.ignoreTag || !_isAlphaOrSlash(this.peek() || 0))) {\n\t\t\tthis.bump();\n\t\t\treturn \"<\";\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* Starting with ICU 4.8, an ASCII apostrophe only starts quoted text if it immediately precedes\n\t* a character that requires quoting (that is, \"only where needed\"), and works the same in\n\t* nested messages as on the top level of the pattern. The new behavior is otherwise compatible.\n\t*/\n\ttryParseQuote(parentArgType) {\n\t\tif (this.isEOF() || this.char() !== 39) return null;\n\t\tswitch (this.peek()) {\n\t\t\tcase 39:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bump();\n\t\t\t\treturn \"'\";\n\t\t\tcase 123:\n\t\t\tcase 60:\n\t\t\tcase 62:\n\t\t\tcase 125: break;\n\t\t\tcase 35:\n\t\t\t\tif (parentArgType === \"plural\" || parentArgType === \"selectordinal\") break;\n\t\t\t\treturn null;\n\t\t\tdefault: return null;\n\t\t}\n\t\tthis.bump();\n\t\tconst codePoints = [this.char()];\n\t\tthis.bump();\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch === 39) if (this.peek() === 39) {\n\t\t\t\tcodePoints.push(39);\n\t\t\t\tthis.bump();\n\t\t\t} else {\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\telse codePoints.push(ch);\n\t\t\tthis.bump();\n\t\t}\n\t\treturn String.fromCodePoint(...codePoints);\n\t}\n\ttryParseUnquoted(nestingLevel, parentArgType) {\n\t\tif (this.isEOF()) return null;\n\t\tconst ch = this.char();\n\t\tif (ch === 60 || ch === 123 || ch === 35 && (parentArgType === \"plural\" || parentArgType === \"selectordinal\") || ch === 125 && nestingLevel > 0) return null;\n\t\telse {\n\t\t\tthis.bump();\n\t\t\treturn String.fromCodePoint(ch);\n\t\t}\n\t}\n\tparseArgument(nestingLevel, expectingCloseTag) {\n\t\tconst openingBracePosition = this.clonePosition();\n\t\tthis.bump();\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tif (this.char() === 125) {\n\t\t\tthis.bump();\n\t\t\treturn this.error(ErrorKind.EMPTY_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t\tlet value = this.parseIdentifierIfPossible().value;\n\t\tif (!value) return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bumpSpace();\n\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tswitch (this.char()) {\n\t\t\tcase 125:\n\t\t\t\tthis.bump();\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.argument,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\tcase 44:\n\t\t\t\tthis.bump();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (this.isEOF()) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\t\t\treturn this.parseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition);\n\t\t\tdefault: return this.error(ErrorKind.MALFORMED_ARGUMENT, createLocation(openingBracePosition, this.clonePosition()));\n\t\t}\n\t}\n\t/**\n\t* Advance the parser until the end of the identifier, if it is currently on\n\t* an identifier character. Return an empty string otherwise.\n\t*/\n\tparseIdentifierIfPossible() {\n\t\tconst startingPosition = this.clonePosition();\n\t\tconst startOffset = this.offset();\n\t\tconst value = matchIdentifierAtIndex(this.message, startOffset);\n\t\tconst endOffset = startOffset + value.length;\n\t\tthis.bumpTo(endOffset);\n\t\treturn {\n\t\t\tvalue,\n\t\t\tlocation: createLocation(startingPosition, this.clonePosition())\n\t\t};\n\t}\n\tparseArgumentOptions(nestingLevel, expectingCloseTag, value, openingBracePosition) {\n\t\tlet typeStartPosition = this.clonePosition();\n\t\tlet argType = this.parseIdentifierIfPossible().value;\n\t\tlet typeEndPosition = this.clonePosition();\n\t\tswitch (argType) {\n\t\t\tcase \"\": return this.error(ErrorKind.EXPECT_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n\t\t\tcase \"number\":\n\t\t\tcase \"date\":\n\t\t\tcase \"time\": {\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet styleAndLocation = null;\n\t\t\t\tif (this.bumpIf(\",\")) {\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst styleStartPosition = this.clonePosition();\n\t\t\t\t\tconst result = this.parseSimpleArgStyleIfPossible();\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tconst style = trimEnd(result.val);\n\t\t\t\t\tif (style.length === 0) return this.error(ErrorKind.EXPECT_ARGUMENT_STYLE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tstyleAndLocation = {\n\t\t\t\t\t\tstyle,\n\t\t\t\t\t\tstyleLocation: createLocation(styleStartPosition, this.clonePosition())\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (styleAndLocation && styleAndLocation.style.startsWith(\"::\")) {\n\t\t\t\t\tlet skeleton = trimStart(styleAndLocation.style.slice(2));\n\t\t\t\t\tif (argType === \"number\") {\n\t\t\t\t\t\tconst result = this.parseNumberSkeletonFromString(skeleton, styleAndLocation.styleLocation);\n\t\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: TYPE.number,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle: result.val\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (skeleton.length === 0) return this.error(ErrorKind.EXPECT_DATE_TIME_SKELETON, location);\n\t\t\t\t\t\tlet dateTimePattern = skeleton;\n\t\t\t\t\t\tif (this.locale) dateTimePattern = getBestPattern(skeleton, this.locale);\n\t\t\t\t\t\tconst style = {\n\t\t\t\t\t\t\ttype: SKELETON_TYPE.dateTime,\n\t\t\t\t\t\t\tpattern: dateTimePattern,\n\t\t\t\t\t\t\tlocation: styleAndLocation.styleLocation,\n\t\t\t\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseDateTimeSkeleton(dateTimePattern) : {}\n\t\t\t\t\t\t};\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tval: {\n\t\t\t\t\t\t\t\ttype: argType === \"date\" ? TYPE.date : TYPE.time,\n\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\tlocation,\n\t\t\t\t\t\t\t\tstyle\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\terr: null\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: argType === \"number\" ? TYPE.number : argType === \"date\" ? TYPE.date : TYPE.time,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tlocation,\n\t\t\t\t\t\tstyle: styleAndLocation?.style ?? null\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tcase \"plural\":\n\t\t\tcase \"selectordinal\":\n\t\t\tcase \"select\": {\n\t\t\t\tconst typeEndPosition = this.clonePosition();\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tif (!this.bumpIf(\",\")) return this.error(ErrorKind.EXPECT_SELECT_ARGUMENT_OPTIONS, createLocation(typeEndPosition, { ...typeEndPosition }));\n\t\t\t\tthis.bumpSpace();\n\t\t\t\tlet identifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\tlet pluralOffset = 0;\n\t\t\t\tif (argType !== \"select\" && identifierAndLocation.value === \"offset\") {\n\t\t\t\t\tif (!this.bumpIf(\":\")) return this.error(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE, ErrorKind.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tthis.bumpSpace();\n\t\t\t\t\tidentifierAndLocation = this.parseIdentifierIfPossible();\n\t\t\t\t\tpluralOffset = result.val;\n\t\t\t\t}\n\t\t\t\tconst optionsResult = this.tryParsePluralOrSelectOptions(nestingLevel, argType, expectingCloseTag, identifierAndLocation);\n\t\t\t\tif (optionsResult.err) return optionsResult;\n\t\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\t\tconst location = createLocation(openingBracePosition, this.clonePosition());\n\t\t\t\tif (argType === \"select\") return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.select,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\telse return {\n\t\t\t\t\tval: {\n\t\t\t\t\t\ttype: TYPE.plural,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\toptions: fromEntries(optionsResult.val),\n\t\t\t\t\t\toffset: pluralOffset,\n\t\t\t\t\t\tpluralType: argType === \"plural\" ? \"cardinal\" : \"ordinal\",\n\t\t\t\t\t\tlocation\n\t\t\t\t\t},\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t}\n\t\t\tdefault: return this.error(ErrorKind.INVALID_ARGUMENT_TYPE, createLocation(typeStartPosition, typeEndPosition));\n\t\t}\n\t}\n\ttryParseArgumentClose(openingBracePosition) {\n\t\tif (this.isEOF() || this.char() !== 125) return this.error(ErrorKind.EXPECT_ARGUMENT_CLOSING_BRACE, createLocation(openingBracePosition, this.clonePosition()));\n\t\tthis.bump();\n\t\treturn {\n\t\t\tval: true,\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* See: https://github.com/unicode-org/icu/blob/af7ed1f6d2298013dc303628438ec4abe1f16479/icu4c/source/common/messagepattern.cpp#L659\n\t*/\n\tparseSimpleArgStyleIfPossible() {\n\t\tlet nestedBraces = 0;\n\t\tconst startPosition = this.clonePosition();\n\t\twhile (!this.isEOF()) switch (this.char()) {\n\t\t\tcase 39: {\n\t\t\t\tthis.bump();\n\t\t\t\tlet apostrophePosition = this.clonePosition();\n\t\t\t\tif (!this.bumpUntil(\"'\")) return this.error(ErrorKind.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE, createLocation(apostrophePosition, this.clonePosition()));\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 123:\n\t\t\t\tnestedBraces += 1;\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t\tcase 125:\n\t\t\t\tif (nestedBraces > 0) nestedBraces -= 1;\n\t\t\t\telse return {\n\t\t\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\t\t\terr: null\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.bump();\n\t\t\t\tbreak;\n\t\t}\n\t\treturn {\n\t\t\tval: this.message.slice(startPosition.offset, this.offset()),\n\t\t\terr: null\n\t\t};\n\t}\n\tparseNumberSkeletonFromString(skeleton, location) {\n\t\tlet tokens = [];\n\t\ttry {\n\t\t\ttokens = parseNumberSkeletonFromString(skeleton);\n\t\t} catch {\n\t\t\treturn this.error(ErrorKind.INVALID_NUMBER_SKELETON, location);\n\t\t}\n\t\treturn {\n\t\t\tval: {\n\t\t\t\ttype: SKELETON_TYPE.number,\n\t\t\t\ttokens,\n\t\t\t\tlocation,\n\t\t\t\tparsedOptions: this.shouldParseSkeletons ? parseNumberSkeleton(tokens) : {}\n\t\t\t},\n\t\t\terr: null\n\t\t};\n\t}\n\t/**\n\t* @param nesting_level The current nesting level of messages.\n\t* This can be positive when parsing message fragment in select or plural argument options.\n\t* @param parent_arg_type The parent argument's type.\n\t* @param parsed_first_identifier If provided, this is the first identifier-like selector of\n\t* the argument. It is a by-product of a previous parsing attempt.\n\t* @param expecting_close_tag If true, this message is directly or indirectly nested inside\n\t* between a pair of opening and closing tags. The nested message will not parse beyond\n\t* the closing tag boundary.\n\t*/\n\ttryParsePluralOrSelectOptions(nestingLevel, parentArgType, expectCloseTag, parsedFirstIdentifier) {\n\t\tlet hasOtherClause = false;\n\t\tconst options = [];\n\t\tconst parsedSelectors = /* @__PURE__ */ new Set();\n\t\tlet { value: selector, location: selectorLocation } = parsedFirstIdentifier;\n\t\twhile (true) {\n\t\t\tif (selector.length === 0) {\n\t\t\t\tconst startPosition = this.clonePosition();\n\t\t\t\tif (parentArgType !== \"select\" && this.bumpIf(\"=\")) {\n\t\t\t\t\tconst result = this.tryParseDecimalInteger(ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, ErrorKind.INVALID_PLURAL_ARGUMENT_SELECTOR);\n\t\t\t\t\tif (result.err) return result;\n\t\t\t\t\tselectorLocation = createLocation(startPosition, this.clonePosition());\n\t\t\t\t\tselector = this.message.slice(startPosition.offset, this.offset());\n\t\t\t\t} else break;\n\t\t\t}\n\t\t\tif (parsedSelectors.has(selector)) return this.error(parentArgType === \"select\" ? ErrorKind.DUPLICATE_SELECT_ARGUMENT_SELECTOR : ErrorKind.DUPLICATE_PLURAL_ARGUMENT_SELECTOR, selectorLocation);\n\t\t\tif (selector === \"other\") hasOtherClause = true;\n\t\t\tthis.bumpSpace();\n\t\t\tconst openingBracePosition = this.clonePosition();\n\t\t\tif (!this.bumpIf(\"{\")) return this.error(parentArgType === \"select\" ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT, createLocation(this.clonePosition(), this.clonePosition()));\n\t\t\tconst fragmentResult = this.parseMessage(nestingLevel + 1, parentArgType, expectCloseTag);\n\t\t\tif (fragmentResult.err) return fragmentResult;\n\t\t\tconst argCloseResult = this.tryParseArgumentClose(openingBracePosition);\n\t\t\tif (argCloseResult.err) return argCloseResult;\n\t\t\toptions.push([selector, {\n\t\t\t\tvalue: fragmentResult.val,\n\t\t\t\tlocation: createLocation(openingBracePosition, this.clonePosition())\n\t\t\t}]);\n\t\t\tparsedSelectors.add(selector);\n\t\t\tthis.bumpSpace();\n\t\t\t({value: selector, location: selectorLocation} = this.parseIdentifierIfPossible());\n\t\t}\n\t\tif (options.length === 0) return this.error(parentArgType === \"select\" ? ErrorKind.EXPECT_SELECT_ARGUMENT_SELECTOR : ErrorKind.EXPECT_PLURAL_ARGUMENT_SELECTOR, createLocation(this.clonePosition(), this.clonePosition()));\n\t\tif (this.requiresOtherClause && !hasOtherClause) return this.error(ErrorKind.MISSING_OTHER_CLAUSE, createLocation(this.clonePosition(), this.clonePosition()));\n\t\treturn {\n\t\t\tval: options,\n\t\t\terr: null\n\t\t};\n\t}\n\ttryParseDecimalInteger(expectNumberError, invalidNumberError) {\n\t\tlet sign = 1;\n\t\tconst startingPosition = this.clonePosition();\n\t\tif (this.bumpIf(\"+\")) {} else if (this.bumpIf(\"-\")) sign = -1;\n\t\tlet hasDigits = false;\n\t\tlet decimal = 0;\n\t\twhile (!this.isEOF()) {\n\t\t\tconst ch = this.char();\n\t\t\tif (ch >= 48 && ch <= 57) {\n\t\t\t\thasDigits = true;\n\t\t\t\tdecimal = decimal * 10 + (ch - 48);\n\t\t\t\tthis.bump();\n\t\t\t} else break;\n\t\t}\n\t\tconst location = createLocation(startingPosition, this.clonePosition());\n\t\tif (!hasDigits) return this.error(expectNumberError, location);\n\t\tdecimal *= sign;\n\t\tif (!Number.isSafeInteger(decimal)) return this.error(invalidNumberError, location);\n\t\treturn {\n\t\t\tval: decimal,\n\t\t\terr: null\n\t\t};\n\t}\n\toffset() {\n\t\treturn this.position.offset;\n\t}\n\tisEOF() {\n\t\treturn this.offset() === this.message.length;\n\t}\n\tclonePosition() {\n\t\treturn {\n\t\t\toffset: this.position.offset,\n\t\t\tline: this.position.line,\n\t\t\tcolumn: this.position.column\n\t\t};\n\t}\n\t/**\n\t* Return the code point at the current position of the parser.\n\t* Throws if the index is out of bound.\n\t*/\n\tchar() {\n\t\tconst offset = this.position.offset;\n\t\tif (offset >= this.message.length) throw Error(\"out of bound\");\n\t\tconst code = this.message.codePointAt(offset);\n\t\tif (code === void 0) throw Error(`Offset ${offset} is at invalid UTF-16 code unit boundary`);\n\t\treturn code;\n\t}\n\terror(kind, location) {\n\t\treturn {\n\t\t\tval: null,\n\t\t\terr: {\n\t\t\t\tkind,\n\t\t\t\tmessage: this.message,\n\t\t\t\tlocation\n\t\t\t}\n\t\t};\n\t}\n\t/** Bump the parser to the next UTF-16 code unit. */\n\tbump() {\n\t\tif (this.isEOF()) return;\n\t\tconst code = this.char();\n\t\tif (code === 10) {\n\t\t\tthis.position.line += 1;\n\t\t\tthis.position.column = 1;\n\t\t\tthis.position.offset += 1;\n\t\t} else {\n\t\t\tthis.position.column += 1;\n\t\t\tthis.position.offset += code < 65536 ? 1 : 2;\n\t\t}\n\t}\n\t/**\n\t* If the substring starting at the current position of the parser has\n\t* the given prefix, then bump the parser to the character immediately\n\t* following the prefix and return true. Otherwise, don't bump the parser\n\t* and return false.\n\t*/\n\tbumpIf(prefix) {\n\t\tif (this.message.startsWith(prefix, this.offset())) {\n\t\t\tfor (let i = 0; i < prefix.length; i++) this.bump();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t/**\n\t* Bump the parser until the pattern character is found and return `true`.\n\t* Otherwise bump to the end of the file and return `false`.\n\t*/\n\tbumpUntil(pattern) {\n\t\tconst currentOffset = this.offset();\n\t\tconst index = this.message.indexOf(pattern, currentOffset);\n\t\tif (index >= 0) {\n\t\t\tthis.bumpTo(index);\n\t\t\treturn true;\n\t\t} else {\n\t\t\tthis.bumpTo(this.message.length);\n\t\t\treturn false;\n\t\t}\n\t}\n\t/**\n\t* Bump the parser to the target offset.\n\t* If target offset is beyond the end of the input, bump the parser to the end of the input.\n\t*/\n\tbumpTo(targetOffset) {\n\t\tif (this.offset() > targetOffset) throw Error(`targetOffset ${targetOffset} must be greater than or equal to the current offset ${this.offset()}`);\n\t\ttargetOffset = Math.min(targetOffset, this.message.length);\n\t\twhile (true) {\n\t\t\tconst offset = this.offset();\n\t\t\tif (offset === targetOffset) break;\n\t\t\tif (offset > targetOffset) throw Error(`targetOffset ${targetOffset} is at invalid UTF-16 code unit boundary`);\n\t\t\tthis.bump();\n\t\t\tif (this.isEOF()) break;\n\t\t}\n\t}\n\t/** advance the parser through all whitespace to the next non-whitespace code unit. */\n\tbumpSpace() {\n\t\twhile (!this.isEOF() && _isWhiteSpace(this.char())) this.bump();\n\t}\n\t/**\n\t* Peek at the *next* Unicode codepoint in the input without advancing the parser.\n\t* If the input has been exhausted, then this returns null.\n\t*/\n\tpeek() {\n\t\tif (this.isEOF()) return null;\n\t\tconst code = this.char();\n\t\tconst offset = this.offset();\n\t\treturn this.message.charCodeAt(offset + (code >= 65536 ? 2 : 1)) ?? null;\n\t}\n};\n/**\n* This check if codepoint is alphabet (lower & uppercase)\n* @param codepoint\n* @returns\n*/\nfunction _isAlpha(codepoint) {\n\treturn codepoint >= 97 && codepoint <= 122 || codepoint >= 65 && codepoint <= 90;\n}\nfunction _isAlphaOrSlash(codepoint) {\n\treturn _isAlpha(codepoint) || codepoint === 47;\n}\n/** See `parseTag` function docs. */\nfunction _isPotentialElementNameChar(c) {\n\treturn c === 45 || c === 46 || c >= 48 && c <= 57 || c === 95 || c >= 97 && c <= 122 || c >= 65 && c <= 90 || c == 183 || c >= 192 && c <= 214 || c >= 216 && c <= 246 || c >= 248 && c <= 893 || c >= 895 && c <= 8191 || c >= 8204 && c <= 8205 || c >= 8255 && c <= 8256 || c >= 8304 && c <= 8591 || c >= 11264 && c <= 12271 || c >= 12289 && c <= 55295 || c >= 63744 && c <= 64975 || c >= 65008 && c <= 65533 || c >= 65536 && c <= 983039;\n}\n/**\n* Code point equivalent of regex `\\p{White_Space}`.\n* From: https://www.unicode.org/Public/UCD/latest/ucd/PropList.txt\n*/\nfunction _isWhiteSpace(c) {\n\treturn c >= 9 && c <= 13 || c === 32 || c === 133 || c >= 8206 && c <= 8207 || c === 8232 || c === 8233;\n}\n//#endregion\n//#region packages/icu-messageformat-parser/manipulator.ts\n/**\n* Collect all variables in an AST to Record<string, TYPE>\n* @param ast AST to collect variables from\n* @param vars Record of variable name to variable type\n*/\nfunction collectVariables(ast, vars = /* @__PURE__ */ new Map()) {\n\tast.forEach((el) => {\n\t\tif (isArgumentElement(el) || isDateElement(el) || isTimeElement(el) || isNumberElement(el)) if (vars.has(el.value)) {\n\t\t\tconst existingType = vars.get(el.value);\n\t\t\tif (existingType !== el.type && existingType !== TYPE.plural && existingType !== TYPE.select) throw new Error(`Variable ${el.value} has conflicting types`);\n\t\t} else vars.set(el.value, el.type);\n\t\tif (isPluralElement(el) || isSelectElement(el)) {\n\t\t\tvars.set(el.value, el.type);\n\t\t\tObject.keys(el.options).forEach((k) => {\n\t\t\t\tcollectVariables(el.options[k].value, vars);\n\t\t\t});\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tvars.set(el.value, el.type);\n\t\t\tcollectVariables(el.children, vars);\n\t\t}\n\t});\n}\n/**\n* Check if 2 ASTs are structurally the same. This primarily means that\n* they have the same variables with the same type\n* @param a\n* @param b\n* @returns\n*/\nfunction isStructurallySame(a, b) {\n\tconst aVars = /* @__PURE__ */ new Map();\n\tconst bVars = /* @__PURE__ */ new Map();\n\tcollectVariables(a, aVars);\n\tcollectVariables(b, bVars);\n\tif (aVars.size !== bVars.size) return {\n\t\tsuccess: false,\n\t\terror: /* @__PURE__ */ new Error(`Different number of variables: [${Array.from(aVars.keys()).join(\", \")}] vs [${Array.from(bVars.keys()).join(\", \")}]`)\n\t};\n\treturn Array.from(aVars.entries()).reduce((result, [key, type]) => {\n\t\tif (!result.success) return result;\n\t\tconst bType = bVars.get(key);\n\t\tif (bType == null) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Missing variable ${key} in message`)\n\t\t};\n\t\tif (bType !== type) return {\n\t\t\tsuccess: false,\n\t\t\terror: /* @__PURE__ */ new Error(`Variable ${key} has conflicting types: ${TYPE[type]} vs ${TYPE[bType]}`)\n\t\t};\n\t\treturn result;\n\t}, { success: true });\n}\n//#endregion\n//#region packages/icu-messageformat-parser/index.ts\nfunction pruneLocation(els) {\n\tels.forEach((el) => {\n\t\tdelete el.location;\n\t\tif (isSelectElement(el) || isPluralElement(el)) for (const k in el.options) {\n\t\t\tdelete el.options[k].location;\n\t\t\tpruneLocation(el.options[k].value);\n\t\t}\n\t\telse if (isNumberElement(el) && isNumberSkeleton(el.style)) delete el.style.location;\n\t\telse if ((isDateElement(el) || isTimeElement(el)) && isDateTimeSkeleton(el.style)) delete el.style.location;\n\t\telse if (isTagElement(el)) pruneLocation(el.children);\n\t});\n}\nfunction parse(message, opts = {}) {\n\topts = {\n\t\tshouldParseSkeletons: true,\n\t\trequiresOtherClause: true,\n\t\t...opts\n\t};\n\tconst result = new Parser(message, opts).parse();\n\tif (result.err) {\n\t\tconst error = SyntaxError(ErrorKind[result.err.kind]);\n\t\terror.location = result.err.location;\n\t\terror.originalMessage = result.err.message;\n\t\tthrow error;\n\t}\n\tif (!opts?.captureLocation) pruneLocation(result.val);\n\treturn result.val;\n}\nconst _Parser = Parser;\n//#endregion\nexport { SKELETON_TYPE, TYPE, _Parser, createLiteralElement, createNumberElement, isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isStructurallySame, isTagElement, isTimeElement, parse };\n\n//# sourceMappingURL=index.js.map","import { memoize, strategies } from \"@formatjs/fast-memoize\";\nimport { isArgumentElement, isDateElement, isDateTimeSkeleton, isLiteralElement, isNumberElement, isNumberSkeleton, isPluralElement, isPoundElement, isSelectElement, isTagElement, isTimeElement, parse } from \"@formatjs/icu-messageformat-parser\";\n//#region packages/intl-messageformat/error.ts\nlet ErrorCode = /* @__PURE__ */ function(ErrorCode) {\n\tErrorCode[\"MISSING_VALUE\"] = \"MISSING_VALUE\";\n\tErrorCode[\"INVALID_VALUE\"] = \"INVALID_VALUE\";\n\tErrorCode[\"MISSING_INTL_API\"] = \"MISSING_INTL_API\";\n\treturn ErrorCode;\n}({});\nvar FormatError = class extends Error {\n\tconstructor(msg, code, originalMessage) {\n\t\tsuper(msg);\n\t\tthis.code = code;\n\t\tthis.originalMessage = originalMessage;\n\t}\n\ttoString() {\n\t\treturn `[formatjs Error: ${this.code}] ${this.message}`;\n\t}\n};\nvar InvalidValueError = class extends FormatError {\n\tconstructor(variableId, value, options, originalMessage) {\n\t\tsuper(`Invalid values for \"${variableId}\": \"${value}\". Options are \"${Object.keys(options).join(\"\\\", \\\"\")}\"`, ErrorCode.INVALID_VALUE, originalMessage);\n\t}\n};\nvar InvalidValueTypeError = class extends FormatError {\n\tconstructor(value, type, originalMessage) {\n\t\tsuper(`Value for \"${value}\" must be of type ${type}`, ErrorCode.INVALID_VALUE, originalMessage);\n\t}\n};\nvar MissingValueError = class extends FormatError {\n\tconstructor(variableId, originalMessage) {\n\t\tsuper(`The intl string context variable \"${variableId}\" was not provided to the string \"${originalMessage}\"`, ErrorCode.MISSING_VALUE, originalMessage);\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/formatters.ts\nlet PART_TYPE = /* @__PURE__ */ function(PART_TYPE) {\n\tPART_TYPE[PART_TYPE[\"literal\"] = 0] = \"literal\";\n\tPART_TYPE[PART_TYPE[\"object\"] = 1] = \"object\";\n\treturn PART_TYPE;\n}({});\nfunction mergeLiteral(parts) {\n\tif (parts.length < 2) return parts;\n\treturn parts.reduce((all, part) => {\n\t\tconst lastPart = all[all.length - 1];\n\t\tif (!lastPart || lastPart.type !== PART_TYPE.literal || part.type !== PART_TYPE.literal) all.push(part);\n\t\telse lastPart.value += part.value;\n\t\treturn all;\n\t}, []);\n}\nfunction isFormatXMLElementFn(el) {\n\treturn typeof el === \"function\";\n}\nfunction formatToParts(els, locales, formatters, formats, values, currentPluralValue, originalMessage) {\n\tif (els.length === 1 && isLiteralElement(els[0])) return [{\n\t\ttype: PART_TYPE.literal,\n\t\tvalue: els[0].value\n\t}];\n\tconst result = [];\n\tfor (const el of els) {\n\t\tif (isLiteralElement(el)) {\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: el.value\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPoundElement(el)) {\n\t\t\tif (typeof currentPluralValue === \"number\") result.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getNumberFormat(locales).format(currentPluralValue)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst { value: varName } = el;\n\t\tif (!(values && varName in values)) throw new MissingValueError(varName, originalMessage);\n\t\tlet value = values[varName];\n\t\tif (isArgumentElement(el)) {\n\t\t\tif (!value || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\") value = typeof value === \"string\" || typeof value === \"number\" || typeof value === \"bigint\" ? String(value) : \"\";\n\t\t\tresult.push({\n\t\t\t\ttype: typeof value === \"string\" ? PART_TYPE.literal : PART_TYPE.object,\n\t\t\t\tvalue\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isDateElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.date[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTimeElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.time[el.style] : isDateTimeSkeleton(el.style) ? el.style.parsedOptions : formats.time.medium;\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getDateTimeFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isNumberElement(el)) {\n\t\t\tconst style = typeof el.style === \"string\" ? formats.number[el.style] : isNumberSkeleton(el.style) ? el.style.parsedOptions : void 0;\n\t\t\tif (style && style.scale) {\n\t\t\t\tconst scale = style.scale || 1;\n\t\t\t\tif (typeof value === \"bigint\") {\n\t\t\t\t\tif (!Number.isInteger(scale)) throw new TypeError(`Cannot apply fractional scale ${scale} to bigint value. Scale must be an integer when formatting bigint.`);\n\t\t\t\t\tvalue = value * BigInt(scale);\n\t\t\t\t} else value = value * scale;\n\t\t\t}\n\t\t\tresult.push({\n\t\t\t\ttype: PART_TYPE.literal,\n\t\t\t\tvalue: formatters.getNumberFormat(locales, style).format(value)\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tif (isTagElement(el)) {\n\t\t\tconst { children, value } = el;\n\t\t\tconst formatFn = values[value];\n\t\t\tif (!isFormatXMLElementFn(formatFn)) throw new InvalidValueTypeError(value, \"function\", originalMessage);\n\t\t\tlet chunks = formatFn(formatToParts(children, locales, formatters, formats, values, currentPluralValue).map((p) => p.value));\n\t\t\tif (!Array.isArray(chunks)) chunks = [chunks];\n\t\t\tresult.push(...chunks.map((c) => {\n\t\t\t\treturn {\n\t\t\t\t\ttype: typeof c === \"string\" ? PART_TYPE.literal : PART_TYPE.object,\n\t\t\t\t\tvalue: c\n\t\t\t\t};\n\t\t\t}));\n\t\t}\n\t\tif (isSelectElement(el)) {\n\t\t\tconst key = value;\n\t\t\tconst opt = (Object.prototype.hasOwnProperty.call(el.options, key) ? el.options[key] : void 0) || el.options.other;\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values));\n\t\t\tcontinue;\n\t\t}\n\t\tif (isPluralElement(el)) {\n\t\t\tconst exactKey = `=${value}`;\n\t\t\tlet opt = Object.prototype.hasOwnProperty.call(el.options, exactKey) ? el.options[exactKey] : void 0;\n\t\t\tif (!opt) {\n\t\t\t\tif (!Intl.PluralRules) throw new FormatError(`Intl.PluralRules is not available in this environment.\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\n`, ErrorCode.MISSING_INTL_API, originalMessage);\n\t\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\t\tconst rule = formatters.getPluralRules(locales, { type: el.pluralType }).select(numericValue - (el.offset || 0));\n\t\t\t\topt = (Object.prototype.hasOwnProperty.call(el.options, rule) ? el.options[rule] : void 0) || el.options.other;\n\t\t\t}\n\t\t\tif (!opt) throw new InvalidValueError(el.value, value, Object.keys(el.options), originalMessage);\n\t\t\tconst numericValue = typeof value === \"bigint\" ? Number(value) : value;\n\t\t\tresult.push(...formatToParts(opt.value, locales, formatters, formats, values, numericValue - (el.offset || 0)));\n\t\t\tcontinue;\n\t\t}\n\t}\n\treturn mergeLiteral(result);\n}\n//#endregion\n//#region packages/intl-messageformat/core.ts\nfunction mergeConfig(c1, c2) {\n\tif (!c2) return c1;\n\treturn {\n\t\t...c1,\n\t\t...c2,\n\t\t...Object.keys(c1).reduce((all, k) => {\n\t\t\tall[k] = {\n\t\t\t\t...c1[k],\n\t\t\t\t...c2[k]\n\t\t\t};\n\t\t\treturn all;\n\t\t}, {})\n\t};\n}\nfunction mergeConfigs(defaultConfig, configs) {\n\tif (!configs) return defaultConfig;\n\treturn Object.keys(defaultConfig).reduce((all, k) => {\n\t\tall[k] = mergeConfig(defaultConfig[k], configs[k]);\n\t\treturn all;\n\t}, { ...defaultConfig });\n}\nfunction createFastMemoizeCache(store) {\n\treturn { create() {\n\t\treturn {\n\t\t\tget(key) {\n\t\t\t\treturn store[key];\n\t\t\t},\n\t\t\tset(key, value) {\n\t\t\t\tstore[key] = value;\n\t\t\t}\n\t\t};\n\t} };\n}\nfunction createDefaultFormatters(cache = {\n\tnumber: {},\n\tdateTime: {},\n\tpluralRules: {}\n}) {\n\treturn {\n\t\tgetNumberFormat: memoize((...args) => new Intl.NumberFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.number),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetDateTimeFormat: memoize((...args) => new Intl.DateTimeFormat(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.dateTime),\n\t\t\tstrategy: strategies.variadic\n\t\t}),\n\t\tgetPluralRules: memoize((...args) => new Intl.PluralRules(...args), {\n\t\t\tcache: createFastMemoizeCache(cache.pluralRules),\n\t\t\tstrategy: strategies.variadic\n\t\t})\n\t};\n}\nvar IntlMessageFormat = class IntlMessageFormat {\n\tconstructor(message, locales = IntlMessageFormat.defaultLocale, overrideFormats, opts) {\n\t\tthis.formatterCache = {\n\t\t\tnumber: {},\n\t\t\tdateTime: {},\n\t\t\tpluralRules: {}\n\t\t};\n\t\tthis.format = (values) => {\n\t\t\tconst parts = this.formatToParts(values);\n\t\t\tif (parts.length === 1) return parts[0].value;\n\t\t\tconst result = parts.reduce((all, part) => {\n\t\t\t\tif (!all.length || part.type !== PART_TYPE.literal || typeof all[all.length - 1] !== \"string\") all.push(part.value);\n\t\t\t\telse all[all.length - 1] += part.value;\n\t\t\t\treturn all;\n\t\t\t}, []);\n\t\t\tif (result.length <= 1) return result[0] || \"\";\n\t\t\treturn result;\n\t\t};\n\t\tthis.formatToParts = (values) => formatToParts(this.ast, this.locales, this.formatters, this.formats, values, void 0, this.message);\n\t\tthis.resolvedOptions = () => ({ locale: this.resolvedLocale?.toString() || Intl.NumberFormat.supportedLocalesOf(this.locales)[0] });\n\t\tthis.getAst = () => this.ast;\n\t\tthis.locales = locales;\n\t\tthis.resolvedLocale = IntlMessageFormat.resolveLocale(locales);\n\t\tif (typeof message === \"string\") {\n\t\t\tthis.message = message;\n\t\t\tif (!IntlMessageFormat.__parse) throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");\n\t\t\tconst { ...parseOpts } = opts || {};\n\t\t\tthis.ast = IntlMessageFormat.__parse(message, {\n\t\t\t\t...parseOpts,\n\t\t\t\tlocale: this.resolvedLocale\n\t\t\t});\n\t\t} else this.ast = message;\n\t\tif (!Array.isArray(this.ast)) throw new TypeError(\"A message must be provided as a String or AST.\");\n\t\tthis.formats = mergeConfigs(IntlMessageFormat.formats, overrideFormats);\n\t\tthis.formatters = opts && opts.formatters || createDefaultFormatters(this.formatterCache);\n\t}\n\tstatic {\n\t\tthis.memoizedDefaultLocale = null;\n\t}\n\tstatic get defaultLocale() {\n\t\tif (!IntlMessageFormat.memoizedDefaultLocale) IntlMessageFormat.memoizedDefaultLocale = new Intl.NumberFormat().resolvedOptions().locale;\n\t\treturn IntlMessageFormat.memoizedDefaultLocale;\n\t}\n\tstatic {\n\t\tthis.resolveLocale = (locales) => {\n\t\t\tif (typeof Intl.Locale === \"undefined\") return;\n\t\t\tconst supportedLocales = Intl.NumberFormat.supportedLocalesOf(locales);\n\t\t\tif (supportedLocales.length > 0) return new Intl.Locale(supportedLocales[0]);\n\t\t\treturn new Intl.Locale(typeof locales === \"string\" ? locales : locales[0]);\n\t\t};\n\t}\n\tstatic {\n\t\tthis.__parse = parse;\n\t}\n\tstatic {\n\t\tthis.formats = {\n\t\t\tnumber: {\n\t\t\t\tinteger: { maximumFractionDigits: 0 },\n\t\t\t\tcurrency: { style: \"currency\" },\n\t\t\t\tpercent: { style: \"percent\" }\n\t\t\t},\n\t\t\tdate: {\n\t\t\t\tshort: {\n\t\t\t\t\tmonth: \"numeric\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"2-digit\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\tweekday: \"long\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tyear: \"numeric\"\n\t\t\t\t}\n\t\t\t},\n\t\t\ttime: {\n\t\t\t\tshort: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\"\n\t\t\t\t},\n\t\t\t\tmedium: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\"\n\t\t\t\t},\n\t\t\t\tlong: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t},\n\t\t\t\tfull: {\n\t\t\t\t\thour: \"numeric\",\n\t\t\t\t\tminute: \"numeric\",\n\t\t\t\t\tsecond: \"numeric\",\n\t\t\t\t\ttimeZoneName: \"short\"\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n};\n//#endregion\n//#region packages/intl-messageformat/index.ts\nvar intl_messageformat_default = IntlMessageFormat;\n//#endregion\nexport { ErrorCode, FormatError, IntlMessageFormat, InvalidValueError, InvalidValueTypeError, MissingValueError, PART_TYPE, intl_messageformat_default as default, formatToParts, isFormatXMLElementFn };\n\n//# sourceMappingURL=index.js.map","import{IntlMessageFormat as t}from\"intl-messageformat\";import{isValidElement as e}from\"react\";import{I as r,a as o,m as a}from\"../formatters-CJcico0N.js\";function m(...[m,s,i,n]){if(Array.isArray(s))throw new r(o.INVALID_MESSAGE,void 0);if(\"object\"==typeof s)throw new r(o.INSUFFICIENT_PATH,void 0);if(\"string\"==typeof s){const t=function(t,e){return e||/'[{}]/.test(t)?void 0:t}(s,i);if(t)return t}const{cache:f,formats:c,formatters:g,globalFormats:u,locale:d,timeZone:A}=n;let p;g.getMessageFormat||(g.getMessageFormat=function(e,r){return a(((...e)=>new t(e[0],e[1],e[2],{formatters:r,...e[3]})),e.message)}(f,g));try{p=g.getMessageFormat(s,d,function(e,r,o){const a=t.formats.date,m=t.formats.time,s={...e?.dateTime,...r?.dateTime},i={date:{...a,...s},time:{...m,...s},number:{...e?.number,...r?.number}};return o&&[\"date\",\"time\"].forEach((t=>{const e=i[t];for(const[t,r]of Object.entries(e))e[t]={timeZone:o,...r}})),i}(u,c,A),{formatters:{...g,getDateTimeFormat:(t,e)=>g.getDateTimeFormat(t,{...e,timeZone:e?.timeZone??A})}})}catch(t){throw new r(o.INVALID_MESSAGE,void 0)}const w=p.format(i);return e(w)||Array.isArray(w)||\"string\"==typeof w?w:String(w)}m.raw=!0;export{m as default};\n","import{cloneElement as e,isValidElement as t}from\"react\";import r from\"use-intl/format-message\";import{I as n,a as o,c as a,b as s}from\"./formatters-CJcico0N.js\";function c(...e){return e.filter(Boolean).join(\".\")}function i(e){return c(e.namespace,e.key)}function u(e){console.error(e)}function m(e,t,r,n){const o=c(n,r);if(!t)throw new Error(o);let a=t;return r.split(\".\").forEach((t=>{const r=a[t];if(null==t||null==r)throw new Error(o+` (${e})`);a=r})),a}function f(a){const s=function(e,t,r){try{if(!t)throw new Error(void 0);const n=r?m(e,t,r):t;if(!n)throw new Error(r);return n}catch(e){return new n(o.MISSING_MESSAGE,e.message)}}(a.locale,a.messages,a.namespace);return function({cache:a,formats:s,formatters:u,getMessageFallback:f=i,locale:l,messagesOrError:g,namespace:y,onError:h,timeZone:w}){const E=g instanceof n;function d(e,t,r,o){const a=new n(t,r);return h(a),o??f({error:a,key:e,namespace:y})}function p(i,p,S,M){const T=M;let N;if(E){if(!T)return h(g),f({error:g,key:i,namespace:y});N=T}else{const e=g;try{N=m(l,e,i,y)}catch(e){if(!T)return d(i,o.MISSING_MESSAGE,e.message,T);N=T}}try{const n=c(y,i);return r(n,N,p?function(r){const n={};return Object.keys(r).forEach((o=>{let a=0;const s=r[o];let c;c=\"function\"==typeof s?r=>{const n=s(r);return t(n)?e(n,{key:o+a++}):n}:s,n[o]=c})),n}(p):p,{cache:a,formatters:u,globalFormats:s,formats:S,locale:l,timeZone:w})}catch(e){let t,r;return e instanceof n?(t=e.code,r=e.originalMessage):(t=o.FORMATTING_ERROR,r=e.message),d(i,t,r,T)}}function S(e,t,r,n){const a=p(e,t,r,n);return\"string\"!=typeof a?d(e,o.INVALID_MESSAGE,void 0):a}return S.rich=p,S.markup=(e,t,r,n)=>p(e,t,r,n),S.raw=e=>{if(E)return h(g),f({error:g,key:e,namespace:y});const t=g;try{return m(l,t,e,y)}catch(t){return d(e,o.MISSING_MESSAGE,t.message)}},S.has=e=>{if(E)return!1;try{return m(l,g,e,y),!0}catch{return!1}},S}({...a,messagesOrError:s})}function l(e,t){return e===t?void 0:e.slice((t+\".\").length)}const g=3600,y=86400,h=7*y,w=2628e3,E=7884e3,d=365*y,p={second:1,seconds:1,minute:60,minutes:60,hour:g,hours:g,day:y,days:y,week:h,weeks:h,month:w,months:w,quarter:E,quarters:E,year:d,years:d};function S(e){const{_cache:t=s(),_formatters:r=a(t),formats:c,locale:i,onError:m=u,timeZone:f}=e;function l(e){return e?.timeZone||(f?e={...e,timeZone:f}:m(new n(o.ENVIRONMENT_FALLBACK,void 0))),e}function E(e,t,r,a,s){let c;try{c=function(e,t,r){let a;if(\"string\"==typeof t){const r=t;if(a=e?.[r],!a){const e=new n(o.MISSING_FORMAT,void 0);throw m(e),e}}else a=t;return r&&(a={...a,...r}),a}(r,e,t)}catch{return s()}try{return a(c)}catch(e){return m(new n(o.FORMATTING_ERROR,e.message)),s()}}function S(e,t,n){return E(t,n,c?.dateTime,(t=>(t=l(t),r.getDateTimeFormat(i,t).format(e))),(()=>String(e)))}function M(){return e.now?e.now:(m(new n(o.ENVIRONMENT_FALLBACK,void 0)),new Date)}return{dateTime:S,number:function(e,t,n){return E(t,n,c?.number,(t=>r.getNumberFormat(i,t).format(e)),(()=>String(e)))},relativeTime:function(e,t){try{let n,o;const a={};t instanceof Date||\"number\"==typeof t?n=new Date(t):t&&(n=null!=t.now?new Date(t.now):M(),o=t.unit,a.style=t.style,a.numberingSystem=t.numberingSystem),n||(n=M());const s=(new Date(e).getTime()-n.getTime())/1e3;o||(o=function(e){const t=Math.abs(e);return t<60?\"second\":t<g?\"minute\":t<y?\"hour\":t<h?\"day\":t<w?\"week\":t<d?\"month\":\"year\"}(s)),a.numeric=\"second\"===o?\"auto\":\"always\";const c=function(e,t){return Math.round(e/p[t])}(s,o);return r.getRelativeTimeFormat(i,a).format(c,o)}catch(t){return m(new n(o.FORMATTING_ERROR,t.message)),String(e)}},list:function(e,t,n){const o=[],a=new Map;let s=0;for(const t of e){let e;\"object\"==typeof t?(e=String(s),a.set(e,t)):e=String(t),o.push(e),s++}return E(t,n,c?.list,(e=>{const t=r.getListFormat(i,e).formatToParts(o).map((e=>\"literal\"===e.type?e.value:a.get(e.value)||e.value));return a.size>0?t:t.join(\"\")}),(()=>String(e)))},dateTimeRange:function(e,t,n,o){return E(n,o,c?.dateTime,(n=>(n=l(n),r.getDateTimeFormat(i,n).formatRange(e,t))),(()=>[S(e),S(t)].join(\" – \")))},displayName:function(e,t,n){return E(t,n,c?.displayName,(t=>r.getDisplayNames(i,t).of(e)),(()=>e))}}}function M({formats:e,getMessageFallback:t,messages:r,onError:n,...o}){return{...o,formats:e||void 0,messages:r||void 0,onError:n||u,getMessageFallback:t||i}}export{f as a,u as b,S as c,i as d,M as i,l as r};\n","import{createContext as e,useContext as r,useMemo as t,useState as o,useEffect as n}from\"react\";import{b as a,c as s,I as c,a as i}from\"./formatters-CJcico0N.js\";import{i as m,r as f,a as u,c as l}from\"./initializeConfig-CHgjheii.js\";import{jsx as g}from\"react/jsx-runtime\";const d=e(void 0);function v({children:e,formats:o,getMessageFallback:n,locale:c,messages:i,now:f,onError:u,timeZone:l}){const v=r(d),w=t((()=>v?.cache||a()),[c,v?.cache]),p=t((()=>v?.formatters||s(w)),[w,v?.formatters]),h=t((()=>({...m({locale:c,formats:void 0===o?v?.formats:o,getMessageFallback:n||v?.getMessageFallback,messages:void 0===i?v?.messages:i,now:f||v?.now,onError:u||v?.onError,timeZone:l||v?.timeZone}),formatters:p,cache:w})),[w,o,p,n,c,i,f,u,v,l]);return g(d.Provider,{value:h,children:e})}function w(){const e=r(d);if(!e)throw new Error(void 0);return e}let p=!1;const h=\"undefined\"==typeof window;function E(e){return function(e,r,o){const{cache:n,formats:a,formatters:s,getMessageFallback:m,locale:l,onError:g,timeZone:d}=w(),v=e[o],E=f(r,o);return d||p||!h||(p=!0,g(new c(i.ENVIRONMENT_FALLBACK,void 0))),t((()=>u({cache:n,formatters:s,getMessageFallback:m,messages:v,namespace:E,onError:g,formats:a,locale:l,timeZone:d})),[n,s,m,v,E,g,a,l,d])}({\"!\":w().messages},e?`!.${e}`:\"!\",\"!\")}function Z(){return w().locale}function k(){return new Date}function b(e){const r=e?.updateInterval,{now:t}=w(),[a,s]=o(t||k());return n((()=>{if(!r)return;const e=setInterval((()=>{s(k())}),r);return()=>{clearInterval(e)}}),[t,r]),null==r&&t?t:a}function F(){return w().timeZone}function M(){const e=w();if(!e.messages)throw new Error(void 0);return e.messages}function I(){const{formats:e,formatters:r,locale:o,now:n,onError:a,timeZone:s}=w();return t((()=>l({formats:e,locale:o,now:n,onError:a,timeZone:s,_formatters:r})),[e,r,n,o,a,s])}function j(e,...r){let t,o;return\"string\"==typeof e?(t=r[0],o=r[1]):(t=e.values,o=e.formats),[void 0,t,o,void 0]}function x(e){const r=E(e);function t(...e){return r(...j(...e))}return t.rich=(...e)=>r.rich(...j(...e)),t.markup=(...e)=>r.markup(...j(...e)),t.has=function(e){return!0},t}export{v as IntlProvider,x as _useExtracted,I as useFormatter,Z as useLocale,M as useMessages,b as useNow,F as useTimeZone,E as useTranslations};\n","import { createContext } from \"preact\";\n\nexport interface DialogQueueEntry {\n\tid: string;\n\tpriority: number;\n}\n\nexport interface IDialogQueueContext {\n\tacquire: (entry: DialogQueueEntry) => void;\n\trelease: (id: string) => void;\n\t/** The id of the dialog that may currently be shown, or null when the queue is empty. */\n\tactiveId: string | null;\n}\n\n// Higher priority wins; ties are broken by acquisition order (FIFO).\nexport const DIALOG_PRIORITY = {\n\ttutorial: 10,\n\tdecision: 9,\n\temptyExchange: 8,\n\tdefault: 0\n} as const;\n\nexport const DialogQueueContext = createContext<IDialogQueueContext | null>(\n\tnull\n);\n","import { useState } from \"preact/hooks\";\nimport { resolveSetStateAction } from \"../../utils/helpers\";\n\ntype Setter<T> = React.Dispatch<React.SetStateAction<T>>;\n\nexport interface ValueState<T> {\n\tvalue: T;\n\tset: Setter<T>;\n}\n\nconst useValueState = <T>(\n\tinitialState: T,\n\tstateUpdateCallback?: (newValue: T) => void\n): Readonly<ValueState<T>> => {\n\tconst [state, setState] = useState<T>(initialState);\n\n\tconst wrappedSetState = (action: React.SetStateAction<T>) => {\n\t\tif (!stateUpdateCallback) {\n\t\t\treturn setState(action);\n\t\t}\n\t\tsetState(prev => {\n\t\t\tconst resolvedValue = resolveSetStateAction(action, prev);\n\t\t\tstateUpdateCallback(resolvedValue);\n\t\t\treturn resolvedValue;\n\t\t});\n\t};\n\treturn { value: state, set: wrappedSetState } as const;\n};\n\nexport default useValueState;\n","import useValueState, { ValueState } from \"./use-value-state\";\n\nexport interface UseDialogRegisterReturn {\n\tisOpen: boolean;\n\tonConfirm?: () => void;\n\tonClose: () => void;\n}\n\nexport interface UseDialogReturn {\n\tregister: () => UseDialogRegisterReturn;\n\tstate: ValueState<boolean>;\n}\n\ninterface UseDialogProps {\n\tinitialOpen?: boolean;\n\tonConfirm?: (state: ValueState<boolean>) => void;\n\tonClose?: () => void;\n}\n\nconst useDialog = ({\n\tinitialOpen = false,\n\tonConfirm,\n\tonClose: onCloseProp\n}: UseDialogProps = {}): UseDialogReturn => {\n\tconst state = useValueState<boolean>(initialOpen);\n\n\tconst onClose = () => {\n\t\tstate.set(false);\n\t\tonCloseProp?.();\n\t};\n\n\tfunction register() {\n\t\treturn {\n\t\t\tisOpen: state.value,\n\t\t\tonConfirm: () => onConfirm?.(state),\n\t\t\tonClose\n\t\t};\n\t}\n\n\treturn {\n\t\tregister,\n\t\tstate\n\t} as const;\n};\n\nexport default useDialog;\n","import { createContext } from \"preact\";\nimport { ValueState } from \"../hooks/common/use-value-state\";\nimport { ReturnViewState, WidgetViewState } from \"../types\";\nimport { WidgetConfiguration } from \"../utils/initialization/types\";\n\nexport interface IWidgetContext {\n\twidgetViewState: ValueState<WidgetViewState>;\n\treturnViewState: ValueState<ReturnViewState>;\n\tconfig: WidgetConfiguration;\n}\n\nexport const WidgetContext = createContext<IWidgetContext>(\n\t{} as IWidgetContext\n);\n","import { useContext } from \"preact/hooks\";\nimport { WidgetContext } from \"../../context/widget-context\";\n\nconst useWidgetContext = () => {\n\tconst context = useContext(WidgetContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useWidgetContext must be used within a WidgetContextProvider\"\n\t\t);\n\t}\n\treturn context;\n};\n\nexport default useWidgetContext;\n","import { PLATFORM_URL } from \"../constants\";\nimport { clearCart } from \"./cart\";\nimport { Locale } from \"./i18n\";\nimport { logger } from \"./logger\";\nimport { clearSession } from \"./shopify\";\n\nexport default {\n\tback: async (locale: Locale, slug: string) => {\n\t\tconst constructedPlatformUrl = new URL(`/${locale}`, PLATFORM_URL);\n\n\t\tif (slug) {\n\t\t\tconstructedPlatformUrl.pathname += `/${slug}/return-action`;\n\t\t}\n\n\t\tawait clearCart();\n\t\tclearSession();\n\n\t\twindow.location.href = constructedPlatformUrl.toString();\n\t},\n\tcontinue: (locale: Locale, slug: string) => {\n\t\tconst confirmationUrl = new URL(\n\t\t\t`/${locale}/${slug}/tutorial-checkout`,\n\t\t\tPLATFORM_URL\n\t\t);\n\n\t\tconst pathname = window.location.pathname;\n\n\t\tif (pathname && pathname !== \"/\") {\n\t\t\tconfirmationUrl.searchParams.append(\"from\", pathname);\n\t\t}\n\n\t\twindow.location.href = confirmationUrl.toString();\n\t},\n\texit: async (clearCartOnExit: boolean = true) => {\n\t\tif (clearCartOnExit) {\n\t\t\ttry {\n\t\t\t\tawait clearCart();\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(\"Failed to clear cart on exit\", err);\n\t\t\t}\n\t\t}\n\t\tclearSession();\n\t\twindow.location.reload();\n\t}\n};\n","import { isOnCartPage } from \"./helpers\";\nimport storage, { STORAGE_OVERLAY_DIALOG_EXPIRY_KEY } from \"./storage\";\n\nexport type DecisionState = \"cart_detection\" | \"cookie_detection\";\n\n// Pure detection of which (if any) return decision dialog should be shown.\n// Side-effect free so mount-time features (e.g. tutorial autostart) can check\n// it without racing the dialog's storage cleanup.\nexport function getReturnDecisionState(\n\tisFirstLoad: boolean\n): DecisionState | null {\n\tif (isOnCartPage()) {\n\t\treturn \"cart_detection\";\n\t}\n\tif (!isFirstLoad) {\n\t\tconst expiration = storage.get<number>(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\t\tif (expiration && Date.now() > expiration) {\n\t\t\treturn \"cookie_detection\";\n\t\t}\n\t}\n\treturn null;\n}\n","import { createContext } from \"preact\";\nimport { CartState } from \"../../components/providers/return-context-provider\";\nimport { IUseAsyncStateReturn } from \"../hooks/common/use-async-state\";\nimport {\n\tCalculationParams,\n\tCalculationResponse,\n\tProcessOrderInitializationReturn\n} from \"../utils/queries\";\nimport { SessionPatchPayload } from \"../utils/session\";\n\nexport interface IReturnContext {\n\torderState: IUseAsyncStateReturn<ProcessOrderInitializationReturn>;\n\tcartState: IUseAsyncStateReturn<CartState, ProcessOrderInitializationReturn>;\n\tcalculationState: IUseAsyncStateReturn<\n\t\tCalculationResponse,\n\t\tCalculationParams\n\t>;\n\tupdateSessionCacheState: IUseAsyncStateReturn<void, SessionPatchPayload>;\n\tisPending: boolean;\n\thasFailed: boolean;\n}\n\nexport const ReturnContext = createContext<IReturnContext>(\n\t{} as IReturnContext\n);\n","import { useContext } from \"preact/hooks\";\nimport { ReturnContext } from \"../../context/return-context\";\n\nconst useReturnContext = () => {\n\tconst context = useContext(ReturnContext);\n\tif (!context) {\n\t\tthrow new Error(\n\t\t\t\"useReturnContext must be used within a ReturnContextProvider\"\n\t\t);\n\t}\n\treturn context;\n};\n\nexport default useReturnContext;\n","import { IMAGE_FALLBACK_URL } from \"../../lib/constants\";\nimport { cn } from \"../../lib/utils/helpers\";\n\ninterface ImageProps extends Omit<\n\tReact.ImgHTMLAttributes<HTMLImageElement>,\n\t\"src\"\n> {\n\tsrc: string | null | undefined;\n}\n\nconst Image = ({ src, className, ...props }: ImageProps) => {\n\treturn (\n\t\t<img\n\t\t\tsrc={src || IMAGE_FALLBACK_URL}\n\t\t\tclassName={cn(\"rf-image\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Image;\n","const SkeletonContainer = ({\n\tpending = false,\n\tskeleton,\n\tchildren\n}: {\n\tpending?: boolean;\n\tskeleton: preact.ComponentChildren;\n\tchildren?: preact.ComponentChildren;\n}) => {\n\tswitch (pending) {\n\t\tcase true:\n\t\t\treturn skeleton;\n\t\tdefault:\n\t\t\treturn children;\n\t}\n};\n\nexport default SkeletonContainer;\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../../lib/utils/helpers\";\n\nconst avatarVariants = cva(\n\t\"rf-avatar size-[26px] rounded-full border overflow-hidden\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tlight: \"bg-white text-black border-[#E1E1E1]\",\n\t\t\t\tdark: \"bg-[#555555] text-white border-black\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"light\"\n\t\t}\n\t}\n);\n\nexport type AvatarVariants = VariantProps<typeof avatarVariants>;\n\ninterface AvatarProps\n\textends React.HTMLAttributes<HTMLDivElement>, AvatarVariants {\n\tchildren: preact.ComponentChildren;\n}\n\nconst Avatar = ({ children, className, variant, ...props }: AvatarProps) => {\n\treturn (\n\t\t<div className={cn(avatarVariants({ variant }), className)} {...props}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default memo(Avatar);\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst Skeleton = ({\n\tclassName,\n\t...props\n}: Omit<React.HTMLAttributes<HTMLDivElement>, \"children\">) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-skeleton bg-neutral-2 animate-pulse rounded-md h-[1.5em]\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<span className=\"rf-skeleton__sr-text sr-only\">Loading...</span>\n\t\t</div>\n\t);\n};\n\nexport default Skeleton;\n","import Skeleton from \"../skeleton/skeleton\";\n\nconst AvatarStackSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-avatar-stack-skeleton flex -space-x-1\">\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[1]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[2]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-avatar-stack-skeleton__item relative bg-neutral-2 rounded-full z-[3]\">\n\t\t\t\t<Skeleton className=\"size-[26px] rounded-full\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default AvatarStackSkeleton;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport Image from \"../image\";\nimport SkeletonContainer from \"../skeleton/skeleton-container\";\nimport Avatar, { AvatarVariants } from \"./avatar\";\nimport AvatarStackSkeleton from \"./avatar-stack-skeleton\";\n\nexport interface AvatarImage {\n\tsrc: string | undefined;\n\talt: string;\n}\n\nexport interface AvatarStackProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"children\">,\n\t\tAvatarVariants {\n\timages: AvatarImage[];\n\tmaxVisibleAvatars?: number | null;\n\tpending?: boolean;\n\tchildren?: (zIndex: number) => React.ReactNode;\n}\n\nconst AvatarStack = ({\n\timages,\n\tvariant,\n\tmaxVisibleAvatars = 3,\n\tclassName,\n\tpending = false,\n\tchildren,\n\t...props\n}: AvatarStackProps) => {\n\tconst maxVisible = maxVisibleAvatars ?? images.length;\n\tconst hasOverflow = maxVisible < images.length;\n\tconst sliceIndex = hasOverflow ? maxVisible - 1 : maxVisible;\n\n\treturn (\n\t\t<SkeletonContainer skeleton={<AvatarStackSkeleton />} pending={pending}>\n\t\t\t{images.length > 0 && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"rf-avatar-stack flex -space-x-1\", className)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t{images.slice(0, sliceIndex).map(({ src, alt }, index) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\t\tclassName=\"relative\"\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tzIndex: index + 1\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Image\n\t\t\t\t\t\t\t\t\tclassName=\"rf-avatar-stack__image size-full object-cover\"\n\t\t\t\t\t\t\t\t\tsrc={src}\n\t\t\t\t\t\t\t\t\talt={alt}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t\t{hasOverflow && (\n\t\t\t\t\t\t<Avatar\n\t\t\t\t\t\t\tvariant={variant}\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tzIndex: sliceIndex + 1\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName=\"flex items-center justify-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span className=\"rf-avatar-stack__count text-[10px]\">\n\t\t\t\t\t\t\t\t+{images.length - sliceIndex}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t)}\n\t\t\t\t\t{children ? children(sliceIndex + 1) : null}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</SkeletonContainer>\n\t);\n};\n\nexport default AvatarStack;\n","import { useMemo } from \"preact/hooks\";\nimport useReturnContext from \"../lib/hooks/context/use-return-context\";\nimport AvatarStack, {\n\tAvatarImage,\n\tAvatarStackProps\n} from \"./ui/avatar/avatar-stack\";\n\nconst ReturnAvatarStack = ({\n\tpending,\n\t...props\n}: Omit<AvatarStackProps, \"images\">) => {\n\tconst { orderState } = useReturnContext();\n\n\tconst formattedImages = useMemo(() => {\n\t\tconst exchangeProducts =\n\t\t\torderState.value.data?.orderData.productsToExchange ?? [];\n\t\treturn exchangeProducts.reduce<AvatarImage[]>((acc, product) => {\n\t\t\tfor (let i = 0; i < product.quantity; i++) {\n\t\t\t\tacc.push({\n\t\t\t\t\tsrc: product.image,\n\t\t\t\t\talt: product.title\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn acc;\n\t\t}, []);\n\t}, [orderState.value.data?.orderData.productsToExchange]);\n\n\treturn (\n\t\t<AvatarStack\n\t\t\tpending={pending ?? orderState.value.pending}\n\t\t\tvariant=\"light\"\n\t\t\timages={formattedImages}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default ReturnAvatarStack;\n","import { createContext } from \"preact\";\nimport { UseDialogRegisterReturn } from \"../hooks/common/use-dialog\";\n\nexport type IDialogContext = UseDialogRegisterReturn;\n\nexport const DialogContext = createContext<IDialogContext | null>(null);\n","const ArrowRightIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={9}\n\t\tviewBox=\"0 0 11 9\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-right ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M10.273 4.427 6.66.954a.55.55 0 0 0-.387-.153.56.56 0 0 0-.387.153l-.328.316a.52.52 0 0 0 0 .749l2.107 2.03H.973a.524.524 0 0 0-.54.517v.446c0 .29.238.54.54.54H7.69L5.56 7.594a.505.505 0 0 0 0 .74l.327.314c.103.099.24.153.387.153a.56.56 0 0 0 .387-.154l3.612-3.473a.513.513 0 0 0 0-.747\" />\n\t</svg>\n);\nexport default ArrowRightIcon;\n","const XIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={11}\n\t\tviewBox=\"0 0 11 11\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--x ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M1.45 10.572a.92.92 0 0 1-.655-.221.92.92 0 0 1 0-1.299l7.82-7.82a.921.921 0 0 1 1.344 1.253l-7.865 7.866a.92.92 0 0 1-.645.22\" />\n\t\t<path d=\"M9.26 10.572a.92.92 0 0 1-.645-.267l-7.82-7.82a.921.921 0 0 1 1.299-1.298l7.865 7.82a.92.92 0 0 1 0 1.344.92.92 0 0 1-.7.22\" />\n\t</svg>\n);\nexport default XIcon;\n","const Spinner = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => {\n\treturn (\n\t\t<svg\n\t\t\twidth=\"1.5em\"\n\t\t\theight=\"1.5em\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tfill=\"currentColor\"\n\t\t\tclassName={`rf-icon rf-icon--spinner ${className || \"\"}`}\n\t\t\t{...props}\n\t\t>\n\t\t\t<g>\n\t\t\t\t<path opacity={0.14} d=\"M11 1h2v5h-2z\" />\n\t\t\t\t<path opacity={0.29} d=\"m16.634 1.974 1.732 1-2.5 4.33-1.732-1z\" />\n\t\t\t\t<path opacity={0.43} d=\"m21.026 5.634 1 1.732-4.33 2.5-1-1.732z\" />\n\t\t\t\t<path opacity={0.57} d=\"M23 11v2h-5v-2z\" />\n\t\t\t\t<path opacity={0.71} d=\"m22.026 16.634-1 1.732-4.33-2.5 1-1.732z\" />\n\t\t\t\t<path opacity={0.86} d=\"m18.366 21.026-1.732 1-2.5-4.33 1.732-1z\" />\n\t\t\t\t<path d=\"M13 23h-2v-5h2z\" />\n\t\t\t\t<animateTransform\n\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\ttype=\"rotate\"\n\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\tdur=\"0.75s\"\n\t\t\t\t\tvalues=\"0 12 12;30 12 12;60 12 12;90 12 12;120 12 12;150 12 12;180 12 12;210 12 12;240 12 12;270 12 12;300 12 12;330 12 12;360 12 12\"\n\t\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t</svg>\n\t);\n};\n\nexport default Spinner;\n","// components/ui/Button.tsx\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Spinner from \"../icons/spinner\";\n\nconst buttonVariants = cva(\n\t\"disabled:cursor-not-allowed h-12 rounded-md text-base font-medium flex items-center justify-center whitespace-nowrap gap-2 px-8 relative transition-all duration-300 ease-in-out [--icon-width:auto] [--icon-height:0.65em] desktop:[--icon-height:0.75em]\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary:\n\t\t\t\t\t\"bg-button-background text-button-foreground disabled:!bg-button-background-disabled disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\tsecondary:\n\t\t\t\t\t\"bg-button-secondary-background text-button-secondary-foreground disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border border-button-secondary-background bg-background text-widget-foreground disabled:!text-button-foreground-disabled desktop:hover:opacity-80\",\n\t\t\t\tghost:\n\t\t\t\t\t\"text-neutral-3 font-normal gap-1 disabled:!opacity-50 disabled:cursor-not-allowed desktop:hover:opacity-80\"\n\t\t\t}\n\t\t}\n\t}\n);\n\nexport interface ButtonProps\n\textends\n\t\tReact.ButtonHTMLAttributes<HTMLButtonElement>,\n\t\tVariantProps<typeof buttonVariants> {\n\ticon?: ((props: React.SVGProps<SVGSVGElement>) => React.JSX.Element) | null;\n\ticonPosition?: \"left\" | \"right\";\n\tpending?: boolean;\n}\n\nconst Button = ({\n\tchildren,\n\tclassName,\n\ticon: Icon,\n\tvariant = \"primary\",\n\tpending = false,\n\tdisabled = false,\n\ticonPosition = \"right\",\n\t...props\n}: ButtonProps) => {\n\treturn (\n\t\t<button\n\t\t\taria-busy={pending}\n\t\t\tdisabled={disabled || pending}\n\t\t\ttype=\"button\"\n\t\t\tclassName={cn(\n\t\t\t\tbuttonVariants({ variant }),\n\t\t\t\t\"rf-button\",\n\t\t\t\t`rf-button--${variant}`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{pending && <Spinner className=\"absolute inset-0 m-auto\" />}\n\t\t\t<span\n\t\t\t\tclassName=\"rf-button__text\"\n\t\t\t\tstyle={{\n\t\t\t\t\tvisibility: pending ? \"hidden\" : \"visible\"\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t\t{!!Icon && (\n\t\t\t\t<Icon\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tvisibility: pending ? \"hidden\" : \"visible\"\n\t\t\t\t\t}}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-button__icon w-[var(--icon-width)] h-[var(--icon-height)]\",\n\t\t\t\t\t\ticonPosition === \"left\" ? \"-order-1\" : \"order-1\"\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</button>\n\t);\n};\n\nexport default memo(Button);\n","import { useContext } from \"preact/hooks\";\nimport { DialogContext } from \"../../../lib/context/dialog-context\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ArrowRightIcon from \"../../icons/arrow-right\";\nimport XIcon from \"../../icons/x\";\nimport Button, { ButtonProps } from \"../../ui/button\";\n\n// eslint-disable-next-line react-refresh/only-export-components\nconst Accept = ({ className, onClick, ...props }: ButtonProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog-button rf-dialog__button rf-dialog__button--accept w-full\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\ticon={ArrowRightIcon}\n\t\t\tonClick={event => {\n\t\t\t\tonClick?.(event);\n\t\t\t\tif (!event.defaultPrevented) ctx?.onConfirm?.();\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n// eslint-disable-next-line react-refresh/only-export-components\nconst Reject = ({ className, onClick, ...props }: ButtonProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<Button\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog-button rf-dialog__button rf-dialog__button--reject w-full\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tvariant=\"outline\"\n\t\t\ticon={XIcon}\n\t\t\ticonPosition=\"left\"\n\t\t\tonClick={event => {\n\t\t\t\tonClick?.(event);\n\t\t\t\tif (!event.defaultPrevented) ctx?.onClose?.();\n\t\t\t}}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default {\n\tAccept,\n\tReject\n};\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { cn } from \"../../lib/utils/helpers\";\n\nconst iconVariants = cva(\n\t\"rf-icon size-8 rounded-full flex items-center justify-center text-2xl p-[9px]\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tprimary: \"rf-icon--primary border border-neutral-2 text-black\",\n\t\t\t\tsolid: \"rf-icon--solid bg-black text-white\",\n\t\t\t\t\"solid-inverse\":\n\t\t\t\t\t\"rf-icon--solid-inverse bg-button-secondary-background text-button-secondary-foreground\"\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tsm: \"size-7 p-[8px]\",\n\t\t\t\tmd: \"size-8 p-[9px]\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"primary\",\n\t\t\tsize: \"md\"\n\t\t}\n\t}\n);\n\ninterface IconAttributesWithChildren {\n\ticon?: never;\n\tchildren: preact.ComponentChildren;\n}\n\ninterface IconAttributesWithoutChildren {\n\ticon: (props: React.SVGProps<SVGSVGElement>) => React.JSX.Element;\n\tchildren?: never;\n}\n\ntype IconAttributes =\n\t| IconAttributesWithChildren\n\t| IconAttributesWithoutChildren;\n\ntype IconProps = Omit<React.HTMLAttributes<HTMLDivElement>, \"children\"> &\n\tVariantProps<typeof iconVariants> &\n\tIconAttributes;\n\nconst Icon = ({\n\ticon: IconComponent,\n\tvariant,\n\tsize,\n\tclassName,\n\tchildren,\n\t...props\n}: IconProps) => {\n\treturn (\n\t\t<div\n\t\t\taria-hidden\n\t\t\tclassName={cn(iconVariants({ variant, size }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{IconComponent && <IconComponent className=\"size-full\" />}\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport default Icon;\n","import { useTranslations } from \"use-intl\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Icon from \"../icons/icon\";\nimport XIcon from \"../icons/x\";\n\nexport type RejectButtonProps =\n\tReact.ButtonHTMLAttributes<HTMLButtonElement> & {\n\t\tshowLabel?: boolean;\n\t\tlabelProps?: React.HTMLAttributes<HTMLSpanElement>;\n\t};\n\nconst RejectButton = ({\n\tclassName,\n\tlabelProps,\n\tshowLabel = false,\n\t...props\n}: RejectButtonProps) => {\n\tconst t = useTranslations(\"common\");\n\n\treturn (\n\t\t<button\n\t\t\taria-label={!showLabel ? t(\"close\") : undefined}\n\t\t\tclassName={cn(\"flex items-center gap-2 group\", className)}\n\t\t\ttype=\"button\"\n\t\t\t{...props}\n\t\t>\n\t\t\t{showLabel && <span {...labelProps}>{t(\"close\")}</span>}\n\t\t\t<Icon\n\t\t\t\tclassName=\"group-hover:bg-neutral-2 transition-colors\"\n\t\t\t\ticon={XIcon}\n\t\t\t/>\n\t\t</button>\n\t);\n};\n\nexport default RejectButton;\n","import { useEffect } from \"preact/hooks\";\nimport { DIALOG_PRIORITY } from \"../../context/dialog-queue-context\";\nimport useDialogQueue from \"../context/use-dialog-queue\";\n\ninterface UseDialogSlotProps {\n\tid: string;\n\tpriority?: number;\n\t/** Whether this dialog wants to be shown. */\n\topen: boolean;\n}\n\n// Registers a dialog's intent to be shown and returns whether it's the one the\n// queue currently grants. Only one slot is active at a time.\nconst useDialogSlot = ({\n\tid,\n\tpriority = DIALOG_PRIORITY.default,\n\topen\n}: UseDialogSlotProps): boolean => {\n\tconst { acquire, release, activeId } = useDialogQueue();\n\n\tuseEffect(() => {\n\t\tif (open) {\n\t\t\tacquire({ id, priority });\n\t\t\treturn () => release(id);\n\t\t} else {\n\t\t\trelease(id);\n\t\t}\n\t}, [open, id, priority, acquire, release]);\n\n\treturn open && activeId === id;\n};\n\nexport default useDialogSlot;\n","import { useContext } from \"preact/hooks\";\nimport { DialogQueueContext } from \"../../context/dialog-queue-context\";\n\nconst useDialogQueue = () => {\n\tconst context = useContext(DialogQueueContext);\n\tif (!context) {\n\t\tthrow new Error(\"useDialogQueue must be used within a DialogQueueProvider\");\n\t}\n\treturn context;\n};\n\nexport default useDialogQueue;\n","import { useEffect, useState } from \"preact/hooks\";\n\nconst useIsMounted = () => {\n\tconst [mounted, setMounted] = useState(false);\n\n\tuseEffect(() => {\n\t\tsetMounted(true);\n\t}, []);\n\n\treturn mounted;\n};\n\nexport default useIsMounted;\n","import { createContext, RefObject } from \"preact\";\n\nexport const RootContext = createContext<RefObject<HTMLDivElement> | null>(\n\tnull\n);\n","import { useRef } from \"preact/hooks\";\nimport { cn } from \"../../../lib/utils/helpers\";\n\ninterface DialogBackdropProps extends React.HTMLAttributes<HTMLElement> {\n\tisVisible?: boolean;\n\tonClick?: () => void;\n}\n\nconst DialogBackdrop = ({\n\tonClick,\n\tclassName,\n\tchildren,\n\tisVisible = true,\n\t...props\n}: DialogBackdropProps) => {\n\tconst elementRef = useRef<HTMLElement>(null);\n\n\tfunction handleClick(event: preact.JSX.TargetedMouseEvent<HTMLElement>) {\n\t\tif (onClick && event.target === elementRef.current) {\n\t\t\tonClick();\n\t\t}\n\t}\n\n\treturn (\n\t\t<aside\n\t\t\tonClick={handleClick}\n\t\t\tref={elementRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__backdrop fixed inset-0 size-full z-40 flex items-center justify-center p-6\",\n\t\t\t\tisVisible && \"rf-dialog__backdrop--visible bg-black/50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</aside>\n\t);\n};\n\nexport default DialogBackdrop;\n","import DialogButton from \"./dialog-button\";\nimport DialogExit from \"./dialog-exit\";\nimport DialogModal, { type DialogModalProps } from \"./dialog-modal\";\nimport DialogSubtitle from \"./dialog-subtitle\";\nimport DialogTitle from \"./dialog-title\";\n\nexport type { DialogModalProps };\n\nconst Dialog = {\n\tModal: DialogModal,\n\tTitle: DialogTitle,\n\tSubtitle: DialogSubtitle,\n\tAccept: DialogButton.Accept,\n\tReject: DialogButton.Reject,\n\tExit: DialogExit\n};\n\nexport default Dialog;\n","import { createPortal } from \"preact/compat\";\nimport { useEffect, useRef } from \"preact/hooks\";\nimport {\n\tDialogContext,\n\tIDialogContext\n} from \"../../../lib/context/dialog-context\";\nimport { UseDialogRegisterReturn } from \"../../../lib/hooks/common/use-dialog\";\nimport useDialogSlot from \"../../../lib/hooks/common/use-dialog-slot\";\nimport useIsMounted from \"../../../lib/hooks/common/use-is-mounted\";\nimport useRoot from \"../../../lib/hooks/context/use-root\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport DialogBackdrop from \"./dialog-backdrop\";\n\nexport interface DialogModalProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"onClose\">,\n\t\tUseDialogRegisterReturn {\n\tfadeIn?: boolean;\n\tshowBackdrop?: boolean;\n\tdismissOnBackdropClick?: boolean;\n\tdismissOnEscape?: boolean;\n\t/** Stable id for the dialog queue. Auto-generated when omitted. */\n\tqueueId?: string;\n\t/** Queue priority — higher wins. */\n\tpriority?: number;\n\t/** Set false to opt out of the queue (e.g. when another system gates display). */\n\tqueue?: boolean;\n}\n\nconst DialogModal = ({\n\tisOpen,\n\tonConfirm,\n\tonClose,\n\tfadeIn = true,\n\tshowBackdrop = true,\n\tdismissOnBackdropClick = true,\n\tdismissOnEscape = true,\n\tqueueId,\n\tpriority,\n\tqueue = true,\n\tclassName,\n\t...props\n}: DialogModalProps) => {\n\tconst getRoot = useRoot();\n\tconst isMounted = useIsMounted();\n\n\tconst generatedId = useRef<string>();\n\tif (!generatedId.current) {\n\t\tgeneratedId.current = `dialog-${Math.random().toString(36).slice(2, 11)}`;\n\t}\n\tconst id = queueId ?? generatedId.current;\n\n\tconst isActive = useDialogSlot({ id, priority, open: isOpen && queue });\n\n\t// The dialog is visible when it's open and either opted out of the queue or\n\t// granted the active slot.\n\tconst isVisible = isOpen && (!queue || isActive);\n\n\tuseEffect(() => {\n\t\tconst handleEscape = (event: KeyboardEvent) => {\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tif (dismissOnEscape) {\n\t\t\tif (isVisible) {\n\t\t\t\tdocument.addEventListener(\"keydown\", handleEscape);\n\t\t\t} else {\n\t\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\t}\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (dismissOnEscape) {\n\t\t\t\tdocument.removeEventListener(\"keydown\", handleEscape);\n\t\t\t}\n\t\t};\n\t}, [dismissOnEscape, onClose, isVisible]);\n\n\tif (!isVisible || !isMounted) {\n\t\treturn null;\n\t}\n\n\tconst root = getRoot();\n\n\tif (!root) {\n\t\tlogger.error(\"Root element not found\");\n\t\treturn null;\n\t}\n\n\tconst contextValue: IDialogContext = {\n\t\tisOpen,\n\t\tonConfirm,\n\t\tonClose\n\t};\n\n\treturn createPortal(\n\t\t<DialogBackdrop\n\t\t\tclassName={fadeIn ? \"animate-fade-in\" : undefined}\n\t\t\tisVisible={showBackdrop}\n\t\t\tonClick={dismissOnBackdropClick ? onClose : undefined}\n\t\t>\n\t\t\t<DialogContext.Provider value={contextValue}>\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-dialog m-auto w-full p-8 rounded-lg bg-white text-widget-foreground shadow-lg max-w-xl relative\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t/>\n\t\t\t</DialogContext.Provider>\n\t\t</DialogBackdrop>,\n\t\troot\n\t);\n};\n\nexport default DialogModal;\n","import { useContext } from \"preact/hooks\";\nimport { ROOT_ELEMENT_ID } from \"../../constants\";\nimport { RootContext } from \"../../context/root-context\";\n\nconst useRoot = () => {\n\tconst context = useContext(RootContext);\n\tif (!context) {\n\t\tthrow new Error(\"useRoot must be used within a RootProvider\");\n\t}\n\treturn () => {\n\t\tconst rootElement = context.current;\n\t\tif (!rootElement) {\n\t\t\treturn document.getElementById(ROOT_ELEMENT_ID);\n\t\t}\n\t\treturn rootElement;\n\t};\n};\n\nexport default useRoot;\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst DialogTitle = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLHeadingElement>) => {\n\treturn (\n\t\t<h2\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__title text-2xl font-medium leading-tight\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogTitle;\n","import { cn } from \"../../../lib/utils/helpers\";\n\nconst DialogSubtitle = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLParagraphElement>) => {\n\treturn (\n\t\t<p\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-dialog__subtitle text-neutral-3 py-2.5 leading-tight whitespace-pre-wrap\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogSubtitle;\n","import { useContext } from \"preact/hooks\";\nimport { DialogContext } from \"../../../lib/context/dialog-context\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport RejectButton, { RejectButtonProps } from \"../../ui/reject-button\";\n\ntype DialogExitProps = RejectButtonProps;\n\nconst DialogExit = ({ className, onClick, ...props }: DialogExitProps) => {\n\tconst ctx = useContext(DialogContext);\n\n\treturn (\n\t\t<RejectButton\n\t\t\tonClick={e => {\n\t\t\t\tonClick?.(e);\n\t\t\t\tif (!e.defaultPrevented) ctx?.onClose();\n\t\t\t}}\n\t\t\tclassName={cn(\"absolute right-4 top-4\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default DialogExit;\n","import { useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { DIALOG_PRIORITY } from \"../../lib/context/dialog-queue-context\";\nimport useDialog from \"../../lib/hooks/common/use-dialog\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport navigation from \"../../lib/utils/navigation\";\nimport {\n\tDecisionState,\n\tgetReturnDecisionState\n} from \"../../lib/utils/return-decision\";\nimport storage, {\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY\n} from \"../../lib/utils/storage\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport Dialog from \"./common\";\n\nconst ReturnDecisionDialog = () => {\n\tconst {\n\t\tconfig: { isFirstLoad }\n\t} = useWidgetContext();\n\t// Detected synchronously so the dialog registers its queue slot on the first\n\t// render — letting the queue order it ahead of lower-priority dialogs.\n\tconst [decisionState] = useState<DecisionState | null>(() =>\n\t\tgetReturnDecisionState(isFirstLoad)\n\t);\n\n\tif (!decisionState) {\n\t\treturn null;\n\t}\n\n\treturn <DecisionDialog decisionState={decisionState} />;\n};\n\nfunction DecisionDialog({ decisionState }: { decisionState: DecisionState }) {\n\tconst t = useTranslations(`dialog.return_decision.${decisionState}`);\n\tconst { widgetViewState } = useWidgetContext();\n\n\t// The cookie expiry is consumed once the user acts on the dialog. Deferring\n\t// it to here (instead of detection) keeps getReturnDecisionState stable for\n\t// other mount-time features that check it.\n\tfunction consumeCookieExpiry() {\n\t\tif (decisionState === \"cookie_detection\") {\n\t\t\tstorage.remove(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY);\n\t\t}\n\t}\n\n\tconst modal = useDialog({\n\t\tinitialOpen: true,\n\t\tonConfirm: state => {\n\t\t\tstate.set(false);\n\t\t\tconsumeCookieExpiry();\n\t\t\tif (decisionState === \"cart_detection\") {\n\t\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t\t}\n\t\t},\n\t\tonClose: () => {\n\t\t\tconsumeCookieExpiry();\n\t\t\tnavigation.exit();\n\t\t}\n\t});\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center\"\n\t\t\t{...modal.register()}\n\t\t\tpriority={DIALOG_PRIORITY.decision}\n\t\t>\n\t\t\t<ReturnAvatarStack />\n\t\t\t<Dialog.Title>{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept>{t(\"confirm\")}</Dialog.Accept>\n\t\t\t<Dialog.Reject>{t(\"reject\")}</Dialog.Reject>\n\t\t</Dialog.Modal>\n\t);\n}\n\nexport default ReturnDecisionDialog;\n","import { createContext } from \"preact\";\n\nexport interface TutorialStep {\n\t/** Unique id within the tutorial. Components key off this to render step-specific elements. */\n\tid: string;\n}\n\n/** \"once\" — persisted; never shows again after first completion.\n * \"first-load\" — shows only when a new session starts (searchParams present); not persisted. */\nexport type TutorialShowMode = \"once\" | \"first-load\";\n\nexport interface TutorialOptions {\n\t/** Start automatically when the widget loads. */\n\tautoStart?: boolean;\n\tshowMode?: TutorialShowMode;\n}\n\nexport interface Tutorial {\n\tid: string;\n\tsteps: TutorialStep[];\n\toptions?: TutorialOptions;\n}\n\nexport type TutorialState =\n\t| { status: \"inactive\" }\n\t| { status: \"active\"; tutorial: Tutorial; stepIndex: number };\n\nexport interface ITutorialContext {\n\tstate: TutorialState;\n\t/** The currently active tutorial, or null when none is running. */\n\tactiveTutorial: Tutorial | null;\n\t/** The currently active step, or null when no tutorial is running. */\n\tcurrentStep: TutorialStep | null;\n\tisActive: boolean;\n\t/** Start a tutorial. Replaces any tutorial already running, since only one runs at a time. */\n\tstart: (tutorial: Tutorial) => void;\n\tstop: () => void;\n\t/** Advance to the next step. Stops the tutorial when called on the last step. */\n\tnext: () => void;\n\tprevious: () => void;\n\tgoToStep: (stepId: string) => void;\n\t/** Whether the given step id is the currently active step. */\n\tisStepActive: (stepId: string) => boolean;\n\t/** Whether a tutorial with showMode=\"once\" has already been completed/dismissed. */\n\thasSeenTutorial: (tutorialId: string) => boolean;\n}\n\nexport const TutorialContext = createContext<ITutorialContext | null>(null);\n","import { useContext } from \"preact/hooks\";\nimport { TutorialContext } from \"../../context/tutorial-context\";\n\nconst useTutorial = () => {\n\tconst context = useContext(TutorialContext);\n\tif (!context) {\n\t\tthrow new Error(\"useTutorial must be used within a TutorialProvider\");\n\t}\n\treturn context;\n};\n\nexport default useTutorial;\n","import { Tutorial } from \"./context/tutorial-context\";\n\nexport enum TutorialId {\n\tIntro = \"intro\"\n}\n\n// Step ids are namespaced by tutorial so components can match them unambiguously.\nexport enum IntroTutorialStep {\n\tWelcome = \"intro:welcome\"\n}\n\n// Central registry of every tutorial. `start(tutorials[TutorialId.X])` runs one,\n// and the autostart hook scans this for tutorials flagged `autoStart`.\nexport const TUTORIALS = {\n\t[TutorialId.Intro]: {\n\t\tid: TutorialId.Intro,\n\t\tsteps: [{ id: IntroTutorialStep.Welcome }],\n\t\toptions: { autoStart: true, showMode: \"first-load\" }\n\t}\n} as const satisfies Record<TutorialId, Tutorial>;\n","import { useId } from \"preact/hooks\";\n\nconst COLORS = {\n\tstroke: \"#000000\",\n\tgradientStart: \"#ffffff\",\n\tgradientEnd: \"#6e6e6e\",\n\tlid: \"#7a7a7a\",\n\tpaper: \"#efefef\",\n\ttag: \"#919191\",\n\tsparkle: \"#f8faff\"\n} as const;\n\nconst TutorialIntroAnimation = () => {\n\tconst uid = useId();\n\n\treturn (\n\t\t<div className=\"size-48 relative overflow-hidden\">\n\t\t\t<svg\n\t\t\t\tclassName=\"size-60 absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\"\n\t\t\t\tfill=\"none\"\n\t\t\t\theight=\"100%\"\n\t\t\t\twidth=\"100%\"\n\t\t\t\tviewBox=\"0 0 810 810\"\n\t\t\t>\n\t\t\t\t<defs>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i0`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={112.771}\n\t\t\t\t\t\ty2={0.882}\n\t\t\t\t\t\tx1={-113.083}\n\t\t\t\t\t\ty1={0.882}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i1`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={-30.286}\n\t\t\t\t\t\ty2={172.522}\n\t\t\t\t\t\tx1={73.352}\n\t\t\t\t\t\ty1={-242.242}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i2`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={163.96}\n\t\t\t\t\t\ty2={0.808}\n\t\t\t\t\t\tx1={-164.788}\n\t\t\t\t\t\ty1={0.808}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i3`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={163.96}\n\t\t\t\t\t\ty2={0.846}\n\t\t\t\t\t\tx1={-164.788}\n\t\t\t\t\t\ty1={0.846}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<linearGradient\n\t\t\t\t\t\tid={`${uid}i4`}\n\t\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tspreadMethod=\"pad\"\n\t\t\t\t\t\tx2={148.903}\n\t\t\t\t\t\ty2={0.242}\n\t\t\t\t\t\tx1={-149.633}\n\t\t\t\t\t\ty1={0.242}\n\t\t\t\t\t>\n\t\t\t\t\t\t<stop offset=\"0%\" stopColor={COLORS.gradientStart} />\n\t\t\t\t\t\t<stop offset=\"100%\" stopColor={COLORS.gradientEnd} />\n\t\t\t\t\t</linearGradient>\n\t\t\t\t\t<filter id={`${uid}i5`}>\n\t\t\t\t\t\t<feColorMatrix\n\t\t\t\t\t\t\tvalues=\"0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0\"\n\t\t\t\t\t\t\ttype=\"matrix\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</filter>\n\t\t\t\t\t<mask\n\t\t\t\t\t\theight={20000}\n\t\t\t\t\t\twidth={20000}\n\t\t\t\t\t\ty={-10000}\n\t\t\t\t\t\tx={-10000}\n\t\t\t\t\t\tmaskContentUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tmaskUnits=\"userSpaceOnUse\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tmaskType: \"alpha\"\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tmask-type=\"alpha\"\n\t\t\t\t\t\tid={`${uid}i6`}\n\t\t\t\t\t>\n\t\t\t\t\t\t<g filter={`url(#${uid}i5)`} transform=\"matrix(1,0,0,1,405,405)\">\n\t\t\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\t\tfill={COLORS.lid}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-488.406,113.16,-488.406,113.16C-488.406,113.16,-178.655,203.91,-178.655,203.91C-178.655,203.91,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-505.339,117.399,-505.339,117.399C-505.339,117.399,-195.589,208.149,-195.589,208.149C-195.589,208.149,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-519.368,121.577,-519.368,121.577C-519.368,121.577,-209.618,212.327,-209.618,212.327C-209.618,212.327,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-531.612,125.377,-531.612,125.377C-531.612,125.377,-221.862,216.127,-221.862,216.127C-221.862,216.127,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-541.474,127.887,-541.474,127.887C-541.474,127.887,-231.724,218.636,-231.724,218.636C-231.724,218.636,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-548.98,130.174,-548.98,130.174C-548.98,130.174,-239.23,220.924,-239.23,220.924C-239.23,220.924,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.37 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.7 0.57; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</mask>\n\t\t\t\t</defs>\n\t\t\t\t<g\n\t\t\t\t\ttransform=\"matrix(1,0,0,1,413.184,613.4)\"\n\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\tid={`${uid}i8`}\n\t\t\t\t>\n\t\t\t\t\t<animate\n\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\tkeyTimes=\"0; 0.113016; 1\"\n\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t/>\n\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z\"\n\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\tfill={COLORS.paper}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-246.423,15.619,-246.423,15.619C-227.684,20.1,-197.695,11.261,-165.524,2.036C-165.524,2.036,-48.911,-35.181,17.802,-53.839C45.189,-61.499,48.816,-67.775,44.385,-69.667C42.402,-70.514,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-89.423,63.119,-89.423,63.119C-57.331,72.617,-23.195,72.761,8.976,63.536C8.976,63.536,114.589,32.319,181.302,13.661C208.689,6.001,236.316,-13.4,165.135,-34.042C127.936,-44.83,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z; M-252.224,14.141C-252.224,14.141,-89.423,63.119,-89.423,63.119C-57.331,72.617,-23.195,72.761,8.976,63.536C8.976,63.536,114.589,32.319,181.302,13.661C208.689,6.001,236.316,-13.4,165.135,-34.042C127.936,-44.83,42.43,-70.35,42.43,-70.35C42.43,-70.35,-252.224,14.141,-252.224,14.141Z\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.15493; 0.394366; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.373 0.173 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g mask={`url(#${uid}i6)`} id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,-42.983,0)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i0)`}\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\td=\"M112.927,-220.427C112.927,-220.427,101,-225.479,88.066,-229.22C69.689,-234.535,49.358,-235.059,27.776,-228.87C-68.354,-201.305,-112.927,-86.452,-112.927,-17.202C-112.927,33.185,-112.927,206.445,-112.927,206.445C-112.927,206.445,-113.313,284.279,-113.313,284.279C-113.313,284.279,-96.148,289.359,-96.148,289.359C-96.148,289.359,112.927,-220.427,112.927,-220.427Z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,8.583,3.123)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i1)`}\n\t\t\t\t\t\t\t\t\td=\"M146.941,201.744C146.941,201.744,-147.713,286.236,-147.713,286.236C-147.713,286.236,-147.327,36.308,-147.327,-14.079C-147.327,-83.329,-102.754,-198.182,-6.624,-225.747C80.558,-250.746,147.327,-166.206,147.327,-98.79C147.327,-48.348,146.941,201.744,146.941,201.744Z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g transform=\"matrix(1,0,0,1,405,405)\" id={`${uid}i12`}>\n\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25\"\n\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25; M-49,166.75C-49,166.75,-157.75,197,-157.75,197C-157.75,197,-175.25,192.25,-175.25,192.25; M-28.875,161C-28.875,161,-178.203,203.63,-178.203,203.63C-178.203,203.63,-196.578,198.505,-196.578,198.505; M-10.125,155.5C-10.125,155.5,-194.967,207.964,-194.967,207.964C-194.967,207.964,-213.209,202.896,-213.209,202.896; M7.375,150.5C7.375,150.5,-210.123,212.559,-210.123,212.559C-210.123,212.559,-228.23,207.548,-228.23,207.548; M21.625,146.5C21.625,146.5,-222.271,215.497,-222.271,215.497C-222.271,215.497,-240.241,210.545,-240.241,210.545; M34.875,143C34.875,143,-231.786,218.271,-231.786,218.271C-231.786,218.271,-249.615,213.38,-249.615,213.38; M45.125,139.5C45.125,139.5,-239.306,220.32,-239.306,220.32C-239.306,220.32,-256.987,215.492,-256.987,215.492; M50.625,138C50.625,138,-244,222.25,-244,222.25C-244,222.25,-261.5,217.5,-261.5,217.5; M50.625,138C50.625,138,-244,222.25,-244,222.25C-244,222.25,-261.5,217.5,-261.5,217.5\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.39 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.72 0.6; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.493069; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`}>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i2)`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z; M109.626,-37.312C109.626,-37.312,109.626,-44.592,109.626,-44.592C109.626,-44.592,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,141.921,-27.85,141.921,-27.85C141.921,-27.85,109.626,-37.312,109.626,-37.312Z; M-171.874,44.188C-171.874,44.188,-171.874,36.908,-171.874,36.908C-171.874,36.908,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-139.579,53.65,-139.579,53.65C-139.579,53.65,-171.874,44.188,-171.874,44.188Z; M-160.124,40.688C-160.124,40.688,-160.124,33.408,-160.124,33.408C-160.124,33.408,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-127.829,50.15,-127.829,50.15C-127.829,50.15,-160.124,40.688,-160.124,40.688Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,132.079,-50.9,132.079,-50.9C132.079,-50.9,164.374,-41.438,164.374,-41.438C164.374,-41.438,164.374,-34.158,164.374,-34.158C164.374,-34.158,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 0.84507; 0.915493; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.274 0.17 1; 0.226 0 0.481 1; 0.167 0 0.571 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,1.091)\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683; M164.374,-42.529C164.374,-42.529,141.921,-36.221,141.921,-36.221C141.921,-36.221,109.626,-45.683,109.626,-45.683; M164.374,-42.529C164.374,-42.529,-139.579,45.279,-139.579,45.279C-139.579,45.279,-171.874,35.817,-171.874,35.817; M164.374,-42.529C164.374,-42.529,-127.829,41.779,-127.829,41.779C-127.829,41.779,-160.124,32.317,-160.124,32.317; M164.374,-42.529C164.374,-42.529,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M164.374,-42.529C164.374,-42.529,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 0.84507; 0.915493; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.274 0.17 1; 0.226 0 0.481 1; 0.167 0 0.833 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i14`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.577081; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(102.339,-76.301)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"102.339 -76.301; 102.339 -76.301; 102.339 -47.801; 102.339 -47.801\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.619718; 0.690141; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i15`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.662093; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(41.72,-51.66)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"41.72 -51.66; 41.72 -51.66; 41.72 -30.16; 41.72 -30.16\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.704225; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i13`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,122.074)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 122.074; 25.723 122.074; 25.723 24.074; 25.723 24.074\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.226 0.095 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i16`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.704099; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-19.063,-36.403)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-19.063 -36.403; -19.063 -36.403; -19.063 -13.403; -19.063 -13.403\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.746479; 0.816902; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.648091; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`}>\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i3)`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,-140.421,27.6,-140.421,27.6C-140.421,27.6,-108.126,37.062,-108.126,37.062C-108.126,37.062,-108.126,44.342,-108.126,44.342C-108.126,44.342,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-164.374,41.438C-164.374,41.438,-164.374,34.158,-164.374,34.158C-164.374,34.158,139.329,-52.65,139.329,-52.65C139.329,-52.65,171.624,-43.188,171.624,-43.188C171.624,-43.188,171.624,-35.908,171.624,-35.908C171.624,-35.908,-132.079,50.9,-132.079,50.9C-132.079,50.9,-164.374,41.438,-164.374,41.438Z; M-166.499,42.313C-166.499,42.313,-166.499,35.033,-166.499,35.033C-166.499,35.033,129.954,-50.025,129.954,-50.025C129.954,-50.025,162.249,-40.563,162.249,-40.563C162.249,-40.563,162.249,-33.283,162.249,-33.283C162.249,-33.283,-134.204,51.775,-134.204,51.775C-134.204,51.775,-166.499,42.313,-166.499,42.313Z; M-166.499,42.313C-166.499,42.313,-166.499,35.033,-166.499,35.033C-166.499,35.033,129.954,-50.025,129.954,-50.025C129.954,-50.025,162.249,-40.563,162.249,-40.563C162.249,-40.563,162.249,-33.283,162.249,-33.283C162.249,-33.283,-134.204,51.775,-134.204,51.775C-134.204,51.775,-166.499,42.313,-166.499,42.313Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.859155; 0.929577; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.23 0.27 0.17 1; 0.17 0 0.7 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,1.091)\">\n\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\td=\"M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067\"\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M-108.126,35.971C-108.126,35.971,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M171.624,-44.279C171.624,-44.279,-132.079,42.529,-132.079,42.529C-132.079,42.529,-164.374,33.067,-164.374,33.067; M162.249,-41.654C162.249,-41.654,-134.204,43.404,-134.204,43.404C-134.204,43.404,-166.499,33.942,-166.499,33.942; M162.249,-41.654C162.249,-41.654,-134.204,43.404,-134.204,43.404C-134.204,43.404,-166.499,33.942,-166.499,33.942\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.859155; 0.929577; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.23 0.27 0.17 1; 0.17 0 0.7 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i18`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.746105; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-43.282,-29.111)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-43.282 -29.111; -43.282 -29.111; -43.282 -5.111; -43.282 -5.111\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.788733; 0.859155; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i10`}>\n\t\t\t\t\t<g transform=\"translate(299.704,796.941)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"299.704 822.182; 299.704 377.182; 299.704 400.182; 299.704 394.182; 299.704 394.182\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.267606; 0.408451; 0.535211; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0.546 0.118 0.791 0.971; 0.167 0 0.791 0.709; 0.167 0 0.792 0; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i17`}>\n\t\t\t\t\t\t\t\t<g transform=\"translate(25.723,-21.965)\">\n\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"25.723 -21.965; 25.723 -21.965; 25.723 -44.965; 25.723 -44.965\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.690141; 0.816901; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.27 0.94 0.6 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t<g visibility=\"hidden\" id={`${uid}i19`}>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.718101; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<g transform=\"translate(-104.065,-23.354)\">\n\t\t\t\t\t\t\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"-104.065 -23.354; -104.065 -23.354; -104.065 11.646; -104.065 11.646\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.760563; 0.830986; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0 0 1 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<g id={`${uid}i9`}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.sparkle}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\td=\"M-32.701,-9.394C-32.701,-9.394,-32.701,14.772,-32.701,14.772C-32.701,14.772,-10.01,21.477,-10.01,21.477C-10.01,21.477,32.701,9.394,32.701,9.394C32.701,9.394,32.701,-14.772,32.701,-14.772C32.701,-14.772,10.01,-21.477,10.01,-21.477C10.01,-21.477,-32.701,-9.394,-32.701,-9.394Z\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,0,0)\"\n\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\tid={`${uid}i21`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.310044; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g id={`${uid}i22`} transform=\"matrix(1,0,0,1,3.805,7.012)\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z\"\n\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\tfill={`url(#${uid}i4)`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.265,-28.473,-149.265,-28.473C-149.265,-28.473,-113.948,-18.037,-113.948,-18.037C-103.234,-14.871,-91.84,-14.815,-81.096,-17.878C-81.096,-17.878,149.272,-83.552,149.272,-83.552C149.272,-83.552,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.268,88.027,-149.268,88.027C-149.268,88.027,-113.951,98.464,-113.951,98.464C-103.237,101.63,-91.843,101.685,-81.099,98.622C-81.099,98.622,149.268,32.948,149.268,32.948C149.268,32.948,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z; M-149.268,-31.824C-149.268,-31.824,-149.268,88.027,-149.268,88.027C-149.268,88.027,-113.951,98.464,-113.951,98.464C-103.237,101.63,-91.843,101.685,-81.099,98.622C-81.099,98.622,149.268,32.948,149.268,32.948C149.268,32.948,149.268,-85.595,149.268,-85.595C149.268,-85.595,97.548,-100.879,97.548,-100.879C97.548,-100.879,-149.268,-31.824,-149.268,-31.824Z\"\n\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g visibility=\"hidden\" id={`${uid}i20`}>\n\t\t\t\t\t<animate\n\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\tkeyTimes=\"0; 0.169024; 1\"\n\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t/>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,0,-59.118)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z\"\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\tfill={COLORS.paper}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z; M-67.296,5.763C-67.296,5.763,27.821,-21.455,27.821,-21.455C27.821,-21.455,73.048,-8.534,73.048,-8.534C73.048,-8.534,73.048,3.655,73.048,3.655C73.048,3.655,-12.677,27.874,-12.677,27.874C-20.264,30.025,-28.304,29.981,-35.866,27.745C-35.866,27.745,-67.298,18.902,-67.298,18.902C-67.298,18.902,-67.296,5.77,-67.296,5.77C-67.296,5.77,-67.296,5.763,-67.296,5.763Z; M-159.546,20.263C-159.546,20.263,91.321,-51.205,91.321,-51.205C91.321,-51.205,159.548,-31.034,159.548,-31.034C159.548,-31.034,159.548,-18.845,159.548,-18.845C159.548,-18.845,-81.927,49.624,-81.927,49.624C-89.514,51.775,-97.554,51.731,-105.116,49.495C-105.116,49.495,-159.548,33.402,-159.548,33.402C-159.548,33.402,-159.546,20.27,-159.546,20.27C-159.546,20.27,-159.546,20.263,-159.546,20.263Z; M-159.546,20.263C-159.546,20.263,91.321,-51.205,91.321,-51.205C91.321,-51.205,159.548,-31.034,159.548,-31.034C159.548,-31.034,159.548,-18.845,159.548,-18.845C159.548,-18.845,-81.927,49.624,-81.927,49.624C-89.514,51.775,-97.554,51.731,-105.116,49.495C-105.116,49.495,-159.548,33.402,-159.548,33.402C-159.548,33.402,-159.546,20.27,-159.546,20.27C-159.546,20.27,-159.546,20.263,-159.546,20.263Z\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.408451; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.05 0.42 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,0,-55.127)\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722\"\n\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722; M73.048,-12.525C73.048,-12.525,-12.677,11.694,-12.677,11.694C-20.264,13.845,-28.304,13.8,-35.866,11.564C-35.866,11.564,-67.298,2.722,-67.298,2.722; M159.548,-35.025C159.548,-35.025,-81.927,33.444,-81.927,33.444C-89.514,35.595,-97.554,35.55,-105.116,33.314C-105.116,33.314,-159.548,17.222,-159.548,17.222; M159.548,-35.025C159.548,-35.025,-81.927,33.444,-81.927,33.444C-89.514,35.595,-97.554,35.55,-105.116,33.314C-105.116,33.314,-159.548,17.222,-159.548,17.222\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.408451; 1\"\n\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.05 0.42 0.17 1; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g transform=\"matrix(1,0,0,1,55.418,-104.524)\" id={`${uid}i23`}>\n\t\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,0,0)\"\n\t\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\t\tid={`${uid}i24`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.563079; 1\"\n\t\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<g id={`${uid}i25`} transform=\"matrix(1,0,0,1,0,-1.577)\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z\"\n\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t\tfill={COLORS.tag}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z; M-15.978,19C-15.978,19,5.866,12.95,5.866,12.95C5.866,12.95,17.028,-3.762,17.028,-3.762C17.028,-3.762,13.353,-7.25,13.353,-7.25C13.353,-7.25,-8.491,-1.2,-8.491,-1.2C-8.491,-1.2,-19.653,15.512,-19.653,15.512C-19.653,15.512,-15.978,19,-15.978,19Z; M-32.228,28.25C-32.228,28.25,12.116,15.95,12.116,15.95C12.116,15.95,35.903,-24.762,35.903,-24.762C35.903,-24.762,32.228,-28.25,32.228,-28.25C32.228,-28.25,-12.116,-15.95,-12.116,-15.95C-12.116,-15.95,-35.903,24.762,-35.903,24.762C-35.903,24.762,-32.228,28.25,-32.228,28.25Z; M-32.228,28.25C-32.228,28.25,12.116,15.95,12.116,15.95C12.116,15.95,35.903,-24.762,35.903,-24.762C35.903,-24.762,32.228,-28.25,32.228,-28.25C32.228,-28.25,-12.116,-15.95,-12.116,-15.95C-12.116,-15.95,-35.903,24.762,-35.903,24.762C-35.903,24.762,-32.228,28.25,-32.228,28.25Z\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t\t<g id={`${uid}i11`} transform=\"matrix(1,0,0,1,1.838,0.166)\">\n\t\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\t\td=\"M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506\"\n\t\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\t\tvalues=\"M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506; M-17.815,17.256C-17.815,17.256,-6.653,0.544,-6.653,0.544C-6.653,0.544,15.19,-5.506,15.19,-5.506; M-34.065,26.506C-34.065,26.506,-10.278,-14.206,-10.278,-14.206C-10.278,-14.206,34.065,-26.506,34.065,-26.506; M-34.065,26.506C-34.065,26.506,-10.278,-14.206,-10.278,-14.206C-10.278,-14.206,34.065,-26.506,34.065,-26.506\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.605634; 0.774648; 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g id={`${uid}i20`}>\n\t\t\t\t\t<g transform=\"translate(371.466,643.81)\">\n\t\t\t\t\t\t<animateTransform\n\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\ttype=\"translate\"\n\t\t\t\t\t\t\tattributeName=\"transform\"\n\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\tvalues=\"371.466 643.81; 371.466 643.81; 425.466 655.31; 425.466 539.31; 425.466 539.31\"\n\t\t\t\t\t\t\tkeyTimes=\"0; 0.211268; 0.352113; 0.676056; 1\"\n\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.046 0.418 0.173 1; 0.538 0 0.076 1; 0 0 1 1\"\n\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<g transform=\"scale(1,1) translate(0,0)\">\n\t\t\t\t\t\t\t<g\n\t\t\t\t\t\t\t\ttransform=\"matrix(1,0,0,1,55.418,-104.524)\"\n\t\t\t\t\t\t\t\tvisibility=\"hidden\"\n\t\t\t\t\t\t\t\tid={`${uid}i23`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\tcalcMode=\"discrete\"\n\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\tvalues=\"hidden; visible; visible\"\n\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.493069; 1\"\n\t\t\t\t\t\t\t\t\tattributeName=\"visibility\"\n\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<g id={`${uid}i9`} transform=\"matrix(1,0,0,1,2.099,14.125)\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z\"\n\t\t\t\t\t\t\t\t\t\tstrokeMiterlimit={10}\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={1.5}\n\t\t\t\t\t\t\t\t\t\tstroke={COLORS.stroke}\n\t\t\t\t\t\t\t\t\t\tfill={COLORS.tag}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\t\t\t\tvalues=\"M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z; M8.027,3.673C8.027,3.673,-2.434,6.348,-2.434,6.348C-2.434,6.348,-8.118,8.529,-8.118,8.529C-8.118,8.529,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,8.027,3.673,8.027,3.673Z; M5.777,-15.702C5.777,-15.702,-4.684,-13.027,-4.684,-13.027C-4.684,-13.027,-9.993,-4.596,-9.993,-4.596C-9.993,-4.596,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,5.777,-15.702,5.777,-15.702Z; M5.777,-15.702C5.777,-15.702,-4.684,-13.027,-4.684,-13.027C-4.684,-13.027,-9.993,-4.596,-9.993,-4.596C-9.993,-4.596,-7.495,11.816,-7.495,11.816C-7.495,11.816,-0.937,15.702,-0.937,15.702C-0.937,15.702,9.993,12.423,9.993,12.423C9.993,12.423,5.777,-15.702,5.777,-15.702Z\"\n\t\t\t\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.535211; 0.647887; 1\"\n\t\t\t\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.087 0.263 0.261 0.751; 0 0 1 1\"\n\t\t\t\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</path>\n\t\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t\t</g>\n\t\t\t\t\t\t</g>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t\t<g display=\"none\" transform=\"matrix(1,0,0,1,405,405)\" id={`${uid}i26`}>\n\t\t\t\t\t<g id={`${uid}i7`}>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\tfill={COLORS.lid}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<animate\n\t\t\t\t\t\t\t\trepeatCount=\"1\"\n\t\t\t\t\t\t\t\tattributeName=\"d\"\n\t\t\t\t\t\t\t\tdur=\"2.367s\"\n\t\t\t\t\t\t\t\tbegin=\"0s\"\n\t\t\t\t\t\t\t\tcalcMode=\"spline\"\n\t\t\t\t\t\t\t\tvalues=\"M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-465.5,107,-465.5,107C-465.5,107,-155.75,197.75,-155.75,197.75C-155.75,197.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-488.406,113.16,-488.406,113.16C-488.406,113.16,-178.655,203.91,-178.655,203.91C-178.655,203.91,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-505.339,117.399,-505.339,117.399C-505.339,117.399,-195.589,208.149,-195.589,208.149C-195.589,208.149,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-519.368,121.577,-519.368,121.577C-519.368,121.577,-209.618,212.327,-209.618,212.327C-209.618,212.327,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-531.612,125.377,-531.612,125.377C-531.612,125.377,-221.862,216.127,-221.862,216.127C-221.862,216.127,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-541.474,127.887,-541.474,127.887C-541.474,127.887,-231.724,218.636,-231.724,218.636C-231.724,218.636,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-548.98,130.174,-548.98,130.174C-548.98,130.174,-239.23,220.924,-239.23,220.924C-239.23,220.924,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z; M-656,-680C-656,-680,-553.5,133,-553.5,133C-553.5,133,-243.75,223.75,-243.75,223.75C-243.75,223.75,140.5,113,140.5,113C140.5,113,636,-626,636,-626C636,-626,-656,-680,-656,-680Z\"\n\t\t\t\t\t\t\t\tkeyTimes=\"0; 0.042254; 0.056338; 0.070423; 0.084507; 0.098592; 0.112676; 0.126761; 0.140845; 1\"\n\t\t\t\t\t\t\t\tkeySplines=\"0 0 1 1; 0.37 0.22 0.833 0.833; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0 0 1 1; 0.167 0.167 0.7 0.57; 0 0 1 1\"\n\t\t\t\t\t\t\t\tfill=\"freeze\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</path>\n\t\t\t\t\t</g>\n\t\t\t\t</g>\n\t\t\t</svg>\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroAnimation;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { IntroTutorialStep } from \"../../../lib/tutorials\";\nimport Dialog from \"../../dialog/common\";\nimport TutorialIntroAnimation from \"./tutorial-intro-animation\";\n\n// Single-step intro tutorial: a dialog with one accept button that finishes it.\n// The shared backdrop is already shown while the tutorial is active, so this\n// dialog renders without its own backdrop to keep a single dimming layer.\n// Clicking anywhere outside the modal advances the tutorial via `next`.\nconst TutorialIntroDialog = () => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst { isStepActive, next } = useTutorial();\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center -translate-y-[calc(var(--rf-summary-height,0px)/2)]\"\n\t\t\tisOpen={isStepActive(IntroTutorialStep.Welcome)}\n\t\t\tonConfirm={next}\n\t\t\tonClose={next}\n\t\t\tshowBackdrop={false}\n\t\t\tdismissOnBackdropClick={true}\n\t\t\tqueue={false}\n\t\t>\n\t\t\t<Dialog.Exit />\n\t\t\t<TutorialIntroAnimation />\n\t\t\t<Dialog.Title className=\"text-3xl\">{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept icon={null}>{t(\"confirm\")}</Dialog.Accept>\n\t\t</Dialog.Modal>\n\t);\n};\n\nexport default TutorialIntroDialog;\n","import ReturnDecisionDialog from \"../dialog/return-decision-dialog\";\nimport TutorialIntroDialog from \"../tutorial/intro/tutorial-intro-dialog\";\n\nconst DialogHandler = () => {\n\treturn (\n\t\t<>\n\t\t\t<ReturnDecisionDialog />\n\t\t\t<TutorialIntroDialog />\n\t\t</>\n\t);\n};\n\nexport default DialogHandler;\n","import { createContext } from \"preact\";\nimport { ToastOptions, ToastQueue } from \"../../components/toast/toast\";\n\nexport interface ToastConfiguration extends Omit<ToastOptions, \"id\"> {\n\tid?: string; // Make id optional for easier usage\n}\n\nexport const DEFAULT_TOAST_DURATION = 5000; // Default duration in milliseconds\nexport const TOAST_ANIMATION_DURATION = 300; // Default animation duration in milliseconds\n\nexport interface IToastContext {\n\tqueue: ToastQueue[];\n\tadd: (options: ToastConfiguration) => string; // Returns the ID of the added toast\n\tremove: (id: string) => void;\n\tclear: () => void;\n}\n\nexport const ToastContext = createContext<IToastContext | null>(null);\n","import { useContext } from \"preact/hooks\";\nimport { ToastContext } from \"../../context/toast-context\";\n\nconst useToast = () => {\n\tconst context = useContext(ToastContext);\n\n\tif (!context) {\n\t\tthrow new Error(\"useToast must be used within a ToastProvider\");\n\t}\n\n\treturn context;\n};\n\nexport default useToast;\n","import { useEffect } from \"preact/hooks\";\nimport {\n\temitEvent,\n\tregisterBridge,\n\tunregisterBridge\n} from \"../../../../api/state-bridge\";\nimport { WidgetViewState } from \"../../types\";\nimport useReturnContext from \"../context/use-return-context\";\nimport useToast from \"../context/use-toast\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\n/**\n * Hook that registers the widget's React state with the API bridge.\n * This allows the public API to interact with the widget's internal state.\n */\nconst useApiBridge = () => {\n\tconst { widgetViewState, config } = useWidgetContext();\n\tconst returnContext = useReturnContext();\n\tconst toastContext = useToast();\n\n\t// Register the bridge on mount, unregister on unmount\n\tuseEffect(() => {\n\t\tregisterBridge({ widgetViewState, returnContext, toastContext, config });\n\n\t\treturn () => {\n\t\t\tunregisterBridge();\n\t\t};\n\t}, [widgetViewState, returnContext, toastContext, config]);\n\n\t// Emit drawer state change events\n\tuseEffect(() => {\n\t\tconst state = widgetViewState.value;\n\t\tif (state === WidgetViewState.Open) {\n\t\t\temitEvent(\"drawer:open\");\n\t\t} else {\n\t\t\temitEvent(\"drawer:close\");\n\t\t}\n\t}, [widgetViewState.value]);\n\n\t// Emit cart update events\n\tuseEffect(() => {\n\t\tconst cart = returnContext.cartState.value.data?.original;\n\t\tif (cart) {\n\t\t\temitEvent(\"cart:updated\", cart);\n\t\t}\n\t}, [returnContext.cartState.value.data]);\n\n\t// Emit calculation update events\n\tuseEffect(() => {\n\t\tconst calculation = returnContext.calculationState.value.data;\n\t\tif (calculation) {\n\t\t\temitEvent(\"calculation:updated\", calculation);\n\t\t}\n\t}, [returnContext.calculationState.value.data]);\n};\n\nexport default useApiBridge;\n","export enum ProductErrorState {\n\tUnknown = \"unknown_error\",\n\tNetworkError = \"network_error\",\n\tProductLimit = \"product_limit\"\n}\n\nconst PRODUCT_ERROR_CODE_TO_STATE = {\n\t422: ProductErrorState.ProductLimit\n} satisfies Partial<Record<number, ProductErrorState>>;\n\nexport function getErrorStateFromCode(code: number | null): ProductErrorState {\n\tif (code !== null && code in PRODUCT_ERROR_CODE_TO_STATE) {\n\t\treturn PRODUCT_ERROR_CODE_TO_STATE[\n\t\t\tcode as keyof typeof PRODUCT_ERROR_CODE_TO_STATE\n\t\t];\n\t}\n\treturn ProductErrorState.Unknown;\n}\n","import { TimeoutInterceptorHandler } from \".\";\nimport { CustomEventPayloadMap, InternalCustomEvent } from \"../custom-events\";\nimport { logger } from \"../logger\";\n\nexport type FetchInterceptionCallback = (\n\tpayload: CustomEventPayloadMap[InternalCustomEvent.FetchInterception]\n) => void;\n\nfunction resolveRequestUrl(args: unknown[]): string | URL | undefined {\n\tconst firstArg = args[0];\n\n\tif (typeof firstArg === \"string\" || firstArg instanceof URL) {\n\t\treturn firstArg;\n\t}\n\n\tif (firstArg instanceof Request) {\n\t\treturn firstArg.url;\n\t}\n\n\treturn undefined;\n}\n\nfunction createFetchInterceptor(\n\tcallback?: FetchInterceptionCallback\n): TimeoutInterceptorHandler {\n\tlogger.info(\"Initializing fetch interceptor\");\n\n\tconst originalFetch = window.fetch;\n\n\twindow.__rf_original_fetch ??= originalFetch;\n\twindow.fetch.rf_interception = true;\n\n\tconst proxy = new Proxy(originalFetch, {\n\t\tapply: async function (target, arg, argumentsList) {\n\t\t\tconst requestUrl = resolveRequestUrl(argumentsList);\n\n\t\t\t// Call the original fetch and get the response\n\t\t\tconst response = (await Reflect.apply(target, arg, argumentsList)) as\n\t\t\t\t| Response\n\t\t\t\t| undefined;\n\n\t\t\tif (!callback) {\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\tif (!requestUrl) {\n\t\t\t\tlogger.warn(\n\t\t\t\t\t\"Unable to resolve request URL from fetch arguments; skipping interception logic.\"\n\t\t\t\t);\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\t// Clone the response for our processing (so other scripts can still use the original)\n\t\t\tconst clonedResponse = response?.clone();\n\n\t\t\tcallback({\n\t\t\t\tresponse: clonedResponse,\n\t\t\t\trequestUrl\n\t\t\t});\n\n\t\t\treturn response;\n\t\t}\n\t});\n\n\twindow.fetch = proxy;\n\n\t// Return cleanup function\n\treturn (interval: ReturnType<typeof setInterval> | undefined) => {\n\t\tif (!window.__rf_original_fetch) return;\n\n\t\tlogger.info(\"Resetting fetch interceptor\");\n\t\twindow.fetch = window.__rf_original_fetch;\n\t\twindow.fetch.rf_interception = false;\n\n\t\tif (interval) {\n\t\t\tclearInterval(interval);\n\t\t}\n\t};\n}\n\nexport default createFetchInterceptor;\n","import { TimeoutInterceptorHandler } from \".\";\nimport {\n\tCustomEventPayloadMap,\n\tInterceptionPayload,\n\tInternalCustomEvent,\n\tXHRResponse\n} from \"../custom-events\";\nimport { logger } from \"../logger\";\n\nexport type XHRInterceptionCallback = (\n\tpayload: CustomEventPayloadMap[InternalCustomEvent.XHRInterception]\n) => void;\n\nfunction createXHRInterceptor(\n\tcallback?: XHRInterceptionCallback\n): TimeoutInterceptorHandler {\n\tlogger.info(\"Initializing XHR interceptor\");\n\n\tconst originalXHR = window.XMLHttpRequest;\n\twindow.__rf_original_xhr ??= originalXHR;\n\n\t// Create a proxy for the XMLHttpRequest constructor\n\tconst XHRProxy = new Proxy(originalXHR, {\n\t\tconstruct: function (target, argumentsList) {\n\t\t\t// Create the original XHR instance\n\t\t\tconst xhr = new target(\n\t\t\t\t...(argumentsList as ConstructorParameters<typeof XMLHttpRequest>)\n\t\t\t);\n\n\t\t\t// Store original methods\n\t\t\tconst originalOpen = xhr.open;\n\t\t\tconst originalSend = xhr.send;\n\n\t\t\t// Track request data\n\t\t\tlet requestUrl: string = \"\";\n\n\t\t\t// Intercept open method to capture URL and method\n\t\t\txhr.open = function (\n\t\t\t\tmethod: string,\n\t\t\t\turl: string,\n\t\t\t\tasync?: boolean,\n\t\t\t\tuser?: string,\n\t\t\t\tpassword?: string\n\t\t\t) {\n\t\t\t\trequestUrl = url;\n\t\t\t\treturn originalOpen.call(\n\t\t\t\t\tthis,\n\t\t\t\t\tmethod,\n\t\t\t\t\turl,\n\t\t\t\t\tasync ?? false,\n\t\t\t\t\tuser,\n\t\t\t\t\tpassword\n\t\t\t\t);\n\t\t\t};\n\n\t\t\t// Intercept send method to capture request body and set up response handling\n\t\t\txhr.send = function (body) {\n\t\t\t\t// Set up event listeners for response handling\n\t\t\t\tconst originalOnReadyStateChange = xhr.onreadystatechange;\n\n\t\t\t\txhr.onreadystatechange = function (event) {\n\t\t\t\t\t// Call original handler first\n\t\t\t\t\tif (originalOnReadyStateChange) {\n\t\t\t\t\t\toriginalOnReadyStateChange.call(this, event);\n\t\t\t\t\t}\n\n\t\t\t\t\t// If request is complete, trigger our callback\n\t\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcallback?.(resolveXHRPayload(xhr, requestUrl));\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tlogger.error(\"Error in XHR interception callback:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Also handle load event as backup\n\t\t\t\tconst originalOnLoad = xhr.onload;\n\n\t\t\t\txhr.onload = function (event) {\n\t\t\t\t\tif (originalOnLoad) {\n\t\t\t\t\t\toriginalOnLoad.call(this, event);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Trigger callback if onreadystatechange didn't fire\n\t\t\t\t\tif (xhr.readyState === XMLHttpRequest.DONE) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcallback?.(resolveXHRPayload(xhr, requestUrl));\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tlogger.error(\"Error in XHR interception callback:\", error);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\treturn originalSend.call(this, body);\n\t\t\t};\n\n\t\t\treturn xhr;\n\t\t}\n\t});\n\n\t// Mark as intercepted and replace global XMLHttpRequest\n\twindow.XMLHttpRequest.rf_interception = true;\n\twindow.XMLHttpRequest = XHRProxy;\n\n\t// Return cleanup function\n\treturn (interval?: ReturnType<typeof setInterval>) => {\n\t\tif (!window.__rf_original_xhr) return;\n\n\t\tlogger.info(\"Resetting XHR interceptor\");\n\t\twindow.XMLHttpRequest = window.__rf_original_xhr;\n\t\twindow.XMLHttpRequest.rf_interception = false;\n\n\t\tif (interval) {\n\t\t\tclearInterval(interval);\n\t\t}\n\t};\n}\n\nfunction resolveXHRPayload(\n\txhr: XMLHttpRequest,\n\turl: string\n): InterceptionPayload {\n\tlet response: XHRResponse;\n\n\tconst isTextResponse = xhr.responseType === \"text\";\n\tconst isJsonResponse =\n\t\txhr.responseType === \"json\" ||\n\t\txhr.getResponseHeader(\"Content-Type\")?.includes(\"application/json\");\n\n\tif (isTextResponse) {\n\t\ttry {\n\t\t\tresponse = JSON.parse(xhr.response);\n\t\t} catch (_) {\n\t\t\t// Ignore JSON parsing errors\n\t\t}\n\t} else if (isJsonResponse) {\n\t\tresponse = xhr.response;\n\t}\n\n\treturn {\n\t\tresponse,\n\t\trequestUrl: url\n\t};\n}\n\nexport default createXHRInterceptor;\n","import { InterceptionResponse } from \"../custom-events\";\nimport {\n\tAutoOpenTriggerEndpoint,\n\tNetworkInterceptionMethod\n} from \"../initialization/types\";\nimport { logger } from \"../logger\";\nimport createFetchInterceptor, { FetchInterceptionCallback } from \"./fetch\";\nimport createXHRInterceptor, { XHRInterceptionCallback } from \"./xhr\";\n\nconst ADD_ENDPOINTS = [\"/cart/add\", \"/cart/add.js\"] as const;\nconst UPDATE_ENDPOINTS = [\"/cart/update\", \"/cart/update.js\"] as const;\nconst CHANGE_ENDPOINTS = [\"/cart/change\", \"/cart/change.js\"] as const;\nconst CLEAR_ENDPOINTS = [\"/cart/clear\", \"/cart/clear.js\"] as const;\n\nconst ENDPOINTS = {\n\tadd: ADD_ENDPOINTS,\n\tupdate: UPDATE_ENDPOINTS,\n\tchange: CHANGE_ENDPOINTS\n} as const satisfies Record<AutoOpenTriggerEndpoint, readonly string[]>;\n\ntype Endpoints = (typeof ENDPOINTS)[keyof typeof ENDPOINTS];\n\nconst ENDPOINTS_TO_INTERCEPT = [\n\t...ADD_ENDPOINTS,\n\t...UPDATE_ENDPOINTS,\n\t...CHANGE_ENDPOINTS,\n\t...CLEAR_ENDPOINTS,\n\t\"/?section_id=cart-drawer\", // Shopify Dawn and other themes use this on item add\n\t\"/api/unstable/graphql.json?operation_name=cartQuery\" // Sometimes Cranks&Coffee calls this on item add\n];\n\ntype InterceptionCallback = FetchInterceptionCallback | XHRInterceptionCallback;\nexport type TimeoutInterceptorHandler = (\n\tinterval?: ReturnType<typeof setInterval> | undefined\n) => void;\n\ntype InitializeNetworkOptions = {\n\tmonitor?: boolean;\n\tmethod?: NetworkInterceptionMethod;\n};\n\nexport function initializeNetworkInterceptors(\n\tcallback: InterceptionCallback,\n\topts: InitializeNetworkOptions = {}\n) {\n\tconst { monitor = false, method } = opts;\n\n\tif (method === \"none\") {\n\t\tlogger.warn(\n\t\t\t\"Network interception method set to 'none'; skipping interceptor initialization.\"\n\t\t);\n\t\treturn () => {};\n\t}\n\n\tlet cleanupFetchHandler: TimeoutInterceptorHandler | undefined;\n\tlet cleanupXHRHandler: TimeoutInterceptorHandler | undefined;\n\n\tlet resolvedMethod: Exclude<NetworkInterceptionMethod, \"none\">;\n\n\tswitch (method) {\n\t\tcase \"fetch\": {\n\t\t\tresolvedMethod = \"fetch\";\n\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"xhr\": {\n\t\t\tresolvedMethod = \"xhr\";\n\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"both\":\n\t\tdefault: {\n\t\t\tresolvedMethod = \"both\";\n\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlogger.info(`Using network interception method: ${resolvedMethod}`);\n\n\tlet interval: ReturnType<typeof setInterval> | undefined;\n\n\tif (monitor) {\n\t\tlogger.info(\"Monitoring network interceptors\");\n\n\t\tinterval = setInterval(() => {\n\t\t\tif (cleanupFetchHandler && !window.fetch.rf_interception) {\n\t\t\t\tlogger.info(\"Re-initializing fetch interceptor\");\n\t\t\t\tcleanupFetchHandler(interval);\n\t\t\t\tcleanupFetchHandler = createFetchInterceptor(callback);\n\t\t\t}\n\t\t\tif (cleanupXHRHandler && !window.XMLHttpRequest.rf_interception) {\n\t\t\t\tlogger.info(\"Re-initializing XHR interceptor\");\n\t\t\t\tcleanupXHRHandler(interval);\n\t\t\t\tcleanupXHRHandler = createXHRInterceptor(callback);\n\t\t\t}\n\t\t}, 200);\n\t}\n\n\treturn () => {\n\t\tcleanupFetchHandler?.(interval);\n\t\tcleanupXHRHandler?.(interval);\n\t};\n}\n\nexport interface UrlValidationResult {\n\tisValid: boolean;\n\tisForbidden: boolean;\n\tisTriggerEndpoint: boolean;\n\ttriggerEndpointPaths: Endpoints;\n}\n\nexport function validateInterceptionRequestUrl(\n\trequestUrl: string | undefined | null,\n\ttriggerEndpoint?: AutoOpenTriggerEndpoint\n): UrlValidationResult {\n\tconst triggerEndpointValue = triggerEndpoint ?? \"add\";\n\tconst triggerEndpointPaths = ENDPOINTS[triggerEndpointValue];\n\n\t// Early return for invalid input\n\tif (!requestUrl || typeof requestUrl !== \"string\") {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\tisForbidden: false,\n\t\t\tisTriggerEndpoint: false,\n\t\t\ttriggerEndpointPaths\n\t\t};\n\t}\n\n\tconst BLOCKED_PATTERNS = [\"?_\", \"rf=true\"];\n\n\t// Check for forbidden patterns\n\tconst isForbidden = BLOCKED_PATTERNS.some(pattern =>\n\t\trequestUrl.includes(pattern)\n\t);\n\n\t// Check if URL matches any intercepted endpoints\n\tconst matchesInterceptedEndpoint = ENDPOINTS_TO_INTERCEPT.some(endpoint =>\n\t\trequestUrl.includes(endpoint)\n\t);\n\n\t// Check if it's an add endpoint (only if valid)\n\tconst isTriggerEndpoint = triggerEndpointPaths.some(endpoint =>\n\t\trequestUrl.includes(endpoint)\n\t);\n\n\tconst isValid = !isForbidden && matchesInterceptedEndpoint;\n\n\t// Early return if not valid\n\tif (!isValid) {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\tisForbidden,\n\t\t\tisTriggerEndpoint,\n\t\t\ttriggerEndpointPaths\n\t\t};\n\t}\n\n\treturn {\n\t\tisValid: true,\n\t\tisForbidden: false,\n\t\tisTriggerEndpoint,\n\t\ttriggerEndpointPaths\n\t};\n}\n\nexport async function parseInterceptionResponse(\n\tresponse: InterceptionResponse\n): Promise<Record<string, unknown> | undefined> {\n\tif (!response) return undefined;\n\n\tif (response instanceof Response) {\n\t\t// If it's a Response, we need to parse it\n\t\treturn (await response.json().catch(() => undefined)) as\n\t\t\t| Record<string, unknown>\n\t\t\t| undefined;\n\t} else if (typeof response === \"string\") {\n\t\t// If it's a string, attempt to parse as JSON (typically from XHR)\n\t\ttry {\n\t\t\treturn JSON.parse(response);\n\t\t} catch {\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\treturn response;\n}\n","import { createContext } from \"preact\";\nimport { UseArrayReturn } from \"../hooks/common/use-array\";\n\nexport type CustomError = {\n\tid: string;\n\tmessage: preact.ComponentChildren;\n\tblocking?: boolean; // Indicates if the error is blocking the flow\n};\n\nexport interface IErrorContext extends Omit<\n\tUseArrayReturn<CustomError>,\n\t\"array\"\n> {\n\terrors: UseArrayReturn<CustomError>[\"array\"];\n}\n\nexport const ErrorContext = createContext<IErrorContext>({} as IErrorContext);\n","import { useContext } from \"preact/hooks\";\nimport { ErrorContext } from \"../../context/error-context\";\n\nconst useErrors = () => {\n\tconst context = useContext(ErrorContext);\n\tif (!context) {\n\t\tthrow new Error(\"useErrors must be used within an ErrorProvider\");\n\t}\n\treturn context;\n};\n\nexport default useErrors;\n","import { useCallback, useMemo } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { ShopifyCart, ShopifyCartItem } from \"../../types\";\nimport {\n\tcompareCarts,\n\tgetCart,\n\tnormalizeCart,\n\tNormalizeCartResult,\n\tupdateCartStorage\n} from \"../../utils/cart\";\nimport { InterceptionResponse } from \"../../utils/custom-events\";\nimport { getErrorStateFromCode } from \"../../utils/errors\";\nimport { formatSelectedItems } from \"../../utils/helpers\";\nimport { parseInterceptionResponse } from \"../../utils/interceptor\";\nimport useErrors from \"../context/use-errors\";\nimport useReturnContext from \"../context/use-return-context\";\nimport useToast from \"../context/use-toast\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useCartActions = () => {\n\tconst t = useTranslations();\n\tconst { add: addToast } = useToast();\n\tconst { cartState, orderState, calculationState } = useReturnContext();\n\tconst {\n\t\tconfig: {\n\t\t\tdata: { formData }\n\t\t}\n\t} = useWidgetContext();\n\tconst errors = useErrors();\n\n\tconst lineItems = useMemo(() => formatSelectedItems(formData), [formData]);\n\n\tconst isNewItem = useCallback(\n\t\t(item: ShopifyCartItem, originalCart: ShopifyCart | null) => {\n\t\t\tconst existing = originalCart?.items.find(\n\t\t\t\te => e.variant_id === item.variant_id\n\t\t\t);\n\t\t\tif (!existing) return true;\n\t\t\treturn existing.quantity !== item.quantity;\n\t\t},\n\t\t[]\n\t);\n\n\tconst notifyExclusions = useCallback(\n\t\t(\n\t\t\tresult: NormalizeCartResult<ShopifyCart>,\n\t\t\toriginalCart: ShopifyCart | null\n\t\t) => {\n\t\t\tconst newExcludedItems = result.excludedItems.filter(item =>\n\t\t\t\tisNewItem(item, originalCart)\n\t\t\t);\n\t\t\tconst newBundleItems = result.bundleItems.filter(item =>\n\t\t\t\tisNewItem(item, originalCart)\n\t\t\t);\n\n\t\t\tif (newExcludedItems.length > 0) {\n\t\t\t\taddToast({\n\t\t\t\t\ttone: \"error\",\n\t\t\t\t\tmessage: t.rich(\"toast.product_exchange_error\", {\n\t\t\t\t\t\tproduct_name: newExcludedItems[0].title,\n\t\t\t\t\t\tb: chunks => (\n\t\t\t\t\t\t\t<span className=\"text-neutral-3 inline-block\">{chunks}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (newBundleItems.length > 0) {\n\t\t\t\taddToast({\n\t\t\t\t\ttone: \"error\",\n\t\t\t\t\tmessage: t.rich(\"toast.bundle_exchange_error\", {\n\t\t\t\t\t\tproduct_name: newBundleItems[0].title,\n\t\t\t\t\t\tb: chunks => (\n\t\t\t\t\t\t\t<span className=\"text-neutral-3 inline-block\">{chunks}</span>\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[isNewItem, t, addToast]\n\t);\n\n\t// --- Public API ---\n\n\tconst fetchAndUpdateCart = useCallback(async () => {\n\t\tconst order = orderState.value.data;\n\t\tif (!order) return null;\n\n\t\tconst originalCart = cartState.value.data?.original ?? null;\n\n\t\tlet freshCart: ShopifyCart;\n\t\ttry {\n\t\t\tfreshCart = await getCart(false);\n\t\t} catch (err) {\n\t\t\tcartState.set(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tpending: false,\n\t\t\t\terror: err as Error\n\t\t\t}));\n\t\t\treturn null;\n\t\t}\n\n\t\tconst productRules = order.orderData.productRules;\n\t\tconst result = normalizeCart(freshCart, productRules);\n\n\t\tnotifyExclusions(result, originalCart);\n\n\t\tconst hasChanged =\n\t\t\t!originalCart ||\n\t\t\t!compareCarts({\n\t\t\t\tcart1: originalCart,\n\t\t\t\tcart2: freshCart,\n\t\t\t\trules: productRules\n\t\t\t});\n\n\t\t// Always update state so the raw original cart stays in sync\n\t\t// (e.g. bundle items filtered by normalizeCart need to be in\n\t\t// originalCart for notifyExclusions to work on subsequent changes)\n\t\tcartState.set({\n\t\t\tdata: {\n\t\t\t\toriginal: freshCart,\n\t\t\t\ttransformed: result.cart\n\t\t\t},\n\t\t\tpending: false,\n\t\t\terror: null\n\t\t});\n\t\tupdateCartStorage(freshCart);\n\n\t\treturn {\n\t\t\torder,\n\t\t\toriginalCart,\n\t\t\tfreshCart,\n\t\t\ttransformedCart: result.cart,\n\t\t\tproductRules,\n\t\t\thasChanged\n\t\t};\n\t}, [orderState, cartState, notifyExclusions]);\n\n\tconst processCartUpdate = useCallback(\n\t\tasync (cart: ShopifyCart) => {\n\t\t\tconst order = orderState.value.data;\n\t\t\tif (!order) return null;\n\n\t\t\tconst originalCart = cartState.value.data?.original ?? null;\n\t\t\tconst productRules = order.orderData.productRules;\n\t\t\tconst result = normalizeCart(cart, productRules);\n\n\t\t\tnotifyExclusions(result, originalCart);\n\n\t\t\tcartState.set({\n\t\t\t\tdata: {\n\t\t\t\t\toriginal: cart,\n\t\t\t\t\ttransformed: result.cart\n\t\t\t\t},\n\t\t\t\tpending: false,\n\t\t\t\terror: null\n\t\t\t});\n\n\t\t\tupdateCartStorage(cart);\n\n\t\t\tawait calculationState.query({\n\t\t\t\tcart: result.cart,\n\t\t\t\torderId: order.orderData.id,\n\t\t\t\tlineItems\n\t\t\t});\n\n\t\t\treturn { transformedCart: result.cart, productRules };\n\t\t},\n\t\t[orderState, cartState, calculationState, lineItems, notifyExclusions]\n\t);\n\n\tconst handleResponseErrors = useCallback(\n\t\tasync (response: InterceptionResponse) => {\n\t\t\tconst responseBody = await parseInterceptionResponse(response);\n\n\t\t\tif (responseBody) {\n\t\t\t\tlet status: number | undefined;\n\n\t\t\t\tif (\"status\" in responseBody) {\n\t\t\t\t\tconst raw = responseBody.status;\n\t\t\t\t\tstatus = typeof raw === \"number\" ? raw : undefined;\n\t\t\t\t}\n\n\t\t\t\tif (status && !errors.has(status)) {\n\t\t\t\t\tconst errState = getErrorStateFromCode(status);\n\t\t\t\t\terrors.push({\n\t\t\t\t\t\tid: errState,\n\t\t\t\t\t\tmessage: t(`product.error.${errState}`)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[t, errors]\n\t);\n\n\tconst triggerCalculation = useCallback(\n\t\t(transformedCart: ShopifyCart, orderId: string) => {\n\t\t\tcalculationState.query({\n\t\t\t\tcart: transformedCart,\n\t\t\t\torderId,\n\t\t\t\tlineItems\n\t\t\t});\n\t\t},\n\t\t[calculationState, lineItems]\n\t);\n\n\treturn {\n\t\tfetchAndUpdateCart,\n\t\tprocessCartUpdate,\n\t\thandleResponseErrors,\n\t\ttriggerCalculation\n\t};\n};\n\nexport default useCartActions;\n","import { useCallback, useEffect, useState } from \"preact/hooks\";\nimport { ReturnViewState, WidgetViewState } from \"../../types\";\nimport customEvents, {\n\tCustomEventPayloadMap,\n\tInternalCustomEvent\n} from \"../../utils/custom-events\";\nimport {\n\tinitializeNetworkInterceptors,\n\tvalidateInterceptionRequestUrl\n} from \"../../utils/interceptor\";\nimport { logger } from \"../../utils/logger\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useCartActions from \"./use-cart-actions\";\n\nconst useFetchInterceptor = () => {\n\tconst {\n\t\twidgetViewState,\n\t\treturnViewState,\n\t\tconfig: {\n\t\t\toptions: {\n\t\t\t\tautoOpen,\n\t\t\t\tautoOpenTriggerEndpoint: triggerEndpoint,\n\t\t\t\tautoOpenTriggerMethod: triggerMethod,\n\t\t\t\tmonitorNetworkOverwrites,\n\t\t\t\tnetworkInterceptionMethod\n\t\t\t}\n\t\t}\n\t} = useWidgetContext();\n\n\tconst { fetchAndUpdateCart, handleResponseErrors, triggerCalculation } =\n\t\tuseCartActions();\n\n\tconst [initialized, setInitialized] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (networkInterceptionMethod !== \"none\") {\n\t\t\tlet resetInterceptor:\n\t\t\t\t| ReturnType<typeof initializeNetworkInterceptors>\n\t\t\t\t| undefined;\n\n\t\t\ttry {\n\t\t\t\t// Initialize the fetch interceptor only once\n\t\t\t\tresetInterceptor = initializeNetworkInterceptors(\n\t\t\t\t\tpayload =>\n\t\t\t\t\t\tcustomEvents.publish(\n\t\t\t\t\t\t\tInternalCustomEvent.FetchInterception,\n\t\t\t\t\t\t\tpayload\n\t\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tmonitor: monitorNetworkOverwrites,\n\t\t\t\t\t\tmethod: networkInterceptionMethod\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t\tsetInitialized(true);\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Error initializing fetch interceptor:\", error);\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tresetInterceptor?.();\n\t\t\t};\n\t\t}\n\t\tsetInitialized(false);\n\t}, [monitorNetworkOverwrites, networkInterceptionMethod]);\n\n\ttype FetchInterceptionEvent = CustomEvent<\n\t\tCustomEventPayloadMap[InternalCustomEvent.FetchInterception]\n\t>;\n\n\tconst handleInterceptionEvent = useCallback(\n\t\tasync ({ detail: { response, requestUrl } }: FetchInterceptionEvent) => {\n\t\t\tconst stringifiedUrl =\n\t\t\t\trequestUrl instanceof URL ? requestUrl.toString() : requestUrl;\n\n\t\t\tconst urlValidation = validateInterceptionRequestUrl(\n\t\t\t\tstringifiedUrl,\n\t\t\t\ttriggerEndpoint\n\t\t\t);\n\t\t\tconst { isValid, isForbidden, isTriggerEndpoint } = urlValidation;\n\n\t\t\tif (!isValid || isForbidden) {\n\t\t\t\tlogger.info(\n\t\t\t\t\t`Intercepted request to ${stringifiedUrl} is invalid or forbidden.`,\n\t\t\t\t\turlValidation\n\t\t\t\t);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlogger.info(`Intercepted request to ${stringifiedUrl}`, urlValidation);\n\n\t\t\tconst result = await fetchAndUpdateCart();\n\t\t\tif (!result) return;\n\n\t\t\tconst { transformedCart, hasChanged } = result;\n\n\t\t\tawait handleResponseErrors(response);\n\n\t\t\tif (hasChanged) {\n\t\t\t\ttriggerCalculation(transformedCart, result.order.orderData.id);\n\t\t\t}\n\n\t\t\t// Determine if the widget overlay should be triggered\n\t\t\tswitch (triggerMethod) {\n\t\t\t\tcase \"change\":\n\t\t\t\t\tif (!hasChanged) return;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"endpoint\":\n\t\t\t\t\tif (!isTriggerEndpoint) return;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"combination\":\n\t\t\t\tdefault:\n\t\t\t\t\tif (!isTriggerEndpoint || !hasChanged) return;\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Collapse the return view state\n\t\t\treturnViewState.set(ReturnViewState.Collapsed);\n\t\t\tif (autoOpen !== false) {\n\t\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t\t}\n\t\t},\n\t\t[\n\t\t\tfetchAndUpdateCart,\n\t\t\thandleResponseErrors,\n\t\t\ttriggerCalculation,\n\t\t\twidgetViewState,\n\t\t\treturnViewState,\n\t\t\tautoOpen,\n\t\t\ttriggerEndpoint,\n\t\t\ttriggerMethod\n\t\t]\n\t);\n\n\tuseEffect(() => {\n\t\t// Subscribe to fetch interception events\n\t\tconst unsubscribe = customEvents.subscribe(\n\t\t\tInternalCustomEvent.FetchInterception,\n\t\t\thandleInterceptionEvent\n\t\t);\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [handleInterceptionEvent]);\n\n\treturn {\n\t\tinitialized\n\t};\n};\n\nexport default useFetchInterceptor;\n","import { useEffect } from \"preact/hooks\";\nimport { logger } from \"../../utils/logger\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useOverrideScrollBlocking = () => {\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions: { overrideScrollBlocking }\n\t\t}\n\t} = useWidgetContext();\n\n\t/* This is a fix for CSM-1094 */\n\tuseEffect(() => {\n\t\tif (!overrideScrollBlocking) return;\n\n\t\tlogger.info(\"Overriding scroll blocking behavior\");\n\n\t\tconst originalPreventDefault = Event.prototype.preventDefault;\n\n\t\t// Override the default preventDefault method\n\t\tEvent.prototype.preventDefault = function () {\n\t\t\tif (\n\t\t\t\tthis.type === \"wheel\" ||\n\t\t\t\tthis.type === \"mousewheel\" ||\n\t\t\t\tthis.type === \"DOMMouseScroll\" ||\n\t\t\t\tthis.type === \"touchmove\"\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\toriginalPreventDefault.call(this);\n\t\t};\n\n\t\treturn () => {\n\t\t\tEvent.prototype.preventDefault = originalPreventDefault;\n\t\t};\n\t}, [overrideScrollBlocking, widgetViewState.value]);\n};\n\nexport default useOverrideScrollBlocking;\n","import { useEffect } from \"preact/hooks\";\nimport { cloneAndReplaceElement } from \"../../../lib/utils/dom\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport { WidgetViewState } from \"../../types\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useCartActivator = () => {\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions: { cartActivatorSelector }\n\t\t}\n\t} = useWidgetContext();\n\n\tuseEffect(() => {\n\t\tif (!cartActivatorSelector) return;\n\n\t\tconst controller = new AbortController();\n\t\tconst processedElements = new WeakSet<Element>();\n\n\t\tconst onActivatorClick = (event: MouseEvent) => {\n\t\t\tlogger.info(\"Cart activator clicked\", event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\twidgetViewState.set(WidgetViewState.Open);\n\t\t};\n\n\t\tconst attachListenersToElements = (elements: NodeListOf<Element>) => {\n\t\t\telements.forEach(element => {\n\t\t\t\t// Skip if we've already processed this element\n\t\t\t\tif (processedElements.has(element)) return;\n\n\t\t\t\ttry {\n\t\t\t\t\t// Clone the element to avoid issues with event listeners\n\t\t\t\t\tconst clone = cloneAndReplaceElement(element as HTMLElement);\n\n\t\t\t\t\t// Remove potential inline onclick attributes\n\t\t\t\t\tclone.removeAttribute(\"onclick\");\n\n\t\t\t\t\t// Add the click event listener to the cloned element\n\t\t\t\t\tclone.addEventListener(\"click\", onActivatorClick, {\n\t\t\t\t\t\tsignal: controller.signal\n\t\t\t\t\t});\n\n\t\t\t\t\t// Mark this element as processed\n\t\t\t\t\tprocessedElements.add(clone);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tlogger.error(\"Failed to attach listener to cart activator\", error);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\n\t\tconst initializeActivators = () => {\n\t\t\ttry {\n\t\t\t\tconst elements = document.querySelectorAll(cartActivatorSelector);\n\t\t\t\tif (elements.length > 0) {\n\t\t\t\t\tlogger.info(\"Attaching click listeners to cart activators\", elements);\n\t\t\t\t\tattachListenersToElements(elements);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tlogger.error(\"Failed to set cart activator selector\", error);\n\t\t\t}\n\t\t};\n\n\t\t// Initial setup\n\t\tinitializeActivators();\n\n\t\t// Set up MutationObserver to watch for DOM changes\n\t\tconst observer = new MutationObserver(mutations => {\n\t\t\tlet shouldReinitialize = false;\n\n\t\t\tmutations.forEach(mutation => {\n\t\t\t\t// Check for added nodes\n\t\t\t\tmutation.addedNodes.forEach(node => {\n\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\tconst element = node as Element;\n\n\t\t\t\t\t\t// Check if the added element matches our selector\n\t\t\t\t\t\tif (element.matches?.(cartActivatorSelector)) {\n\t\t\t\t\t\t\tshouldReinitialize = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Check if any children of the added element match our selector\n\t\t\t\t\t\tif (element.querySelectorAll?.(cartActivatorSelector).length > 0) {\n\t\t\t\t\t\t\tshouldReinitialize = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Check for removed nodes (optional - helps with cleanup)\n\t\t\t\tmutation.removedNodes.forEach(node => {\n\t\t\t\t\tif (node.nodeType === Node.ELEMENT_NODE) {\n\t\t\t\t\t\tconst element = node as Element;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\telement.matches?.(cartActivatorSelector) ||\n\t\t\t\t\t\t\telement.querySelectorAll?.(cartActivatorSelector).length > 0\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t// Element was removed - WeakSet will automatically handle cleanup\n\t\t\t\t\t\t\t// since removed elements become unreachable\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tif (shouldReinitialize) {\n\t\t\t\tlogger.info(\"Reinitializing cart activators\");\n\t\t\t\t// Small delay to ensure DOM is fully updated\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tinitializeActivators();\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t});\n\n\t\t// Start observing\n\t\tobserver.observe(document.body, {\n\t\t\tchildList: true, // Watch for added/removed children\n\t\t\tsubtree: true, // Watch the entire subtree\n\t\t\tattributes: false, // We don't need attribute changes\n\t\t\tcharacterData: false // We don't need text content changes\n\t\t});\n\n\t\treturn () => {\n\t\t\t// Cleanup\n\t\t\tcontroller.abort();\n\t\t\tobserver.disconnect();\n\t\t};\n\t}, [cartActivatorSelector, widgetViewState]);\n};\n\nexport default useCartActivator;\n","export const removeInertFromElements = () => {\n\tconst inertElements = document.querySelectorAll(\"[inert]\");\n\tinertElements.forEach(element => {\n\t\telement.removeAttribute(\"inert\");\n\t});\n};\n\nexport function cloneAndReplaceElement<T extends HTMLElement>(element: T): T {\n\tconst parent = element.parentNode;\n\tif (parent) {\n\t\tconst newElement = element.cloneNode(true) as T;\n\t\tparent.replaceChild(newElement, element);\n\t\treturn newElement;\n\t}\n\treturn element;\n}\n","import useApiBridge from \"../../lib/hooks/feature/use-api-bridge\";\nimport useExternalEvents from \"../../lib/hooks/feature/use-external-events\";\nimport useFetchInterceptor from \"../../lib/hooks/feature/use-fetch-interceptor\";\nimport useOverrideScrollBlocking from \"../../lib/hooks/feature/use-override-scroll-blocking\";\nimport useCartActivator from \"../../lib/hooks/feature/use-cart-activator\";\nimport useTutorialAutostart from \"../../lib/hooks/feature/use-tutorial-autostart\";\n\n// Handles the initialization of all necessary interceptors and contexts\n// Note: This is handled as a component, so the context providers can be used within hooks\nconst InitializationHandler = () => {\n\t// Initialize the fetch interceptor to handle incoming HTTP requests\n\tuseFetchInterceptor();\n\n\t// Initialize the cart activator to manage cart-related interactions\n\tuseCartActivator();\n\n\t// Override scroll blocking behavior if configured\n\tuseOverrideScrollBlocking();\n\n\t// Handle external custom events\n\tuseExternalEvents();\n\n\t// Register the API bridge for programmatic control\n\tuseApiBridge();\n\n\t// Auto-start any tutorial flagged to show on load (e.g. the intro)\n\tuseTutorialAutostart();\n\n\treturn null;\n};\n\nexport default InitializationHandler;\n","import { useCallback, useEffect } from \"preact/hooks\";\nimport { WidgetViewState } from \"../../types\";\nimport customEvents, { ExternalCustomEvent } from \"../../utils/custom-events\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useCartActions from \"./use-cart-actions\";\n\nconst useExternalEvents = () => {\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst { fetchAndUpdateCart, triggerCalculation } = useCartActions();\n\n\t// Drawer state handlers\n\tconst handleOpenDrawer = useCallback(() => {\n\t\twidgetViewState.set(WidgetViewState.Open);\n\t}, [widgetViewState]);\n\n\tconst handleCloseDrawer = useCallback(() => {\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t}, [widgetViewState]);\n\n\tconst handleToggleDrawer = useCallback(() => {\n\t\tlet targetState: WidgetViewState;\n\n\t\tif (widgetViewState.value === WidgetViewState.Open) {\n\t\t\ttargetState = WidgetViewState.Collapsed;\n\t\t} else {\n\t\t\ttargetState = WidgetViewState.Open;\n\t\t}\n\n\t\twidgetViewState.set(targetState);\n\t}, [widgetViewState]);\n\n\t// Calculation handlers\n\tconst handleRefetchCalculation = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, triggerCalculation]);\n\n\tconst handleRefetchCart = useCallback(async () => {\n\t\tawait fetchAndUpdateCart();\n\t}, [fetchAndUpdateCart]);\n\n\tconst handleRefetchCartAndCalculation = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, triggerCalculation]);\n\n\tconst handleOpenDrawerAndRefetch = useCallback(async () => {\n\t\tconst result = await fetchAndUpdateCart();\n\t\tif (result?.hasChanged) {\n\t\t\thandleOpenDrawer();\n\t\t\ttriggerCalculation(result.transformedCart, result.order.orderData.id);\n\t\t}\n\t}, [fetchAndUpdateCart, handleOpenDrawer, triggerCalculation]);\n\n\tuseEffect(() => {\n\t\t// Subscribe to all events\n\t\tconst unsubscribeOpenDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerOpen,\n\t\t\thandleOpenDrawer\n\t\t);\n\n\t\tconst unsubscribeCloseDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerClose,\n\t\t\thandleCloseDrawer\n\t\t);\n\n\t\tconst unsubscribeToggleDrawer = customEvents.subscribe(\n\t\t\tExternalCustomEvent.DrawerToggle,\n\t\t\thandleToggleDrawer\n\t\t);\n\n\t\tconst unsubscribeRefetchCalculation = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CalculationRefetch,\n\t\t\thandleRefetchCalculation\n\t\t);\n\n\t\tconst unsubscribeRefetchCart = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CartRefetch,\n\t\t\thandleRefetchCart\n\t\t);\n\n\t\tconst unsubscribeRefetchCartAndCalculation = customEvents.subscribe(\n\t\t\tExternalCustomEvent.CartAndCalculationRefetch,\n\t\t\thandleRefetchCartAndCalculation\n\t\t);\n\n\t\tconst unsubscribeOpenDrawerAndRefetchCartAndCalculation =\n\t\t\tcustomEvents.subscribe(\n\t\t\t\tExternalCustomEvent.DrawerOpenAndRefetch,\n\t\t\t\thandleOpenDrawerAndRefetch\n\t\t\t);\n\n\t\treturn () => {\n\t\t\tunsubscribeOpenDrawer();\n\t\t\tunsubscribeCloseDrawer();\n\t\t\tunsubscribeToggleDrawer();\n\t\t\tunsubscribeRefetchCalculation();\n\t\t\tunsubscribeRefetchCart();\n\t\t\tunsubscribeRefetchCartAndCalculation();\n\t\t\tunsubscribeOpenDrawerAndRefetchCartAndCalculation();\n\t\t};\n\t}, [\n\t\thandleOpenDrawer,\n\t\thandleCloseDrawer,\n\t\thandleToggleDrawer,\n\t\thandleRefetchCalculation,\n\t\thandleRefetchCart,\n\t\thandleRefetchCartAndCalculation,\n\t\thandleOpenDrawerAndRefetch\n\t]);\n};\n\nexport default useExternalEvents;\n","import { useEffect, useMemo, useRef, useState } from \"preact/hooks\";\nimport { DIALOG_PRIORITY } from \"../../context/dialog-queue-context\";\nimport { TUTORIALS } from \"../../tutorials\";\nimport useDialogSlot from \"../common/use-dialog-slot\";\nimport useWidgetContext from \"../context/use-widget-context\";\nimport useTutorial from \"../context/use-tutorial\";\n\n// Auto-starts the first tutorial flagged `autoStart`, but only once the dialog\n// queue grants its slot — so it never overlaps a higher-priority dialog (e.g.\n// the return decision dialog). The slot is held for the tutorial's whole\n// duration, so nothing pops over its backdrop/pointers mid-run.\nconst useTutorialAutostart = () => {\n\tconst { start, isActive, activeTutorial, hasSeenTutorial } = useTutorial();\n\tconst { config } = useWidgetContext();\n\tconst [finished, setFinished] = useState(false);\n\n\tconst autoStartTutorial = useMemo(\n\t\t() =>\n\t\t\tObject.values(TUTORIALS).find(tutorial => tutorial.options?.autoStart),\n\t\t[]\n\t);\n\n\tconst isAllowed =\n\t\tautoStartTutorial?.options?.showMode === \"first-load\"\n\t\t\t? config.isFirstLoad && !hasSeenTutorial(autoStartTutorial.id)\n\t\t\t: !hasSeenTutorial(autoStartTutorial?.id ?? \"\");\n\n\tconst wantsToShow = !!autoStartTutorial && !finished && isAllowed;\n\n\tconst isSlotActive = useDialogSlot({\n\t\tid: autoStartTutorial ? `tutorial:${autoStartTutorial.id}` : \"tutorial\",\n\t\tpriority: DIALOG_PRIORITY.tutorial,\n\t\topen: wantsToShow\n\t});\n\n\t// Start once, when the queue grants the slot and no tutorial is running.\n\tconst hasStartedRef = useRef(false);\n\tuseEffect(() => {\n\t\tif (\n\t\t\tisSlotActive &&\n\t\t\tautoStartTutorial &&\n\t\t\t!isActive &&\n\t\t\t!hasStartedRef.current\n\t\t) {\n\t\t\thasStartedRef.current = true;\n\t\t\tstart(autoStartTutorial);\n\t\t}\n\t}, [isSlotActive, autoStartTutorial, isActive, start]);\n\n\t// Release the slot once the tutorial we started has actually run and ended.\n\tconst wasRunningRef = useRef(false);\n\tuseEffect(() => {\n\t\tconst running = isActive && activeTutorial?.id === autoStartTutorial?.id;\n\t\tif (running) {\n\t\t\twasRunningRef.current = true;\n\t\t} else if (wasRunningRef.current) {\n\t\t\twasRunningRef.current = false;\n\t\t\tsetFinished(true);\n\t\t}\n\t}, [isActive, activeTutorial, autoStartTutorial]);\n};\n\nexport default useTutorialAutostart;\n","import useIsMounted from \"../lib/hooks/common/use-is-mounted\";\n\nconst IsMounted = ({ children }: { children: preact.ComponentChildren }) => {\n\tconst mounted = useIsMounted();\n\n\tif (!mounted) return null;\n\n\treturn children;\n};\n\nexport default IsMounted;\n","import { useCallback, useMemo, useRef, useState } from \"preact/hooks\";\nimport {\n\tDialogQueueEntry,\n\tDialogQueueContext,\n\tIDialogQueueContext\n} from \"../../lib/context/dialog-queue-context\";\n\ninterface QueuedEntry extends DialogQueueEntry {\n\tseq: number;\n}\n\nconst DialogQueueProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [entries, setEntries] = useState<QueuedEntry[]>([]);\n\tconst seqRef = useRef(0);\n\n\tconst acquire = useCallback((entry: DialogQueueEntry) => {\n\t\tsetEntries(prev => {\n\t\t\tconst existing = prev.find(item => item.id === entry.id);\n\t\t\t// Keep the original seq so re-acquiring (e.g. a priority change) doesn't\n\t\t\t// jump the FIFO order.\n\t\t\tconst seq = existing ? existing.seq : seqRef.current++;\n\t\t\tconst next = prev.filter(item => item.id !== entry.id);\n\t\t\treturn [...next, { ...entry, seq }];\n\t\t});\n\t}, []);\n\n\tconst release = useCallback((id: string) => {\n\t\tsetEntries(prev => prev.filter(item => item.id !== id));\n\t}, []);\n\n\tconst activeId = useMemo(() => {\n\t\tif (entries.length === 0) {\n\t\t\treturn null;\n\t\t}\n\t\treturn entries.reduce((best, entry) => {\n\t\t\tif (entry.priority !== best.priority) {\n\t\t\t\treturn entry.priority > best.priority ? entry : best;\n\t\t\t}\n\t\t\treturn entry.seq < best.seq ? entry : best;\n\t\t}).id;\n\t}, [entries]);\n\n\tconst contextValue = useMemo(\n\t\t(): IDialogQueueContext => ({\n\t\t\tacquire,\n\t\t\trelease,\n\t\t\tactiveId\n\t\t}),\n\t\t[acquire, release, activeId]\n\t);\n\n\treturn (\n\t\t<DialogQueueContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</DialogQueueContext.Provider>\n\t);\n};\n\nexport default DialogQueueProvider;\n","import { ReactNode } from \"preact/compat\";\nimport { useMemo } from \"preact/hooks\";\nimport { Fragment } from \"preact/jsx-runtime\";\nimport { useTranslations } from \"use-intl\";\nimport {\n\tCustomError,\n\tErrorContext,\n\tIErrorContext\n} from \"../../lib/context/error-context\";\nimport useArray from \"../../lib/hooks/common/use-array\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { getRuleProductIds } from \"../../lib/utils/cart\";\nimport { stripShopifyId } from \"../../lib/utils/shopify\";\n\nconst ErrorProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst t = useTranslations();\n\tconst { array: errors, ...methods } = useArray<CustomError>();\n\tconst { cartState, orderState, calculationState } = useReturnContext();\n\n\tconst orderData = orderState.value.data?.orderData;\n\tconst calculationLineItems = calculationState.value.data?.lineItems;\n\tconst cartItemCount = cartState.value.data?.transformed.item_count ?? 0;\n\n\t// Combine errors that are pushed from anywhere in within the context with static errors\n\t// These static errors are based on the order data and calculation items\n\tconst resolvedErrors: CustomError[] = useMemo(() => {\n\t\tconst trackedErrors: CustomError[] = [];\n\t\tif (\n\t\t\torderData &&\n\t\t\tcalculationLineItems &&\n\t\t\tArray.isArray(calculationLineItems)\n\t\t) {\n\t\t\t// Reufund window expired error\n\t\t\tconst { refundReturnWindow = true } = orderData.returnWindows ?? {};\n\n\t\t\tconst errorId = \"refund-window-expired\";\n\n\t\t\tif (!refundReturnWindow && cartItemCount === 0) {\n\t\t\t\tconst message: string | preact.ComponentChildren = t(\n\t\t\t\t\t\"product.error.refund_expired\"\n\t\t\t\t);\n\n\t\t\t\ttrackedErrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage,\n\t\t\t\t\tblocking: true\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Product rules\n\t\t\tconst noRefundItemIds = getRuleProductIds(\n\t\t\t\torderData.productRules,\n\t\t\t\t\"NO_REFUND\"\n\t\t\t);\n\t\t\tconst noRefundItems = calculationLineItems.filter(item => {\n\t\t\t\tconst strippedId = stripShopifyId(item.productId);\n\t\t\t\tif (!strippedId) return false;\n\t\t\t\treturn noRefundItemIds.includes(Number(strippedId));\n\t\t\t});\n\n\t\t\tif (noRefundItems.length > 0 && cartItemCount === 0) {\n\t\t\t\tconst joinedProductNames = noRefundItems\n\t\t\t\t\t.map(item => {\n\t\t\t\t\t\tconst product = orderData.productsToExchange.find(\n\t\t\t\t\t\t\tp => p.id === item.id\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (!product) return null;\n\n\t\t\t\t\t\tlet title = product.title;\n\t\t\t\t\t\tif (product.variantTitle) {\n\t\t\t\t\t\t\ttitle += ` (${product.variantTitle})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn title;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t.join(\", \");\n\n\t\t\t\tconst message = t.rich(\"product.error.no_refund\", {\n\t\t\t\t\tproduct_name: joinedProductNames,\n\t\t\t\t\tb: chunks => {\n\t\t\t\t\t\tif (!chunks) return null;\n\t\t\t\t\t\tconst splitChunks = (chunks as NonNullable<ReactNode>)\n\t\t\t\t\t\t\t.toString()\n\t\t\t\t\t\t\t.split(\", \");\n\n\t\t\t\t\t\treturn splitChunks.map((chunk, index) => {\n\t\t\t\t\t\t\tlet dividerString: string | null = null;\n\n\t\t\t\t\t\t\tif (index === splitChunks.length - 2) {\n\t\t\t\t\t\t\t\tdividerString = ` ${t(\"common.and\")} `;\n\t\t\t\t\t\t\t} else if (index < splitChunks.length - 1) {\n\t\t\t\t\t\t\t\tdividerString = \", \";\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t\t\t\t\t<span className=\"text-neutral-3\">{chunk}</span>\n\t\t\t\t\t\t\t\t\t{dividerString}\n\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\ttrackedErrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage,\n\t\t\t\t\tblocking: true\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn trackedErrors.concat(errors);\n\t}, [errors, orderData, calculationLineItems, cartItemCount, t]);\n\n\tconst contextValue: IErrorContext = {\n\t\terrors: resolvedErrors,\n\t\t...methods\n\t};\n\n\treturn (\n\t\t<ErrorContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ErrorContext.Provider>\n\t);\n};\n\nexport default ErrorProvider;\n","import { useCallback, useState } from \"preact/hooks\";\n\ntype ArrayId = string | number;\n\ninterface ArrayItem {\n\tid: ArrayId;\n}\n\nexport interface UseArrayReturn<T extends ArrayItem> {\n\tarray: T[];\n\tset: (newArray: T[]) => void;\n\tpush: (item: T) => void;\n\tremove: (id: ArrayId) => void;\n\tclear: () => void;\n\thas: (id: ArrayId) => boolean;\n}\n\nconst useArray = <T extends ArrayItem>(\n\tinitialArray: T[] = []\n): UseArrayReturn<T> => {\n\tconst [array, setArray] = useState<T[]>(initialArray);\n\n\tconst set = useCallback((newArray: T[]) => {\n\t\tsetArray(newArray);\n\t}, []);\n\n\tconst push = useCallback((item: T | T[]) => {\n\t\tsetArray(prev => {\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tconst filtered = item.filter(i => !prev.some(p => p.id === i.id));\n\t\t\t\treturn [...prev, ...filtered];\n\t\t\t}\n\t\t\tif (prev.some(p => p.id === item.id)) {\n\t\t\t\treturn prev; // Avoid duplicates\n\t\t\t}\n\t\t\treturn [...prev, item];\n\t\t});\n\t}, []);\n\n\tconst remove = useCallback((id: ArrayId) => {\n\t\tsetArray(prev => prev.filter(item => item.id !== id));\n\t}, []);\n\n\tconst clear = useCallback(() => {\n\t\tsetArray([]);\n\t}, []);\n\n\tconst has = useCallback(\n\t\t(id: ArrayId) => {\n\t\t\treturn array.some(item => item.id === id);\n\t\t},\n\t\t[array]\n\t);\n\n\treturn {\n\t\tarray,\n\t\tset,\n\t\tpush,\n\t\tremove,\n\t\tclear,\n\t\thas\n\t};\n};\n\nexport default useArray;\n","import { useCallback, useEffect, useRef, useState } from \"preact/hooks\";\nimport { logger } from \"../../utils/logger\";\n\ntype IAsyncStatePending<T> = {\n\tdata: T | null;\n\tpending: true;\n\terror: null;\n};\n\ntype IAsyncStateResolved<T> = {\n\tdata: T | null;\n\tpending: false;\n\terror: null;\n};\n\ntype IAsyncStateError<T> = {\n\tdata: T | null;\n\tpending: false;\n\terror: Error;\n};\n\nexport type IAsyncState<T> =\n\t| IAsyncStatePending<T>\n\t| IAsyncStateResolved<T>\n\t| IAsyncStateError<T>;\n\ntype TAsyncStateCommonProps<T> = {\n\tid?: string;\n\tinitialValue?: T | null;\n\tqueryOnInit?: boolean;\n\tstartCount?: number;\n\tonError?: (error: Error) => void;\n};\n\ntype TUseAsyncStatePropsWithoutParams<T> = TAsyncStateCommonProps<T> & {\n\tqueryFn: (count: number) => T | Promise<T>;\n};\n\ntype TUseAsyncStatePropsWithParams<\n\tT,\n\tP = undefined\n> = TAsyncStateCommonProps<T> & {\n\tqueryFn: (count: number, params: P) => T | Promise<T>;\n\tinitialParams?: P;\n};\n\n// Props interface with conditional queryFn and conditional initialParams\ntype TUseAsyncStateProps<T, P = undefined> = P extends undefined\n\t? TUseAsyncStatePropsWithoutParams<T>\n\t: TUseAsyncStatePropsWithParams<T, P>;\n\nexport interface IUseAsyncStateReturn<T, P = undefined> {\n\tvalue: IAsyncState<T>;\n\tset: React.Dispatch<React.SetStateAction<IAsyncState<T>>>;\n\tquery: P extends undefined\n\t\t? () => Promise<T | null>\n\t\t: (params: P) => Promise<T | null>;\n\tinitialFetch: boolean;\n\tcount: number;\n}\n\nconst useAsyncState = <T, Params = undefined>(\n\tprops: TUseAsyncStateProps<T, Params>\n): IUseAsyncStateReturn<T, Params> => {\n\tconst {\n\t\tid,\n\t\tinitialValue = null,\n\t\tqueryFn,\n\t\tqueryOnInit = true,\n\t\tonError,\n\t\tstartCount = 0\n\t} = props;\n\n\tconst [state, setState] = useState<IAsyncState<T>>({\n\t\tdata: initialValue,\n\t\tpending: queryOnInit,\n\t\terror: null\n\t} as IAsyncStatePending<T>);\n\tconst initialRender = useRef(true);\n\n\tconst [countState, setCountState] = useState(startCount);\n\tconst countRef = useRef(countState);\n\n\tconst query = useCallback(\n\t\t(...args: Params extends undefined ? [] : [Params]): Promise<T | null> => {\n\t\t\tconst params = args[0] as Params;\n\n\t\t\t// Increment count at the START and capture it for this request\n\t\t\tconst requestCount = countRef.current + 1;\n\t\t\tcountRef.current = requestCount;\n\t\t\tsetCountState(requestCount);\n\n\t\t\tsetState(prev => ({\n\t\t\t\t...prev,\n\t\t\t\tpending: true,\n\t\t\t\terror: null\n\t\t\t}));\n\n\t\t\tconst run = async () => {\n\t\t\t\ttry {\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t`AsyncState Query Started (Count: ${requestCount})`,\n\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\"\n\t\t\t\t\t);\n\t\t\t\t\tconst data = await (args.length === 0\n\t\t\t\t\t\t? (queryFn as (count: number) => T | Promise<T>)(requestCount)\n\t\t\t\t\t\t: (queryFn as (count: number, params: Params) => T | Promise<T>)(\n\t\t\t\t\t\t\t\trequestCount,\n\t\t\t\t\t\t\t\tparams\n\t\t\t\t\t\t\t));\n\n\t\t\t\t\t// Only update state if this is still the latest request\n\t\t\t\t\tif (countRef.current !== requestCount) {\n\t\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t\t`AsyncState Query Stale - Ignoring (Count: ${requestCount}, Current: ${countRef.current})`,\n\t\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Success handling\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tpending: false,\n\t\t\t\t\t\terror: null\n\t\t\t\t\t});\n\t\t\t\t\tlogger.info(\n\t\t\t\t\t\t`AsyncState Query Resolved (Count: ${requestCount})`,\n\t\t\t\t\t\tid ? ` (ID: ${id})` : \"\",\n\t\t\t\t\t\tdata\n\t\t\t\t\t);\n\t\t\t\t\treturn data;\n\t\t\t\t} catch (err) {\n\t\t\t\t\t// Only update state if this is still the latest request\n\t\t\t\t\tif (countRef.current !== requestCount) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Error handling\n\t\t\t\t\tconst error = err as Error;\n\n\t\t\t\t\tlet consoleMessage = `AsyncState Query Failed (Count: ${requestCount})`;\n\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tconsoleMessage += ` (ID: ${id})`;\n\t\t\t\t\t}\n\n\t\t\t\t\tlogger.error(`${consoleMessage}:`, `[${error}]`, params);\n\n\t\t\t\t\tsetState({\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\tpending: false,\n\t\t\t\t\t\terror\n\t\t\t\t\t});\n\t\t\t\t\tonError?.(error);\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn run();\n\t\t},\n\t\t[queryFn, id, onError]\n\t);\n\n\tuseEffect(() => {\n\t\tif (initialRender.current && queryOnInit) {\n\t\t\tinitialRender.current = false;\n\t\t\tconst initialParams = props as TUseAsyncStatePropsWithParams<T, Params>;\n\t\t\tif (initialParams !== undefined && \"initialParams\" in initialParams) {\n\t\t\t\t(query as (params: Params) => Promise<T>)(\n\t\t\t\t\tinitialParams.initialParams as Params\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t(query as () => Promise<T>)();\n\t\t\t}\n\t\t}\n\t}, [query, queryOnInit, props]);\n\n\tconst initialFetch = state.pending && state.data === null;\n\n\treturn {\n\t\tvalue: state,\n\t\tset: setState,\n\t\tquery: query as IUseAsyncStateReturn<T, Params>[\"query\"],\n\t\tcount: countState,\n\t\tinitialFetch\n\t};\n};\n\nexport default useAsyncState;\n","import { logger } from \"./logger\";\nimport { storage, StorageKey } from \"./storage\";\n\ninterface PersistenceOptions extends StorageKey {\n\tstoreResult?: boolean;\n\tshouldUseCachedResult?: boolean;\n\tlogging?: boolean;\n\texpiration?: number;\n}\n\nconst inFlightRequests = new Map<string, Promise<unknown>>();\n\nexport async function persist<T>(\n\tfn: () => Promise<T>,\n\toptions: PersistenceOptions\n): Promise<T> {\n\tconst {\n\t\tstoreResult = true,\n\t\tshouldUseCachedResult = true,\n\t\tlogging = true,\n\t\t...storageOptions\n\t} = options;\n\n\tif (shouldUseCachedResult) {\n\t\tconst cachedData = storage.get<T>(storageOptions);\n\t\tif (cachedData !== null) {\n\t\t\tif (logging) {\n\t\t\t\tlogger.info(\n\t\t\t\t\t`Using cached data for ${storageOptions.key} from ${storageOptions.type}`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn cachedData;\n\t\t}\n\t}\n\n\tconst inFlightKey = `${storageOptions.type}:${storageOptions.key}`;\n\tconst pending = inFlightRequests.get(inFlightKey);\n\tif (pending) {\n\t\treturn pending as Promise<T>;\n\t}\n\n\tconst request = (async () => {\n\t\ttry {\n\t\t\tconst result = await fn();\n\t\t\tif (storeResult) {\n\t\t\t\tstorage.set(storageOptions, result);\n\t\t\t}\n\t\t\treturn result;\n\t\t} catch (error) {\n\t\t\tif (logging) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`Failed to persist data for ${storageOptions.key} from ${storageOptions.type}`,\n\t\t\t\t\terror\n\t\t\t\t);\n\t\t\t}\n\t\t\tthrow error;\n\t\t} finally {\n\t\t\tinFlightRequests.delete(inFlightKey);\n\t\t}\n\t})();\n\n\tinFlightRequests.set(inFlightKey, request);\n\treturn request;\n}\n","import { LEGACY_PARAMS, SEARCH_PARAM_ID_NAME } from \"../constants\";\nimport type { ShopifyCart } from \"../types\";\nimport api, { ApiResponseObject } from \"./api-client\";\nimport { clearCart, setCartItems, updateCartStorage } from \"./cart\";\nimport { WidgetConfiguration } from \"./initialization/types\";\nimport { logger } from \"./logger\";\nimport { persist } from \"./persistence\";\nimport storage, {\n\tSTORAGE_OVERLAY_DIALOG_EXPIRATION,\n\tSTORAGE_OVERLAY_DIALOG_EXPIRY_KEY,\n\tSTORAGE_SESSION_KEY\n} from \"./storage\";\n\nexport type CalculationResponse = ApiResponseObject<\n\t\"/calculation/{uuid}\",\n\t\"post\"\n>;\n\nexport type CalculationLineItem = CalculationResponse[\"lineItems\"][number];\nexport type CalculationExchangeProduct = NonNullable<\n\tCalculationResponse[\"exchange\"]\n>[\"exchangeDetails\"][number];\n\nexport interface CalculationParams {\n\tcart: ShopifyCart;\n\torderId: string;\n\tlineItems?: {\n\t\tid: string;\n\t\tlineItemId: string;\n\t\taction: \"EXCHANGE\" | \"REFUND\" | \"GIFTCARD\";\n\t}[];\n\tcountryCode?: string;\n}\n\n// REST API Queries\nexport async function getCalculation(\n\t{ orderId, cart, lineItems, countryCode }: CalculationParams,\n\tlabelCount: number\n): Promise<CalculationResponse> {\n\tconst formattedExchangeTo = (cart.items || []).map(item => ({\n\t\tvariantId: `gid://shopify/ProductVariant/${item.variant_id}`,\n\t\tquantity: item.quantity\n\t}));\n\n\tconst formattedLineItems = (lineItems || []).map(item => ({\n\t\tlineItemId: item.lineItemId,\n\t\tquantity: 1,\n\t\taction: item.action\n\t}));\n\n\tconst response = await api.POST(\"/calculation/{uuid}\", {\n\t\tparams: { path: { uuid: orderId } },\n\t\tbody: {\n\t\t\tlineItems: formattedLineItems,\n\t\t\texchangeTo: formattedExchangeTo,\n\t\t\tnumOfLabels: labelCount,\n\t\t\tcountryCode\n\t\t}\n\t});\n\n\tif (response.error || !response.data?.responseObject) {\n\t\tlogger.error(\n\t\t\t`Failed to fetch calculation data for orderId: ${orderId}`,\n\t\t\tresponse.error\n\t\t);\n\t\tthrow new Error(\n\t\t\t`Failed to fetch calculation: ${response.error?.message ?? \"Unknown error\"}`\n\t\t);\n\t}\n\n\treturn response.data.responseObject;\n}\n\nexport type ShopOverlayDataResponse = ApiResponseObject<\n\t\"/shop-overlay/session/{id}\",\n\t\"get\"\n>;\n\nconst getShopOverlayData = async ({\n\tisFirstLoad,\n\tsessionId\n}: {\n\tisFirstLoad: boolean;\n\tsessionId: string;\n}) =>\n\tpersist(\n\t\tasync () => {\n\t\t\tconst result = await api.GET(\"/shop-overlay/session/{id}\", {\n\t\t\t\tparams: {\n\t\t\t\t\tpath: {\n\t\t\t\t\t\tid: sessionId\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (result.error) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`Error fetching shop overlay data for sessionId: ${sessionId}`,\n\t\t\t\t\tresult.error\n\t\t\t\t);\n\t\t\t\tthrow new Error(result.error.message);\n\t\t\t}\n\n\t\t\tif (!result.data?.responseObject) {\n\t\t\t\tlogger.error(\n\t\t\t\t\t`No data received when fetching shop overlay data for sessionId: ${sessionId}`\n\t\t\t\t);\n\t\t\t\tthrow new Error(\"No data received from server\");\n\t\t\t}\n\n\t\t\treturn result.data.responseObject;\n\t\t},\n\t\t{\n\t\t\tkey: sessionId,\n\t\t\ttype: \"sessionStorage\",\n\t\t\tshouldUseCachedResult: !isFirstLoad\n\t\t}\n\t);\n\nexport type ProcessOrderInitializationReturn = {\n\torderData: ShopOverlayDataResponse;\n\tupdatedCart: ShopifyCart | null;\n};\n\nexport async function processOrderInitialization({\n\tisFirstLoad,\n\toptions: { clearCartOnStart },\n\tid: sessionId,\n\tdata: cache\n}: WidgetConfiguration): Promise<ProcessOrderInitializationReturn> {\n\tlet updatedCart: ShopifyCart | null = null;\n\n\tif (isFirstLoad) {\n\t\tconst cachedExchangeItems = cache.exchangeItems ?? [];\n\n\t\tif (cachedExchangeItems.length > 0) {\n\t\t\tconst mappedItems = cachedExchangeItems.map(item => ({\n\t\t\t\tid: item.variantId,\n\t\t\t\tquantity: item.quantity\n\t\t\t}));\n\t\t\tlogger.info(\n\t\t\t\t\"Setting cart items from cached return items on initialization.\",\n\t\t\t\tmappedItems\n\t\t\t);\n\t\t\t// If there are cached return items, set them in the cart\n\t\t\tupdatedCart = await setCartItems(mappedItems);\n\t\t} else if (clearCartOnStart) {\n\t\t\tlogger.info(\"Clearing cart on initialization as per configuration.\");\n\t\t\t// Clear the cart if it's the first load and clearCartOnStart is true\n\t\t\tupdatedCart = await clearCart();\n\t\t}\n\n\t\tupdateCartStorage(updatedCart);\n\n\t\t// Set the dialog expiration in session storage\n\t\tconst dialogExpiration =\n\t\t\tnew Date().getTime() + STORAGE_OVERLAY_DIALOG_EXPIRATION;\n\n\t\tstorage.set(STORAGE_OVERLAY_DIALOG_EXPIRY_KEY, dialogExpiration);\n\n\t\t// Remove the search param from the URL\n\t\tconst url = new URL(window.location.href);\n\n\t\turl.searchParams.delete(SEARCH_PARAM_ID_NAME);\n\n\t\tLEGACY_PARAMS.forEach(param => {\n\t\t\turl.searchParams.delete(param);\n\t\t});\n\n\t\twindow.history.replaceState(null, \"\", url);\n\t}\n\n\tstorage.set(STORAGE_SESSION_KEY, sessionId);\n\n\tconst orderData = await getShopOverlayData({\n\t\tisFirstLoad,\n\t\tsessionId\n\t});\n\n\treturn {\n\t\torderData,\n\t\tupdatedCart\n\t};\n}\n","import { useMemo } from \"preact/hooks\";\nimport {\n\tIReturnContext,\n\tReturnContext\n} from \"../../lib/context/return-context\";\nimport useAsyncState from \"../../lib/hooks/common/use-async-state\";\nimport useOnce from \"../../lib/hooks/common/use-once\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport {\n\tReturnViewState,\n\tShopifyCart,\n\tShopifyCartChangeResponse\n} from \"../../lib/types\";\nimport { getCart, normalizeCart } from \"../../lib/utils/cart\";\nimport { formatSelectedItems } from \"../../lib/utils/helpers\";\nimport {\n\tCalculationParams,\n\tCalculationResponse,\n\tgetCalculation,\n\tprocessOrderInitialization,\n\tProcessOrderInitializationReturn\n} from \"../../lib/utils/queries\";\nimport {\n\tSessionPatchPayload,\n\tupdateSessionCache\n} from \"../../lib/utils/session\";\nimport { formatShopifyCartItem } from \"../../lib/utils/shopify\";\n\ninterface ReturnContextProviderProps {\n\tchildren: preact.ComponentChildren;\n}\n\ntype Cart = ShopifyCart | ShopifyCartChangeResponse;\n\nexport interface CartState {\n\ttransformed: Cart;\n\toriginal: Cart;\n}\n\nconst ReturnContextProvider = ({ children }: ReturnContextProviderProps) => {\n\tconst { returnViewState, config } = useWidgetContext();\n\n\tconst isFirstLoad = config.isFirstLoad;\n\n\tconst cartState = useAsyncState<CartState, ProcessOrderInitializationReturn>({\n\t\tid: \"cart\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (\n\t\t\tqueryCount: number,\n\t\t\torderResult: ProcessOrderInitializationReturn\n\t\t) => {\n\t\t\tconst pathname = window.location.pathname;\n\t\t\tconst isCartPage = pathname.startsWith(\"/cart\");\n\n\t\t\tconst isFirstQuery = queryCount === 1;\n\n\t\t\tconst shouldFetchFreshCart = !isFirstQuery || isCartPage;\n\n\t\t\tconst cart = await getCart(!shouldFetchFreshCart);\n\n\t\t\tif (cart.item_count !== 0 && isFirstQuery) {\n\t\t\t\t// If the cart has items and this is the first query, collapse the return view state\n\t\t\t\treturnViewState.set(ReturnViewState.Collapsed);\n\t\t\t}\n\n\t\t\tconst { cart: transformedCart } = normalizeCart(\n\t\t\t\tcart,\n\t\t\t\torderResult.orderData.productRules\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\ttransformed: transformedCart,\n\t\t\t\toriginal: cart\n\t\t\t};\n\t\t}\n\t});\n\n\t// Initialize the order state & set cookies/storage\n\tconst orderState = useAsyncState<ProcessOrderInitializationReturn>({\n\t\tid: \"order\",\n\t\tqueryFn: async () => {\n\t\t\tconst result = await processOrderInitialization(config);\n\n\t\t\tif (result.updatedCart && isFirstLoad) {\n\t\t\t\tconst { cart: normalizedCart } = normalizeCart(\n\t\t\t\t\tresult.updatedCart,\n\t\t\t\t\tresult.orderData.productRules\n\t\t\t\t);\n\t\t\t\tcartState.set({\n\t\t\t\t\tdata: {\n\t\t\t\t\t\toriginal: result.updatedCart,\n\t\t\t\t\t\ttransformed: normalizedCart\n\t\t\t\t\t},\n\t\t\t\t\tpending: false,\n\t\t\t\t\terror: null\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcartState.query(result);\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\t});\n\n\tconst updateSessionCacheState = useAsyncState({\n\t\tid: \"updateSessionCache\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (_: unknown, payload: SessionPatchPayload) => {\n\t\t\tconst internalId = config.id;\n\t\t\tif (internalId) {\n\t\t\t\tawait updateSessionCache(internalId, payload);\n\t\t\t}\n\t\t}\n\t});\n\n\tconst calculationState = useAsyncState<\n\t\tCalculationResponse,\n\t\tCalculationParams\n\t>({\n\t\tid: \"calculation\",\n\t\tqueryOnInit: false,\n\t\tqueryFn: async (_: unknown, params: CalculationParams) => {\n\t\t\tconst internalId = config.id;\n\t\t\tconst cartItems = params.cart?.items || [];\n\t\t\t// Update session cache with the current cart items\n\t\t\tif (internalId) {\n\t\t\t\tconst formattedCartItems = Array.isArray(cartItems)\n\t\t\t\t\t? cartItems.map(item => formatShopifyCartItem(item))\n\t\t\t\t\t: [];\n\n\t\t\t\tupdateSessionCacheState.query({\n\t\t\t\t\texchangeItems: formattedCartItems\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst formData = config.data.formData;\n\n\t\t\tconst labelCount = formData?.packages?.length || 1;\n\t\t\tconst countryCode = params.countryCode || formData?.shippingCountry;\n\n\t\t\tconst resolvedParams: CalculationParams = {\n\t\t\t\t...params,\n\t\t\t\tcountryCode\n\t\t\t};\n\n\t\t\treturn await getCalculation(resolvedParams, labelCount);\n\t\t}\n\t});\n\n\tconst [initialized] = useOnce(\n\t\tresolve => {\n\t\t\tconst order = orderState.value.data;\n\t\t\tconst cart = cartState.value.data?.transformed;\n\t\t\tconst formData = config.data.formData;\n\n\t\t\tif (order && cart) {\n\t\t\t\tresolve();\n\t\t\t\tconst lineItems = formatSelectedItems(formData);\n\t\t\t\tcalculationState.query({\n\t\t\t\t\tcart,\n\t\t\t\t\torderId: order.orderData.id,\n\t\t\t\t\tlineItems\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\t[orderState.value.data, cartState.value.data, calculationState.query]\n\t);\n\n\tconst isPending =\n\t\t!initialized || cartState.value.pending || calculationState.value.pending;\n\n\tconst contextError = useMemo(\n\t\t() =>\n\t\t\torderState.value.error ||\n\t\t\tcartState.value.error ||\n\t\t\tcalculationState.value.error,\n\t\t[\n\t\t\torderState.value.error,\n\t\t\tcartState.value.error,\n\t\t\tcalculationState.value.error\n\t\t]\n\t);\n\n\tconst hasFailed = Boolean(contextError);\n\n\tconst contextValue = useMemo(\n\t\t(): IReturnContext => ({\n\t\t\torderState,\n\t\t\tcartState,\n\t\t\tcalculationState,\n\t\t\tupdateSessionCacheState,\n\t\t\tisPending,\n\t\t\thasFailed\n\t\t}),\n\t\t[\n\t\t\torderState,\n\t\t\tcartState,\n\t\t\tcalculationState,\n\t\t\tupdateSessionCacheState,\n\t\t\tisPending,\n\t\t\thasFailed\n\t\t]\n\t);\n\n\treturn (\n\t\t<ReturnContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ReturnContext.Provider>\n\t);\n};\n\nexport default ReturnContextProvider;\n","import { Inputs, useEffect, useRef, useState } from \"preact/hooks\";\n\nconst useOnce = (callback: (resolve: () => void) => void, deps?: Inputs) => {\n\tconst state = useState(false);\n\tconst effectRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (!effectRef.current) {\n\t\t\tcallback(() => {\n\t\t\t\tstate[1](true);\n\t\t\t\teffectRef.current = true;\n\t\t\t});\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, deps);\n\n\treturn state;\n};\n\nexport default useOnce;\n","import type { OrderProduct } from \"../widget/lib/types\";\nimport type {\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart\n} from \"../widget/lib/types/shopify\";\nimport { CommonOptions } from \"../widget/lib/utils/initialization/types\";\nimport { CalculationResponse } from \"../widget/lib/utils/queries\";\n\nexport type { OrderProduct } from \"../widget/lib/types\";\nexport type {\n\tConnection,\n\tEdge,\n\tShopifyCart,\n\tShopifyCartItem,\n\tStorefrontCart,\n\tStorefrontCartCost,\n\tStorefrontCartImage,\n\tStorefrontCartLine,\n\tStorefrontCartLineCost,\n\tStorefrontCartLineMerchandise\n} from \"../widget/lib/types/shopify\";\nexport type {\n\tCalculationExchangeProduct,\n\tCalculationLineItem,\n\tCalculationResponse\n} from \"../widget/lib/utils/queries\";\n\nexport enum WidgetViewState {\n\tCollapsed = \"COLLAPSED\",\n\tOpen = \"OPEN\"\n}\n\nexport type Environment = \"development\" | \"test\" | \"production\";\n\nexport interface ThemeVariables {\n\tbackgroundColor?: string;\n\taccentBackgroundColor?: string;\n\tprimaryCTAColor?: string;\n\tprimaryCTATextColor?: string;\n\tsecondaryCTAColor?: string;\n\tsecondaryCTATextColor?: string;\n\tprimaryTextColor?: string;\n\tsecondaryTextColor?: string;\n}\n\nexport const STORE_DEFAULT_THEME = {\n\tbackgroundColor: \"#FFFFFF\",\n\taccentBackgroundColor: \"#F5F5F5\",\n\tprimaryCTAColor: \"#000000\",\n\tprimaryCTATextColor: \"#FFFFFF\",\n\tsecondaryCTAColor: \"#E5E5E5\",\n\tsecondaryCTATextColor: \"#000000\",\n\tprimaryTextColor: \"#000000\",\n\tsecondaryTextColor: \"#737373\"\n} satisfies Required<ThemeVariables>;\n\nexport type CartInput = ShopifyCart | StorefrontCart;\n\nexport type CartAddItem = {\n\tmerchandiseId: string;\n\tquantity: number;\n};\n\nexport type CartUpdateItem = {\n\tid: string;\n\tmerchandiseId: string;\n\tquantity: number;\n};\n\nexport interface CartProvider<T extends CartInput = CartInput> {\n\tgetCart(): Promise<T | undefined>;\n\tclearCart(): Promise<T>;\n\taddItems(items: CartAddItem[]): Promise<T>;\n\tupdateItems(items: CartUpdateItem[]): Promise<T>;\n\tremoveItems(lineIds: string[]): Promise<T>;\n}\n\nexport type ReturnflowsConfig = Partial<\n\tCommonOptions & {\n\t\tdebug: boolean;\n\t\tcartProvider: CartProvider;\n\t\tgetProductUrl: (product: ShopifyCartItem | OrderProduct) => string;\n\t\tonReady: () => void;\n\t\tonError: (error: Error) => void;\n\t}\n>;\n\nexport interface DrawerAPI {\n\topen(): void;\n\tclose(): void;\n\ttoggle(): void;\n\tisOpen(): boolean;\n}\n\nexport interface DataAPI {\n\tgetCart(): ShopifyCart | null;\n\tgetCalculation(): CalculationResponse | null;\n\tgetOrder(): OrderData | null;\n\tisLoading(): boolean;\n}\n\nexport interface CartAPI {\n\tsetCart(cart: CartInput): Promise<SetCartOutput>;\n\trefetch(): Promise<void>;\n\tclear(): Promise<void>;\n}\n\nexport type SetCartOutput = {\n\tcart: ShopifyCart | null;\n\tcalculation: CalculationResponse | null;\n\thasChanged: boolean;\n};\n\nexport type ToastTone = \"info\" | \"tip\" | \"action\" | \"error\" | \"giftcard\";\n\nexport interface ToastOptions {\n\tmessage: string;\n\ttone?: ToastTone;\n\tduration?: number;\n\tonClose?: () => void;\n}\n\nexport interface ToastAPI {\n\tshow(options: ToastOptions): string;\n\tdismiss(id: string): void;\n\tclear(): void;\n}\n\nexport type EventName =\n\t| \"ready\"\n\t| \"drawer:open\"\n\t| \"drawer:close\"\n\t| \"cart:updated\"\n\t| \"calculation:updated\"\n\t| \"error\";\n\nexport type EventCallback<K extends EventName> = K extends \"error\"\n\t? (error: Error) => void\n\t: K extends \"calculation:updated\"\n\t\t? (calculation: CalculationResponse) => void\n\t\t: K extends \"cart:updated\"\n\t\t\t? (cart: ShopifyCart) => void\n\t\t\t: () => void;\n\nexport interface OrderData {\n\tid: string;\n\torderId: string;\n\torderName: string;\n\tinstantExchange: boolean;\n\tfreeExchangeLabel: boolean;\n\tproductsToExchange: Array<OrderProduct>;\n\ttotalPrice: number;\n}\n\nexport interface ReturnflowsAPI {\n\tinit(config?: ReturnflowsConfig): Promise<void>;\n\tdestroy(): void;\n\tisInitialized(): boolean;\n\treadonly drawer: DrawerAPI;\n\treadonly data: DataAPI;\n\treadonly cart: CartAPI;\n\treadonly toast: ToastAPI;\n\ton<K extends EventName>(event: K, callback: EventCallback<K>): () => void;\n\toff<K extends EventName>(event: K, callback: EventCallback<K>): void;\n\treadonly version: string;\n}\n","import { useMemo } from \"preact/hooks\";\nimport { STORE_DEFAULT_THEME } from \"../../../../api\";\nimport { camelToKebab, hexToHsl } from \"../../utils/helpers\";\nimport useWidgetContext from \"./use-widget-context\";\n\nconst useTheme = () => {\n\tconst {\n\t\tconfig: { theme }\n\t} = useWidgetContext();\n\n\tconst themeVariables = useMemo(() => {\n\t\tconst resolvedTheme: Record<string, string> = { ...STORE_DEFAULT_THEME };\n\t\tfor (const [key, color] of Object.entries(theme ?? {})) {\n\t\t\tif (color) {\n\t\t\t\tresolvedTheme[key] = color;\n\t\t\t}\n\t\t}\n\n\t\treturn Object.entries(resolvedTheme).reduce<Record<string, string>>(\n\t\t\t(acc, [key, color]) => {\n\t\t\t\tconst convertedColor = hexToHsl(color);\n\t\t\t\tconst propertyKey = `--${camelToKebab(key)}`;\n\t\t\t\tacc[propertyKey] = convertedColor;\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, string>\n\t\t) as React.CSSProperties;\n\t}, [theme]);\n\n\treturn {\n\t\ttheme,\n\t\tcssVariables: themeVariables\n\t};\n};\n\nexport default useTheme;\n","import { useRef } from \"preact/hooks\";\nimport { ROOT_ELEMENT_ID } from \"../../lib/constants\";\nimport { RootContext } from \"../../lib/context/root-context\";\nimport useTheme from \"../../lib/hooks/context/use-theme\";\n\nconst RootProvider = (\n\tprops: Omit<\n\t\tReact.HTMLAttributes<HTMLDivElement>,\n\t\t\"id\" | \"style\" | \"className\"\n\t>\n) => {\n\tconst rootRef = useRef<HTMLDivElement | null>(null);\n\tconst { cssVariables } = useTheme();\n\n\treturn (\n\t\t<RootContext.Provider value={rootRef}>\n\t\t\t<div\n\t\t\t\t/* stopPropagation was added to prevent double clicks in ios safari */\n\t\t\t\t/* Fix for CSM-1094 */\n\t\t\t\tonTouchStart={e => e.stopPropagation()}\n\t\t\t\tclassName=\"rf-root\"\n\t\t\t\tref={rootRef}\n\t\t\t\tid={ROOT_ELEMENT_ID}\n\t\t\t\tstyle={cssVariables}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</RootContext.Provider>\n\t);\n};\n\nexport default RootProvider;\n","import { useCallback, useMemo, useState } from \"preact/hooks\";\nimport {\n\tITutorialContext,\n\tTutorial,\n\tTutorialContext,\n\tTutorialState\n} from \"../../lib/context/tutorial-context\";\nimport storage, { STORAGE_TUTORIALS_SEEN_KEY } from \"../../lib/utils/storage\";\n\n// Tracks \"per-load\" tutorials seen this page load; resets on browser refresh.\nconst seenThisPageLoad = new Set<string>();\n\nfunction getSeenTutorials(): string[] {\n\treturn storage.get<string[]>(STORAGE_TUTORIALS_SEEN_KEY) ?? [];\n}\n\nfunction hasSeenTutorial(tutorialId: string): boolean {\n\treturn (\n\t\tgetSeenTutorials().includes(tutorialId) || seenThisPageLoad.has(tutorialId)\n\t);\n}\n\nfunction markTutorialSeen(tutorialId: string): void {\n\tconst seen = getSeenTutorials();\n\tif (!seen.includes(tutorialId)) {\n\t\tstorage.set(STORAGE_TUTORIALS_SEEN_KEY, [...seen, tutorialId]);\n\t}\n}\n\nfunction endTutorial(state: TutorialState): TutorialState {\n\tif (state.status === \"active\") {\n\t\tif (state.tutorial.options?.showMode === \"once\") {\n\t\t\tmarkTutorialSeen(state.tutorial.id);\n\t\t} else if (state.tutorial.options?.showMode === \"first-load\") {\n\t\t\tseenThisPageLoad.add(state.tutorial.id);\n\t\t}\n\t}\n\treturn { status: \"inactive\" };\n}\n\nconst TutorialProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [state, setState] = useState<TutorialState>({ status: \"inactive\" });\n\n\tconst start = useCallback((tutorial: Tutorial) => {\n\t\tif (tutorial.steps.length === 0) {\n\t\t\treturn;\n\t\t}\n\t\tif (hasSeenTutorial(tutorial.id)) {\n\t\t\treturn;\n\t\t}\n\t\tsetState({ status: \"active\", tutorial, stepIndex: 0 });\n\t}, []);\n\n\tconst stop = useCallback(() => {\n\t\tsetState(prev => endTutorial(prev));\n\t}, []);\n\n\tconst next = useCallback(() => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tconst nextIndex = prev.stepIndex + 1;\n\t\t\tif (nextIndex >= prev.tutorial.steps.length) {\n\t\t\t\treturn endTutorial(prev);\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: nextIndex };\n\t\t});\n\t}, []);\n\n\tconst previous = useCallback(() => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: Math.max(0, prev.stepIndex - 1) };\n\t\t});\n\t}, []);\n\n\tconst goToStep = useCallback((stepId: string) => {\n\t\tsetState(prev => {\n\t\t\tif (prev.status !== \"active\") {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tconst index = prev.tutorial.steps.findIndex(step => step.id === stepId);\n\t\t\tif (index === -1) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\treturn { ...prev, stepIndex: index };\n\t\t});\n\t}, []);\n\n\tconst activeTutorial = state.status === \"active\" ? state.tutorial : null;\n\tconst currentStep =\n\t\tstate.status === \"active\" ? state.tutorial.steps[state.stepIndex] : null;\n\n\tconst isStepActive = useCallback(\n\t\t(stepId: string) => currentStep?.id === stepId,\n\t\t[currentStep]\n\t);\n\n\tconst contextValue = useMemo(\n\t\t(): ITutorialContext => ({\n\t\t\tstate,\n\t\t\tactiveTutorial,\n\t\t\tcurrentStep,\n\t\t\tisActive: state.status === \"active\",\n\t\t\tstart,\n\t\t\tstop,\n\t\t\tnext,\n\t\t\tprevious,\n\t\t\tgoToStep,\n\t\t\tisStepActive,\n\t\t\thasSeenTutorial\n\t\t}),\n\t\t[\n\t\t\tstate,\n\t\t\tactiveTutorial,\n\t\t\tcurrentStep,\n\t\t\tstart,\n\t\t\tstop,\n\t\t\tnext,\n\t\t\tprevious,\n\t\t\tgoToStep,\n\t\t\tisStepActive\n\t\t]\n\t);\n\n\treturn (\n\t\t<TutorialContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</TutorialContext.Provider>\n\t);\n};\n\nexport default TutorialProvider;\n","import { useMemo } from \"preact/hooks\";\nimport {\n\tIWidgetContext,\n\tWidgetContext\n} from \"../../lib/context/widget-context\";\nimport useValueState from \"../../lib/hooks/common/use-value-state\";\nimport { ReturnViewState, WidgetViewState } from \"../../lib/types\";\nimport customEvents, {\n\tInternalCustomEvent\n} from \"../../lib/utils/custom-events\";\nimport { removeInertFromElements } from \"../../lib/utils/dom\";\nimport { WidgetConfiguration } from \"../../lib/utils/initialization/types\";\n\ninterface WidgetContextProviderProps extends WidgetConfiguration {\n\tchildren: preact.ComponentChildren;\n}\n\nconst WidgetContextProvider = ({\n\tchildren,\n\t...config\n}: WidgetContextProviderProps) => {\n\t// Drawer state (collapsed, expanded, etc.)\n\tconst widgetViewState = useValueState<WidgetViewState>(\n\t\tWidgetViewState.Collapsed,\n\t\tstate => {\n\t\t\tcustomEvents.publish(InternalCustomEvent.DrawerStateChange, { state });\n\t\t\t// (DEV-1559) Ensure inert is removed from elements when drawer state changes\n\t\t\tremoveInertFromElements();\n\t\t}\n\t);\n\t// Inner drawer state: return product list state (collapsed, expanded, etc.)\n\tconst returnViewState = useValueState<ReturnViewState>(ReturnViewState.Open);\n\n\tconst contextValue = useMemo(\n\t\t(): IWidgetContext => ({\n\t\t\twidgetViewState,\n\t\t\treturnViewState,\n\t\t\tconfig\n\t\t}),\n\t\t[widgetViewState, returnViewState, config]\n\t);\n\n\treturn (\n\t\t<WidgetContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</WidgetContext.Provider>\n\t);\n};\n\nexport default WidgetContextProvider;\n","import { useCallback, useState } from \"preact/hooks\";\nimport {\n\tDEFAULT_TOAST_DURATION,\n\tIToastContext,\n\tTOAST_ANIMATION_DURATION,\n\tToastConfiguration,\n\tToastContext\n} from \"../../lib/context/toast-context\";\nimport { ToastQueue } from \"./toast\";\n\nconst ToastProvider = ({\n\tchildren\n}: {\n\tchildren: preact.ComponentChildren;\n}) => {\n\tconst [queue, setQueue] = useState<ToastQueue[]>([]);\n\n\tconst remove = useCallback((id: string) => {\n\t\tsetQueue(prev =>\n\t\t\tprev.map(toast => {\n\t\t\t\tif (toast.id === id) {\n\t\t\t\t\t// Optionally, you can call the onClose callback if it exists\n\t\t\t\t\ttoast.onClose?.();\n\t\t\t\t}\n\t\t\t\treturn toast.id === id ? { ...toast, isVisible: false } : toast;\n\t\t\t})\n\t\t);\n\t\t// Set a timeout to remove the toast from the queue after the animation duration\n\t\tsetTimeout(() => {\n\t\t\tsetQueue(prev => prev.filter(toast => toast.id !== id));\n\t\t}, TOAST_ANIMATION_DURATION); // Adjust the timeout to match your animation duration\n\t}, []);\n\n\tconst add = useCallback(\n\t\t({ duration = DEFAULT_TOAST_DURATION, ...options }: ToastConfiguration) => {\n\t\t\tconst id = options.id || generateToastId();\n\n\t\t\tsetQueue(prev => {\n\t\t\t\tconst newToast = {\n\t\t\t\t\t...options,\n\t\t\t\t\tid,\n\t\t\t\t\tduration,\n\t\t\t\t\tisVisible: true\n\t\t\t\t};\n\t\t\t\treturn [...prev, newToast];\n\t\t\t});\n\n\t\t\tsetTimeout(() => remove(id), duration);\n\n\t\t\treturn id;\n\t\t},\n\t\t[remove]\n\t);\n\n\tconst clear = useCallback(() => {\n\t\tsetQueue(prev =>\n\t\t\tprev.map(toast => {\n\t\t\t\t// Optionally, you can call the onClose callback for each toast\n\t\t\t\ttoast.onClose?.();\n\t\t\t\treturn { ...toast, isVisible: false };\n\t\t\t})\n\t\t);\n\t\t// Set a timeout to clear the queue after the animation duration\n\t\tsetTimeout(() => {\n\t\t\tsetQueue([]);\n\t\t}, TOAST_ANIMATION_DURATION); // Adjust the timeout to match your animation duration\n\t}, []);\n\n\tconst contextValue: IToastContext = {\n\t\tqueue,\n\t\tadd,\n\t\tremove,\n\t\tclear\n\t};\n\n\treturn (\n\t\t<ToastContext.Provider value={contextValue}>\n\t\t\t{children}\n\t\t</ToastContext.Provider>\n\t);\n};\n\nfunction generateToastId() {\n\treturn `toast-${Math.random().toString(36).substr(2, 9)}`;\n}\n\nexport default ToastProvider;\n","const ActionIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={21}\n\t\theight={21}\n\t\tviewBox=\"0 0 21 21\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--action ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<rect\n\t\t\tx={0.5}\n\t\t\ty={0.679}\n\t\t\twidth={20}\n\t\t\theight={20}\n\t\t\trx={10}\n\t\t\tclassName=\"fill-[var(--icon-fill-1,_#000)]\"\n\t\t/>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M11.517 6.04q.088.055.127.157c.025.066.03.14.013.209l-.775 3.13h2.826q.088 0 .16.052a.3.3 0 0 1 .108.14.35.35 0 0 1-.055.348l-4.083 4.822a.3.3 0 0 1-.168.098.27.27 0 0 1-.187-.037.3.3 0 0 1-.127-.156.35.35 0 0 1-.013-.21l.775-3.129H7.292a.27.27 0 0 1-.16-.053.3.3 0 0 1-.108-.14.35.35 0 0 1 .055-.348l4.083-4.821a.3.3 0 0 1 .168-.098.27.27 0 0 1 .187.037\"\n\t\t\tclassName=\"fill-[var(--icon-fill-2,_#fff)]\"\n\t\t/>\n\t</svg>\n);\nexport default ActionIcon;\n","const InfoIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={21}\n\t\theight={21}\n\t\tviewBox=\"0 0 21 21\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--info ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tclassName=\"fill-[var(--icon-fill-2,_#fff)]\"\n\t\t\td=\"M6.856 4.628h7.288v12.226H6.856z\"\n\t\t/>\n\t\t<path\n\t\t\tclassName=\"fill-[var(--icon-fill-1,_#000)]\"\n\t\t\td=\"M17.572 3.67C13.666-.235 7.335-.236 3.429 3.67c-3.905 3.905-3.905 10.237 0 14.143 3.905 3.904 10.237 3.904 14.143 0 3.905-3.906 3.904-10.238 0-14.143m-5.768 11.419a1.304 1.304 0 1 1-2.609 0V9.87a1.304 1.304 0 1 1 2.61 0zm-1.327-7.447c-.752 0-1.252-.532-1.237-1.19-.015-.688.485-1.204 1.252-1.204s1.252.516 1.268 1.205c0 .657-.5 1.189-1.283 1.189\"\n\t\t/>\n\t</svg>\n);\nexport default InfoIcon;\n","const GiftcardIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={20}\n\t\theight={15}\n\t\tviewBox=\"0 0 20 15\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--giftcard fill-[var(--icon-fill-1,_currentColor)] ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M8.23 3.129c-.288 0-.602.11-.82.37-.284.342-.373 1.362-.363 1.877.48.012 1.4-.001 1.771-.395.39-.411.496-1.13.082-1.568a.9.9 0 0 0-.67-.284m-3.666 0c.288 0 .603.11.82.37.284.342.373 1.362.363 1.877-.48.012-1.399-.001-1.77-.395-.39-.411-.496-1.13-.083-1.568a.9.9 0 0 1 .67-.284\" />\n\t\t<path d=\"M9.806 2.447c.73.773.828 1.99.328 2.929H20V1.948C20 .872 19.178 0 18.165 0H7.038v2.103c.9-.54 2.036-.43 2.768.344.417.44-.732-.775 0 0M4.347 9.21l-.91-.962L4.85 6.74H0v6.312C0 14.128.821 15 1.835 15h3.919V7.71zm3.589-2.47L9.33 8.236l-.912.959-1.38-1.48V15h11.126C19.18 15 20 14.128 20 13.052V6.74zM2.659 5.376c-.5-.939-.403-2.157.327-2.929.732-.775 1.869-.883 2.768-.344V0h-3.92C.822 0 0 .872 0 1.948v3.428z\" />\n\t</svg>\n);\nexport default GiftcardIcon;\n","const WarningIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={30}\n\t\theight={27}\n\t\tviewBox=\"0 0 30 27\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--warning fill-[var(--icon-fill-1,_#000)] ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"M15 18.904c-.81 0-1.49.68-1.49 1.49s.68 1.489 1.49 1.489c.78 0 1.489-.68 1.453-1.454A1.454 1.454 0 0 0 15 18.904\" />\n\t\t<path d=\"M28.784 24.182a5.09 5.09 0 0 0 .012-5.147L19.467 2.88A5.07 5.07 0 0 0 15.006.289c-1.87 0-3.539.97-4.462 2.585l-9.34 16.173a5.13 5.13 0 0 0 .017 5.177 5.1 5.1 0 0 0 4.45 2.555h18.633c1.865 0 3.539-.97 4.48-2.597m-2.025-1.167a2.82 2.82 0 0 1-2.46 1.423H5.665a2.78 2.78 0 0 1-2.43-1.394 2.82 2.82 0 0 1-.006-2.841l9.34-16.167a2.76 2.76 0 0 1 2.437-1.412c1.018 0 1.93.53 2.436 1.417l9.335 16.168c.5.87.494 1.918-.018 2.806\" />\n\t\t<path d=\"M14.63 8.45c-.709.202-1.15.846-1.15 1.626.036.47.066.947.102 1.418l.303 5.343A1.09 1.09 0 0 0 15 17.886c.608 0 1.085-.471 1.114-1.085 0-.369 0-.708.036-1.084.066-1.15.137-2.3.203-3.449.035-.744.101-1.49.137-2.234a1.8 1.8 0 0 0-.137-.744 1.49 1.49 0 0 0-1.722-.84\" />\n\t</svg>\n);\nexport default WarningIcon;\n","import Skeleton from \"../skeleton/skeleton\";\n\nconst BannerSkeleton = () => {\n\treturn <Skeleton className=\"rf-banner-skeleton h-12 rounded-lg\" />;\n};\n\nexport default BannerSkeleton;\n","import { cva, VariantProps } from \"class-variance-authority\";\nimport { memo } from \"preact/compat\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ActionIcon from \"../../icons/banner/action\";\nimport InfoIcon from \"../../icons/banner/info\";\nimport GiftcardIcon from \"../../icons/giftcard\";\nimport WarningIcon from \"../../icons/warning\";\nimport SkeletonContainer from \"../skeleton/skeleton-container\";\nimport BannerSkeleton from \"./banner-skeleton\";\n\nconst variants = cva(\n\t\"rf-banner text-black rounded-lg flex items-center gap-2.5 p-3 min-h-12 font-medium leading-tight\",\n\t{\n\t\tvariants: {\n\t\t\ttone: {\n\t\t\t\tinfo: \"rf-banner--info bg-banner-info-background [--icon-fill-1:hsl(var(--rf-c-banner-info-foreground))]\",\n\t\t\t\ttip: \"rf-banner--tip bg-banner-tip-background [--icon-fill-1:hsl(var(--rf-c-banner-tip-foreground))]\",\n\t\t\t\taction:\n\t\t\t\t\t\"rf-banner--action bg-banner-action-background [--icon-fill-1:hsl(var(--rf-c-banner-action-foreground))]\",\n\t\t\t\terror:\n\t\t\t\t\t\"rf-banner--error bg-banner-error-background [--icon-fill-1:hsl(var(--rf-c-banner-error-foreground))]\",\n\t\t\t\tgiftcard:\n\t\t\t\t\t\"rf-banner--giftcard bg-[#F1F3FE] [--icon-fill-1:hsl(var(--rf-c-primary))]\"\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\tdashed: \"border border-dashed border-[color:var(--icon-fill-1)]\"\n\t\t\t}\n\t\t},\n\t\tdefaultVariants: {\n\t\t\ttone: \"info\"\n\t\t}\n\t}\n);\n\ntype Variants = VariantProps<typeof variants>;\n\nexport type BannerTone = NonNullable<Variants[\"tone\"]>;\n\ninterface BannerProps extends React.HTMLAttributes<HTMLElement>, Variants {\n\ticon?: BannerTone;\n\tpending?: boolean;\n}\n\nconst Banner = ({\n\tclassName,\n\tchildren,\n\ttone,\n\tborder,\n\ticon,\n\tpending = false,\n\t...props\n}: BannerProps) => {\n\treturn (\n\t\t<SkeletonContainer skeleton={<BannerSkeleton />} pending={pending}>\n\t\t\t<aside className={cn(variants({ tone, border }), className)} {...props}>\n\t\t\t\t{renderIcon(icon ?? tone ?? \"info\")}\n\t\t\t\t<span className=\"rf-banner__text flex-1\">{children}</span>\n\t\t\t</aside>\n\t\t</SkeletonContainer>\n\t);\n};\n\nconst COMMON_ICON_PROPS: React.SVGProps<SVGSVGElement> = {\n\tclassName: \"rf-banner__icon\",\n\twidth: 20,\n\theight: 20\n};\n\nfunction renderIcon(icon: BannerTone) {\n\tswitch (icon) {\n\t\tcase \"action\":\n\t\t\treturn <ActionIcon {...COMMON_ICON_PROPS} />;\n\t\tcase \"error\":\n\t\t\treturn <WarningIcon {...COMMON_ICON_PROPS} />;\n\t\tcase \"giftcard\":\n\t\t\treturn <GiftcardIcon {...COMMON_ICON_PROPS} />;\n\t\tdefault:\n\t\t\treturn <InfoIcon {...COMMON_ICON_PROPS} />;\n\t}\n}\n\nexport default memo(Banner);\n","import { useTranslations } from \"use-intl\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport Banner from \"../../ui/banner/banner\";\nimport BannerSkeleton from \"../../ui/banner/banner-skeleton\";\n\nconst ExchangeBanner = () => {\n\tconst t = useTranslations(\"banner\");\n\tconst { orderState, calculationState } = useReturnContext();\n\n\tconst hasInstantExchange =\n\t\torderState.value.data?.orderData.instantExchange ?? false;\n\tconst returnLabelPrice = calculationState.value.data?.returnLabelPrice ?? 0;\n\n\tif (!orderState.value.data || !calculationState.value.data) {\n\t\treturn <BannerSkeleton />;\n\t}\n\n\tif (hasInstantExchange) {\n\t\treturn (\n\t\t\t<Banner className=\"rf-exchange-banner\" tone=\"action\">\n\t\t\t\t{t(\"fast_exchange\")}\n\t\t\t</Banner>\n\t\t);\n\t}\n\n\tif (returnLabelPrice === 0) {\n\t\treturn (\n\t\t\t<Banner className=\"rf-exchange-banner\" tone=\"tip\">\n\t\t\t\t{t(\"free_shipping_label\")}\n\t\t\t</Banner>\n\t\t);\n\t}\n\n\treturn <Banner className=\"rf-exchange-banner\">{t(\"exchange_info\")}</Banner>;\n};\n\nexport default ExchangeBanner;\n","import { useCallback } from \"preact/hooks\";\nimport { NumberFormatOptions, useFormatter } from \"use-intl\";\nimport { parseToNumber } from \"../../utils/helpers\";\nimport { DEFAULT_CURRENCY } from \"../../utils/i18n\";\nimport useReturnContext from \"./use-return-context\";\nimport useWidgetContext from \"./use-widget-context\";\n\ntype TCurrencyDisplayOptions = NumberFormatOptions[\"currencyDisplay\"] | \"none\";\n\ninterface ICurrencyFormatOptions extends Omit<\n\tNumberFormatOptions,\n\t\"style\" | \"currencyDisplay\"\n> {\n\tcurrencyDisplay?: TCurrencyDisplayOptions;\n\tfractionDigits?: number;\n}\n\nconst useCurrency = (hookOptions: ICurrencyFormatOptions = {}) => {\n\tconst { config } = useWidgetContext();\n\tconst { calculationState, cartState } = useReturnContext();\n\n\tconst cartCurrency = cartState.value.data?.transformed.currency;\n\tconst calcCurrency = calculationState.value.data?.currency.localCurrency;\n\n\tconst resolvedCurrencyCode =\n\t\thookOptions.currency ||\n\t\tcalcCurrency ||\n\t\tconfig.currency ||\n\t\tcartCurrency ||\n\t\tDEFAULT_CURRENCY;\n\n\tconst formatter = useFormatter();\n\n\tconst applyExchangeRate = useCallback(\n\t\t(value: number, exchangeRate?: number) => {\n\t\t\tconst currencyObject = calculationState.value.data?.currency;\n\t\t\tconst resolvedExchangeRate =\n\t\t\t\texchangeRate ?? parseToNumber(currencyObject?.exchangeRate, 1);\n\t\t\treturn value * resolvedExchangeRate;\n\t\t},\n\t\t[calculationState.value.data]\n\t);\n\n\tconst format = useCallback(\n\t\t(value: number | string, options?: ICurrencyFormatOptions) => {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tvalue = parseFloat(value);\n\t\t\t}\n\n\t\t\tconst { fractionDigits = 2, ...mergedOptions } = {\n\t\t\t\t...hookOptions,\n\t\t\t\t...options\n\t\t\t};\n\t\t\tconst { currencyDisplay, ...formatOptions }: ICurrencyFormatOptions = {\n\t\t\t\tcurrency: resolvedCurrencyCode,\n\t\t\t\tminimumFractionDigits: fractionDigits,\n\t\t\t\tmaximumFractionDigits: fractionDigits,\n\t\t\t\t...mergedOptions\n\t\t\t};\n\n\t\t\tif (currencyDisplay === \"none\") {\n\t\t\t\treturn formatter.number(value, formatOptions);\n\t\t\t}\n\n\t\t\treturn formatter.number(value, {\n\t\t\t\tstyle: \"currency\",\n\t\t\t\tcurrencyDisplay,\n\t\t\t\t...formatOptions\n\t\t\t});\n\t\t},\n\t\t[formatter, hookOptions, resolvedCurrencyCode]\n\t);\n\n\treturn { format, applyExchangeRate, currency: resolvedCurrencyCode };\n};\n\nexport default useCurrency;\n","import { useMemo } from \"preact/hooks\";\nimport { parseToNumber } from \"../../utils/helpers\";\nimport useCurrency from \"./use-currency\";\nimport useReturnContext from \"./use-return-context\";\n\ninterface CalculationComputationResult {\n\torderTotal: number;\n\tcartTotal: number;\n\treturnTotal: number;\n\tgiftcardValue: number;\n\ttotalPriceDiscount: number;\n\tgiftCardBonusAmount: number;\n\treturnLabelPrice: number;\n\tisRefunding: boolean;\n}\n\nconst useCalculation = () => {\n\tconst { applyExchangeRate } = useCurrency();\n\tconst { calculationState, cartState } = useReturnContext();\n\n\tconst cart = cartState.value.data;\n\tconst calculation = calculationState.value.data;\n\n\tconst itemCount = cartState.value.data?.transformed.item_count ?? 0;\n\n\tconst computedTotals: CalculationComputationResult = useMemo(() => {\n\t\tif (!calculation || !cart) {\n\t\t\treturn {\n\t\t\t\torderTotal: 0,\n\t\t\t\tcartTotal: 0,\n\t\t\t\treturnTotal: 0,\n\t\t\t\tgiftcardValue: 0,\n\t\t\t\ttotalPriceDiscount: 0,\n\t\t\t\tgiftCardBonusAmount: 0,\n\t\t\t\treturnLabelPrice: 0,\n\t\t\t\tisRefunding: false\n\t\t\t};\n\t\t}\n\t\tconst {\n\t\t\torderSubtotal: orderTotal,\n\t\t\treturnSubtotal,\n\t\t\ttotal,\n\t\t\trefundMethods,\n\t\t\texchange,\n\t\t\tgiftCardBonusAmount,\n\t\t\treturnLabelPrice\n\t\t} = calculation;\n\n\t\t// Exchange coverage + discount applied to exchange\n\t\tconst totalPriceDiscount = applyExchangeRate(\n\t\t\texchange?.discountSummary.adjustedDiscountTotal ?? 0\n\t\t);\n\n\t\tconst giftcardValue = parseToNumber(\n\t\t\tapplyExchangeRate(refundMethods?.giftcard)\n\t\t);\n\n\t\tconst cartTotal = applyExchangeRate(returnSubtotal) - giftcardValue;\n\n\t\tconst returnTotal = Math.abs(applyExchangeRate(total));\n\n\t\treturn {\n\t\t\torderTotal: applyExchangeRate(orderTotal),\n\t\t\tcartTotal,\n\t\t\treturnTotal,\n\t\t\tgiftcardValue,\n\t\t\ttotalPriceDiscount,\n\t\t\tgiftCardBonusAmount: applyExchangeRate(giftCardBonusAmount),\n\t\t\treturnLabelPrice: applyExchangeRate(returnLabelPrice),\n\t\t\tisRefunding: total > 0\n\t\t};\n\t}, [calculation, cart, applyExchangeRate]);\n\n\treturn {\n\t\titemCount,\n\t\t...computedTotals\n\t};\n};\n\nexport default useCalculation;\n","const StarIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={12}\n\t\theight={12}\n\t\tviewBox=\"0 0 13 13\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--star ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"m6.11 1.06 1.7 3.62 3.8.584-2.75 2.817.65 3.979-3.4-1.88-3.398 1.88.649-3.98L.61 5.265l3.8-.584z\"\n\t\t\tfill=\"currentColor\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={1.111}\n\t\t\tstrokeLinecap=\"round\"\n\t\t\tstrokeLinejoin=\"round\"\n\t\t/>\n\t</svg>\n);\nexport default StarIcon;\n","import { memo } from \"preact/compat\";\nimport useCurrency from \"../../lib/hooks/context/use-currency\";\nimport { cn, isNil } from \"../../lib/utils/helpers\";\nimport Skeleton from \"./skeleton/skeleton\";\nimport SkeletonContainer from \"./skeleton/skeleton-container\";\n\ninterface PriceProps extends React.HTMLAttributes<HTMLSpanElement> {\n\tvalue?: number;\n\tcompareAtValue?: number;\n\tpending?: boolean;\n}\n\nconst Price = ({\n\tvalue = 0,\n\tcompareAtValue,\n\tpending,\n\tchildren,\n\tclassName,\n\t...props\n}: PriceProps) => {\n\tconst { format: formatToCurrency } = useCurrency();\n\n\tconst isDiscounted =\n\t\t!isNil(compareAtValue) && trimNumber(compareAtValue) > trimNumber(value);\n\n\treturn (\n\t\t<SkeletonContainer\n\t\t\tskeleton={<Skeleton className=\"w-20\" />}\n\t\t\tpending={pending}\n\t\t>\n\t\t\t<span\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rf-price font-medium text-base inline-flex flex-col items-end\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<span className=\"rf-price__value\">{formatToCurrency(value)}</span>\n\t\t\t\t{isDiscounted && (\n\t\t\t\t\t<span className=\"rf-price__compare-at text-affirmative line-through text-xs\">\n\t\t\t\t\t\t{formatToCurrency(compareAtValue)}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t\t{children}\n\t\t\t</span>\n\t\t</SkeletonContainer>\n\t);\n};\n\nfunction trimNumber(num: number, decimals: number = 2) {\n\treturn Number(num.toFixed(decimals));\n}\n\nexport default memo(Price);\n","import Skeleton from \"../../../ui/skeleton/skeleton\";\n\nconst AdjustmentsTableSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-adjustments-table-skeleton space-y-2\">\n\t\t\t<Skeleton className=\"h-5 w-full\" />\n\t\t\t<Skeleton className=\"h-5 w-full\" />\n\t\t</div>\n\t);\n};\n\nexport default AdjustmentsTableSkeleton;\n","import { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../../../lib/hooks/context/use-calculation\";\nimport useCurrency from \"../../../../lib/hooks/context/use-currency\";\nimport useReturnContext from \"../../../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../../../lib/utils/helpers\";\nimport GiftcardIcon from \"../../../icons/giftcard\";\nimport StarIcon from \"../../../icons/star\";\nimport Price from \"../../../ui/price\";\nimport AdjustmentsTableSkeleton from \"./adjustments-table-skeleton\";\n\nconst AdjustmentsTable = () => {\n\tconst t = useTranslations();\n\tconst { format: formatToCurrency } = useCurrency();\n\tconst { calculationState } = useReturnContext();\n\n\tconst {\n\t\tcartTotal,\n\t\tgiftcardValue,\n\t\tgiftCardBonusAmount,\n\t\treturnLabelPrice,\n\t\ttotalPriceDiscount\n\t} = useCalculation();\n\n\tconst showDiscountRow = totalPriceDiscount > 0;\n\tconst showGiftcardRow = giftcardValue > 0;\n\tconst showLabelPriceRow = returnLabelPrice > 0;\n\n\tif (!calculationState.value.data) {\n\t\treturn (\n\t\t\t<div className=\"rf-adjustments-table-loading p-base border-t border-neutral-2\">\n\t\t\t\t<AdjustmentsTableSkeleton />\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div className=\"rf-adjustments-table p-base border-t border-neutral-2\">\n\t\t\t<table className=\"rf-adjustments-table__table w-full\">\n\t\t\t\t<tbody className=\"rf-adjustments-table__body\">\n\t\t\t\t\t{showDiscountRow && (\n\t\t\t\t\t\t<Row value={totalPriceDiscount * -1} className=\"text-affirmative\">\n\t\t\t\t\t\t\t{t(\"price_details.price_change\")}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{showLabelPriceRow && (\n\t\t\t\t\t\t<Row value={returnLabelPrice} className=\"text-neutral-3\">\n\t\t\t\t\t\t\t{t(\"price_details.return_label\")}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{cartTotal > 0 && (\n\t\t\t\t\t\t<Row value={cartTotal}>{t(\"price_details.products\")}</Row>\n\t\t\t\t\t)}\n\t\t\t\t\t{showGiftcardRow && (\n\t\t\t\t\t\t<Row className=\"text-primary\" value={giftcardValue}>\n\t\t\t\t\t\t\t<span className=\"align-middle\">\n\t\t\t\t\t\t\t\t<GiftcardIcon className=\"inline -mt-1 w-4 h-auto\" />{\" \"}\n\t\t\t\t\t\t\t\t{t(\"price_details.giftcard\")}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{giftCardBonusAmount > 0 && (\n\t\t\t\t\t\t\t\t<span className=\"text-sm text-reward align-middle\">\n\t\t\t\t\t\t\t\t\t+{formatToCurrency(giftCardBonusAmount)}{\" \"}\n\t\t\t\t\t\t\t\t\t<StarIcon className=\"inline -mt-0.5\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Row>\n\t\t\t\t\t)}\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t</div>\n\t);\n};\n\nfunction Row({\n\tvalue,\n\tchildren,\n\tclassName\n}: {\n\tvalue: number;\n} & React.HTMLAttributes<HTMLTableRowElement>) {\n\treturn (\n\t\t<tr className={cn(\"rf-adjustments-table__row h-6 group/row\", className)}>\n\t\t\t<th\n\t\t\t\tscope=\"row\"\n\t\t\t\tclassName=\"rf-adjustments-table__label space-x-2 font-normal text-left group-first/row:pt-0 group-last/row:pb-0 py-0.5\"\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</th>\n\t\t\t<td className=\"rf-adjustments-table__value text-right\">\n\t\t\t\t<Price value={value} />\n\t\t\t</td>\n\t\t</tr>\n\t);\n}\n\nexport default AdjustmentsTable;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport ExchangeBanner from \"./exchange-banner\";\nimport AdjustmentsTable from \"./table/adjustments-table\";\n\nconst ExchangeAdjustments = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-exchange-adjustments border-t border-neutral-2\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-exchange-adjustments__banner p-base\">\n\t\t\t\t<ExchangeBanner />\n\t\t\t</div>\n\t\t\t<AdjustmentsTable />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeAdjustments;\n","import { useTranslations } from \"use-intl\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\n\nconst AnnoucementBar = () => {\n\tconst t = useTranslations(\"announcement\");\n\tconst { cartState } = useReturnContext();\n\n\tconst itemCount = cartState.value.data?.transformed.item_count;\n\n\tconst stepSnippet = (itemCount ?? 0) === 0 ? \"step_1\" : \"step_2\";\n\n\treturn (\n\t\t<div className=\"rf-announcement-bar h-14 bg-announcement-background text-announcement-foreground px-base flex items-center justify-between text-sm\">\n\t\t\t<ReturnAvatarStack />\n\t\t\t<div className=\"rf-announcement-bar__content space-x-1\">\n\t\t\t\t<span className=\"rf-announcement-bar__step-label text-neutral-3\">\n\t\t\t\t\t{t(\"this_step\")}\n\t\t\t\t</span>\n\t\t\t\t<span className=\"rf-announcement-bar__step-text\">{t(stepSnippet)}</span>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default AnnoucementBar;\n","import { cn } from \"../../lib/utils/helpers\";\nimport WarningIcon from \"../icons/warning\";\n\ninterface ErrorScreenProps extends React.HTMLAttributes<HTMLDivElement> {\n\terrorMessage?: string;\n\tinstructionMessage?: string;\n}\n\nconst ErrorScreen = ({\n\tclassName,\n\terrorMessage = \"Der skete en fejl!\",\n\tinstructionMessage = \"Opdater siden og prøv igen.\",\n\t...props\n}: ErrorScreenProps) => {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"rf-error-screen p-base flex-1\", className)}\n\t\t\trole=\"alert\"\n\t\t\taria-live=\"assertive\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-error-screen__content bg-[#FEF2F2] rounded-lg p-base flex flex-col items-center justify-center gap-1 text-center size-full\">\n\t\t\t\t<WarningIcon className=\"mb-2 fill-destructive\" aria-hidden=\"true\" />\n\t\t\t\t<p\n\t\t\t\t\tclassName=\"rf-error-screen__message text-neutral-3\"\n\t\t\t\t\tid=\"error-heading\"\n\t\t\t\t>\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</p>\n\t\t\t\t<p className=\"rf-error-screen__instruction\">{instructionMessage}</p>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ErrorScreen;\n","import { useLocale } from \"use-intl\";\nimport navigation from \"../../utils/navigation\";\nimport useWidgetContext from \"../context/use-widget-context\";\n\nconst useNavigation = () => {\n\tconst locale = useLocale();\n\tconst {\n\t\tconfig: {\n\t\t\tdata: { slug }\n\t\t}\n\t} = useWidgetContext();\n\n\tif (!slug) {\n\t\tthrow new Error(\n\t\t\t\"useNavigation must be used within a WidgetContextProvider with a valid slug\"\n\t\t);\n\t}\n\n\treturn {\n\t\tback: () => navigation.back(locale, slug),\n\t\tcontinue: () => navigation.continue(locale, slug),\n\t\texit: navigation.exit\n\t};\n};\n\nexport default useNavigation;\n","import { useTranslations } from \"use-intl\";\nimport { DIALOG_PRIORITY } from \"../../lib/context/dialog-queue-context\";\nimport WarningIcon from \"../icons/warning\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport Avatar from \"../ui/avatar/avatar\";\nimport Dialog, { DialogModalProps } from \"./common\";\n\nconst EmptyExchangeDialog = (dialog: Omit<DialogModalProps, \"priority\">) => {\n\tconst t = useTranslations(\"dialog.empty_exchange\");\n\n\treturn (\n\t\t<Dialog.Modal\n\t\t\tclassName=\"text-center flex flex-col gap-2 items-center\"\n\t\t\t{...dialog}\n\t\t\tpriority={DIALOG_PRIORITY.emptyExchange}\n\t\t>\n\t\t\t<ReturnAvatarStack>\n\t\t\t\t{zIndex => (\n\t\t\t\t\t<Avatar className=\"flex\" style={{ zIndex }}>\n\t\t\t\t\t\t<WarningIcon className=\"size-3 m-auto -translate-y-px fill-warning\" />\n\t\t\t\t\t</Avatar>\n\t\t\t\t)}\n\t\t\t</ReturnAvatarStack>\n\t\t\t<Dialog.Title>{t(\"title\")}</Dialog.Title>\n\t\t\t<Dialog.Subtitle>{t(\"subtext\")}</Dialog.Subtitle>\n\t\t\t<Dialog.Accept>{t(\"confirm\")}</Dialog.Accept>\n\t\t\t<Dialog.Reject>{t(\"reject\")}</Dialog.Reject>\n\t\t</Dialog.Modal>\n\t);\n};\n\nexport default EmptyExchangeDialog;\n","import { useTranslations } from \"use-intl\";\nimport useDialog from \"../../lib/hooks/common/use-dialog\";\nimport useCalculation from \"../../lib/hooks/context/use-calculation\";\nimport useErrors from \"../../lib/hooks/context/use-errors\";\nimport useNavigation from \"../../lib/hooks/context/use-navigation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport EmptyExchangeDialog from \"../dialog/empty-exchange-dialog\";\nimport ArrowRightIcon from \"../icons/arrow-right\";\nimport Button from \"../ui/button\";\nimport Price from \"../ui/price\";\n\nconst ExchangeConfirmation = () => {\n\tconst t = useTranslations(\"confirmation\");\n\tconst navigation = useNavigation();\n\n\tconst {\n\t\tcalculationState,\n\t\tupdateSessionCacheState,\n\t\tisPending: globalPendingState,\n\t\thasFailed\n\t} = useReturnContext();\n\tconst { isRefunding, returnTotal, itemCount } = useCalculation();\n\tconst { errors } = useErrors();\n\n\tconst blockingErrors = errors.filter(error => error.blocking);\n\n\tconst canContinue =\n\t\t!hasFailed &&\n\t\t!globalPendingState &&\n\t\t!updateSessionCacheState.value.pending &&\n\t\tblockingErrors.length === 0;\n\n\tconst hasExchangeProducts = itemCount > 0;\n\n\tfunction continueIfPossible() {\n\t\tif (!canContinue) return;\n\n\t\tnavigation.continue();\n\t}\n\n\tconst emptyExchangeDialog = useDialog({\n\t\tonConfirm: state => {\n\t\t\tstate.set(false);\n\t\t\tcontinueIfPossible();\n\t\t}\n\t});\n\n\tfunction handleContinue() {\n\t\tif (!canContinue) return;\n\n\t\tif (!hasExchangeProducts) {\n\t\t\temptyExchangeDialog.state.set(true);\n\t\t\treturn;\n\t\t}\n\n\t\tcontinueIfPossible();\n\t}\n\n\treturn (\n\t\t<div className=\"rf-exchange-confirmation rounded-t-2xl bg-neutral-1 p-base pb-safe-offset-base space-y-2\">\n\t\t\t<div className=\"rf-exchange-confirmation__header flex justify-between items-center pb-2\">\n\t\t\t\t<h3 className=\"rf-exchange-confirmation__title font-medium\">\n\t\t\t\t\t{isRefunding ? t(\"title_refund\") : t(\"title_checkout\")}\n\t\t\t\t</h3>\n\t\t\t\t<Price value={returnTotal} pending={calculationState.value.pending} />\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tdisabled={!canContinue}\n\t\t\t\tonClick={handleContinue}\n\t\t\t\tclassName=\"w-full\"\n\t\t\t\ticon={ArrowRightIcon}\n\t\t\t>\n\t\t\t\t<span>\n\t\t\t\t\t{hasExchangeProducts\n\t\t\t\t\t\t? t(\"confirm_exchange\")\n\t\t\t\t\t\t: t(\"confirm_no_exchange\")}\n\t\t\t\t</span>\n\t\t\t</Button>\n\t\t\t<p className=\"rf-exchange-confirmation__disclaimer text-sm text-neutral-3 text-center mx-auto font-normal\">\n\t\t\t\t{hasExchangeProducts\n\t\t\t\t\t? t(\"disclaimer_exchange\")\n\t\t\t\t\t: t(\"disclaimer_no_exchange\")}\n\t\t\t</p>\n\t\t\t<EmptyExchangeDialog {...emptyExchangeDialog.register()} />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeConfirmation;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport RejectButton from \"../ui/reject-button\";\n\nconst ExchangeHeader = () => {\n\tconst t = useTranslations(\"common\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className=\"rf-exchange-header border-t border-neutral-3 p-base flex items-center justify-between\">\n\t\t\t<h2 className=\"rf-exchange-header__title text-xl font-semibold\">\n\t\t\t\t{t(\"title\")}\n\t\t\t</h2>\n\t\t\t<RejectButton\n\t\t\t\tshowLabel\n\t\t\t\tclassName=\"rf-exchange-header__close-button\"\n\t\t\t\tlabelProps={{ className: \"rf-exchange-header__close-text\" }}\n\t\t\t\tonClick={() => widgetViewState.set(WidgetViewState.Collapsed)}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nexport default ExchangeHeader;\n","const CartIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={28}\n\t\theight={27}\n\t\tviewBox=\"0 0 28 27\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--cart ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M8.094 20.443c-1.223-.066-1.2-1.856 0-1.919 3.4.013 12.367.004 15.875.006.96 0 1.78-.68 1.996-1.652l1.992-8.979a1.77 1.77 0 0 0-.316-1.46 1.62 1.62 0 0 0-1.293-.653c-1.41 0-13.39-.057-19.525-.082L5.85 1.947C5.617 1.05 4.83.423 3.936.423H.821C.367.423 0 .805 0 1.277s.367.854.82.854h3.116c.154 0 .29.108.33.262L8 16.818a2.5 2.5 0 0 0-1.732.793 2.7 2.7 0 0 0-.738 1.919c.025 1.445 1.174 2.621 2.563 2.621H9.29a3.1 3.1 0 0 0-.278 1.282c0 1.648 1.289 2.99 2.873 2.99s2.872-1.341 2.872-2.99c0-.459-.1-.893-.277-1.282h5.182a3.1 3.1 0 0 0-.277 1.281c0 1.649 1.288 2.99 2.872 2.99s2.873-1.341 2.873-2.99a3.1 3.1 0 0 0-.299-1.326.85.85 0 0 0 .56-.81c0-.47-.368-.853-.822-.853zm5.023 2.99c0 .706-.552 1.281-1.231 1.281-.68 0-1.232-.575-1.232-1.281 0-.707.552-1.281 1.23-1.282h.003c.678 0 1.23.575 1.23 1.282m9.141 1.28c-.678 0-1.23-.574-1.23-1.28 0-.7.54-1.27 1.21-1.282h.04c.67.011 1.212.582 1.212 1.281 0 .707-.553 1.282-1.232 1.282M26.355 7.5q.005.009.003.015l-.84 3.783h-2.842l.484-3.817 3.182.013q.006-.002.013.006m-8.462 9.322v-3.815h2.91l-.483 3.815zm-4.07 0-.488-3.815h2.916v3.815zm-3.779 0h-.002a.45.45 0 0 1-.428-.341l-.9-3.475h2.965l.488 3.816zm3.073-5.524-.494-3.861 3.628.015v3.846zm4.776 0v-3.84l3.612.016-.485 3.824zM10.966 7.43l.495 3.868H8.27L7.267 7.414zm13.003 9.392h-1.993l.483-3.815h2.68l-.773 3.486a.41.41 0 0 1-.397.329\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default CartIcon;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport CartIcon from \"../icons/cart\";\n\nconst ExchangePlaceholder = () => {\n\tconst t = useTranslations(\"exchange_placeholder\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className=\"rf-exchange-placeholder px-base pb-base\">\n\t\t\t<div className=\"rf-exchange-placeholder__content border border-dashed border-[#DDDDDD] h-36 rounded-md flex items-center justify-center flex-col gap-2 font-medium text-base p-base\">\n\t\t\t\t<CartIcon className=\"text-neutral-3\" />\n\t\t\t\t<span className=\"rf-exchange-placeholder__text\">\n\t\t\t\t\t{t(\"prompt_text\")}\n\t\t\t\t</span>\n\t\t\t\t<button\n\t\t\t\t\tonClick={() => widgetViewState.set(WidgetViewState.Collapsed)}\n\t\t\t\t\tclassName=\"rf-exchange-placeholder__continue text-button-background decoration-[color:hsla(var(--rf-c-button-background),_0.25)] underline-offset-4 underline text-sm cursor-pointer\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t{t(\"continue\")}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ExchangePlaceholder;\n","import useErrors from \"../../../lib/hooks/context/use-errors\";\nimport Banner from \"../../ui/banner/banner\";\n\nconst ProductErrors = () => {\n\tconst { errors } = useErrors();\n\n\tif (errors.length === 0) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div className=\"rf-product-errors rf-product-view__error-list px-base pb-base space-y-base\">\n\t\t\t{errors.map(({ id, message }) => (\n\t\t\t\t<Banner\n\t\t\t\t\tkey={id}\n\t\t\t\t\tclassName=\"rf-product-view__error animate-slide-up-and-fade-in\"\n\t\t\t\t\ttone=\"error\"\n\t\t\t\t>\n\t\t\t\t\t{message}\n\t\t\t\t</Banner>\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default ProductErrors;\n","import { OrderProduct, ShopifyCartItem } from \"../../../lib/types\";\n\nexport interface QuantityPickerConstraints {\n\tmin: {\n\t\tlimit: number;\n\t\tdisabled: boolean;\n\t};\n\tmax: {\n\t\tlimit: number;\n\t\tdisabled: boolean;\n\t};\n}\n\nexport const DEFAULT_CONSTRAINTS: QuantityPickerConstraints = {\n\tmin: { limit: 1, disabled: false },\n\tmax: { limit: 99, disabled: true }\n};\n\nexport function getNormalizedQuantityRule(\n\tquantityRule: ShopifyCartItem[\"quantity_rule\"]\n) {\n\tconst minQuantity = quantityRule?.min ?? 1;\n\tconst maxQuantity = quantityRule?.max ?? 99;\n\tconst increment = quantityRule?.increment ?? 1;\n\n\tconst constraints: QuantityPickerConstraints = {\n\t\tmin: { limit: minQuantity, disabled: false },\n\t\tmax: { limit: maxQuantity, disabled: true }\n\t};\n\n\treturn {\n\t\tmin: minQuantity,\n\t\tmax: maxQuantity,\n\t\tincrement,\n\t\tconstraints\n\t};\n}\n\nexport function getSafeProductUrl(\n\tgetProductUrl:\n\t\t| ((product: ShopifyCartItem | OrderProduct) => string)\n\t\t| undefined,\n\tproduct: ShopifyCartItem | OrderProduct\n): string {\n\tconst fallback = `/products/${product.handle}`;\n\tif (!getProductUrl) return fallback;\n\ttry {\n\t\tconst url = getProductUrl(product);\n\t\treturn typeof url === \"string\" && url ? url : fallback;\n\t} catch {\n\t\treturn fallback;\n\t}\n}\n\nexport function clampQuantity(\n\tquantity: number,\n\tconstraints: QuantityPickerConstraints = DEFAULT_CONSTRAINTS\n) {\n\treturn Math.max(\n\t\tconstraints.min.limit,\n\t\tMath.min(quantity, constraints.max.limit)\n\t);\n}\n","import { useCallback } from \"preact/hooks\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport { logger } from \"../../../lib/utils/logger\";\nimport Icon from \"../../icons/icon\";\nimport {\n\tclampQuantity,\n\tDEFAULT_CONSTRAINTS,\n\tQuantityPickerConstraints\n} from \"./product.utils\";\n\ninterface QuantityPickerProps extends React.HTMLAttributes<HTMLDivElement> {\n\tonIncrement: (isAtBound: boolean) => void | Promise<void>;\n\tonDecrement: (isAtBound: boolean) => void | Promise<void>;\n\tquantity: number;\n\tconstraints?: QuantityPickerConstraints;\n\tpending?: boolean;\n\tdisabled?: boolean;\n}\n\nconst QuantityPicker = ({\n\tonIncrement,\n\tonDecrement,\n\tconstraints = DEFAULT_CONSTRAINTS,\n\tquantity,\n\tpending = false,\n\tdisabled = false,\n\tclassName,\n\t...props\n}: QuantityPickerProps) => {\n\tconst isDisabled = pending || disabled;\n\n\tconst isAtMin = quantity === constraints.min.limit;\n\tconst isAtMax = quantity === constraints.max.limit;\n\n\tconst incrementDisabled = (constraints.max.disabled && isAtMax) || isDisabled;\n\tconst decrementDisabled = (constraints.min.disabled && isAtMin) || isDisabled;\n\n\tconst handleIncrement = useCallback(async () => {\n\t\tif (incrementDisabled) return;\n\t\ttry {\n\t\t\tawait onIncrement(isAtMax);\n\t\t} catch (err) {\n\t\t\tlogger.error(\"Increment failed:\", err);\n\t\t}\n\t}, [incrementDisabled, onIncrement, isAtMax]);\n\n\tconst handleDecrement = useCallback(async () => {\n\t\tif (decrementDisabled) return;\n\t\ttry {\n\t\t\tawait onDecrement(isAtMin);\n\t\t} catch (err) {\n\t\t\tlogger.error(\"decrement failed:\", err);\n\t\t}\n\t}, [decrementDisabled, onDecrement, isAtMin]);\n\n\tconst clampedQuantity = clampQuantity(quantity, constraints);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-quantity-picker rounded-full p-1 border border-button-secondary-background flex items-center h-min gap-2 transition-opacity\",\n\t\t\t\tisDisabled &&\n\t\t\t\t\t\"rf-quantity-picker--disabled opacity-50 cursor-not-allowed\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"rf-quantity-picker__decrement-button disabled:!opacity-50 desktop:hover:opacity-80 disabled:cursor-not-allowed transition-opacity\"\n\t\t\t\tdisabled={decrementDisabled}\n\t\t\t\tonClick={handleDecrement}\n\t\t\t>\n\t\t\t\t<Icon variant=\"solid-inverse\" size=\"sm\">\n\t\t\t\t\t<span className=\"rf-quantity-picker__decrement-icon text-base leading-none -mt-0.5\">\n\t\t\t\t\t\t-\n\t\t\t\t\t</span>\n\t\t\t\t</Icon>\n\t\t\t</button>\n\t\t\t<div className=\"rf-quantity-picker__quantity px-1.5 flex-1 text-base\">\n\t\t\t\t{clampedQuantity}\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclassName=\"rf-quantity-picker__increment-button disabled:!opacity-50 desktop:hover:opacity-80 disabled:cursor-not-allowed transition-opacity\"\n\t\t\t\tdisabled={incrementDisabled}\n\t\t\t\tonClick={handleIncrement}\n\t\t\t>\n\t\t\t\t<Icon variant=\"solid-inverse\" size=\"sm\">\n\t\t\t\t\t<span className=\"rf-quantity-picker__increment-icon text-base leading-none -mt-0.5\">\n\t\t\t\t\t\t+\n\t\t\t\t\t</span>\n\t\t\t\t</Icon>\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nexport default QuantityPicker;\n","import { memo } from \"preact/compat\";\nimport { useCallback, useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport useErrors from \"../../../lib/hooks/context/use-errors\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport useCartActions from \"../../../lib/hooks/feature/use-cart-actions\";\nimport { ShopifyCartItem } from \"../../../lib/types\";\nimport { updateCartItemQuantity } from \"../../../lib/utils/cart\";\nimport {\n\tgetErrorStateFromCode,\n\tProductErrorState\n} from \"../../../lib/utils/errors\";\nimport { isNil } from \"../../../lib/utils/helpers\";\nimport { getNormalizedQuantityRule } from \"./product.utils\";\nimport QuantityPicker from \"./quantity-picker\";\n\ninterface ProductActionsProps {\n\tvariantId: number;\n\tquantity?: number;\n\tquantityRule: ShopifyCartItem[\"quantity_rule\"];\n}\n\nconst ProductActions = ({\n\tvariantId,\n\tquantity,\n\tquantityRule\n}: ProductActionsProps) => {\n\tconst t = useTranslations(\"product\");\n\tconst [isPending, setIsPending] = useState(false);\n\tconst { cartState, isPending: anyStatePending } = useReturnContext();\n\tconst errors = useErrors();\n\tconst { processCartUpdate } = useCartActions();\n\n\tconst handleQuantityChange = useCallback(\n\t\tasync (newQuantity: number) => {\n\t\t\tsetIsPending(true);\n\n\t\t\tconst errorId = ProductErrorState.ProductLimit;\n\n\t\t\ttry {\n\t\t\t\t// Start loading state\n\t\t\t\tcartState.set(prev => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tpending: true,\n\t\t\t\t\terror: null\n\t\t\t\t}));\n\n\t\t\t\tconst updatedCart = await updateCartItemQuantity({\n\t\t\t\t\tvariantId,\n\t\t\t\t\tquantity: newQuantity\n\t\t\t\t});\n\n\t\t\t\tawait processCartUpdate(updatedCart);\n\n\t\t\t\t// Remove the error if it exists\n\t\t\t\tif (errors.has(errorId)) {\n\t\t\t\t\terrors.remove(errorId);\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tconst error = err as Error;\n\t\t\t\tconst parsed = parseInt(error.message);\n\t\t\t\tconst errorCode = isNaN(parsed) ? null : parsed;\n\n\t\t\t\tcartState.set(prev => ({\n\t\t\t\t\t...prev,\n\t\t\t\t\tpending: false\n\t\t\t\t}));\n\n\t\t\t\terrors.push({\n\t\t\t\t\tid: errorId,\n\t\t\t\t\tmessage: t(`error.${getErrorStateFromCode(errorCode)}`)\n\t\t\t\t});\n\t\t\t} finally {\n\t\t\t\tsetIsPending(false);\n\t\t\t}\n\t\t},\n\t\t[cartState, variantId, errors, t, processCartUpdate]\n\t);\n\n\tif (isNil(quantity)) {\n\t\treturn null;\n\t}\n\n\tconst { increment, constraints } = getNormalizedQuantityRule(quantityRule);\n\n\treturn (\n\t\t<div className=\"rf-product-actions flex items-center\">\n\t\t\t<QuantityPicker\n\t\t\t\tpending={anyStatePending || isPending}\n\t\t\t\tconstraints={constraints}\n\t\t\t\tonDecrement={isAtBound => {\n\t\t\t\t\tconst newQuantity = isAtBound ? 0 : quantity - increment;\n\t\t\t\t\thandleQuantityChange(newQuantity);\n\t\t\t\t}}\n\t\t\t\tonIncrement={() => {\n\t\t\t\t\tconst newQuantity = quantity + increment;\n\t\t\t\t\thandleQuantityChange(newQuantity);\n\t\t\t\t}}\n\t\t\t\tquantity={quantity}\n\t\t\t/>\n\t\t\t<button\n\t\t\t\tdisabled={anyStatePending || isPending}\n\t\t\t\tclassName=\"rf-product-actions__remove-button underline ml-auto text-sm disabled:cursor-not-allowed disabled:opacity-50 transition-opacity cursor-pointer\"\n\t\t\t\tonClick={() => handleQuantityChange(0)}\n\t\t\t\ttype=\"button\"\n\t\t\t>\n\t\t\t\t{t(\"remove\")}\n\t\t\t</button>\n\t\t</div>\n\t);\n};\n\nexport default memo(ProductActions);\n","import { cn } from \"../../lib/utils/helpers\";\n\ninterface LinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tdisabled?: boolean;\n\tunstyled?: boolean;\n\tonDisabledClick?: (e: React.MouseEvent<HTMLAnchorElement>) => void;\n}\n\nconst Link = ({\n\tclassName,\n\thref,\n\tunstyled = false,\n\tonClick,\n\tonDisabledClick,\n\tdisabled = false,\n\t...props\n}: LinkProps) => {\n\tconst isDisabled = disabled || !href;\n\n\tfunction handleClick(e: React.MouseEvent<HTMLAnchorElement>) {\n\t\tif (disabled) {\n\t\t\te.preventDefault();\n\t\t\tonDisabledClick?.(e);\n\t\t\treturn;\n\t\t}\n\t\tonClick?.(e);\n\t}\n\n\treturn (\n\t\t<a\n\t\t\tonClick={handleClick}\n\t\t\thref={isDisabled ? undefined : href}\n\t\t\taria-disabled={isDisabled}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-link block\",\n\t\t\t\t!unstyled && \"transition-opacity\",\n\t\t\t\tisDisabled\n\t\t\t\t\t? unstyled\n\t\t\t\t\t\t? \"cursor-default\"\n\t\t\t\t\t\t: \"cursor-not-allowed opacity-50\"\n\t\t\t\t\t: \"cursor-pointer\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Link;\n","import { memo } from \"preact/compat\";\nimport { useTranslations } from \"use-intl\";\nimport useCurrency from \"../../../lib/hooks/context/use-currency\";\nimport { cn, isNil, parseToNumber } from \"../../../lib/utils/helpers\";\nimport Link from \"../../ui/link\";\nimport Price from \"../../ui/price\";\n\nexport interface ProductAttributesAttributes {\n\ttitle: string;\n\tvariantTitle: string | null | undefined;\n\tpending?: boolean;\n\tprice: number | null | undefined;\n\tcompareAtPrice: number | null | undefined;\n\tquantity: number;\n\thref?: string;\n\texchangeRate?: number;\n}\n\ninterface ProductAttributesProps\n\textends\n\t\tOmit<React.HTMLAttributes<HTMLDivElement>, \"children\" | \"title\">,\n\t\tProductAttributesAttributes {\n\tshowQuantity?: boolean;\n}\n\nconst ProductAttributes = ({\n\ttitle,\n\tvariantTitle,\n\tpending = false,\n\tprice,\n\tcompareAtPrice,\n\tclassName,\n\tquantity = 1,\n\thref,\n\tshowQuantity = true,\n\texchangeRate,\n\t...props\n}: ProductAttributesProps) => {\n\tconst t = useTranslations();\n\tconst { applyExchangeRate } = useCurrency();\n\tconst quantityIsVisible = quantity > 1 && showQuantity;\n\n\tconst resolvedCompareAt = !isNil(compareAtPrice)\n\t\t? applyExchangeRate(parseToNumber(compareAtPrice), exchangeRate)\n\t\t: undefined;\n\n\tconst resolvedPrice = applyExchangeRate(parseToNumber(price), exchangeRate);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-product-attributes flex justify-between gap-4 text-sm leading-tight\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div className=\"rf-product-attributes__info flex-1 min-w-0\">\n\t\t\t\t{href ? (\n\t\t\t\t\t<Link unstyled href={href} className=\"rf-product-attributes__link\">\n\t\t\t\t\t\t<h3 className=\"rf-product-attributes__title text-base font-medium line-clamp-1\">\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</h3>\n\t\t\t\t\t</Link>\n\t\t\t\t) : (\n\t\t\t\t\t<h3 className=\"rf-product-attributes__title text-base font-medium line-clamp-1\">\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h3>\n\t\t\t\t)}\n\t\t\t\t{(variantTitle || quantityIsVisible) && (\n\t\t\t\t\t<h4 className=\"rf-product-attributes__variant text-neutral-3\">\n\t\t\t\t\t\t{variantTitle}{\" \"}\n\t\t\t\t\t\t{quantityIsVisible && (\n\t\t\t\t\t\t\t<span className=\"rf-product-attributes__quantity\">\n\t\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t{t(\"piece\", {\n\t\t\t\t\t\t\t\t\tcount: quantity\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</h4>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t<Price\n\t\t\t\tpending={pending}\n\t\t\t\tvalue={resolvedPrice}\n\t\t\t\tcompareAtValue={resolvedCompareAt}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\nexport default memo(ProductAttributes);\n","import { memo } from \"preact/compat\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../../lib/types\";\nimport Image from \"../../ui/image\";\n\ninterface ProductImageProps {\n\timageSource: string;\n\ttitle: string;\n\thref: string;\n}\n\nconst ProductImage = ({ imageSource, title, href }: ProductImageProps) => {\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst handleAnchorClick = () =>\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\n\treturn (\n\t\t<a className=\"rf-product-image\" href={href} onClick={handleAnchorClick}>\n\t\t\t<Image\n\t\t\t\tclassName=\"rf-product-image__img w-[70px] h-24 rounded-lg border border-neutral-1 object-cover\"\n\t\t\t\tsrc={imageSource}\n\t\t\t\talt={title}\n\t\t\t/>\n\t\t</a>\n\t);\n};\n\nexport default memo(ProductImage);\n","import { CalculationExchangeProduct } from \"../../../../api\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { ShopifyCartItem } from \"../../../lib/types\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport ProductActions from \"./product-actions\";\nimport ProductAttributes from \"./product-attributes\";\nimport ProductImage from \"./product-image\";\nimport { getSafeProductUrl } from \"./product.utils\";\n\nexport interface ExtendedShopifyProduct extends ShopifyCartItem {\n\tcalculation: Omit<CalculationExchangeProduct, \"coverage\"> | undefined;\n}\n\ninterface ProductProps extends Omit<\n\tReact.HTMLAttributes<HTMLLIElement>,\n\t\"children\" | \"title\" | \"id\" | \"key\"\n> {\n\tproduct: ExtendedShopifyProduct;\n}\n\nconst Product = ({\n\tproduct: { calculation, ...product },\n\tclassName,\n\t...props\n}: ProductProps) => {\n\tconst {\n\t\tconfig: { options }\n\t} = useWidgetContext();\n\n\tconst href = getSafeProductUrl(options.getProductUrl, product);\n\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\"rf-product flex gap-4 p-base first:pt-0\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<ProductImage\n\t\t\t\timageSource={product.image}\n\t\t\t\ttitle={product.product_title}\n\t\t\t\thref={href}\n\t\t\t/>\n\t\t\t<div className=\"rf-product__content space-y-2 flex-1\">\n\t\t\t\t<ProductAttributes\n\t\t\t\t\tclassName=\"flex-1\"\n\t\t\t\t\thref={href}\n\t\t\t\t\ttitle={product.product_title}\n\t\t\t\t\tvariantTitle={product.variant_title}\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tprice={calculation?.price}\n\t\t\t\t\tcompareAtPrice={calculation?.compareAtPrice}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\tshowQuantity={false}\n\t\t\t\t/>\n\t\t\t\t<ProductActions\n\t\t\t\t\tvariantId={product.variant_id}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\tquantityRule={product.quantity_rule}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</li>\n\t);\n};\n\nexport default Product;\n","import useCartItems from \"../../../lib/hooks/context/use-cart-items\";\nimport Product from \"./product\";\n\nconst ProductList = () => {\n\tconst { cartItems } = useCartItems();\n\n\treturn (\n\t\t<ul className=\"rf-product-list border-neutral-2 divide-y divide-neutral-2\">\n\t\t\t{cartItems.map((product, i) => {\n\t\t\t\tconst key = `${product.id}-${i}`;\n\t\t\t\treturn <Product key={key} product={product} />;\n\t\t\t})}\n\t\t</ul>\n\t);\n};\n\nexport default ProductList;\n","import { useMemo } from \"preact/hooks\";\nimport { ExtendedShopifyProduct } from \"../../../components/drawer/product/product\";\nimport { CalculationExchangeProduct } from \"../../utils/queries\";\nimport { stripShopifyId } from \"../../utils/shopify\";\nimport useReturnContext from \"./use-return-context\";\n\n/**\n * Merges cart items with their corresponding exchange calculation details.\n * Returns cart items enriched with pricing information from the calculation state.\n */\nconst useCartItems = () => {\n\tconst { cartState, calculationState } = useReturnContext();\n\n\tconst transformedCart = cartState.value.data?.transformed;\n\tconst exchangeDetails =\n\t\tcalculationState.value.data?.exchange?.exchangeDetails;\n\n\tconst cartItems: ExtendedShopifyProduct[] = useMemo(() => {\n\t\tconst items = transformedCart?.items;\n\n\t\tif (!items) return [];\n\n\t\treturn items.map(item => {\n\t\t\tlet calculation: Omit<CalculationExchangeProduct, \"coverage\"> | undefined;\n\n\t\t\tconst exchangeDetailItems = exchangeDetails?.filter(exchangeItem => {\n\t\t\t\tif (exchangeItem.variantId) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\tNumber(stripShopifyId(exchangeItem.variantId)) === item.variant_id\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn (\n\t\t\t\t\tNumber(stripShopifyId(exchangeItem.productId)) === item.product_id\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tif (exchangeDetailItems && exchangeDetailItems.length > 0) {\n\t\t\t\t// Aggregate pricing from all matching exchange detail items for this cart item\n\t\t\t\tcalculation = exchangeDetailItems.reduce(\n\t\t\t\t\t(acc, { coverage, ...curr }) => {\n\t\t\t\t\t\tconst resolvedCurrPrice = coverage?.originalUnitPrice ?? curr.price;\n\n\t\t\t\t\t\tconst resolvedCompareAt =\n\t\t\t\t\t\t\tcoverage?.exchangeUnitPrice ?? curr.compareAtPrice ?? null;\n\n\t\t\t\t\t\tif (resolvedCompareAt) {\n\t\t\t\t\t\t\tif (!acc.compareAtPrice) {\n\t\t\t\t\t\t\t\tacc.compareAtPrice = resolvedCompareAt;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tacc.compareAtPrice += resolvedCompareAt;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tacc.price += resolvedCurrPrice;\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...curr,\n\t\t\t\t\t\t\t...acc\n\t\t\t\t\t\t};\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tprice: 0,\n\t\t\t\t\t\tcompareAtPrice: null\n\t\t\t\t\t} as Omit<CalculationExchangeProduct, \"coverage\">\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tcalculation\n\t\t\t};\n\t\t});\n\t}, [transformedCart, exchangeDetails]);\n\n\treturn { cartItems };\n};\n\nexport default useCartItems;\n","const ArrowDownIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={9}\n\t\theight={11}\n\t\tviewBox=\"0 0 9 11\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-down ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"m4.92 10.824 3.907-3.972A.6.6 0 0 0 9 6.426.6.6 0 0 0 8.827 6l-.355-.36a.594.594 0 0 0-.842 0L5.346 7.957V.594A.583.583 0 0 0 4.764 0h-.502a.605.605 0 0 0-.608.594v7.39L1.357 5.64a.58.58 0 0 0-.831 0L.172 6A.6.6 0 0 0 0 6.426c0 .161.062.312.173.426l3.907 3.972A.58.58 0 0 0 4.5 11a.58.58 0 0 0 .42-.176\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\n\nexport default ArrowDownIcon;\n","const ChevronIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={7}\n\t\tviewBox=\"0 0 11 7\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--chevron ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M10.632 6.183a.95.95 0 0 1-.673.24.97.97 0 0 1-.652-.288l-3.375-3.49-3.375 3.49a.96.96 0 0 1-.652.287.96.96 0 0 1-.673-.24.9.9 0 0 1-.299-.625.88.88 0 0 1 .25-.646L5.244.71a.97.97 0 0 1 1.375 0l4.062 4.2a.9.9 0 0 1 .25.646.9.9 0 0 1-.3.626\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default ChevronIcon;\n","import { useEffect, useRef, useState } from \"preact/hooks\";\nimport { cn } from \"../../lib/utils/helpers\";\n\ninterface ExpanderProps extends Omit<\n\tReact.HTMLAttributes<HTMLDivElement>,\n\t\"onToggle\"\n> {\n\tisOpen: boolean;\n\tcollapseDelay?: number;\n\tautoCloseAfter?: number;\n\tonToggle?: (isOpen: boolean) => void;\n}\n\nconst Expander = ({\n\tisOpen,\n\tclassName,\n\tstyle,\n\tchildren,\n\tcollapseDelay = 300,\n\tautoCloseAfter,\n\tonToggle,\n\t...props\n}: ExpanderProps) => {\n\tconst [isRendered, setIsRendered] = useState(isOpen);\n\tconst [height, setHeight] = useState<number | undefined>(\n\t\tisOpen ? undefined : 0\n\t);\n\tconst containerRef = useRef<HTMLDivElement>(null);\n\tconst collapseTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\tconst autoCloseTimeoutRef = useRef<ReturnType<typeof setTimeout>>();\n\n\t// Measure height whenever content might change\n\tconst measureHeight = () => {\n\t\tconst container = containerRef.current;\n\t\tif (container) {\n\t\t\tsetHeight(container.scrollHeight);\n\t\t}\n\t};\n\n\t// Handle opening/closing state changes\n\tuseEffect(() => {\n\t\tif (collapseTimeoutRef.current) {\n\t\t\tclearTimeout(collapseTimeoutRef.current);\n\t\t}\n\t\tif (autoCloseTimeoutRef.current) {\n\t\t\tclearTimeout(autoCloseTimeoutRef.current);\n\t\t}\n\n\t\tif (isOpen) {\n\t\t\t// Opening: render first, then measure height\n\t\t\tsetIsRendered(true);\n\n\t\t\t// Set up auto-close timer if specified\n\t\t\tif (autoCloseAfter && onToggle) {\n\t\t\t\tautoCloseTimeoutRef.current = setTimeout(() => {\n\t\t\t\t\tonToggle(false);\n\t\t\t\t}, autoCloseAfter);\n\t\t\t}\n\t\t} else {\n\t\t\t// Closing: set height to 0 immediately, unmount after delay\n\t\t\tsetHeight(0);\n\t\t\tcollapseTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetIsRendered(false);\n\t\t\t}, collapseDelay);\n\t\t}\n\n\t\treturn () => {\n\t\t\tif (collapseTimeoutRef.current) {\n\t\t\t\tclearTimeout(collapseTimeoutRef.current);\n\t\t\t}\n\t\t\tif (autoCloseTimeoutRef.current) {\n\t\t\t\tclearTimeout(autoCloseTimeoutRef.current);\n\t\t\t}\n\t\t};\n\t}, [isOpen, collapseDelay, autoCloseAfter, onToggle]);\n\n\t// Measure height when rendered and opened\n\tuseEffect(() => {\n\t\tif (isRendered && isOpen) {\n\t\t\t// Use requestAnimationFrame to ensure DOM is updated\n\t\t\tconst frame = requestAnimationFrame(() => {\n\t\t\t\tmeasureHeight();\n\t\t\t});\n\t\t\treturn () => cancelAnimationFrame(frame);\n\t\t}\n\t}, [isRendered, isOpen, children]);\n\n\t// Re-measure height if content changes while open\n\tuseEffect(() => {\n\t\tif (isOpen && isRendered) {\n\t\t\tmeasureHeight();\n\t\t}\n\t}, [children, isOpen, isRendered]);\n\n\tif (!isRendered) return null;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-expander overflow-hidden transition-all duration-300 ease-in-out\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle={{\n\t\t\t\theight: height !== undefined ? `${height}px` : \"auto\",\n\t\t\t\t...(typeof style === \"object\" ? style : {})\n\t\t\t}}\n\t\t\t{...props}\n\t\t>\n\t\t\t<div ref={containerRef}>{children}</div>\n\t\t</div>\n\t);\n};\n\nexport default Expander;\n","import { useTranslations } from \"use-intl\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport GiftcardIcon from \"../../icons/giftcard\";\n\nexport type BadgeType = \"giftcard\";\n\nexport interface ProductBadgeProps {\n\ttype: BadgeType | null;\n}\n\ntype ReturnProductBadgeProps = React.HTMLAttributes<HTMLDivElement> &\n\tProductBadgeProps;\n\nconst ReturnProductBadge = ({\n\tclassName,\n\ttype,\n\t...props\n}: ReturnProductBadgeProps) => {\n\tconst t = useTranslations(\"product.badge\");\n\n\tswitch (type) {\n\t\tcase \"giftcard\":\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"rf-return-product-badge rf-return-product__badge rf-return-product__badge--giftcard text-base text-primary\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<GiftcardIcon className=\"inline -mt-1 w-4 h-auto\" /> {t(\"giftcard\")}\n\t\t\t\t</div>\n\t\t\t);\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport default ReturnProductBadge;\n","import { useTranslations } from \"use-intl\";\nimport Link from \"../../ui/link\";\nimport ReturnProductBadge, { ProductBadgeProps } from \"./return-product-badge\";\n\ninterface ReturnProductActionsProps extends ProductBadgeProps {\n\tpending?: boolean;\n\tdeleted?: boolean;\n\tonDeletedClick?: () => void;\n\thref: string;\n\thandleAnchorClick: () => void;\n}\n\nconst ReturnProductActions = ({\n\tpending = false,\n\tdeleted = false,\n\thref,\n\tonDeletedClick,\n\thandleAnchorClick,\n\t...rest\n}: ReturnProductActionsProps) => {\n\tconst t = useTranslations(\"product\");\n\n\tfunction handleDeletedClick() {\n\t\tif (deleted) {\n\t\t\tonDeletedClick?.();\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"rf-return-product-actions rf-return-product__actions flex justify-between items-center\">\n\t\t\t<Link\n\t\t\t\tonDisabledClick={handleDeletedClick}\n\t\t\t\tdisabled={pending || deleted}\n\t\t\t\tonClick={handleAnchorClick}\n\t\t\t\tclassName=\"rf-return-product__link text-sm underline block\"\n\t\t\t\thref={href}\n\t\t\t>\n\t\t\t\t{t(\"go_to_product\")}\n\t\t\t</Link>\n\t\t\t<ReturnProductBadge {...rest} />\n\t\t</div>\n\t);\n};\n\nexport default ReturnProductActions;\n","import { useMemo, useState } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport { CalculationLineItem } from \"../../../../api\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { OrderProduct, WidgetViewState } from \"../../../lib/types\";\nimport { cn, isNil } from \"../../../lib/utils/helpers\";\nimport Banner from \"../../ui/banner/banner\";\nimport Expander from \"../../ui/expander\";\nimport Image from \"../../ui/image\";\nimport Link from \"../../ui/link\";\nimport ProductAttributes from \"../product/product-attributes\";\nimport { getSafeProductUrl } from \"../product/product.utils\";\nimport ReturnProductActions from \"./return-product-actions\";\nimport { BadgeType } from \"./return-product-badge\";\n\nexport interface ExtendedCalculationLineItem extends OrderProduct {\n\tcalculation: CalculationLineItem | undefined;\n}\n\nexport interface IReturnProductAttributes {\n\thandle: string;\n\timageSource: string;\n}\n\ninterface ReturnProductProps extends Omit<\n\tReact.HTMLAttributes<HTMLLIElement>,\n\t\"children\" | \"title\"\n> {\n\tproduct: ExtendedCalculationLineItem;\n\tallProducts: ExtendedCalculationLineItem[];\n}\n\nconst ReturnProduct = ({\n\tproduct: { calculation, ...product },\n\tallProducts,\n\tclassName,\n\t...props\n}: ReturnProductProps) => {\n\tconst t = useTranslations(\"product.error\");\n\tconst [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n\tconst {\n\t\twidgetViewState,\n\t\tconfig: {\n\t\t\toptions,\n\t\t\tdata: { formData }\n\t\t}\n\t} = useWidgetContext();\n\n\tconst href = getSafeProductUrl(options.getProductUrl, product);\n\n\tfunction handleAnchorClick() {\n\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t}\n\n\tconst qty = product?.quantity ?? 1;\n\n\tconst price = (calculation?.price ?? 0) * qty;\n\tconst compareAtPrice = (calculation?.originalPrice ?? 0) * qty;\n\n\tconst badgeType: BadgeType | null = useMemo(() => {\n\t\tconst allActions = allProducts\n\t\t\t.flatMap(item => {\n\t\t\t\tif (item.id !== product.id) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tconst returnItems = formData?.selectedItems?.filter(\n\t\t\t\t\treturnItem => returnItem.lineItemId === item.shopifyLineId\n\t\t\t\t);\n\t\t\t\tif (!returnItems || returnItems.length === 0) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\t// Return the action from calculation instead of from item\n\t\t\t\treturn item.calculation?.action;\n\t\t\t})\n\t\t\t.filter(item => !isNil(item));\n\n\t\tconst multipleTypes = new Set(allActions).size > 1;\n\n\t\tconst action = calculation?.action;\n\n\t\tif (multipleTypes || !action) {\n\t\t\treturn null;\n\t\t}\n\n\t\tswitch (action) {\n\t\t\tcase \"GIFTCARD\":\n\t\t\t\treturn \"giftcard\";\n\t\t\tdefault:\n\t\t\t\treturn null;\n\t\t}\n\t}, [calculation?.action, allProducts, product.id, formData?.selectedItems]);\n\n\tconst isDeleted = !calculation?.variantId;\n\n\tfunction handleDeletedClick() {\n\t\tif (!isDeleted) {\n\t\t\treturn;\n\t\t}\n\t\tsetErrorMessage(t(\"product_unavailable\"));\n\t}\n\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-return-product grid grid-cols-[max-content_1fr] gap-x-4 p-base\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Link\n\t\t\t\tdisabled={isDeleted}\n\t\t\t\tonDisabledClick={handleDeletedClick}\n\t\t\t\tclassName=\"rf-return-product__image-link\"\n\t\t\t\tonClick={handleAnchorClick}\n\t\t\t\thref={href}\n\t\t\t\tunstyled\n\t\t\t>\n\t\t\t\t<Image\n\t\t\t\t\tclassName=\"rf-return-product__image size-[70px] rounded-lg border border-neutral-1 object-cover\"\n\t\t\t\t\tsrc={product.image}\n\t\t\t\t\talt={product.title}\n\t\t\t\t/>\n\t\t\t</Link>\n\t\t\t<div className=\"rf-return-product__content flex-1 space-y-1 flex flex-col justify-between\">\n\t\t\t\t<ProductAttributes\n\t\t\t\t\tclassName=\"text-neutral-3\"\n\t\t\t\t\thref={href}\n\t\t\t\t\ttitle={product.title}\n\t\t\t\t\tvariantTitle={product.variantTitle}\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tprice={price}\n\t\t\t\t\tcompareAtPrice={compareAtPrice}\n\t\t\t\t\tquantity={product.quantity}\n\t\t\t\t\texchangeRate={calculation?.exchangeRate ?? 1}\n\t\t\t\t/>\n\t\t\t\t<ReturnProductActions\n\t\t\t\t\tpending={!calculation}\n\t\t\t\t\tdeleted={isDeleted}\n\t\t\t\t\thref={href}\n\t\t\t\t\tonDeletedClick={handleDeletedClick}\n\t\t\t\t\thandleAnchorClick={handleAnchorClick}\n\t\t\t\t\ttype={badgeType}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Expander\n\t\t\t\tclassName=\"col-span-full\"\n\t\t\t\tisOpen={!!errorMessage}\n\t\t\t\tautoCloseAfter={5000}\n\t\t\t\tonToggle={bool => setErrorMessage(!bool ? null : errorMessage)}\n\t\t\t>\n\t\t\t\t<div className=\"pt-4\">\n\t\t\t\t\t<Banner tone=\"error\">{errorMessage}</Banner>\n\t\t\t\t</div>\n\t\t\t</Expander>\n\t\t</li>\n\t);\n};\n\nexport default ReturnProduct;\n","import { cn } from \"../../../lib/utils/helpers\";\nimport Skeleton from \"../../ui/skeleton/skeleton\";\n\nconst ReturnProductSkeleton = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLLIElement>) => {\n\treturn (\n\t\t<li\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-return-product-skeleton flex gap-4 p-base text-sm\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<Skeleton className=\"size-[70px] rounded-lg\" />\n\t\t\t<div className=\"rf-return-product-skeleton__content flex-1 space-y-1 flex flex-col justify-between\">\n\t\t\t\t<div className=\"rf-return-product-skeleton__info space-y-1\">\n\t\t\t\t\t<Skeleton className=\"w-[16ch]\" />\n\t\t\t\t\t<Skeleton className=\"text-xs w-[12ch]\" />\n\t\t\t\t</div>\n\t\t\t\t<Skeleton className=\"text-xs w-[16ch]\" />\n\t\t\t</div>\n\t\t\t<Skeleton className=\"w-[8ch]\" />\n\t\t</li>\n\t);\n};\n\nexport default ReturnProductSkeleton;\n","import { useMemo } from \"preact/hooks\";\nimport { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../../lib/hooks/context/use-calculation\";\nimport useReturnContext from \"../../../lib/hooks/context/use-return-context\";\nimport useWidgetContext from \"../../../lib/hooks/context/use-widget-context\";\nimport { ReturnViewState } from \"../../../lib/types\";\nimport ArrowDownIcon from \"../../icons/arrow-down\";\nimport ChevronIcon from \"../../icons/chevron\";\nimport Icon from \"../../icons/icon\";\nimport Banner from \"../../ui/banner/banner\";\nimport Price from \"../../ui/price\";\nimport SkeletonContainer from \"../../ui/skeleton/skeleton-container\";\nimport ReturnProduct, { ExtendedCalculationLineItem } from \"./return-product\";\nimport ReturnProductSkeleton from \"./return-product-skeleton\";\n\nconst ReturnProductList = () => {\n\tconst t = useTranslations(\"return_products\");\n\tconst { returnViewState } = useWidgetContext();\n\tconst { orderState, calculationState } = useReturnContext();\n\n\tconst { orderTotal } = useCalculation();\n\n\tconst isPending = calculationState.initialFetch;\n\n\tconst lineItems = calculationState.value.data?.lineItems;\n\tconst exchangeProducts = orderState.value.data?.orderData.productsToExchange;\n\n\tconst extendedLineItems: ExtendedCalculationLineItem[] = useMemo(() => {\n\t\tif (!lineItems || !exchangeProducts) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn exchangeProducts.map(exchangeProduct => {\n\t\t\tconst lineItem = lineItems.find(\n\t\t\t\titem => item.lineItemId === exchangeProduct.shopifyLineId\n\t\t\t);\n\n\t\t\treturn {\n\t\t\t\t...exchangeProduct,\n\t\t\t\tcalculation: lineItem\n\t\t\t};\n\t\t});\n\t}, [lineItems, exchangeProducts]);\n\n\tconst hasGiftcardItem = Boolean(\n\t\textendedLineItems?.some(item => item.calculation?.action === \"GIFTCARD\")\n\t);\n\n\tfunction onToggle() {\n\t\treturnViewState.set(prev =>\n\t\t\tprev === ReturnViewState.Collapsed\n\t\t\t\t? ReturnViewState.Open\n\t\t\t\t: ReturnViewState.Collapsed\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-return-product-list border-b border-neutral-2 relative mb-base group [&[data-state='OPEN']]:mb-[calc(var(--rf-base-spacing)*2)]\"\n\t\t\tdata-state={returnViewState.value}\n\t\t>\n\t\t\t<div className=\"rf-return-product-list__header flex justify-between items-center p-base\">\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"rf-return-product-list__toggle-button flex items-center gap-2 font-medium\"\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t>\n\t\t\t\t\t<span className=\"rf-return-product-list__toggle-text\">\n\t\t\t\t\t\t{t(\"action\")}\n\t\t\t\t\t</span>\n\t\t\t\t\t<ChevronIcon\n\t\t\t\t\t\tclassName={`transition-transform will-change-transform ${\n\t\t\t\t\t\t\treturnViewState.value === ReturnViewState.Open\n\t\t\t\t\t\t\t\t? \"rotate-180\"\n\t\t\t\t\t\t\t\t: \"rotate-0\"\n\t\t\t\t\t\t}`}\n\t\t\t\t\t/>\n\t\t\t\t</button>\n\t\t\t\t<Price value={orderTotal} pending={isPending} />\n\t\t\t</div>\n\t\t\t{/* This is being set with CSS to later support a potential animation */}\n\t\t\t<div className=\"rf-return-product-list__content pb-base group-[&[data-state='COLLAPSED']]:hidden\">\n\t\t\t\t{hasGiftcardItem && (\n\t\t\t\t\t<div className=\"rf-return-product-list__container p-base pt-0\">\n\t\t\t\t\t\t<Banner className=\"rf-return-product-list__banner\" tone=\"giftcard\">\n\t\t\t\t\t\t\t{t(\"banner.giftcard\")}\n\t\t\t\t\t\t</Banner>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t\t<ul className=\"rf-return-product-list__items divide-y divide-neutral-2\">\n\t\t\t\t\t<SkeletonContainer\n\t\t\t\t\t\tpending={isPending}\n\t\t\t\t\t\tskeleton={\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t<ReturnProductSkeleton />\n\t\t\t\t\t\t\t\t<ReturnProductSkeleton />\n\t\t\t\t\t\t\t</>\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{extendedLineItems.map(lineItem => (\n\t\t\t\t\t\t\t<ReturnProduct\n\t\t\t\t\t\t\t\tclassName=\"first:pt-0\"\n\t\t\t\t\t\t\t\tkey={lineItem.id}\n\t\t\t\t\t\t\t\tproduct={lineItem}\n\t\t\t\t\t\t\t\tallProducts={extendedLineItems}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</SkeletonContainer>\n\t\t\t\t</ul>\n\t\t\t\t<Icon\n\t\t\t\t\tclassName=\"absolute inset-x-0 mx-auto bottom-0 translate-y-1/2\"\n\t\t\t\t\tvariant=\"solid\"\n\t\t\t\t\ticon={ArrowDownIcon}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ReturnProductList;\n","import useYScrollable from \"../../lib/hooks/common/use-y-scrollable\";\nimport ArrowDownIcon from \"../icons/arrow-down\";\n\ninterface ScrollIndicatorProps {\n\tcontainerRef: React.RefObject<HTMLDivElement>;\n}\n\nconst ScrollIndicator = ({ containerRef }: ScrollIndicatorProps) => {\n\tconst { isYScrollable, isDirty } = useYScrollable(containerRef);\n\n\tconst isVisible = !isDirty && isYScrollable;\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-scroll-indicator w-full h-36 bg-gradient-to-t from-white to-transparent absolute bottom-full inset-x-0 flex items-end justify-center p-base transition-all pointer-events-none\"\n\t\t\tstyle={{\n\t\t\t\topacity: isVisible ? 1 : 0,\n\t\t\t\tvisibility: isVisible ? \"visible\" : \"hidden\"\n\t\t\t}}\n\t\t>\n\t\t\t<div className=\"rf-scroll-indicator__content rounded-full py-2.5 w-24 bg-neutral-1 text-center space-x-1 align-middle\">\n\t\t\t\t<span className=\"rf-scroll-indicator__text\">Scroll</span>{\" \"}\n\t\t\t\t<ArrowDownIcon className=\"inline text-neutral-3 -mt-0.5\" />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ScrollIndicator;\n","import type { RefObject } from \"preact\";\nimport { useEffect, useState } from \"preact/hooks\";\n\ninterface UseYScrollableReturn extends ScrollState {\n\tisYScrollable: boolean;\n}\n\ninterface ScrollState {\n\tisDirty: boolean;\n\tisScrolling: boolean;\n}\n\nconst useYScrollable = <T extends HTMLElement>(\n\tref: RefObject<T>\n): UseYScrollableReturn => {\n\tconst [isYScrollable, setIsYScrollable] = useState(false);\n\tconst [{ isScrolling, isDirty }, setScrollState] = useState<ScrollState>({\n\t\tisDirty: false,\n\t\tisScrolling: false\n\t});\n\n\tuseEffect(() => {\n\t\tconst element = ref.current;\n\t\tif (!element) return;\n\n\t\tconst checkScrollable = () => {\n\t\t\tconst scrollable = element.scrollHeight > element.clientHeight;\n\t\t\tsetIsYScrollable(scrollable);\n\t\t};\n\n\t\tconst handleScroll = () => {\n\t\t\tconst currentScrollTop = element.scrollTop;\n\t\t\tconst hasScrolled = currentScrollTop > 0;\n\t\t\tsetScrollState(prev => ({\n\t\t\t\tisDirty: hasScrolled ? true : prev.isDirty,\n\t\t\t\tisScrolling: hasScrolled\n\t\t\t}));\n\t\t};\n\n\t\t// Initial checks\n\t\tcheckScrollable();\n\t\thandleScroll();\n\n\t\t// Use ResizeObserver for element size changes\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tcheckScrollable();\n\t\t});\n\t\tresizeObserver.observe(element);\n\n\t\t// Use MutationObserver to detect content changes (like dropdown visibility)\n\t\tconst mutationObserver = new MutationObserver(() => {\n\t\t\tcheckScrollable();\n\t\t});\n\n\t\tmutationObserver.observe(element, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t\tattributes: true,\n\t\t\tattributeFilter: [\"style\", \"class\"] // Common attributes that affect visibility\n\t\t});\n\n\t\t// Listen to scroll events\n\t\telement.addEventListener(\"scroll\", handleScroll, { passive: true });\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\tmutationObserver.disconnect();\n\t\t\telement.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [ref]);\n\n\treturn { isYScrollable, isScrolling, isDirty };\n};\n\nexport default useYScrollable;\n","import { useRef } from \"preact/hooks\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ExchangeAdjustments from \"./adjustments/exchange-adjustments\";\nimport AnnoucementBar from \"./annoucement-bar\";\nimport ErrorScreen from \"./error-screen\";\nimport ExchangeConfirmation from \"./exchange-confirmation\";\nimport ExchangeHeader from \"./exchange-header\";\nimport ExchangePlaceholder from \"./exchange-placeholder\";\nimport ProductErrors from \"./product/product-errors\";\nimport ProductList from \"./product/product-list\";\nimport ReturnProductList from \"./return/return-product-list\";\nimport ScrollIndicator from \"./scroll-indicator\";\n\nconst ExchangeDrawer = () => {\n\tconst { cartState, hasFailed } = useReturnContext();\n\tconst { widgetViewState } = useWidgetContext();\n\n\tconst scrollContainerRef = useRef<HTMLDivElement>(null);\n\n\tconst isDrawerOpen = widgetViewState.value === WidgetViewState.Open;\n\n\tconst hasItems =\n\t\tcartState.value.data &&\n\t\t!cartState.value.error &&\n\t\tcartState.value.data.transformed.item_count !== 0;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-drawer bg-background text-foreground transition-[transform,visibility] duration-300 ease-in-out z-20 fixed max-desktop:inset-0 desktop:right-0 desktop:inset-y-0 size-full pt-safe flex flex-col desktop:max-w-[var(--rf-desktop-widget-width)]\",\n\t\t\t\tisDrawerOpen\n\t\t\t\t\t? \"max-desktop:translate-y-0 desktop:translate-x-0 visible\"\n\t\t\t\t\t: \"max-desktop:translate-y-full desktop:translate-x-full pointer-events-none invisible\"\n\t\t\t)}\n\t\t\taria-hidden={!isDrawerOpen}\n\t\t\tinert={!isDrawerOpen}\n\t\t\ttabIndex={!isDrawerOpen ? -1 : undefined}\n\t\t>\n\t\t\t<ExchangeHeader />\n\t\t\t<AnnoucementBar />\n\t\t\t<div\n\t\t\t\tclassName=\"rf-drawer__content flex-1 min-h-0 overflow-y-auto flex flex-col\"\n\t\t\t\tref={scrollContainerRef}\n\t\t\t>\n\t\t\t\t{hasFailed ? (\n\t\t\t\t\t<ErrorScreen />\n\t\t\t\t) : (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ReturnProductList />\n\t\t\t\t\t\t{hasItems ? <ProductList /> : <ExchangePlaceholder />}\n\t\t\t\t\t\t<ProductErrors />\n\t\t\t\t\t</>\n\t\t\t\t)}\n\t\t\t\t<ExchangeAdjustments className=\"rf-drawer__adjustments mt-auto\" />\n\t\t\t</div>\n\t\t\t<div className=\"rf-drawer__footer relative mt-auto\">\n\t\t\t\t<ScrollIndicator containerRef={scrollContainerRef} />\n\t\t\t\t<ExchangeConfirmation />\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default ExchangeDrawer;\n","import { TOAST_ANIMATION_DURATION } from \"../../lib/context/toast-context\";\nimport useToast from \"../../lib/hooks/context/use-toast\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport Banner, { BannerTone } from \"../ui/banner/banner\";\n\nexport interface ToastOptions {\n\tid: string;\n\tmessage: preact.ComponentChildren;\n\ttone?: BannerTone;\n\tduration?: number; // Duration in milliseconds\n\tonClose?: () => void; // Callback when the toast is closed\n}\n\nexport interface ToastQueue extends ToastOptions {\n\tisVisible: boolean; // Indicates if the toast is currently visible\n}\n\nexport interface ToastProps extends React.HTMLAttributes<HTMLDivElement> {\n\toptions: ToastQueue;\n}\n\nconst Toast = ({\n\toptions: { id, tone = \"info\", message, isVisible },\n\tclassName,\n\tstyle,\n\t...props\n}: ToastProps) => {\n\tconst { remove } = useToast();\n\n\treturn (\n\t\t<div\n\t\t\tonClick={() => remove(id)}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-toast animate-slide-up-and-fade-in overflow-hidden shadow-sm max-w-screen-lg mx-auto\",\n\t\t\t\t`rf-toast--${tone}`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t\tstyle={{\n\t\t\t\tvisibility: isVisible ? \"visible\" : \"hidden\",\n\t\t\t\topacity: isVisible ? 1 : 0,\n\t\t\t\ttransform: !isVisible ? \"translateY(-20px)\" : undefined,\n\t\t\t\ttransition: `all ${TOAST_ANIMATION_DURATION}ms ease-in-out`,\n\t\t\t\t...(typeof style === \"object\" ? style : undefined) // Spread any additional styles\n\t\t\t}}\n\t\t>\n\t\t\t<Banner tone={tone} className=\"font-medium\" border=\"dashed\">\n\t\t\t\t{message}\n\t\t\t</Banner>\n\t\t</div>\n\t);\n};\n\nexport default Toast;\n","import useToast from \"../../lib/hooks/context/use-toast\";\nimport Toast from \"./toast\";\n\nconst ToastContainer = () => {\n\tconst { queue } = useToast();\n\n\tif (queue.length === 0) {\n\t\treturn null; // Return null if there are no toasts to display\n\t}\n\n\treturn (\n\t\t<div className=\"rf-toast__container p-base space-y-base\">\n\t\t\t{queue.map(toast => (\n\t\t\t\t<Toast key={toast.id} options={toast} />\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default ToastContainer;\n","const ArrowLeftIcon = ({\n\tclassName,\n\t...props\n}: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={11}\n\t\theight={9}\n\t\tviewBox=\"0 0 11 9\"\n\t\tfill=\"currentColor\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--arrow-left ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path d=\"m.66 5.202 3.61 3.473c.103.1.24.154.387.154a.56.56 0 0 0 .387-.154l.328-.315a.52.52 0 0 0 0-.749l-2.107-2.03H9.96c.301 0 .54-.228.54-.518v-.446c0-.29-.239-.54-.54-.54H3.242l2.131-2.042a.505.505 0 0 0 0-.739L5.045.982a.55.55 0 0 0-.387-.153.56.56 0 0 0-.387.153L.66 4.455a.513.513 0 0 0 0 .747\" />\n\t</svg>\n);\nexport default ArrowLeftIcon;\n","import { useTranslations } from \"use-intl\";\nimport useNavigation from \"../../lib/hooks/context/use-navigation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ArrowLeftIcon from \"../icons/arrow-left\";\nimport Button from \"../ui/button\";\n\nconst BackButton = ({\n\tclassName,\n\t...props\n}: React.ButtonHTMLAttributes<HTMLButtonElement>) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { orderState } = useReturnContext();\n\tconst navigation = useNavigation();\n\n\tconst isPending = orderState.value.pending;\n\n\tasync function handleClick() {\n\t\tif (isPending) return;\n\n\t\tnavigation.back();\n\t}\n\n\treturn (\n\t\t<Button\n\t\t\tvariant=\"ghost\"\n\t\t\ticon={ArrowLeftIcon}\n\t\t\ticonPosition=\"left\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isPending}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-back-button desktop:text-black desktop:bg-neutral-2 desktop:hover:opacity-50 desktop:font-semibold max-desktop:text-sm max-desktop:px-0 max-desktop:h-auto\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\ttype=\"button\"\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-back-button__text\">{t(\"back\")}</span>\n\t\t</Button>\n\t);\n};\n\nexport default BackButton;\n","const TutorialArrowCurveRight = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={65}\n\t\theight={131}\n\t\tviewBox=\"0 0 65 131\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M30.726 1.8C14.17 30.988-19.17 79.318 20.412 104.855c9.697 6.256 19.735 5.577 30.787 5.577.477 0 11.533-1.774 10.313-2.75-3.267-2.614-22.279-18.309-9.855-8.25 1.315 1.063 11.46 6.781 11.46 8.555 0 4.833-17.775 16.705-21.39 20.321\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={3.6}\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</svg>\n);\n\nexport default TutorialArrowCurveRight;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../../lib/tutorials\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport TutorialArrowCurveRight from \"../tutorial-arrow-curve-right\";\n\ntype TutorialIntroPointerTotalProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TutorialIntroPointerTotal = ({\n\tclassName,\n\t...props\n}: TutorialIntroPointerTotalProps) => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst tutorial = useTutorial();\n\n\tif (tutorial.activeTutorial?.id !== TutorialId.Intro) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-tutorial-pointer rf-tutorial-pointer--total absolute bottom-0 right-full text-white translate-y-3 -translate-x-2 z-10 font-caveat text-2xl pointer-events-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-tutorial-pointer__text absolute -top-3 -translate-y-full left-0 w-28 text-center leading-none block rotate-3\">\n\t\t\t\t{t(\"pointer_total\")}\n\t\t\t</span>\n\t\t\t<TutorialArrowCurveRight className=\"text-button-background\" />\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroPointerTotal;\n","import Skeleton from \"../ui/skeleton/skeleton\";\n\nconst ExchangeTotalSkeleton = () => {\n\treturn (\n\t\t<div className=\"rf-exchange-total-skeleton max-desktop:max-w-48 w-full desktop:w-48 space-y-1 text-xs\">\n\t\t\t<Skeleton className=\"w-full rounded-md\" />\n\t\t\t<Skeleton className=\"w-full rounded-md\" />\n\t\t</div>\n\t);\n};\n\nexport default ExchangeTotalSkeleton;\n","import { useTranslations } from \"use-intl\";\nimport useCalculation from \"../../lib/hooks/context/use-calculation\";\nimport useReturnContext from \"../../lib/hooks/context/use-return-context\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport TutorialIntroPointerTotal from \"../tutorial/intro/tutorial-intro-pointer-total\";\nimport Price from \"../ui/price\";\nimport SkeletonContainer from \"../ui/skeleton/skeleton-container\";\nimport ExchangeTotalSkeleton from \"./exchange-total-skeleton\";\n\nconst ExchangeTotal = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { orderState, isPending } = useReturnContext();\n\n\tconst { orderTotal, cartTotal } = useCalculation();\n\n\tconst orderName = orderState.value.data?.orderData.orderName;\n\n\treturn (\n\t\t<SkeletonContainer skeleton={<ExchangeTotalSkeleton />} pending={isPending}>\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"rf-exchange-total font-normal text-sm max-desktop:max-w-48 w-full desktop:w-48 flex-1\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t<ExchangeTotalRow\n\t\t\t\t\tlabel={\n\t\t\t\t\t\torderName\n\t\t\t\t\t\t\t? t(\"order_label\", { orderName })\n\t\t\t\t\t\t\t: t(\"order_label_no_name\")\n\t\t\t\t\t}\n\t\t\t\t\tvalue={orderTotal}\n\t\t\t\t>\n\t\t\t\t\t<TutorialIntroPointerTotal />\n\t\t\t\t</ExchangeTotalRow>\n\t\t\t\t<ExchangeTotalRow\n\t\t\t\t\tlabel={t(\"cart_contents\")}\n\t\t\t\t\tvalue={Math.max(0, cartTotal)}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</SkeletonContainer>\n\t);\n};\n\nfunction ExchangeTotalRow({\n\tlabel,\n\tvalue,\n\tchildren\n}: {\n\tlabel: React.ReactNode;\n\tvalue: number;\n\tchildren?: React.ReactNode;\n}) {\n\treturn (\n\t\t<div className=\"rf-exchange-total__row flex justify-between relative\">\n\t\t\t<span className=\"rf-exchange-total__label text-neutral-3\">{label}</span>\n\t\t\t<Price className=\"text-sm font-normal relative\" value={value}>\n\t\t\t\t{children}\n\t\t\t</Price>\n\t\t</div>\n\t);\n}\n\nexport default ExchangeTotal;\n","const BagIcon = ({ className, ...props }: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={14}\n\t\theight={17}\n\t\tviewBox=\"0 0 14 17\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName={`rf-icon rf-icon--bag ${className || \"\"}`}\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M3.175 4.146H2.103c-.74 0-1.355.589-1.408 1.348l-.691 9.952c-.028.401.107.797.374 1.092A1.4 1.4 0 0 0 1.412 17h11.176a1.4 1.4 0 0 0 1.034-.462c.267-.295.402-.69.374-1.093l-.691-9.95c-.053-.76-.668-1.349-1.408-1.349h-1.065V3.94C10.832 1.763 9.117 0 7 0 4.96 0 3.076 1.67 3.168 3.939zm7.657 1.244V8.5a.614.614 0 0 1-.605.622.614.614 0 0 1-.605-.622V5.39H4.378V8.5a.614.614 0 0 1-.605.622.614.614 0 0 1-.605-.622s.052-1.453.035-3.11h-1.1a.204.204 0 0 0-.2.193l-.692 9.95a.2.2 0 0 0 .053.157.2.2 0 0 0 .148.066h11.176a.2.2 0 0 0 .148-.066.2.2 0 0 0 .053-.156l-.691-9.951a.204.204 0 0 0-.201-.193zm-1.21-1.244V3.94c0-1.49-1.174-2.696-2.622-2.696S4.378 2.45 4.378 3.939v.207z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n);\nexport default BagIcon;\n","const TutorialArrowStraightDown = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={31}\n\t\theight={98}\n\t\tviewBox=\"0 0 31 98\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t{...props}\n\t>\n\t\t<path\n\t\t\td=\"M6.014 2C8.74 28.597 14.31 53.53 19.822 79.595c.31 1.472 3.905 16.778 4.42 15.89 4.37-7.523.112-18.808 3.362-26.172 3.467-7.856-3.32 17.294-1.612 25.709.618 3.041-4.764-5.162-5.6-6.215C15.395 82.523 8.836 79.136 2 75.165\"\n\t\t\tstroke=\"currentColor\"\n\t\t\tstrokeWidth={4}\n\t\t\tstrokeLinecap=\"round\"\n\t\t/>\n\t</svg>\n);\n\nexport default TutorialArrowStraightDown;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../../lib/tutorials\";\nimport { cn } from \"../../../lib/utils/helpers\";\nimport TutorialArrowStraightDown from \"../tutorial-arrow-straight-down\";\n\ntype TutorialIntroPointerCartProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst TutorialIntroPointerCart = ({\n\tclassName,\n\t...props\n}: TutorialIntroPointerCartProps) => {\n\tconst t = useTranslations(\"tutorial.intro\");\n\tconst tutorial = useTutorial();\n\n\tif (tutorial.activeTutorial?.id !== TutorialId.Intro) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-tutorial-pointer rf-tutorial-pointer--cart absolute bottom-full inset-x-0 -translate-y-4 flex flex-col items-center text-white font-caveat text-2xl pointer-events-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t>\n\t\t\t<span className=\"rf-tutorial-pointer__text whitespace-nowrap text-center block -rotate-6 -translate-x-3\">\n\t\t\t\t{t(\"pointer_cart\")}\n\t\t\t</span>\n\t\t\t<TutorialArrowStraightDown className=\"text-button-background\" />\n\t\t</div>\n\t);\n};\n\nexport default TutorialIntroPointerCart;\n","import { useTranslations } from \"use-intl\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport BagIcon from \"../icons/bag\";\nimport TutorialIntroPointerCart from \"../tutorial/intro/tutorial-intro-pointer-cart\";\nimport Button from \"../ui/button\";\n\ntype ViewCartButtonProps = React.HTMLAttributes<HTMLDivElement>;\n\nconst ViewCartButton = ({ className, ...props }: ViewCartButtonProps) => {\n\tconst t = useTranslations(\"summary\");\n\tconst { widgetViewState } = useWidgetContext();\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)} {...props}>\n\t\t\t<TutorialIntroPointerCart />\n\t\t\t<Button\n\t\t\t\tclassName=\"rf-summary__button rf-summary__button--cart ![--icon-height:initial]\"\n\t\t\t\tonClick={() =>\n\t\t\t\t\twidgetViewState.set(prev =>\n\t\t\t\t\t\tprev === WidgetViewState.Collapsed\n\t\t\t\t\t\t\t? WidgetViewState.Open\n\t\t\t\t\t\t\t: WidgetViewState.Collapsed\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\ticon={BagIcon}\n\t\t\t>\n\t\t\t\t{t(\"view_cart\")}\n\t\t\t</Button>\n\t\t</div>\n\t);\n};\n\nexport default ViewCartButton;\n","import { useTranslations } from \"use-intl\";\nimport useTutorial from \"../../lib/hooks/context/use-tutorial\";\nimport { TutorialId } from \"../../lib/tutorials\";\nimport { cn } from \"../../lib/utils/helpers\";\nimport ReturnAvatarStack from \"../return-avatar-stack\";\nimport ToastContainer from \"../toast/toast-container\";\nimport BackButton from \"./back-button\";\nimport ExchangeTotal from \"./exchange-total\";\nimport ViewCartButton from \"./view-cart-button\";\n\nconst ExchangeSummary = () => {\n\tconst t = useTranslations(\"summary\");\n\tconst tutorial = useTutorial();\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"rf-exchange-summary rf-summary__container fixed bottom-0 inset-x-0 pb-safe animate-slide-up\"\n\t\t\tstyle={{\n\t\t\t\tzIndex:\n\t\t\t\t\ttutorial.activeTutorial?.id === TutorialId.Intro ? 50 : undefined\n\t\t\t}}\n\t\t>\n\t\t\t<ToastContainer />\n\t\t\t<div className=\"rf-summary h-[var(--rf-summary-height,_auto)] bg-widget-background text-widget-foreground max-desktop:rounded-t-3xl flex max-desktop:flex-col desktop:justify-between desktop:px-5\">\n\t\t\t\t<div className=\"rf-summary__header flex items-center max-desktop:px-5 max-desktop:flex-1 gap-2 desktop:gap-4 text-sm desktop:text-base\">\n\t\t\t\t\t<BackButton className=\"rf-summary__back max-desktop:mr-auto\" />\n\t\t\t\t\t<Divider className=\"max-desktop:hidden\" />\n\t\t\t\t\t<div className=\"flex items-center gap-2 desktop:flex-row-reverse\">\n\t\t\t\t\t\t<ReturnAvatarStack />\n\t\t\t\t\t\t<span className=\"rf-summary__title font-medium\">{t(\"title\")}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Divider className=\"desktop:hidden\" />\n\t\t\t\t<div className=\"rf-summary__actions max-desktop:px-5 max-desktop:py-3 gap-4 flex desktop:flex-row-reverse items-end desktop:items-center justify-between\">\n\t\t\t\t\t<ViewCartButton />\n\t\t\t\t\t<Divider className=\"max-desktop:hidden\" />\n\t\t\t\t\t<ExchangeTotal />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nconst Divider = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n\t<div\n\t\tclassName={cn(\n\t\t\t\"rf-summary__divider max-desktop:h-px w-full desktop:w-px desktop:self-stretch bg-neutral-2 shrink-0\",\n\t\t\tclassName\n\t\t)}\n\t\t{...props}\n\t/>\n);\n\nexport default ExchangeSummary;\n","import useTutorial from \"../../lib/hooks/context/use-tutorial\";\nimport useWidgetContext from \"../../lib/hooks/context/use-widget-context\";\nimport { WidgetViewState } from \"../../lib/types\";\nimport { cn } from \"../../lib/utils/helpers\";\n\nconst Backdrop = ({\n\tclassName,\n\t...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n\tconst { widgetViewState } = useWidgetContext();\n\tconst tutorial = useTutorial();\n\n\tconst isDrawerOpen = widgetViewState.value === WidgetViewState.Open;\n\n\tfunction onBackdropClick() {\n\t\tif (tutorial.isActive) {\n\t\t\ttutorial.stop();\n\t\t} else {\n\t\t\twidgetViewState.set(WidgetViewState.Collapsed);\n\t\t}\n\t}\n\n\tconst isVisible = isDrawerOpen || tutorial.isActive;\n\n\treturn (\n\t\t<div\n\t\t\taria-hidden\n\t\t\tonClick={onBackdropClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"rf-backdrop transition-[background-color,visibility] inset-0 size-full fixed duration-300 ease-in-out z-10\",\n\t\t\t\tisVisible\n\t\t\t\t\t? \"bg-black/30 visible\"\n\t\t\t\t\t: \"bg-black/0 pointer-events-none invisible\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n};\n\nexport default Backdrop;\n","import ExchangeDrawer from \"./drawer/exchange-drawer\";\nimport ExchangeSummary from \"./summary/exchange-summary\";\nimport Backdrop from \"./ui/backdrop\";\n\nconst Widget = () => {\n\treturn (\n\t\t<>\n\t\t\t<ExchangeSummary />\n\t\t\t<Backdrop />\n\t\t\t<ExchangeDrawer />\n\t\t</>\n\t);\n};\n\nexport default Widget;\n","import { IntlProvider } from \"use-intl\";\nimport { WidgetConfiguration } from \"../lib/utils/initialization/types\";\nimport DialogHandler from \"./handlers/dialog-handler\";\nimport InitializationHandler from \"./handlers/initialization-handler\";\nimport IsMounted from \"./is-mounted\";\nimport DialogQueueProvider from \"./providers/dialog-queue-provider\";\nimport ErrorProvider from \"./providers/error-provider\";\nimport ReturnContextProvider from \"./providers/return-context-provider\";\nimport RootProvider from \"./providers/root-provider\";\nimport TutorialProvider from \"./providers/tutorial-provider\";\nimport WidgetContextProvider from \"./providers/widget-context-provider\";\nimport ToastProvider from \"./toast/toast-provider\";\nimport Widget from \"./widget\";\n\n// This is the main entry point for the widget.\n// It initializes the widget with the provided options and renders it within the context providers.\nconst WidgetContainer = (config: WidgetConfiguration) => {\n\tconst { locale, messages } = config;\n\n\treturn (\n\t\t<IsMounted>\n\t\t\t<IntlProvider messages={messages} locale={locale}>\n\t\t\t\t<WidgetContextProvider {...config}>\n\t\t\t\t\t<ReturnContextProvider>\n\t\t\t\t\t\t<ErrorProvider>\n\t\t\t\t\t\t\t<RootProvider>\n\t\t\t\t\t\t\t\t<ToastProvider>\n\t\t\t\t\t\t\t\t\t<TutorialProvider>\n\t\t\t\t\t\t\t\t\t\t<DialogQueueProvider>\n\t\t\t\t\t\t\t\t\t\t\t<Widget />\n\t\t\t\t\t\t\t\t\t\t\t<DialogHandler />\n\t\t\t\t\t\t\t\t\t\t\t<InitializationHandler />\n\t\t\t\t\t\t\t\t\t\t</DialogQueueProvider>\n\t\t\t\t\t\t\t\t\t</TutorialProvider>\n\t\t\t\t\t\t\t\t</ToastProvider>\n\t\t\t\t\t\t\t</RootProvider>\n\t\t\t\t\t\t</ErrorProvider>\n\t\t\t\t\t</ReturnContextProvider>\n\t\t\t\t</WidgetContextProvider>\n\t\t\t</IntlProvider>\n\t\t</IsMounted>\n\t);\n};\n\nexport default WidgetContainer;\n"],"names":["WidgetViewState","ReturnViewState","getInternalCartProvider","_window$Returnflows$_","_window$Returnflows","window","Returnflows","_cartProvider","hasCartProvider","_window$Returnflows2","r","e","t","f","n","Array","isArray","o","length","clsx","arguments","concatArrays","array1","array2","combinedArray","i","minutesToMilliseconds","minutes","STORAGE_SESSION_KEY","key","type","expiration","hours","STORAGE_OVERLAY_DIALOG_EXPIRY_KEY","STORAGE_OVERLAY_DIALOG_EXPIRATION","STORAGE_CART_KEY","STORAGE_DEBUG_MODE_KEY","STORAGE_TUTORIALS_SEEN_KEY","getStorageKey","concat","storage","set","_ref","value","data","Date","now","undefined","getStorage","setItem","JSON","stringify","get","_ref2","storageItem","getItem","parsedData","parse","removeItem","_","has","_ref3","remove","_ref4","sessionStorage","localStorage","Error","LOG_PREFIX","LogLevel","Logger","constructor","getInstance","instance","checkDebugMode","storedDebugModeValue","Boolean","log","level","message","this","_len","args","_key","DEBUG","console","debug","INFO","info","WARN","warn","ERROR","error","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","logger","cn","inputs","twMerge","isNil","parseToNumber","fallback","parseFloat","isNaN","toString","formatSelectedItems","cacheData","selectedItems","selectedActions","map","item","_selectedActions$find","matchedAction","find","a","itemId","id","action","formattedAction","toUpperCase","lineItemId","constructShopifyUrl","endpoint","queryParams","root","url","secure","startsWith","ensureHttpUrl","location","host","variable","assert","searchParams","URLSearchParams","Object","entries","forEach","async","handleShopifyFetch","init","_init$method","fetchUrl","rf","response","fetch","_objectSpread","method","body","cache","headers","ok","errorResponse","json","clearSession","stripShopifyId","segment","split","pop","toMerchandiseGid","variantId","getRuleProductIds","rules","filter","rule","flatMap","products","p","product","Number","shopifyProductId","normalizeCart","cart","noExchangeTo","excludedItems","bundleItems","items","itemCount","reduce","acc","includes","product_id","push","has_components","existingItem","variant_id","quantity","item_count","compareCarts","cart1","cart2","normalizedCart1","normalizedCart2","items1","items2","quantityMap1","Map","getCart","usedStore","usedProvider","storedCart","provider","updateCartStorage","source","clearCart","updateCartItemQuantity","isRetry","updateCartItemQuantityViaShopify","lineId","line_id","merchandiseId","merchandise_id","removeItems","updateItems","updateItem","err","status","_existingItems$existi","String","existingItems","totalQuantity","existingItemIndex","findIndex","increment","calculatedQuantity","cartChange","line","resolveConnection","connections","edges","edge","node","toCents","amount","parsed","Math","round","resolveLineImage","_line$merchandise$ima","_line$merchandise$pro","_line$merchandise$pro2","merchandise","image","featuredImage","productImages","images","normalizeStorefrontLine","_line$cost","productId","unitPrice","lineTotal","cost","amountPerQuantity","totalAmount","price","variantTitle","title","productTitle","isDefaultVariant","product_title","handle","grams","line_price","final_price","final_line_price","variant_title","sku","vendor","product_type","productType","requires_shipping","requiresShipping","normalizeCartInput","lines","isStorefrontCart","_cart$totalQuantity","_cart$note","sum","token","note","normalizeStorefrontCart","normalizeAndStore","normalized","bridge","widgetViewState","config","returnContext","toastContext","cartProvider","isInitialized","eventListeners","unregisterBridge","clear","setCartProvider","wrapped","addItems","ids","wrapCartProvider","setDrawerState","state","setCart","_bridge$returnContext7","_bridge$returnContext8","_bridge$returnContext9","_cartState$value$data","_bridge$config","cartState","orderState","calculationState","calculation","hasChanged","order","normalizedInput","productRules","orderData","currentCart","original","_calculationState$val","transformedCart","transformed","pending","emitEvent","calculationResponse","query","orderId","lineItems","formData","removeEventListener","event","callback","_bridge$eventListener","delete","listeners","defineProperty","open","_ensureInitialized","Open","close","Collapsed","toggle","_bridge$widgetViewSta","_bridge$widgetViewSta2","isOpen","_bridge$widgetViewSta3","_bridge$returnContext","getCalculation","_bridge$returnContext2","_bridge$returnContext3","getOrder","_bridge$returnContext4","orderName","instantExchange","freeExchangeLabel","productsToExchange","totalPrice","isLoading","_bridge$returnContext5","_bridge$returnContext6","isPending","refetch","_bridge$returnContext10","_bridge$returnContext11","_bridge$cartProvider","document","dispatchEvent","CustomEvent","show","options","add","tone","duration","onClose","dismiss","_initPromise","Promise","resolve","reject","_config$onReady2","onReady","onError","rest","_objectWithoutProperties","_excluded","default","initialize","then","index","WidgetContainer","widgetContainer","h","preact_module","result","widgetConfig","networkInterceptionMethod","success","_config$onReady","reason","_waitForBridge","call","_config$onError","destroy","container","getElementById","on","Set","off","timeout","start","setTimeout","v","y","resolveEnvVar","varKey","_process$env","process","env","_import$meta$env","API_URL","PLATFORM_URL","WIDGET_BASE_URL","SEARCH_PARAM_ID_NAME","LEGACY_PARAMS","ROOT_ELEMENT_ID","CONTAINER_ELEMENT_ID","SETTINGS_SCRIPT_ID","InternalCustomEvent","ExternalCustomEvent","customEvents","subscribe","eventName","handler","addEventListener","publish","detail","unsubscribe","DEFAULT_LOCALE","PATH_PARAM_RE","serializePrimitiveParam","name","allowReserved","encodeURIComponent","serializeObjectParam","values","joiner","simple","label","matrix","style","explode","k","final2","join","finalName","final","serializeArrayParam","joiner2","form","spaceDelimited","pipeDelimited","createQuerySerializer","search","array","object","defaultPathSerializer","pathname","pathParams","nextURL","match","_pathname$match","substring","endsWith","replace","defaultBodySerializer","FormData","_headers$get","_headers$ContentType","Function","mergeHeaders","finalHeaders","Headers","allHeaders","iterator","v2","append","removeTrailingSlash","api","clientOptions","_clientOptions","baseUrl","Request","CustomRequest","globalThis","baseFetch","querySerializer","globalQuerySerializer","bodySerializer","globalBodySerializer","pathSerializer","globalPathSerializer","baseHeaders","requestInitExt","baseOptions","supportsRequestInitExt","_process","parseInt","versions","undici","globalMiddlewares","coreFetch","schemaPath","fetchOptions","_response$headers$get","localBaseUrl","params","parseAs","requestQuerySerializer","requestPathSerializer","middleware","requestMiddlewares","_excluded2","finalBaseUrl","_removeTrailingSlash","serializedBody","header","finalMiddlewares","requestInit","redirect","request","_options$params","_options$params$query","finalURL","path","createFinalURL","random","slice","freeze","m","onRequest","Response","error2","errorAfterMiddleware","onResponse","contentLength","getResponseData","raw","text","_unused","GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE","use","eject","indexOf","splice","createClient","getWidgetSettings","locale","slug","isFirstLoad","settings","scriptElement","_settings$translation","innerHTML","localizedMessages","translations","messages","formattedMessages","getSettingsFromScript","remoteSettings","shouldUseCachedResult","_configResponse$data","configResponse","clientStorage","responseObject","_configResponse$error","getRemoteSettings","parseScriptDataset","dataset","datasetRecord","resolvedValue","isFinite","isNumber","prepareInitializationOptions","_settings$theme","DOMStringMap","prototype","_window$__rf_original","searchString","__rf_original_search","getResolvedSearchParams","searchParamsId","internalId","isDebugModeEnabled","isDevEnvironment","hasDebugParameter","determineDebugMode","_response$data$respon","_response$data2","getSessionCache","resolvedCurrency","currency","defaultCurrency","localesList","defaultLocale","val","resolvedLocale","locales","loadMessages","customMessages","structuredClone","jsonError","deepClone","obj","keys","lastKey","current","next","setNestedValue","debugMode","theme","createSafeLinkElement","attributes","selector","existing","querySelector","link","createElement","assign","head","appendChild","injectCustomCSS","css","some","pattern","test","validateCSS","styleElement","setAttribute","textContent","renderNode","containerResult","display","shadow","attachShadow","mode","shadowRoot","className","createShadowRoot","customCssOverlay","customCssPage","devStyles","injectInlineStyle","rel","fileName","href","onload","injectStyle","onerror","injectPublicVariables","preconnect","preconnect2","crossOrigin","fontLink","render","injectWidget","WidgetInitialization","memoize","fn","cacheDefault","serializer","serializerDefault","strategy","strategyDefault","monadic","arg","cacheKey","computedValue","variadic","apply","assemble","context","serialize","bind","create","ObjectWithoutPrototypeCache","strategies","super","code","originalMessage","MISSING_MESSAGE","MISSING_FORMAT","ENVIRONMENT_FALLBACK","INSUFFICIENT_PATH","INVALID_MESSAGE","INVALID_KEY","FORMATTING_ERROR","s","dateTime","number","relativeTime","pluralRules","list","displayNames","I","l","getDateTimeFormat","Intl","DateTimeFormat","getNumberFormat","NumberFormat","getPluralRules","PluralRules","getRelativeTimeFormat","RelativeTimeFormat","getListFormat","ListFormat","getDisplayNames","DisplayNames","u","c","__b","__r","diffed","__c","unmount","__","__h","__H","d","D","__N","setState","__f","every","props","shouldComponentUpdate","componentWillUpdate","__e","__s","C","A","T","q","x","sub","j","shift","__P","z","B","__v","__k","__m","requestAnimationFrame","w","clearTimeout","cancelAnimationFrame","E","DATE_TIME_REGEX","parseDateTimeSkeleton","skeleton","len","era","year","RangeError","month","day","weekday","hour12","hourCycle","hour","minute","second","timeZoneName","ErrorKind","ErrorCode","FormatError","msg","InvalidValueError","variableId","INVALID_VALUE","InvalidValueTypeError","MissingValueError","MISSING_VALUE","formats","formatters","g","globalFormats","timeZone","getMessageFormat","date","time","_e$timeZone","format","namespace","getMessageFallback","messagesOrError","S","M","N","rich","markup","seconds","days","week","weeks","months","quarter","quarters","years","children","Provider","_cache","_formatters","_e","_unused2","unit","numberingSystem","getTime","abs","numeric","formatToParts","size","dateTimeRange","formatRange","displayName","of","DIALOG_PRIORITY","tutorial","decision","emptyExchange","DialogQueueContext","createContext","useValueState","initialState","stateUpdateCallback","useState","prev","currentState","resolveSetStateAction","useDialog","initialOpen","onConfirm","onCloseProp","register","WidgetContext","useWidgetContext","useContext","navigation","back","constructedPlatformUrl","URL","continue","confirmationUrl","exit","reload","getReturnDecisionState","isOnCartPage","ReturnContext","useReturnContext","Image","src","_jsx","SkeletonContainer","falsyToString","cx","cva","base","_config_compoundVariants","variants","class","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","param","getCompoundVariantClassNames","compoundVariants","cvClass","cvClassName","compoundVariantOptions","avatarVariants","light","dark","memo","Skeleton","role","AvatarStackSkeleton","_jsxs","AvatarStack","maxVisibleAvatars","maxVisible","hasOverflow","sliceIndex","alt","Avatar","zIndex","ReturnAvatarStack","_orderState$value$dat3","formattedImages","useMemo","_orderState$value$dat","_orderState$value$dat2","DialogContext","ArrowRightIcon","width","height","viewBox","fill","xmlns","XIcon","Spinner","opacity","attributeName","calcMode","dur","repeatCount","buttonVariants","primary","secondary","outline","ghost","icon","Icon","disabled","iconPosition","visibility","DialogButton","Accept","onClick","ctx","Button","_ctx$onConfirm","defaultPrevented","Reject","_ctx$onClose","iconVariants","solid","sm","md","IconComponent","RejectButton","labelProps","showLabel","useTranslations","useDialogSlot","priority","acquire","release","activeId","useDialogQueue","useEffect","useIsMounted","mounted","setMounted","RootContext","DialogBackdrop","isVisible","elementRef","useRef","target","ref","Dialog","Modal","fadeIn","showBackdrop","dismissOnBackdropClick","dismissOnEscape","queueId","queue","getRoot","useRoot","isMounted","generatedId","isActive","handleEscape","preventDefault","contextValue","createPortal","Title","Subtitle","Exit","ReturnDecisionDialog","decisionState","DecisionDialog","consumeCookieExpiry","modal","TutorialContext","useTutorial","TutorialId","IntroTutorialStep","TUTORIALS","Intro","steps","Welcome","autoStart","showMode","COLORS","TutorialIntroAnimation","uid","useId","gradientUnits","spreadMethod","x2","y2","x1","y1","offset","stopColor","maskContentUnits","maskUnits","maskType","transform","begin","keyTimes","keySplines","strokeMiterlimit","strokeWidth","stroke","mask","TutorialIntroDialog","isStepActive","DialogHandler","_Fragment","DEFAULT_TOAST_DURATION","ToastContext","useToast","useApiBridge","registerBridge","_returnContext$cartSt","ProductErrorState","PRODUCT_ERROR_CODE_TO_STATE","ProductLimit","getErrorStateFromCode","Unknown","createFetchInterceptor","originalFetch","__rf_original_fetch","rf_interception","proxy","Proxy","argumentsList","requestUrl","firstArg","resolveRequestUrl","Reflect","clonedResponse","clone","interval","clearInterval","createXHRInterceptor","originalXHR","XMLHttpRequest","__rf_original_xhr","XHRProxy","construct","xhr","originalOpen","originalSend","send","user","password","originalOnReadyStateChange","onreadystatechange","readyState","DONE","resolveXHRPayload","originalOnLoad","_xhr$getResponseHeade","isTextResponse","responseType","isJsonResponse","getResponseHeader","ADD_ENDPOINTS","UPDATE_ENDPOINTS","CHANGE_ENDPOINTS","ENDPOINTS","update","change","ENDPOINTS_TO_INTERCEPT","ErrorContext","useErrors","useCartActions","addToast","errors","isNewItem","useCallback","originalCart","notifyExclusions","newExcludedItems","newBundleItems","product_name","b","chunks","fetchAndUpdateCart","_cartState$value$data2","freshCart","processCartUpdate","_cartState$value$data3","_cartState$value$data4","handleResponseErrors","responseBody","catch","parseInterceptionResponse","errState","triggerCalculation","useFetchInterceptor","returnViewState","autoOpen","autoOpenTriggerEndpoint","triggerEndpoint","autoOpenTriggerMethod","triggerMethod","monitorNetworkOverwrites","initialized","setInitialized","resetInterceptor","opts","monitor","cleanupFetchHandler","cleanupXHRHandler","resolvedMethod","setInterval","_cleanupFetchHandler","_cleanupXHRHandler","initializeNetworkInterceptors","payload","FetchInterception","_resetInterceptor","handleInterceptionEvent","stringifiedUrl","urlValidation","triggerEndpointPaths","isValid","isForbidden","isTriggerEndpoint","matchesInterceptedEndpoint","validateInterceptionRequestUrl","useOverrideScrollBlocking","overrideScrollBlocking","originalPreventDefault","Event","useCartActivator","cartActivatorSelector","controller","AbortController","processedElements","WeakSet","onActivatorClick","stopPropagation","initializeActivators","elements","querySelectorAll","element","parent","parentNode","newElement","cloneNode","replaceChild","cloneAndReplaceElement","removeAttribute","signal","attachListenersToElements","observer","MutationObserver","mutations","shouldReinitialize","mutation","addedNodes","nodeType","Node","ELEMENT_NODE","_element$matches","_element$querySelecto","matches","removedNodes","_element$matches2","_element$querySelecto2","observe","childList","subtree","characterData","abort","disconnect","InitializationHandler","useExternalEvents","handleOpenDrawer","handleCloseDrawer","handleToggleDrawer","targetState","handleRefetchCalculation","handleRefetchCart","handleRefetchCartAndCalculation","handleOpenDrawerAndRefetch","unsubscribeOpenDrawer","DrawerOpen","unsubscribeCloseDrawer","DrawerClose","unsubscribeToggleDrawer","DrawerToggle","unsubscribeRefetchCalculation","CalculationRefetch","unsubscribeRefetchCart","CartRefetch","unsubscribeRefetchCartAndCalculation","CartAndCalculationRefetch","unsubscribeOpenDrawerAndRefetchCartAndCalculation","DrawerOpenAndRefetch","useTutorialAutostart","_autoStartTutorial$op","_autoStartTutorial$id","activeTutorial","hasSeenTutorial","finished","setFinished","autoStartTutorial","_tutorial$options","isAllowed","wantsToShow","isSlotActive","hasStartedRef","wasRunningRef","IsMounted","DialogQueueProvider","setEntries","seqRef","entry","seq","best","ErrorProvider","_useArray","initialArray","setArray","newArray","filtered","useArray","methods","calculationLineItems","cartItemCount","resolvedErrors","trackedErrors","_orderData$returnWind","refundReturnWindow","returnWindows","errorId","blocking","noRefundItemIds","noRefundItems","strippedId","joinedProductNames","splitChunks","chunk","dividerString","Fragment","useAsyncState","initialValue","queryFn","queryOnInit","startCount","initialRender","countState","setCountState","countRef","requestCount","consoleMessage","run","initialParams","initialFetch","count","inFlightRequests","getShopOverlayData","sessionId","storeResult","logging","storageOptions","cachedData","inFlightKey","persist","_result$data","processOrderInitialization","clearCartOnStart","updatedCart","_cache$exchangeItems","cachedExchangeItems","exchangeItems","mappedItems","clearedCart","cartItems","setCartItems","dialogExpiration","history","replaceState","ReturnContextProvider","queryCount","orderResult","isCartPage","isFirstQuery","shouldFetchFreshCart","normalizedCart","updateSessionCacheState","_response$data","updateSessionCache","_params$cart","_formData$packages","formattedCartItems","_item$variant_title","_item$quantity","formatShopifyCartItem","labelCount","packages","countryCode","shippingCountry","resolvedParams","formattedExchangeTo","formattedLineItems","uuid","exchangeTo","numOfLabels","_response$error$messa","_response$error","useOnce","deps","effectRef","contextError","hasFailed","STORE_DEFAULT_THEME","backgroundColor","accentBackgroundColor","primaryCTAColor","primaryCTATextColor","secondaryCTAColor","secondaryCTATextColor","primaryTextColor","secondaryTextColor","useTheme","themeVariables","resolvedTheme","color","convertedColor","hex","max","min","diff","hDeg","sPercent","lPercent","hexToHsl","toLowerCase","cssVariables","RootProvider","rootRef","onTouchStart","seenThisPageLoad","getSeenTutorials","_storage$get","tutorialId","endTutorial","_state$tutorial$optio","_state$tutorial$optio2","seen","markTutorialSeen","TutorialProvider","stepIndex","stop","nextIndex","previous","goToStep","stepId","step","currentStep","WidgetContextProvider","DrawerStateChange","ToastProvider","setQueue","toast","_toast$onClose","substr","_toast$onClose2","ActionIcon","rx","fillRule","clipRule","InfoIcon","GiftcardIcon","WarningIcon","BannerSkeleton","tip","giftcard","border","dashed","COMMON_ICON_PROPS","renderIcon","ExchangeBanner","_calculationState$val2","hasInstantExchange","returnLabelPrice","Banner","useCurrency","hookOptions","cartCurrency","calcCurrency","localCurrency","resolvedCurrencyCode","formatter","useFormatter","applyExchangeRate","exchangeRate","currencyObject","_hookOptions$options","fractionDigits","mergedOptions","_currency$minimumFrac","minimumFractionDigits","maximumFractionDigits","currencyDisplay","formatOptions","useCalculation","_exchange$discountSum","orderTotal","cartTotal","returnTotal","giftcardValue","totalPriceDiscount","giftCardBonusAmount","isRefunding","orderSubtotal","returnSubtotal","total","refundMethods","exchange","discountSummary","adjustedDiscountTotal","StarIcon","strokeLinecap","strokeLinejoin","trimNumber","num","decimals","toFixed","compareAtValue","formatToCurrency","isDiscounted","AdjustmentsTableSkeleton","AdjustmentsTable","showDiscountRow","showGiftcardRow","showLabelPriceRow","Row","scope","Price","ExchangeAdjustments","AnnoucementBar","stepSnippet","ErrorScreen","errorMessage","instructionMessage","useNavigation","EmptyExchangeDialog","dialog","ExchangeConfirmation","globalPendingState","blockingErrors","canContinue","hasExchangeProducts","continueIfPossible","emptyExchangeDialog","ExchangeHeader","CartIcon","ExchangePlaceholder","ProductErrors","DEFAULT_CONSTRAINTS","limit","getSafeProductUrl","getProductUrl","QuantityPicker","onIncrement","onDecrement","constraints","isDisabled","isAtMin","isAtMax","incrementDisabled","decrementDisabled","handleIncrement","handleDecrement","clampedQuantity","clampQuantity","quantityRule","setIsPending","anyStatePending","handleQuantityChange","newQuantity","errorCode","_quantityRule$min","_quantityRule$max","_quantityRule$increme","minQuantity","maxQuantity","getNormalizedQuantityRule","isAtBound","Link","unstyled","onDisabledClick","compareAtPrice","showQuantity","quantityIsVisible","resolvedCompareAt","resolvedPrice","imageSource","handleAnchorClick","Product","ProductImage","ProductAttributes","ProductActions","quantity_rule","ProductList","useCartItems","exchangeDetails","exchangeDetailItems","exchangeItem","_coverage$originalUni","_coverage$exchangeUni","coverage","curr","resolvedCurrPrice","originalUnitPrice","exchangeUnitPrice","ArrowDownIcon","ChevronIcon","Expander","collapseDelay","autoCloseAfter","onToggle","isRendered","setIsRendered","setHeight","containerRef","collapseTimeoutRef","autoCloseTimeoutRef","measureHeight","scrollHeight","frame","ReturnProductBadge","ReturnProductActions","deleted","onDeletedClick","ReturnProduct","_product$quantity","_calculation$price","_calculation$original","_calculation$exchange","allProducts","setErrorMessage","qty","originalPrice","badgeType","allActions","_formData$selectedIte","_item$calculation","returnItems","returnItem","shopifyLineId","multipleTypes","isDeleted","handleDeletedClick","bool","ReturnProductSkeleton","ReturnProductList","exchangeProducts","extendedLineItems","exchangeProduct","lineItem","hasGiftcardItem","ScrollIndicator","isYScrollable","isDirty","setIsYScrollable","isScrolling","setScrollState","checkScrollable","scrollable","clientHeight","handleScroll","hasScrolled","scrollTop","resizeObserver","ResizeObserver","mutationObserver","attributeFilter","passive","useYScrollable","ExchangeDrawer","scrollContainerRef","isDrawerOpen","hasItems","inert","tabIndex","Toast","transition","ToastContainer","ArrowLeftIcon","BackButton","TutorialArrowCurveRight","TutorialIntroPointerTotal","_tutorial$activeTutor","ExchangeTotalSkeleton","ExchangeTotal","ExchangeTotalRow","BagIcon","TutorialArrowStraightDown","TutorialIntroPointerCart","ViewCartButton","ExchangeSummary","Divider","Backdrop","Widget","IntlProvider"],"mappings":"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","x_google_ignoreList":[2,3,12,16,24,25,26,27,28,29,30,31,32,33,45]}