@rebuy/rebuy 2.30.0 → 2.31.0

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.
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/utilities.ts", "../src/api.ts", "../src/cookie.ts", "../src/geolocation.ts", "../src/session.ts", "../src/identity.ts", "../src/client.ts", "../src/schema/cabShopConfig.ts", "../src/schema/smartCart.ts", "../src/schema/metadata.ts", "../src/schema/product.ts", "../src/schema/offerProduct.ts", "../src/schema/shopConfig.ts", "../src/schema/userConfig.ts", "../src/schema/widgetData.ts", "../src/schema/widgets/abTestingPlaceholder.ts", "../src/schema/widgets/checkout-and-beyond/constants.ts", "../src/schema/widgets/checkout-and-beyond/common.ts", "../src/schema/widgets/checkoutExtension.ts", "../src/schema/widgets/contentBlock.ts", "../src/schema/widgets/checkout-and-beyond/root.ts", "../src/schema/widgets/checkout-and-beyond/layout.ts", "../src/schema/widgets/checkout-and-beyond/rule.ts", "../src/schema/widgets/checkout-and-beyond/shared.ts", "../src/schema/widgets/checkout-and-beyond/banner.ts", "../src/schema/widgets/checkout-and-beyond/button.ts", "../src/schema/widgets/checkout-and-beyond/image.ts", "../src/schema/widgets/checkout-and-beyond/regex.ts", "../src/schema/widgets/checkout-and-beyond/utils.ts", "../src/schema/widgets/checkout-and-beyond/text.ts", "../src/schema/widgets/checkout-and-beyond/carousel.ts", "../src/schema/widgets/checkout-and-beyond/offers.ts", "../src/schema/widgets/checkout-and-beyond/dataSource.ts", "../src/schema/widgets/checkout-and-beyond/products.ts", "../src/schema/widgets/checkout-and-beyond/product.ts", "../src/schema/widgets/checkout-and-beyond/cartLine.ts", "../src/schema/widgets/checkout-and-beyond/discount.ts", "../src/schema/widgets/checkout-and-beyond/monetize.ts", "../src/schema/widgets/checkout-and-beyond/progressBar.ts", "../src/schema/widgets/checkout-and-beyond/giftLabels.ts", "../src/schema/widgets/checkout-and-beyond/quantity.ts", "../src/schema/widgets/checkout-and-beyond/reviews.ts", "../src/schema/widgets/checkout-and-beyond/reviewLabels.ts", "../src/schema/widgets/checkout-and-beyond/variants.ts", "../src/schema/widgets/checkout-and-beyond/uiLabels.ts", "../src/schema/widgets/giftWithPurchase.ts", "../src/schema/widgets/lineItemEditor.ts", "../src/schema/widgets/progressBar.ts", "../src/schema/widgets/rebuyButton.ts", "../src/schema/widgets/rebuyMonetize.ts", "../src/schema/widgets/checkout-and-beyond/offerLabels.ts", "../src/schema/widgets/checkout-and-beyond/switchLabels.ts", "../src/schema/widgets/post-purchase-offer/common.ts", "../src/schema/widgets/post-purchase-offer/constants.ts", "../src/schema/widgets/post-purchase-offer/postPurchaseBlocks.ts", "../src/schema/widgets/post-purchase-offer/postPurchaseOffer.ts", "../src/schema/widgets/post-purchase-offer/postPurchaseWidget.ts", "../src/schema/widgets/post-purchase-offer/postPurchaseSettings.ts", "../src/transforms/contentBlockV1/stripContentBlockHtml.ts", "../src/transforms/contentBlockV1/convertTextToTiptapParagraph.ts", "../src/transforms/contentBlockV1/convertContentBlockTextToV2.ts", "../src/transforms/localizedContent.ts", "../src/transforms/offerV1/offerTemplateSeed.ts", "../src/transforms/offerV1/types.ts", "../src/transforms/offerV1/buildOfferTemplate.ts", "../src/transforms/offerV1/offerCard.ts", "../src/transforms/offerV1/convertOfferToV2.ts"],
4
- "sourcesContent": ["export * from './api';\nexport * from './client';\nexport * from './cookie';\nexport * from './geolocation';\nexport * from './identity';\nexport * from './schema';\nexport * from './session';\n// Offer V1\u2192V2 helpers re-exported on the root so consumers on classic `moduleResolution: node`\n// (e.g. admin-nextjs) can use them without the `/transforms` subpath. The full `/transforms`\n// subpath stays available for bundler/node16 consumers.\nexport { buildOfferTemplate, type BuildOfferTemplateInput, convertOfferToV2, isOfferV1 } from './transforms';\nexport * from './utilities';\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Returns true if the string is a valid base64 encoded string.\n *\n * @param {string} str - The string to check.\n *\n * @returns {boolean} True if the string is a valid base64 encoded string.\n */\nexport function isBase64Encoded(str: string): boolean {\n const base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n\n return base64Regex.test(str) ? true : false;\n}\n\n/**\n * Returns a string as a JSON object.\n *\n * @param {string} data - The string to convert to a JSON object.\n * @param {boolean} decode - Whether to decode the string. *\n *\n * @returns {any} The JSON object.\n */\nexport function stringToData(data: string, decode: boolean): any {\n let response = data;\n\n // Base64 decode\n if (decode === true) {\n response = atob(response);\n }\n\n try {\n response = JSON.parse(response);\n } catch (e) {\n // failure to parse cookie\n response = data;\n }\n\n return response;\n}\n\n/**\n * Returns a JSON object as a string.\n *\n * @param {any} data - The JSON object to convert to a string.\n * @param {boolean} encode - Whether to encode the string. *\n *\n * @returns {string} The string.\n */\nexport function dataToString(data: any, encode: boolean): string {\n let response = data;\n\n if (typeof response != 'string') {\n response = JSON.stringify(response);\n }\n\n // Base64 encode\n if (encode === true) {\n response = btoa(response);\n }\n\n return response;\n}\n\n/**\n * Returns a string with HTML tags removed.\n *\n * @param {string} str - The string to strip HTML tags from.\n *\n * @returns {string} The string with HTML tags removed.\n */\nexport function stripHtml(str: string): string {\n return str?.replace(/<(.|\\n)*?>/g, '') ?? '';\n}\n\n/**\n * Returns the ID from a GraphQL URL.\n *\n * @param {string} graphId - The GraphQL URL.\n * @param {string} objectType - The object type.\n *\n * @returns {number | null} The ID.\n */\nexport function getIdFromGraphUrl(graphId: string, objectType: string): number | null {\n let id: number | null = null;\n\n const regex = new RegExp(`gid://shopify/${objectType}/(.*)`);\n const matches = graphId.match(regex);\n\n if (matches != null) {\n const matchedId = matches[1];\n\n if (!isNaN(Number(matchedId))) {\n id = Number(matchedId);\n }\n }\n\n return id;\n}\n\n/**\n * Returns true if the variant is available.\n *\n * @param {any} variant - The variant.\n *\n * @returns {boolean} True if the variant is available.\n */\nexport function variantAvailable(variant: any): boolean {\n return !(variant.inventory_management && variant.inventory_policy === 'deny' && variant.inventory_quantity <= 0);\n}\n\n/**\n * Returns the first available variant.\n *\n * @param {any} product - The product.\n *\n * @returns {any} The first available variant.\n */\nexport function firstAvailableVariant(product: any): any {\n // Select first variant\n let selectedVariant = product.variants[0];\n\n // Upgrade to first available\n for (let i = 0; i < product.variants.length; i++) {\n if (variantAvailable(product.variants[i])) {\n selectedVariant = product.variants[i];\n break;\n }\n }\n\n return selectedVariant;\n}\n\n/**\n * Returns a UUID.\n *\n * @returns {string} The UUID.\n */\nexport function uuid(): string {\n let d = new Date().getTime();\n let d2 = (performance && performance.now && performance.now() * 1000) || 0;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n let r = Math.random() * 16;\n\n if (d > 0) {\n r = ((d + r) % 16) | 0;\n d = Math.floor(d / 16);\n } else {\n r = ((d2 + r) % 16) | 0;\n d2 = Math.floor(d2 / 16);\n }\n\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\n/**\n * Returns a session ID.\n *\n * @returns {string} The session ID.\n */\nexport function sessionId(): string {\n const config = {\n chars: '0123456789',\n length: 12,\n };\n\n let sessionId = '';\n const sessionStart = new Date().getTime();\n\n for (let i = config.length; i > 0; i--) {\n sessionId += config.chars[Math.floor(Math.random() * config.chars.length)];\n }\n\n return `REBUY.${sessionStart}.${sessionId}`;\n}\n\n/**\n * Converts a product to the storefront format.\n *\n * @param {any} product - The product.\n *\n * @returns {any} The product in the storefront format.\n */\nexport function convertProductToStorefrontFormat(product: any): any {\n const defaultVariant = firstAvailableVariant(product);\n const minVariantPrice = variantMinMaxPriceObject(product, 'price', 'min');\n const maxVariantPrice = variantMinMaxPriceObject(product, 'price', 'max');\n const minVariantCompareAtPrice = variantMinMaxPriceObject(product, 'compare_at_price', 'min');\n const maxVariantCompareAtPrice = variantMinMaxPriceObject(product, 'compare_at_price', 'max');\n const selectedOptions = selectedVariantOptions(product, defaultVariant);\n\n const variants = product.variants.map((variant: any) => convertVariantToStorefrontFormat(product, variant));\n\n return {\n collections: null,\n compareAtPriceRange: {\n maxVariantCompareAtPrice,\n minVariantCompareAtPrice,\n },\n description: stripHtml(product.body_html),\n descriptionHtml: product.body_html,\n featuredImage: productImageObject(product, null),\n handle: product.handle,\n id: `gid://shopify/Product/${product.id}`,\n images: null,\n media: [],\n metafields: [],\n options: [\n ...product.options.map((option: any) => {\n return { name: option.name, values: option.values };\n }),\n ],\n priceRange: {\n maxVariantPrice,\n minVariantPrice,\n },\n selectedOptions,\n selectedSellingPlan: null,\n selectedSellingPlanAllocation: null,\n sellingPlanGroups: [],\n seo: { description: null, title: null },\n title: product.title,\n variants: convertToNodes(variants),\n vendor: product.vendor,\n };\n}\n\n/**\n * Converts an array to a nodes object.\n *\n * @param {any} arr - The array to convert to a nodes object.\n *\n * @returns {any} The nodes object.\n */\nexport function convertToNodes(arr: any): any {\n return {\n edges: [\n ...arr.map((node: any) => {\n return { node };\n }),\n ],\n };\n}\n\n/**\n * Converts a variant to the storefront format.\n *\n * @param {any} product - The product.\n * @param {any} variant - The variant.\n *\n * @returns {any} The variant in the storefront format.\n */\nexport function convertVariantToStorefrontFormat(product: any, variant: any): any {\n const selectedOptions = selectedVariantOptions(product, variant);\n const image = productImageObject(product, variant.image_id);\n\n return {\n availableForSale: variantAvailable(variant),\n compareAtPriceV2: variantPriceObject(variant, 'compare_at_price'),\n id: `gid://shopify/ProductVariant/${variant.id}`,\n image: image,\n priceV2: variantPriceObject(variant, 'price'),\n product: {\n handle: product.handle,\n id: product.id,\n title: product.title,\n vendor: product.vendor,\n },\n selectedOptions: [selectedOptions],\n sku: variant.sku,\n title: variant.title,\n };\n}\n\n/**\n * Returns the minimum or maximum price object for a variant.\n *\n * @param {any} product - The product.\n * @param {string} key - The key to get the price object for.\n * @param {string} operator - The operator to use. *\n *\n * @returns {any} The price object.\n */\nexport function variantMinMaxPriceObject(product: any, key: string = 'price', operator: string = 'min'): any {\n let priceObject = variantPriceObject(product.variants[0], key);\n\n for (let i = 0; i < product.variants.length; i++) {\n const variantPrice = variantPriceObject(product.variants[i], key);\n\n if (variantPrice != null) {\n const variantPriceAmount = Number(variantPrice.amount);\n const currentPriceAmount = priceObject != null ? Number(priceObject.amount) : null;\n\n if (\n currentPriceAmount == null ||\n (operator === 'min' && variantPriceAmount < currentPriceAmount) ||\n (operator === 'max' && variantPriceAmount > currentPriceAmount)\n ) {\n priceObject = variantPrice;\n }\n }\n }\n\n return priceObject;\n}\n\n/**\n * Returns the price object for a variant.\n *\n * @param {any} variant - The variant.\n * @param {string} key - The key to get the price object for.\n *\n * @returns {any} The price object.\n */\nexport function variantPriceObject(variant: any, key: string = 'price'): any {\n if (variant[key] != null) {\n return {\n amount: variant[key],\n currencyCode: 'USD',\n };\n }\n\n return null;\n}\n\n/**\n * Returns the selected variant options.\n *\n * @param {any} product - The product.\n * @param {any} variant - The variant.\n *\n * @returns {any} The selected variant options.\n */\nexport function selectedVariantOptions(product: any, variant: any): any {\n const selectedOptions: Record<string, any> = {};\n\n if (variant.option1 != null) {\n selectedOptions[product.options[0].name] = variant.option1;\n }\n\n if (variant.option2 != null) {\n selectedOptions[product.options[1].name] = variant.option2;\n }\n\n if (variant.option3 != null) {\n selectedOptions[product.options[2].name] = variant.option3;\n }\n\n return selectedOptions;\n}\n\n/**\n * Returns the product image object.\n *\n * @param {any} product - The product.\n * @param {number | null} id - The ID of the image. *\n *\n * @returns {any} The product image object.\n */\nexport function productImageObject(product: any, id: number | null): any {\n let image = null;\n\n if (product.image) {\n image = {\n altText: product.image.alt,\n height: product.image.height,\n id: `gid://shopify/ProductImage/${product.image.id}`,\n url: product.image.src,\n width: product.image.width,\n };\n }\n\n if (product.images && product.images.length > 0 && id != null) {\n const matchingImage = product.images.find((i: any) => i.id === id);\n\n if (matchingImage) {\n image = {\n altText: matchingImage.alt,\n height: matchingImage.height,\n id: `gid://shopify/ProductImage/${matchingImage.id}`,\n url: matchingImage.src,\n width: matchingImage.width,\n };\n }\n }\n\n return image;\n}\n\n/**\n * Returns a query string as an object.\n *\n * @param {string} str - The query string to convert to an object.\n *\n * @returns {any} The object.\n */\nexport function queryStringToObject(str: string): any {\n const params = new URLSearchParams(str);\n\n return Object.fromEntries(params.entries());\n}\n\n/**\n * Returns a UTM object from a string.\n *\n * @param {string} str - The string to convert to a UTM object.\n *\n * @returns {any} The UTM object.\n */\nexport function utmObjectFromString(str: string): any {\n const utmKeys = ['utm_campaign', 'utm_medium', 'utm_source', 'utm_term', 'utm_content'];\n\n const matches: Record<string, any> = {};\n\n const url = new URL(str);\n const queryObject = queryStringToObject(url.search);\n\n for (const [key, value] of Object.entries(queryObject)) {\n if (utmKeys.includes(key)) {\n matches[key] = value;\n }\n }\n\n return Object.keys(matches).length > 0 ? matches : null;\n}\n\n/**\n * Returns the amount in cents.\n *\n * @param {number} amount - The amount to convert to cents.\n *\n * @returns {number} The amount in cents.\n */\nexport function amountToCents(amount: number | string): number {\n let normalizedAmount: number = 0;\n\n if (typeof amount === 'string') {\n if (amount.indexOf('.') !== -1) {\n normalizedAmount = Math.round(parseFloat(amount) * 100);\n } else {\n normalizedAmount = parseInt(amount, 10);\n }\n } else if (typeof amount === 'number') {\n normalizedAmount = Math.round(amount * 100);\n }\n\n if (isNaN(normalizedAmount)) {\n normalizedAmount = 0;\n }\n\n return normalizedAmount;\n}\n\n/**\n * Serializes an object.\n *\n * @param {Record<string, unknown>} obj - The object to serialize.\n *\n * @returns {string} The serialized object.\n */\nexport function serialize(obj: Record<string, unknown>): string {\n const serialized: string[] = [];\n\n const add = (key: string, value: any) => {\n value = typeof value === 'function' ? value() : value;\n value = value === null ? '' : value === undefined ? '' : value;\n serialized[serialized.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value);\n };\n\n const buildParameters = (prefix: string, obj: any) => {\n let i, key, len;\n\n if (prefix) {\n if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n buildParameters(prefix + '[' + (typeof obj[i] === 'object' && obj[i] ? i : '') + ']', obj[i]);\n }\n } else if (Object.prototype.toString.call(obj) === '[object Object]') {\n for (key in obj) {\n buildParameters(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParameters(key, obj[key]);\n }\n }\n\n return serialized;\n };\n\n return buildParameters('', obj).join('&');\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { serialize } from '~/utilities';\n\n// Type definitions\n\ntype Config = {\n /**\n * @deprecated\n */\n cdnDomain: string;\n domain: string;\n eventDomain: string;\n geoDomain: string;\n key: string | null;\n shieldDomain: string;\n shop: string | null;\n staticDomain: string;\n};\n\ntype Staging = Omit<Config, 'key' | 'shop'>;\n\ntype FetchOptions = {\n fetch?: RequestInit & { strictErrors?: boolean };\n};\n\ntype RequestData = Record<string, any> | null;\n\nconst staging: Staging = {\n /**\n * @deprecated\n */\n cdnDomain: 'https://cdn.enigneyuber.com',\n domain: 'https://enigneyuber.com',\n eventDomain: 'https://enigneyuber.com',\n geoDomain: 'https://geo.enigneyuber.com',\n shieldDomain: 'https://cached.enigneyuber.com',\n staticDomain: 'https://cdn.enigneyuber.com',\n};\n\nconst stagingDomains: string[] = [\n 'cab-staging.myshopify.com',\n 'enigneyuber.com',\n 'rebuy-engine-regression.myshopify.com',\n 'rebuy-stage-currency-test.myshopify.com',\n 'rebuy-staging-automation.myshopify.com',\n 'rebuy-staging-regression.myshopify.com',\n 'rebuy-uat.myshopify.com',\n 'rebuy-regression-qa.myshopify.com',\n 'senator-staging.myshopify.com',\n 'mike-reids-test-store.myshopify.com',\n 'dash-ext-hoke.myshopify.com',\n 'rebuy-checkout-e2e-staging.myshopify.com',\n];\n\nconst makeCall = async (\n key: string | null,\n method: string,\n path: string,\n data: RequestData,\n origin: string,\n options: FetchOptions = {}\n): Promise<any> => {\n const url = `${origin}${path}`;\n const requestUrl = new URL(url);\n const fetchOptions = options?.fetch ?? {};\n\n const requestData: RequestData = {};\n\n if (typeof data == 'object' && data != null) {\n Object.assign(requestData, data);\n }\n\n if (typeof key == 'string' && key.length > 0) {\n Object.assign(requestData, { key: key });\n }\n\n const requestObject: RequestInit & { strictErrors?: boolean } = {\n method,\n ...fetchOptions,\n };\n\n if (method === 'GET') {\n requestUrl.search = serialize(requestData);\n } else if (method === 'POST') {\n requestObject.headers = {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n };\n requestObject.body = new URLSearchParams(requestData) as any;\n }\n\n const request = await fetch(requestUrl.toString(), requestObject);\n const response = await request.json();\n\n if (!request.ok && fetchOptions.strictErrors === true) {\n const message = `An error has occurred: ${request.status}`;\n throw new Error(message, { cause: response });\n }\n\n return response;\n};\n\nexport class Api {\n private config: Config;\n\n constructor(options: string | Partial<Config> | null) {\n this.config = {\n /**\n * @deprecated\n */\n cdnDomain: 'https://cdn.rebuyengine.com',\n domain: 'https://rebuyengine.com',\n eventDomain: 'https://rebuyengine.com',\n geoDomain: 'https://geo.rebuyengine.com',\n key: null,\n shieldDomain: 'https://cached.rebuyengine.com',\n shop: null,\n staticDomain: 'https://cdn.rebuyengine.com',\n };\n\n if (typeof options == 'string') {\n this.config.key = options;\n } else if (typeof options == 'object' && options != null) {\n Object.assign(this.config, options);\n }\n\n for (const domain of stagingDomains) {\n if (typeof location === 'object' && (location as any)?.host?.includes(domain)) {\n Object.assign(this.config, staging);\n break;\n }\n\n if (typeof this.config.shop === 'string' && this.config.shop.includes(domain)) {\n Object.assign(this.config, staging);\n break;\n }\n }\n }\n\n async callEvent(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.eventDomain, options);\n }\n\n async callShield(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.shieldDomain, options);\n }\n\n async callStatic(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.staticDomain, options);\n }\n\n async callGeo(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.geoDomain, options);\n }\n\n async callCdn(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.cdnDomain, options);\n }\n\n async callApi(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.domain, options);\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Api;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { dataToString, isBase64Encoded, stringToData } from '~/utilities';\n\n/**\n * Get a cookie by name\n *\n * @param {string} name - The name of the cookie to get\n *\n * @returns {any} The value of the cookie or null if the cookie is not found\n */\nexport function get(name: string): any | null {\n if (typeof document == 'undefined' || !document.cookie) {\n return null;\n }\n\n // Get cookie\n const cookie = document.cookie.match('(^|;) ?' + decodeURIComponent(name) + '=([^;]*)(;|$)');\n\n let value: any = null;\n\n if (cookie != null) {\n // Get data\n const data = decodeURIComponent(cookie[2]);\n\n // Auto decode\n const decode = isBase64Encoded(data) ? true : false;\n\n // Convert to data object\n value = stringToData(data, decode);\n }\n\n return value;\n}\n\n/**\n * Get all cookies\n *\n * @returns {Record<string, any>} All cookies\n */\nexport function getAll(): Record<string, any> {\n const cookies: Record<string, any> = {};\n\n if (document && document.cookie && document.cookie !== '') {\n const split = document.cookie.split(';');\n\n for (let i = 0; i < split.length; i++) {\n const pairs = split[i].split('=');\n\n pairs[0] = pairs[0].replace(/^ /, '');\n\n const key = decodeURIComponent(pairs[0]);\n const value = decodeURIComponent(pairs[1]);\n\n // Auto decode\n const decode = isBase64Encoded(value) ? true : false;\n\n cookies[key] = stringToData(value, decode);\n }\n }\n\n return cookies;\n}\n\n/**\n * Set a cookie\n *\n * @param {string} name - The name of the cookie\n * @param {any} value - The value of the cookie\n * @param {any} config - The configuration of the cookie\n *\n * @returns {void}\n */\nexport function set(name: string, value: any, config: any): void {\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n const attributes = ['path', 'domain', 'maxAge', 'expires', 'secure', 'sameSite'];\n const convenienceTimes = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'years'];\n\n const cookieAttributes: Record<string, any> = {\n path: '/',\n };\n\n if (typeof config != 'undefined' && Number.isInteger(config)) {\n cookieAttributes['max-age'] = config;\n } else if (typeof config === 'object' && config !== null) {\n for (const key in config) {\n if (attributes.includes(key)) {\n if (key === 'maxAge') {\n cookieAttributes['max-age'] = config[key];\n } else if (key === 'sameSite') {\n cookieAttributes['samesite'] = config[key];\n } else if (key === 'expires') {\n cookieAttributes[key] = new Date(config[key]).toUTCString();\n } else {\n cookieAttributes[key] = config[key];\n }\n } else if (convenienceTimes.includes(key)) {\n let duration = config[key];\n\n if (key === 'seconds') {\n duration = duration * 1;\n } else if (key === 'minutes') {\n duration = duration * 60;\n } else if (key === 'hours') {\n duration = duration * 60 * 60;\n } else if (key === 'days') {\n duration = duration * 60 * 60 * 24;\n } else if (key === 'weeks') {\n duration = duration * 60 * 60 * 24 * 7;\n } else if (key === 'months') {\n duration = duration * 60 * 60 * 24 * 30;\n } else if (key === 'years') {\n duration = duration * 60 * 60 * 24 * 365;\n }\n\n cookieAttributes['max-age'] = duration;\n }\n }\n }\n\n // Convert data to string\n value = dataToString(value, config?.encode);\n\n // Define cookie\n let cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n\n // Add optional cookie attributes\n for (const key in cookieAttributes) {\n cookie += ';' + key + '=' + cookieAttributes[key];\n }\n\n // Write cookie\n document.cookie = cookie;\n}\n\n/**\n * Find all cookies that match a name\n *\n * @param {string} name - The name of the cookie to find\n *\n * @returns {Array<{ name: string; value: any }>} All cookies that match the name\n */\nexport function find(name: string): { name: string; value: any }[] {\n const matches: { name: string; value: any }[] = [];\n const cookies = getAll();\n\n for (const key in cookies) {\n if (key.includes(name)) {\n matches.push({\n name: key,\n value: cookies[key],\n });\n }\n }\n\n return matches;\n}\n\n/**\n * Destroy a cookie\n *\n * @param {string} name - The name of the cookie to destroy\n */\nexport function destroy(name: string): void {\n set(name, '', { encode: false, seconds: 0 });\n}\n\n/**\n * Check if cookies are enabled\n *\n * @returns {boolean} True if cookies are enabled, false otherwise\n */\nexport function enabled(): boolean {\n const test = {\n key: '__cookie_test',\n value: 1,\n };\n\n set(test.key, test.value, { encode: false });\n\n const enabled = get(test.key) === test.value ? true : false;\n\n if (enabled) {\n destroy(test.key);\n }\n\n return enabled;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default { destroy, enabled, find, get, getAll, set };\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Api from '~/api';\nimport Cookie from '~/cookie';\n\ntype Config = {\n geolocation: any;\n geolocationCookie: string;\n geolocationDuration: {\n minutes: number;\n };\n key: string | null;\n};\n\nexport class Geolocation {\n private config: Config;\n\n constructor(key: string | null) {\n this.config = {\n geolocation: null,\n geolocationCookie: '_rebuyGeolocation',\n geolocationDuration: {\n minutes: 30,\n },\n key: null,\n };\n\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n this.config.geolocation = Cookie.get(this.config.geolocationCookie);\n\n // Create a new geolocation (if needed)\n if (this.config.geolocation === null) {\n this._fetchGeolocation();\n }\n }\n\n async _fetchGeolocation(): Promise<any> {\n const api = new Api({ key: this.config.key });\n const response = await api.callGeo('GET', '/', null);\n\n if (response.data) {\n // Update instance config with geolocation\n this.config.geolocation = response.data;\n\n // Write cookie with geolocation\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with geolocation config\n Object.assign(cookieOptions, this.config.geolocationDuration);\n\n // Write cookie with geolocation\n Cookie.set(this.config.geolocationCookie, this.config.geolocation, { ...cookieOptions, encode: false });\n }\n\n return this.config.geolocation;\n }\n\n async geolocation(): Promise<any> {\n if (this.config.geolocation == null) {\n await this._fetchGeolocation();\n }\n\n return this.config.geolocation;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Geolocation;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Cookie from '~/cookie';\nimport { sessionId } from '~/utilities';\n\ntype Config = {\n now: number | null;\n sessionDuration: {\n minutes: number;\n };\n sessionId: string | null;\n sessionIdCookie: string;\n};\n\nconst config: Config = {\n now: null,\n sessionDuration: {\n minutes: 30,\n },\n sessionId: null,\n sessionIdCookie: '_rebuySessionId',\n};\n\nexport class Session {\n constructor() {\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n config.now = new Date().getTime();\n config.sessionId = Cookie.get(config.sessionIdCookie);\n\n // Create a new session (if needed)\n if (config.sessionId === null) {\n config.sessionId = sessionId();\n }\n\n // Write cookie with session ID\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with session config\n Object.assign(cookieOptions, config.sessionDuration);\n\n // Write cookie with session ID\n Cookie.set(config.sessionIdCookie, config.sessionId, cookieOptions);\n }\n\n sessionId(): string | null {\n return config.sessionId;\n }\n\n sessionStart(): number {\n return config.sessionId ? Number(config.sessionId.split('.')[1]) : 0;\n }\n\n sessionDuration(): number {\n return config.now !== null ? parseInt(((config.now - this.sessionStart()) / 1000 / 60).toString()) : 0;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Session;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Cookie from '~/cookie';\nimport Geolocation from '~/geolocation';\nimport Session from '~/session';\nimport { uuid } from '~/utilities';\n\ntype Config = {\n geolocation?: any;\n key: string | null;\n session: any;\n visitorDuration: {\n years: number;\n };\n visitorId: string | null;\n visitorIdCookie: string;\n};\n\nexport class Identity {\n private config: Config;\n\n constructor(key: string | null) {\n this.config = {\n geolocation: null,\n key: null,\n session: null,\n visitorDuration: {\n years: 1,\n },\n visitorId: null,\n visitorIdCookie: '_rebuyVisitorId',\n };\n\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n this.config.visitorId = Cookie.get(this.config.visitorIdCookie);\n\n // Create a new identifier (if needed)\n if (this.config.visitorId === null) {\n this.config.visitorId = uuid();\n }\n\n // Write cookie with visitor ID\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with visitor config\n Object.assign(cookieOptions, this.config.visitorDuration);\n\n // Write cookie with session ID\n Cookie.set(this.config.visitorIdCookie, this.config.visitorId, cookieOptions);\n\n // Create visitor session\n this.config.session = new Session();\n\n // Create visitor geolocation, passing the key\n this.config.geolocation = new Geolocation(this.config.key);\n }\n\n visitorId(): string | null {\n return this.config.visitorId;\n }\n\n sessionId(): string | null {\n return this.config.session ? this.config.session.sessionId() : null;\n }\n\n sessionStart(): string | null {\n return this.config.session ? this.config.session.sessionStart() : null;\n }\n\n sessionDuration(): string | null {\n return this.config.session ? this.config.session.sessionDuration() : null;\n }\n\n async geolocation(): Promise<any> {\n return this.config.geolocation ? await this.config.geolocation.geolocation() : null;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Identity;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Api from '~/api';\nimport Identity from '~/identity';\nimport { convertProductToStorefrontFormat } from '~/utilities';\n\ntype Config = {\n api: any;\n contextParameters: Record<string, any> | null;\n defaultParameters: Record<string, any> | null;\n identity: any;\n key: string | null;\n shop: string | null;\n};\n\nconst trackEvent = async (config: Config, eventData: Record<string, any>): Promise<any> => {\n if (config.identity && config.identity.visitorId()) {\n eventData.uuid = config.identity.visitorId();\n }\n\n return await config.api.callEvent('POST', '/api/v1/analytics/event', eventData);\n};\n\nconst makeShieldCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, shield: true });\n};\n\nconst makeStaticCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, static: true });\n};\n\nconst makeCDNCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, cdn: true });\n};\n\nconst makeCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n const query: Record<string, any> = {};\n\n if (config.defaultParameters != null) {\n Object.assign(query, config.defaultParameters);\n }\n\n if (config.contextParameters != null) {\n Object.assign(query, config.contextParameters);\n }\n\n if (typeof params == 'object' && params != null) {\n Object.assign(query, params);\n }\n\n if (typeof options != 'object' || options == null) {\n console.warn('Unsupported fetch options provided.', options);\n options = {};\n }\n\n if (config.identity && config.identity.visitorId()) {\n query.uuid = config.identity.visitorId();\n }\n\n // Origin or dedicated edge?\n const source = options.cdn ? 'callCdn' : options.shield ? 'callShield' : options.static ? 'callStatic' : 'callApi';\n const response = await config.api[source]('GET', endpoint, query, options);\n\n if (response.data && format === 'storefront') {\n for (let i = 0; i < response.data.length; i++) {\n response.data[i] = convertProductToStorefrontFormat(response.data[i]);\n }\n }\n\n return response;\n};\n\nexport class RebuyClient {\n private config: Config;\n\n constructor(key?: string, defaultParameters?: Record<string, any>, shop?: string) {\n this.config = {\n api: null,\n contextParameters: null,\n defaultParameters: null,\n identity: null,\n key: null,\n shop: null,\n };\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n if (typeof defaultParameters == 'object' && defaultParameters != null) {\n this.config.defaultParameters = defaultParameters;\n }\n\n if (typeof shop == 'string' && shop.endsWith('.myshopify.com')) {\n this.config.shop = shop;\n }\n\n this.config.api = new Api({ key: this.config.key, shop: this.config.shop });\n this.config.identity = new Identity(this.config.key);\n }\n\n setDefaultParameters(defaultParameters: Record<string, any>): void {\n if (typeof defaultParameters == 'object' && defaultParameters != null) {\n this.config.defaultParameters = defaultParameters;\n }\n }\n\n setContextParameters(contextParameters: Record<string, any>): void {\n if (typeof contextParameters == 'object' && contextParameters != null) {\n this.config.contextParameters = contextParameters;\n }\n }\n\n async getData(endpoint: string, params: Record<string, any>, options: Record<string, any> = {}): Promise<any> {\n return await makeCall(this.config, endpoint, params, null, options);\n }\n\n async getDataFromCDN(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeCDNCall(this.config, endpoint, params, null, options);\n }\n\n async getShieldedAsset(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeShieldCall(this.config, endpoint, params, null, options);\n }\n\n async getStaticAsset(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeStaticCall(this.config, endpoint, params, null, options);\n }\n\n async getStorefrontData(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeCall(this.config, endpoint, params, 'storefront', options);\n }\n\n async trackProductViewed(data: Record<string, any>): Promise<any> {\n const requiredKeys = ['shopify_product_id', 'shopify_product_handle'];\n\n const defaultData = {\n noun: 'product',\n subject: 'user',\n verb: 'viewed',\n };\n\n if (typeof data != 'undefined' && data != null) {\n const dataKeys = Object.keys(data);\n\n if (dataKeys.some((key) => requiredKeys.includes(key))) {\n const payload = Object.assign(data, defaultData);\n\n return await trackEvent(this.config, payload);\n }\n }\n\n return null;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default RebuyClient;\n", "import { z } from 'zod';\n\nimport { SmartCartConfig } from './smartCart';\n\n/**\n * The A/B experiment fields `resolveExperiment` actually reads \u2014 a lean projection of the engine's\n * `activeExperiments`. Peripheral experiment metadata (name, page targeting, alias/CSS/JS inputs) is\n * dropped so a change there can't fail the shared config parse.\n */\nexport const CabActiveExperiment = z.object({\n data: z.array(\n z.object({\n elementId: z.coerce.number(),\n id: z.coerce.number(),\n traffic: z.coerce.number(),\n })\n ),\n id: z.coerce.number(),\n placeholderId: z.coerce.number().nullable(),\n type: z.string(),\n});\n\nexport type CabActiveExperiment = z.infer<typeof CabActiveExperiment>;\n\n/**\n * The lean shop config CAB actually consumes \u2014 the five load-bearing fields, not the ~30 the\n * editor-facing `ShopConfig` carries. `apiKey` stays strict (every offers/monetize/gift/analytics\n * request authenticates with it); the rest use `.catch()` so a peripheral engine change (a renamed\n * field, a new `carousel` enum value like `'css'`, an experiment shape drift) degrades that one field\n * instead of 500-ing the shared `fetchUserConfig` and killing every dynamic CAB rail fleet-wide.\n */\nexport const CabShopConfig = z.object({\n /**\n * Per-element resilient: parse as `unknown[]` (non-array \u2192 `[]`), then keep only the experiments that\n * validate. A single drifted experiment drops itself instead of `.catch`-ing the WHOLE array to `[]` and\n * silently disabling every live A/B test fleet-wide.\n */\n activeExperiments: z\n .array(z.unknown())\n .catch([])\n .default([])\n .transform((experiments) =>\n experiments.flatMap((experiment) => {\n const result = CabActiveExperiment.safeParse(experiment);\n\n return result.success ? [result.data] : [];\n })\n ),\n apiKey: z.string(),\n /**\n * The shop's base-currency ISO code (e.g. `'USD'`). CAB derives the shop minor-unit exponent from it\n * (`currencyDecimals`) so a Functions-applied fixed discount \u2014 whose amount is in shop minor units \u2014\n * converts to the buyer's currency exactly in a cross-decimal market. `.catch()` like its siblings: a\n * missing/renamed currency degrades to \"unknown\" (client falls back to buyer decimals), never a parse fail.\n */\n currency: z.string().optional().catch(undefined),\n monetize: z.object({ publisherKey: z.string().nullable() }).nullish().catch(undefined),\n shopId: z.number().optional().catch(undefined),\n});\n\nexport type CabShopConfig = z.infer<typeof CabShopConfig>;\n\n/**\n * The lean `/api/v1/user/config` projection `fetchUserConfig` parses. `smartFlows` (schema-required on\n * the full `UserConfig` but read by no CAB path) is dropped; `smartCart` keeps its `.catch()`\n * safety bar so a smart-cart shape drift can never fail apiKey resolution.\n */\nexport const CabUserConfig = z.object({\n shop: CabShopConfig,\n smartCart: SmartCartConfig.nullish().catch(undefined),\n});\n\nexport type CabUserConfig = z.infer<typeof CabUserConfig>;\n", "import { z } from 'zod';\n\n/**\n * A gift/product reference attached to a smart-cart tier. Kept loose for S0 (data\n * plumbing) \u2014 S2 (gift mechanics) pins the variant/availability fields it consumes.\n */\nexport const SmartCartTierProduct = z.looseObject({\n handle: z.string().optional(),\n id: z.coerce.number().optional(),\n productId: z.coerce.number().optional(),\n title: z.string().optional(),\n variantIds: z.array(z.coerce.number()).optional(),\n});\n\n/**\n * One reward tier on a smart-cart tiered progress bar. `type` is `product` (gift), `shipping`,\n * `discount` (order discount applied by the order-discount Function, keyed by `_barId`) or\n * `decorative` (cosmetic milestone) \u2014 all four render at checkout. `minimum` is the unlock\n * threshold in shop-currency DOLLARS \u2014 except on `unlockConditionType: 'item_quantity'` tiers,\n * where it is a raw ITEM COUNT; `presentmentCurrencies` carries per-ISO-code CENTS overrides.\n *\n * The `*AmountRemainingLabel*`/`*AmountReachedLabel*` pairs are onsite's per-tier feedback copy\n * (`product_amount_remaining_label_text` etc.): the boolean gates whether the prompt shows, the\n * `*Text` holds the merchant sentence with `{{remaining_amount}}`/`{{product_title}}`/`{{discount_amount}}`\n * tokens. Blank/disabled tiers fall back to the bar-level shipping copy client-side.\n */\nexport const SmartCartTier = z.looseObject({\n allProducts: z.array(SmartCartTierProduct).optional(),\n /** Merchant-set tier label (e.g. \"Free gift\", \"$100 reward\"), shown on the step row when enabled. */\n customTierLabel: z.boolean().optional(),\n customTierLabelText: z.string().optional(),\n decorativeAmountReachedLabel: z.boolean().optional(),\n decorativeAmountReachedLabelText: z.string().optional(),\n decorativeAmountRemainingLabel: z.boolean().optional(),\n decorativeAmountRemainingLabelText: z.string().optional(),\n /** Order-discount reward: `'fixedAmount'` (shop-currency dollars) or `'percentage'` (whole percent). */\n discountAmountFromTotal: z.coerce.number().optional(),\n discountAmountReachedLabel: z.boolean().optional(),\n discountAmountReachedLabelText: z.string().optional(),\n discountAmountRemainingLabel: z.boolean().optional(),\n discountAmountRemainingLabelText: z.string().optional(),\n discountType: z.string().optional(),\n filterOosVariants: z.boolean().optional(),\n id: z.string().optional(),\n minimum: z.coerce.number().optional(),\n presentmentCurrencies: z.looseObject({ enabled: z.boolean().optional() }).optional(),\n productAmountReachedLabel: z.boolean().optional(),\n productAmountReachedLabelText: z.string().optional(),\n productAmountRemainingLabel: z.boolean().optional(),\n productAmountRemainingLabelText: z.string().optional(),\n products: z.array(SmartCartTierProduct).optional(),\n type: z.string().optional(),\n /**\n * onsite's PER-TIER unit switch (`unlock_condition_type`): `'item_quantity'` makes `minimum` an\n * item count (checked before any money handling \u2014 no \u00D7100, no FX, no presentment overrides,\n * mirroring onsite `getTierMinimum`); anything else (or absent) keeps the money semantics.\n */\n unlockConditionType: z.string().optional(),\n});\n\n/**\n * A single smart-cart progress bar (one per geo segment). `countryCodes` +\n * `geolocationEnabled` drive client-side country gating; `tiers` are the unlock steps;\n * `language` holds the bar-level reached/remaining copy.\n */\nexport const SmartCartBar = z.looseObject({\n countryCodes: z.array(z.string()).optional(),\n /**\n * onsite `exclude_discount_in_subtotal`: measure progress against the PRE-discount subtotal so an\n * applied code/order discount doesn't lower progress. The client adds cart discount allocations back.\n */\n excludeDiscountInSubtotal: z.boolean().optional(),\n /** Products excluded from the progress subtotal; the client subtracts their variants' cart cost. */\n excludedProducts: z.array(z.looseObject({ variantIds: z.array(z.coerce.number()).optional() })).optional(),\n freeShippingOnSubscription: z.boolean().optional(),\n geolocationEnabled: z.boolean().optional(),\n id: z.string().optional(),\n language: z\n .looseObject({\n freeShippingReached: z.string().optional(),\n freeShippingRemaining: z.string().optional(),\n giftAreaTitle: z.string().optional(),\n })\n .optional(),\n name: z.string().optional(),\n tiers: z.array(SmartCartTier).optional(),\n});\n\n/** A smart-cart layout component; only `type === 'tiered_progress_bar'` carries the bars we render. */\nexport const SmartCartComponent = z.looseObject({\n settings: z.looseObject({ bars: z.array(SmartCartBar).optional() }).optional(),\n type: z.string().optional(),\n});\n\n/**\n * The subset of the shop's smart-cart config the checkout extension reads: the\n * `tiered_progress_bar` component(s) and their bars/tiers. The rest of the onsite\n * smart-cart config (buy-more-save-more, custom templates/CSS, callbacks) is out of\n * scope \u2014 `looseObject` preserves-but-ignores it. Parsed under `UserConfig.smartCart`\n * with `.catch(undefined)` so a shape drift here can NEVER break apiKey resolution for\n * offers / monetize / analytics / gift validation.\n */\nexport const SmartCartConfig = z.looseObject({\n components: z.array(SmartCartComponent).optional(),\n});\n\nexport type SmartCartBar = z.infer<typeof SmartCartBar>;\nexport type SmartCartConfig = z.infer<typeof SmartCartConfig>;\nexport type SmartCartTier = z.infer<typeof SmartCartTier>;\nexport type SmartCartTierProduct = z.infer<typeof SmartCartTierProduct>;\n", "import { z } from 'zod';\n\nimport { CacheInfo, Product } from './product';\n\nconst BaseRule = z.object({\n operator: z.string(),\n type: z.string(),\n value: z.union([z.string(), z.number()]),\n});\n\nconst Rule = BaseRule.extend({\n conditions: z.array(z.object({ type: z.string(), value: z.union([z.string(), z.number()]) })).optional(),\n products: z\n .array(\n z.object({\n productId: z.number(),\n subRules: z.object({ logic: z.array(z.object({ rules: z.array(BaseRule) })) }).optional(),\n variantIds: z.array(z.number()),\n })\n )\n .optional(),\n});\n\nconst Output = z.object({\n channel: z.string().optional(),\n collectionId: z.number().optional(),\n collectionSort: z.string().optional(),\n collectionSortType: z.string().nullish(),\n days: z.string().optional(),\n discount: z.object({ amount: z.string(), type: z.string() }).optional(),\n endpoint: z.string().optional(),\n key: z.string().optional(),\n operator: z.string().optional(),\n productPrice: z.object({ amount: z.string(), type: z.string() }).optional(),\n products: z.array(z.object({ productId: z.number(), variantIds: z.array(z.number()) })).optional(),\n productWithTagsSort: z.string().optional(),\n trendingSort: z.string().optional(),\n type: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\nconst MatchedRule = z.object({\n collapsed: z.boolean().optional(),\n exitIfMatched: z.boolean(),\n index: z.number(),\n logic: z.array(z.object({ rules: z.array(Rule) })),\n output: z.array(Output),\n});\n\n/**\n * The rule-gating verdict the client's `useRule` reads (`metadata.custom.should_show`, camelCased). A\n * data-source evaluated at `limit: 0` returns it; validating the shape server-side lets an unreadable\n * verdict (an engine `custom` rename) be told apart from a rule legitimately evaluating false, which\n * would otherwise hide every gated section on every shop with no signal.\n */\nexport const RuleVerdict = z.object({ custom: z.object({ shouldShow: z.boolean() }) });\n\nexport type RuleVerdict = z.infer<typeof RuleVerdict>;\n\nexport const Metadata = z.object({\n cacheInfo: CacheInfo.optional(),\n cartItems: z.array(z.never()).optional(),\n errors: z.array(z.never()).optional(),\n filteredInputProducts: z.array(z.never()).optional(),\n filteredOosProducts: z.array(Product).optional(),\n globalExcludedProducts: z.array(Product).optional(),\n inputProducts: z.array(z.never()).optional(),\n matchedRules: z.array(MatchedRule).optional(),\n topSellersFilled: z.boolean().optional(),\n unevaluatedRules: z.array(MatchedRule).optional(),\n unmatchedRules: z.array(MatchedRule).optional(),\n widget: z\n .object({\n discount: z.object({ amount: z.string(), type: z.string() }).optional(),\n language: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n});\n\nexport type Metadata = z.infer<typeof Metadata>;\n", "import { z } from 'zod';\n\nconst zDatetime = z.iso.datetime({ offset: true });\n\nexport const CacheInfo = z.object({\n cachedAtTime: z.union([z.string(), z.number()]),\n cacheExpires: z.union([z.string(), z.number()]).optional(),\n cacheKey: z.string(),\n cacheKeyReadable: z.string(),\n cacheType: z.string().optional(),\n loadedOptions: z.record(z.string(), z.boolean()).optional(),\n});\n\nconst Category = z.object({\n adminGraphqlApiId: z.string(),\n fullName: z.string(),\n name: z.string(),\n});\n\nconst Metafield = z.object({\n key: z.string(),\n namespace: z.string(),\n type: z.string(),\n value: z.string(),\n});\n\nconst Image = z.object({\n adminGraphqlApiId: z.string(),\n alt: z.string().nullable(),\n createdAt: zDatetime.optional(),\n height: z.number(),\n id: z.number(),\n metafields: z.array(Metafield).optional(),\n position: z.number(),\n productId: z.number(),\n src: z.url(),\n updatedAt: zDatetime.optional(),\n variantIds: z.array(z.number()),\n width: z.number(),\n});\n\nconst Media = z.object({\n adminGraphqlApiId: z.string(),\n alt: z.string().nullable(),\n createdAt: zDatetime,\n id: z.number(),\n mediaContentType: z.string(),\n position: z.number(),\n previewImage: z.object({ height: z.number(), src: z.url(), status: z.string(), width: z.number() }),\n productId: z.number(),\n status: z.string(),\n updatedAt: zDatetime,\n variantIds: z.array(z.number()),\n});\n\nconst Option = z.object({\n id: z.number(),\n name: z.string(),\n position: z.number(),\n productId: z.number(),\n values: z.array(z.string()),\n});\n\nexport type Option = z.infer<typeof Option>;\n\nconst PriceAdjustment = z.object({\n orderCount: z.number().optional(),\n position: z.number(),\n value: z.string(),\n valueType: z.string(),\n});\n\nexport type PriceAdjustment = z.infer<typeof PriceAdjustment>;\n\nconst Ratings = z.union([\n z.object({ judgemeAverageStarRating: z.number(), judgemeTotalReviews: z.number() }),\n z.object({ junipAverageStarRating: z.number(), junipTotalReviews: z.number() }),\n z.object({ klaviyoAverageStarRating: z.number(), klaviyoTotalReviews: z.number() }),\n z.object({ looxAverageStarRating: z.number(), looxTotalReviews: z.number() }),\n z.object({ okendoAverageStarRating: z.number(), okendoTotalReviews: z.number() }),\n z.object({ opinewAverageStarRating: z.number(), opinewTotalReviews: z.number() }),\n z.object({ reviewsioAverageStarRating: z.number(), reviewsioTotalReviews: z.number() }),\n z.object({ stampedAverageStarRating: z.number(), stampedTotalReviews: z.number() }),\n z.object({ yotpoAverageStarRating: z.number(), yotpoTotalReviews: z.number() }),\n]);\n\nconst SellingPlan = z.object({\n description: z.string().optional(),\n id: z.number(),\n name: z.string(),\n options: z.array(z.object({ name: z.string(), position: z.number(), value: z.string() })),\n orderIntervalFrequency: z.string().optional(),\n orderIntervalUnitType: z.string().optional(),\n position: z.number().optional(),\n priceAdjustments: z.array(PriceAdjustment),\n shopifyVariantId: z.string().optional(),\n});\n\nexport type SellingPlan = z.infer<typeof SellingPlan>;\n\nconst SellingPlanAllocation = z.object({\n compareAtPrice: z.number(),\n perDeliveryPrice: z.number(),\n price: z.number(),\n priceAdjustments: z.array(PriceAdjustment),\n sellingPlanGroupId: z.string(),\n sellingPlanId: z.number(),\n});\n\nexport type SellingPlanAllocation = z.infer<typeof SellingPlanAllocation>;\n\nexport const SellingPlanGroup = z.object({\n appId: z.string().optional(),\n description: z.string().optional(),\n discountAmount: z.number().optional(),\n discountType: z.string().optional(),\n id: z.string(),\n name: z.string(),\n options: z.array(Option),\n requiresSellingPlan: z.boolean().optional(),\n sellingPlans: z.array(SellingPlan),\n variants: z.array(z.number()),\n});\n\nexport type SellingPlanGroup = z.infer<typeof SellingPlanGroup>;\n\nconst Variant = z.object({\n adminGraphqlApiId: z.string(),\n barcode: z.string().nullable(),\n compareAtPrice: z.string().nullable(),\n createdAt: zDatetime,\n fulfillmentService: z.string().nullish(),\n grams: z.number(),\n id: z.number(),\n imageId: z.number().nullable(),\n inventoryItemId: z.number().optional(),\n inventoryManagement: z.string().nullable(),\n inventoryPolicy: z.string(),\n inventoryQuantity: z.number(),\n link: z.url(),\n oldInventoryQuantity: z.number().optional(),\n option1: z.string(),\n option2: z.string().nullable(),\n option3: z.string().nullable(),\n position: z.number(),\n price: z.string(),\n productId: z.number(),\n requiresShipping: z.boolean(),\n sellingPlanAllocations: z.array(SellingPlanAllocation).optional(),\n sku: z.string().nullable(),\n taxable: z.boolean(),\n taxCode: z.string().optional(),\n title: z.string(),\n updatedAt: zDatetime,\n weight: z.number(),\n weightUnit: z.string().optional(),\n});\n\nexport type Variant = z.infer<typeof Variant>;\n\nexport const Product = z.object({\n adminGraphqlApiId: z.string(),\n bodyHtml: z.string().nullable(),\n cacheInfo: CacheInfo,\n category: Category.nullish(),\n collectionIds: z.array(z.number()),\n createdAt: zDatetime,\n description: z.string(),\n handle: z.string(),\n hasVariantsThatRequiresComponents: z.boolean().optional(),\n id: z.number(),\n image: Image.nullable(),\n images: z.array(Image).nullable(),\n link: z.url(),\n media: z.array(Media).optional(),\n metafields: z.array(Metafield).optional(),\n options: z.array(Option),\n owner: z.union([z.string(), z.number()]),\n productType: z.string(),\n publishedAt: zDatetime.nullable(),\n publishedScope: z.string().optional(),\n purchaseOptions: z.array(z.object({ discountOptions: z.array(z.never()) })).optional(),\n ratings: Ratings.optional(),\n selectedIndexPurchasedOption: z.number().optional(),\n sellingPlanAllocation: SellingPlanAllocation.optional(),\n sellingPlanGroups: z.array(SellingPlanGroup).optional(),\n status: z.string(),\n tags: z.string(),\n templateSuffix: z.string().nullable(),\n title: z.string(),\n updatedAt: zDatetime,\n variantGids: z.array(z.object({ adminGraphqlApiId: z.string(), updatedAt: zDatetime })).optional(),\n variantIds: z.array(z.object({ id: z.number() })).optional(),\n variants: z.array(Variant),\n vendor: z.string(),\n});\n\nexport type Product = z.infer<typeof Product>;\n", "import { z } from 'zod';\n\n/**\n * Per-product discount override a data source can attach \u2014 shaped like the legacy `settings.discount` /\n * `product.discount` (`@rebuy/rebuy/pricing`). Absent on the curated `Product` type, but present on\n * the wire, so the lean offer schema declares it explicitly.\n */\nconst OfferProductDiscount = z.object({\n amount: z.union([z.number(), z.string()]),\n discountedBy: z.string().optional(),\n discountedFrom: z.string().optional(),\n type: z.string(),\n});\n\nconst OfferProductOption = z.object({\n id: z.number(),\n name: z.string(),\n position: z.number(),\n values: z.array(z.string()),\n});\n\n/** Only what `toProduct` (`getIsOutOfStock` + `toPrice` + selection) reads off a variant. */\nconst OfferProductVariant = z.object({\n adminGraphqlApiId: z.string(),\n compareAtPrice: z.string().nullable(),\n id: z.number(),\n inventoryManagement: z.string().nullable(),\n inventoryPolicy: z.string(),\n inventoryQuantity: z.number(),\n link: z.string(),\n option1: z.string(),\n option2: z.string().nullable(),\n option3: z.string().nullable(),\n price: z.string(),\n title: z.string(),\n});\n\n/**\n * The lean server-side offer-product schema \u2014 exactly the fields the extension's `toProduct` consumes,\n * with the over-strict validators of the editor-facing `Product` (required `cacheInfo`, ISO\n * datetimes, `z.url()` links) relaxed to what the wire actually carries. `fetchDataSourceResults`\n * `safeParse`s each product against this and drops the ones that fail, so one malformed product costs\n * one offer card instead of the whole rail. This is also the type CAB imports in place of the loose\n * root `Product`, keeping the extension `any`-free.\n */\nexport const OfferProduct = z.object({\n description: z.string().optional(),\n discount: OfferProductDiscount.optional(),\n id: z.number(),\n image: z.object({ src: z.string() }).nullish(),\n images: z.array(z.object({ src: z.string(), variantIds: z.array(z.number()) })).nullish(),\n link: z.string().optional(),\n metafields: z.array(z.object({ key: z.string(), namespace: z.string(), value: z.string() })).optional(),\n options: z.array(OfferProductOption),\n sellingPlanGroups: z.array(z.object({ requiresSellingPlan: z.boolean().optional() })).optional(),\n title: z.string(),\n variants: z.array(OfferProductVariant),\n});\n\nexport type OfferProduct = z.infer<typeof OfferProduct>;\n", "import { z } from 'zod';\n\n/** @see {@link https://bitbucket.org/rebuyengine/rebuyengine.com/src/main/application/libraries/Cache/ShopConfigCache.php#lines-143} */\nexport const ShopConfig = z.object({\n activeExperiments: z.array(\n z.object({\n data: z.array(\n z.object({\n aliasName: z.string(),\n cssInput: z.string().nullish(),\n elementId: z.coerce.number(),\n id: z.coerce.number(),\n javascriptInput: z.string().nullish(),\n traffic: z.coerce.number(),\n })\n ),\n id: z.coerce.number(),\n name: z.string(),\n pageTarget: z.string().nullable(),\n pageTargetUrl: z.string().nullable(),\n placeholderId: z.coerce.number().nullable(),\n type: z.string(),\n })\n ),\n activePackages: z.array(\n z.object({\n cancelledAt: z.string().nullable(),\n id: z.number(),\n installedAt: z.string().nullable(),\n isActive: z.boolean(),\n isBillable: z.boolean(),\n packageId: z.number(),\n packageName: z.string(),\n shortName: z.string(),\n trialDays: z.number(),\n uninstalledAt: z.string().nullable(),\n })\n ),\n apiKey: z.string(),\n billingVersion: z.string().nullable(),\n cacheKey: z.coerce.number(),\n carousel: z.enum(['flickity', 'splide']),\n currency: z.string(),\n currencySymbol: z.string(),\n domain: z.string(),\n enabledJquery: z.boolean(),\n enabledPresentmentCurrencies: z.array(z.string()),\n hasSmartCollectionsEnabled: z.boolean(),\n hasSmartSearchEnabled: z.boolean(),\n id: z.coerce.number(),\n integrations: z.record(\n z.enum([\n 'attentive',\n 'judgeme',\n 'junip',\n 'klaviyo',\n 'loox',\n 'okendo',\n 'opinew',\n 'recharge',\n 'reviewsio',\n 'stamped',\n 'yotpo',\n ]),\n z.union([z.boolean(), z.unknown()])\n ),\n markets: z.object({\n enabled: z.boolean(),\n }),\n monetize: z\n .object({\n publisherKey: z.string().nullable(),\n })\n .nullish(),\n moneyFormat: z.string(),\n myshopifyDomain: z.string(),\n primaryLocale: z.string(),\n productGroupsEnabled: z.enum(['no', 'yes']).transform((value) => value === 'yes'),\n rechargeCustomDomain: z.string().nullable(),\n sellingPlansEnabled: z.boolean(),\n shopId: z.number(),\n shopifySellingPlansEnabled: z.boolean(),\n shopName: z.string(),\n storefrontAccessToken: z.string().nullable(),\n useRebuyIcons: z.boolean(),\n});\n\nexport type ShopConfig = z.infer<typeof ShopConfig>;\n", "import { z } from 'zod';\n\nimport { ShopConfig } from './shopConfig';\nimport { SmartCartConfig } from './smartCart';\n\nexport const UserConfig = z.object({\n shop: ShopConfig,\n /**\n * `.catch(undefined)` is the safety bar: smart-cart shape drift can NEVER fail `fetchUserConfig`,\n * which resolves the apiKey for every offers/monetize/analytics/gift request.\n */\n smartCart: SmartCartConfig.nullish().catch(undefined),\n smartFlows: z.array(z.unknown()),\n});\n\nexport type UserConfig = z.infer<typeof UserConfig>;\n", "import { z } from 'zod';\n\nimport { ABTestingPlaceholder } from './widgets/abTestingPlaceholder';\nimport { WidgetType } from './widgets/checkout-and-beyond/constants';\nimport { CheckoutExtension } from './widgets/checkoutExtension';\nimport { ContentBlock } from './widgets/contentBlock';\nimport { GiftWithPurchase } from './widgets/giftWithPurchase';\nimport { LineItemEditor } from './widgets/lineItemEditor';\nimport { ProgressBar } from './widgets/progressBar';\nimport { RebuyButton } from './widgets/rebuyButton';\nimport { RebuyMonetize } from './widgets/rebuyMonetize';\n\nexport const extensionWidgetTypes = [\n 'placeholder',\n WidgetType.gift_with_purchase,\n WidgetType.shopify_checkout_extension,\n WidgetType.ui_extension_ad,\n WidgetType.ui_extension_button,\n WidgetType.ui_extension_content_block,\n WidgetType.ui_extension_line_item_editor,\n WidgetType.ui_extension_progress_bar,\n] as const;\n\nexport const WidgetData = z.discriminatedUnion('type', [\n ABTestingPlaceholder,\n CheckoutExtension,\n ContentBlock,\n GiftWithPurchase,\n LineItemEditor,\n ProgressBar,\n RebuyButton,\n RebuyMonetize,\n]);\n\nexport type WidgetData = z.infer<typeof WidgetData>;\n", "import { z } from 'zod';\n\nexport const ABTestingPlaceholder = z.looseObject({\n type: z.literal('placeholder'),\n});\n\nexport type ABTestingPlaceholder = z.infer<typeof ABTestingPlaceholder>;\n", "import { uniqBy } from 'es-toolkit';\n\nimport { EditorMode, freezeEnum } from './common';\nimport { type TargetArea } from './root';\n\nexport const DEFAULT_ENDPOINTS = [\n { label: 'Recommended (AI)', value: '/products/recommended' },\n { label: 'Top Sellers', value: '/products/top_sellers' },\n { label: 'Buy It Again', value: '/products/purchased' },\n { label: 'Recently Viewed', value: '/products/viewed' },\n { label: 'Products Search', value: '/products/search' },\n { label: 'Collection Products', value: '/products/collections' },\n { label: 'Similar Products (AI)', value: '/products/similar_products' },\n] as const;\n\nexport const STATIC_ENDPOINTS = [\n { label: 'Recommended (AI)', value: '/products/recommended' },\n { label: 'Top Sellers', value: '/products/top_sellers' },\n { label: 'Trending Products', value: '/products/trending_products' },\n { label: 'Buy It Again', value: '/products/purchased' },\n { label: 'Collection Products', value: '/products/collections' },\n { label: 'Recently Viewed', value: '/products/viewed' },\n { label: 'Static Products', value: '/products/static' },\n { label: 'Products Search', value: '/products/search' },\n { label: 'Similar Products (AI)', value: '/products/similar_products' },\n] as const;\n\nexport const COMBINED_ENDPOINTS = uniqBy([...DEFAULT_ENDPOINTS, ...STATIC_ENDPOINTS], (item) => item.value);\n\nexport const targetAreas = {\n [EditorMode.checkoutExtension]: [\n { icon: 'splitscreen_top', label: 'Header Area', width: '984px' },\n { icon: 'splitscreen_left', label: 'Main Column', width: '503px' },\n { icon: 'splitscreen_right', label: 'Summary Column', width: '404px' },\n ] satisfies TargetArea[],\n [EditorMode.postPurchaseOffer]: null,\n [EditorMode.thankYouPage]: [\n { icon: 'splitscreen_top', label: 'Header Area', width: '984px' },\n { icon: 'splitscreen_left', label: 'Main Column', width: '503px' },\n { icon: 'splitscreen_right', label: 'Summary Column', width: '404px' },\n ] satisfies TargetArea[],\n [EditorMode.orderStatusPage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Header Area', width: '1124px' },\n { fill: true, icon: 'view_column_2', label: 'Main Area', width: '646px' },\n { icon: 'splitscreen_bottom', label: 'Footer Area', width: '1124px' },\n ] satisfies TargetArea[],\n [EditorMode.ordersIndexPage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Main Area', width: '1124px' },\n ] satisfies TargetArea[],\n [EditorMode.customerProfilePage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Main Area', width: '1124px' },\n ] satisfies TargetArea[],\n} as const;\n\nexport const widgetTypes = [\n 'bundle_builder',\n 'cart',\n 'cart_subscription',\n 'dynamic_bundle',\n 'gift_with_purchase',\n 'pre_purchase',\n 'product',\n 'product_addon',\n 'product_upsell',\n 'recharge_checkout',\n 'recharge_customer_portal',\n 'recharge_post_purchase',\n 'shopify_checkout',\n 'shopify_checkout_extension',\n 'shopify_post_purchase',\n 'shopify_post_purchase_extension',\n 'switch_to_subscription',\n 'ui_extension_ad',\n 'ui_extension_button',\n 'ui_extension_content_block',\n 'ui_extension_line_item_editor',\n 'ui_extension_progress_bar',\n] as const;\n\nexport const WidgetType = freezeEnum(widgetTypes);\nexport type WidgetType = (typeof widgetTypes)[number];\n", "export const freezeEnum = <T extends readonly string[]>(values: T) =>\n Object.freeze(Object.fromEntries(values.map((v) => [v, v]))) as { readonly [K in T[number]]: K };\n\nexport const bannerColors = ['info', 'success', 'warning', 'critical'] as const;\nexport const BannerColor = freezeEnum(bannerColors);\nexport type BannerColor = (typeof bannerColors)[number];\n\nexport const borderRadii = ['none', 'small', 'base', 'large', 'fullyRounded'] as const;\nexport const BorderRadius = freezeEnum(borderRadii);\nexport type BorderRadius = (typeof borderRadii)[number];\n\nexport const borderStyles = ['none', 'base', 'dotted', 'dashed'] as const;\nexport const BorderStyle = freezeEnum(borderStyles);\nexport type BorderStyle = (typeof borderStyles)[number];\n\nexport const borderWidths = ['base', 'medium', 'thick'] as const;\nexport const BorderWidth = freezeEnum(borderWidths);\nexport type BorderWidth = (typeof borderWidths)[number];\n\nexport const buttonActions = [\n 'acceptOffer',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromOrder',\n 'selectVariant',\n 'showPagination',\n 'switchToSubscription',\n 'undoAddToOrder',\n] as const;\n\nexport const ButtonAction = freezeEnum(buttonActions);\nexport type ButtonAction = (typeof buttonActions)[number];\n\nexport const buttonFields = [\n 'activePage',\n 'addedToCart',\n 'addingToCart',\n 'addToCart',\n 'buttonLabel',\n 'declineAllOffers',\n 'declineOffer',\n 'destinationUrl',\n 'inactivePage',\n 'overlayContent',\n 'payNow',\n 'progressReached',\n 'progressRemaining',\n 'redirectToCheckout',\n 'removeFromOrder',\n 'showVariant',\n 'showVariants',\n 'soldOut',\n 'subscriptionOption',\n 'switchToOneTimePurchase',\n 'switchToSubscriptionNoDiscount',\n 'switchToSubscriptionWithDiscount',\n 'undoAddToOrder',\n] as const;\n\nexport const ButtonField = freezeEnum(buttonFields);\nexport type ButtonField = (typeof buttonFields)[number];\n\nexport const buttonStyles = ['primary', 'secondary', 'plain', 'custom'] as const;\nexport const ButtonStyle = freezeEnum(buttonStyles);\nexport type ButtonStyle = (typeof buttonStyles)[number];\n\nexport const directions = ['columns', 'rows', 'grid'] as const;\nexport const Direction = freezeEnum(directions);\nexport type Direction = (typeof directions)[number];\n\nexport const discountSources = ['price', 'compare_at_price'] as const;\nexport const DiscountSource = freezeEnum(discountSources);\nexport type DiscountSource = (typeof discountSources)[number];\n\nexport const discountTypes = ['none', 'percentage', 'fixed', 'fixed_amount'] as const;\nexport const DiscountType = freezeEnum(discountTypes);\nexport type DiscountType = (typeof discountTypes)[number];\n\nexport const editorModes = [\n 'checkoutExtension',\n 'postPurchaseOffer',\n 'thankYouPage',\n 'orderStatusPage',\n 'ordersIndexPage',\n 'customerProfilePage',\n] as const;\n\nexport const EditorMode = freezeEnum(editorModes);\nexport type EditorMode = (typeof editorModes)[number];\n\nexport const horizontalAlignments = ['start', 'center', 'end'] as const;\nexport const HorizontalAlignment = freezeEnum(horizontalAlignments);\nexport type HorizontalAlignment = (typeof horizontalAlignments)[number];\n\nexport const languageKeys = [\n 'ar',\n 'cs',\n 'da',\n 'de',\n 'en',\n 'es',\n 'fi',\n 'fr',\n 'ga',\n 'he',\n 'hi',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'nl',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n 'vi',\n 'zh',\n] as const;\n\nexport const LanguageKey = freezeEnum(languageKeys);\nexport type LanguageKey = (typeof languageKeys)[number];\n\nexport const objectFits = ['cover', 'contain'] as const;\nexport const ObjectFit = freezeEnum(objectFits);\nexport type ObjectFit = (typeof objectFits)[number];\n\nexport const popoverPositions = ['inlineStart', 'inlineEnd', 'blockStart', 'blockEnd'] as const;\nexport const PopoverPosition = freezeEnum(popoverPositions);\nexport type PopoverPosition = (typeof popoverPositions)[number];\n\nexport const popoverPositionMap = {\n bottom: 'blockEnd',\n left: 'inlineStart',\n right: 'inlineEnd',\n top: 'blockStart',\n} as const;\n\nexport const productTypes = ['one-time', 'subscription', 'both'] as const;\nexport const ProductType = freezeEnum(productTypes);\nexport type ProductType = (typeof productTypes)[number];\n\nexport const progressTierTypes = ['decorative', 'discount', 'product', 'shipping'] as const;\nexport const ProgressTierType = freezeEnum(progressTierTypes);\nexport type ProgressTierType = (typeof progressTierTypes)[number];\n\nexport const progressTierUnits = ['currency', 'item'] as const;\nexport const ProgressTierUnit = freezeEnum(progressTierUnits);\nexport type ProgressTierUnit = (typeof progressTierUnits)[number];\n\nexport const quantityInputs = ['select', 'number'] as const;\nexport const QuantityInput = freezeEnum(quantityInputs);\nexport type QuantityInput = (typeof quantityInputs)[number];\n\nexport const reviewsSizes = ['small', 'default', 'large'] as const;\nexport const ReviewsSize = freezeEnum(reviewsSizes);\nexport type ReviewsSize = (typeof reviewsSizes)[number];\n\nexport const sectionTypes = [\n 'banner',\n 'button',\n 'carousel',\n 'cartLine',\n 'dataSource',\n 'discount',\n 'image',\n 'layout',\n 'monetize',\n 'offers',\n 'product',\n 'products',\n 'progressBar',\n 'quantity',\n 'reviews',\n 'text',\n 'variants',\n] as const;\n\nexport const SectionType = freezeEnum(sectionTypes);\nexport type SectionType = (typeof sectionTypes)[number];\n\nexport const spacings = ['none', 'extraTight', 'tight', 'base', 'loose', 'extraLoose'] as const;\nexport const Spacing = freezeEnum(spacings);\nexport type Spacing = (typeof spacings)[number];\n\nexport const textAlignments = ['start', 'center', 'end'] as const;\nexport const TextAlignment = freezeEnum(textAlignments);\nexport type TextAlignment = (typeof textAlignments)[number];\n\nexport const textColorNames = ['base', 'subdued', 'accent', 'decorative', 'success', 'warning', 'critical'] as const;\nexport const TextColorName = freezeEnum(textColorNames);\nexport type TextColorName = (typeof textColorNames)[number];\n\nexport const textSizeNames = ['extraSmall', 'small', 'base', 'medium', 'large', 'extraLarge'] as const;\nexport const TextSizeName = freezeEnum(textSizeNames);\nexport type TextSizeName = (typeof textSizeNames)[number];\n\nexport const variantModes = ['multiple', 'single'] as const;\nexport const VariantMode = freezeEnum(variantModes);\nexport type VariantMode = (typeof variantModes)[number];\n\nexport const variantSelectors = ['menu', 'radio', 'button'] as const;\nexport const VariantSelector = freezeEnum(variantSelectors);\nexport type VariantSelector = (typeof variantSelectors)[number];\n\nexport const verticalAlignments = ['top', 'middle', 'bottom'] as const;\nexport const VerticalAlignment = freezeEnum(verticalAlignments);\nexport type VerticalAlignment = (typeof verticalAlignments)[number];\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const CheckoutExtension = z.looseObject({\n type: z.literal(WidgetType.shopify_checkout_extension).default(WidgetType.shopify_checkout_extension),\n});\n\nexport type CheckoutExtension = z.infer<typeof CheckoutExtension>;\n", "import { z } from 'zod';\n\nimport { spacings, textSizeNames } from './checkout-and-beyond/common';\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\nexport const ContentBlockV1 = z.object({\n blockSpacing: z.enum(spacings).optional(),\n imageBlocks: z\n .union([\n z.array(\n z.object({\n altText: z.string().nullable(),\n description: z.string().nullable(),\n id: z.uuid(),\n imagePlacement: z.enum(['top', 'right', 'bottom', 'left']),\n imageSize: z.number(),\n imageUrl: z.url(),\n textAlignment: z.enum(['left', 'center', 'right']),\n textSize: z.enum(textSizeNames),\n })\n ),\n z.strictObject({}).transform(() => []),\n ])\n .optional(),\n imageLayout: z.enum(['row', 'column']).optional(),\n language: z.object({\n description: z.string(),\n superTitle: z.string(),\n title: z.string(),\n }),\n previewMode: z.boolean(),\n type: z.literal(WidgetType.ui_extension_content_block).default(WidgetType.ui_extension_content_block),\n version: z.literal(1),\n});\n\nexport const ContentBlock = z.discriminatedUnion('version', [\n ContentBlockV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_content_block).default(WidgetType.ui_extension_content_block),\n }),\n]);\n\nexport type ContentBlock = z.infer<typeof ContentBlock>;\n", "import { z } from 'zod';\n\nimport { EditorMode, editorModes } from './common';\nimport { targetAreas, WidgetType, widgetTypes } from './constants';\nimport { CABLayoutSection } from './layout';\nimport { UI_LABELS } from './uiLabels';\n\n/**\n * A per-slot `Record<locale, string>` defaulted from {@link UI_LABELS}: a missing slot gets the fallback,\n * and a present-but-empty slot (`{}`) is guarded back to the fallback too \u2014 otherwise the per-slot default\n * (which only fires for `undefined`) is bypassed and the client renders a blank aria label.\n */\nconst localized = (fallback: Record<string, string>) =>\n z\n .record(z.string(), z.string())\n .default(() => ({ ...fallback }))\n .transform((labels) => (Object.keys(labels).length > 0 ? labels : { ...fallback }));\n\n/**\n * Localized UI-chrome labels for the tree, defaulted from {@link UI_LABELS} at parse so every widget\n * carries them without converter or merchant work. Per-slot `Record<locale, string>`; the client indexes\n * the buyer language with `selectLanguage`. Lives on the root (not per section) because these strings \u2014\n * spinner/carousel/select-label/variant-state chrome \u2014 are shared across the whole tree.\n */\nexport const CABUILabels = z\n .object({\n currentPage: localized(UI_LABELS.currentPage),\n loadingOptions: localized(UI_LABELS.loadingOptions),\n nextPage: localized(UI_LABELS.nextPage),\n offerDialog: localized(UI_LABELS.offerDialog),\n page: localized(UI_LABELS.page),\n previousPage: localized(UI_LABELS.previousPage),\n selected: localized(UI_LABELS.selected),\n subscriptionOptions: localized(UI_LABELS.subscriptionOptions),\n updating: localized(UI_LABELS.updating),\n })\n .default(() => ({\n currentPage: { ...UI_LABELS.currentPage },\n loadingOptions: { ...UI_LABELS.loadingOptions },\n nextPage: { ...UI_LABELS.nextPage },\n offerDialog: { ...UI_LABELS.offerDialog },\n page: { ...UI_LABELS.page },\n previousPage: { ...UI_LABELS.previousPage },\n selected: { ...UI_LABELS.selected },\n subscriptionOptions: { ...UI_LABELS.subscriptionOptions },\n updating: { ...UI_LABELS.updating },\n }));\n\nexport type CABUILabels = Record<keyof typeof UI_LABELS, Record<string, string>>;\n\nconst TargetArea = z\n .object({\n fill: z.boolean().optional(),\n flip: z.enum(['both', 'horizontal', 'vertical']).optional(),\n icon: z.string(),\n label: z.string(),\n width: z.string(),\n })\n .default(targetAreas[EditorMode.checkoutExtension][1]);\n\nexport type TargetArea = {\n fill?: boolean;\n flip?: 'horizontal' | 'vertical' | 'both';\n icon: string;\n label: string;\n width: string;\n};\n\nexport const CABTracking = z\n .object({\n enableAttribution: z.boolean().default(true),\n enableSource: z.boolean().default(true),\n enableWidget: z.boolean().default(true),\n })\n .default({ enableAttribution: true, enableSource: true, enableWidget: true });\n\nexport type CABTracking = z.infer<typeof CABTracking>;\n\n/**\n * The A/B experiment this tree was selected for, attached server-side when the placeholder widget is an\n * experiment target (else absent). The client renders the chosen variant's tree as usual and emits the\n * `ab-test-viewed` / `ABN.TEST` analytics from these fields \u2014 replicating React's `useAnalyticsEvent`.\n */\nexport const CABExperiment = z.object({\n elementId: z.number(),\n experimentId: z.number(),\n experimentType: z.string(),\n selectedId: z.number(),\n});\n\nexport type CABExperiment = z.infer<typeof CABExperiment>;\n\nexport const CABRootSection = CABLayoutSection.extend({\n editorMode: z.enum(editorModes).default(EditorMode.checkoutExtension),\n experiment: CABExperiment.optional(),\n previewMode: z.boolean().default(false),\n storeId: z.number().nullable().default(null),\n targetArea: TargetArea.nullable(),\n tracking: CABTracking,\n type: z.enum(widgetTypes).default(WidgetType.ui_extension_content_block),\n uiLabels: CABUILabels,\n version: z.literal(2).default(2),\n widgetId: z.number().nullable().default(null),\n});\n\nexport type CABRootSection = CABLayoutSection & {\n editorMode: EditorMode;\n experiment?: CABExperiment;\n previewMode: boolean;\n storeId: number | null;\n targetArea: TargetArea | null;\n tracking: CABTracking;\n type: WidgetType;\n uiLabels: CABUILabels;\n version: number;\n widgetId: number | null;\n};\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport {\n buttonFields,\n Direction,\n directions,\n HorizontalAlignment,\n horizontalAlignments,\n SectionType,\n Spacing,\n spacings,\n VerticalAlignment,\n verticalAlignments,\n type ButtonField,\n} from './common';\nimport { CABRule } from './rule';\nimport { CABBorder, CABSection, type SectionDetails } from './shared';\n\nexport const GridItem = z.union([z.literal('auto'), z.literal('fill'), z.string().regex(/^\\d+%$/), z.number()]);\nexport type GridItem = z.infer<typeof GridItem>;\n\nexport const CABLayoutSection = z.object({\n alignment: z\n .object({\n horizontal: z.enum(horizontalAlignments).default(HorizontalAlignment.start),\n vertical: z.enum(verticalAlignments).default(VerticalAlignment.top),\n })\n .default({\n horizontal: HorizontalAlignment.start,\n vertical: VerticalAlignment.top,\n }),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n direction: z.enum(directions).default(Direction.rows),\n grid: z\n .object({\n columns: z.union([z.array(GridItem), z.undefined()]).default(() => ['auto']),\n rows: z.union([z.array(GridItem), z.undefined()]).default(() => ['auto']),\n })\n .default({ columns: ['auto'], rows: ['auto'] })\n .optional(),\n name: z.string().optional(),\n padding: z.enum(spacings).default(Spacing.none),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.layout).default(SectionType.layout),\n spacing: z.enum(spacings).default(Spacing.base),\n /** Fire-and-forget impression pixel POSTed once when the section is shown (e.g. a Monetize offer view). */\n viewUrl: z.string().optional(),\n width: z.number().default(100),\n});\n\nexport type CABLayoutSection = {\n alignment: {\n horizontal: HorizontalAlignment;\n vertical: VerticalAlignment;\n };\n border: CABBorder;\n buttonField?: ButtonField;\n direction: Direction;\n grid?: {\n columns: GridItem[];\n rows: GridItem[];\n };\n name?: string;\n padding: Spacing;\n rule?: CABRule;\n sectionId: string;\n sections: CABSection[];\n sectionType: 'layout';\n spacing: Spacing;\n viewUrl?: string;\n width: number;\n};\n\nexport type CABLayoutSectionProps = CABLayoutSection & SectionDetails;\n", "import { z } from 'zod';\n\nexport const ruleTypes = [\n 'cart',\n 'cart_count',\n 'cart_item_count',\n 'cart_line_count',\n 'cart_subtotal',\n 'collection',\n 'customer',\n 'customer_order_count',\n 'customer_tag',\n 'customer_total_spent',\n 'date',\n 'product',\n 'product_tag',\n 'product_title',\n 'product_type',\n 'product_vendor',\n] as const;\n\nconst ruleType = z.enum(ruleTypes);\n\nexport const RuleType = ruleType.enum;\nexport type RuleType = z.infer<typeof ruleType>;\n\nexport const ruleOperators = [\n 'after',\n 'anything',\n 'before',\n 'contains',\n 'contains_any',\n 'does_not_contain',\n 'does_not_contain_any',\n 'equals',\n 'does_not_equal',\n 'greater_than',\n 'less_than',\n] as const;\n\nconst ruleOperator = z.enum(ruleOperators);\n\nexport const RuleOperator = ruleOperator.enum;\nexport type RuleOperator = z.infer<typeof ruleOperator>;\n\nexport const RuleCondition = z.object({\n operator: z.enum(ruleOperators).default(RuleOperator.anything),\n products: z.union([z.array(z.unknown()), z.strictObject({}).transform(() => [])]).default(() => []),\n type: z.enum(ruleTypes).default(RuleType.cart_subtotal),\n value: z.coerce.string().default(''),\n});\n\nexport type RuleCondition = z.infer<typeof RuleCondition>;\n\nexport const RuleLogicBlock = z.object({\n rules: z.array(RuleCondition).default(() => []),\n});\n\nexport type RuleLogicBlock = z.infer<typeof RuleLogicBlock>;\n\nexport const CABRule = z.object({\n dataSourceId: z.number().nullable().default(null),\n enabled: z.boolean().default(false),\n ruleset: z\n .union([\n z.array(\n z.object({\n exitIfMatched: z.boolean().default(true),\n logic: z.array(RuleLogicBlock).default(() => []),\n output: z\n .array(\n z.object({\n key: z.string().default('should_show'),\n type: z.literal('data_json').default('data_json'),\n value: z.string().default('true'),\n })\n )\n .default(() => [{ key: 'should_show', type: 'data_json' as const, value: 'true' }]),\n })\n ),\n z.strictObject({}).transform(() => []),\n ])\n .default(() => []),\n});\n\nexport type CABRule = z.infer<typeof CABRule>;\n", "import { type FieldArrayPath } from 'react-hook-form';\nimport { z, type ZodType } from 'zod';\n\nimport { CABBannerSection } from './banner';\nimport { CABButtonSection } from './button';\nimport { CABCarouselSection } from './carousel';\nimport { CABCartLineSection } from './cartLine';\nimport { borderRadii, BorderRadius, BorderStyle, borderStyles, BorderWidth, borderWidths } from './common';\nimport { CABDataSourceSection } from './dataSource';\nimport { CABDiscountSection } from './discount';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { CABMonetizeSection } from './monetize';\nimport { CABOffersSection } from './offers';\nimport { CABProductSection } from './product';\nimport { CABProductsSection } from './products';\nimport { CABProgressBarSection } from './progressBar';\nimport { CABQuantitySection } from './quantity';\nimport { CABReviewsSection } from './reviews';\nimport { type CABRootSection } from './root';\nimport { CABTextSection } from './text';\nimport { CABVariantsSection } from './variants';\n\nexport const CABBorder = z\n .object({\n radius: z.enum(borderRadii).default(BorderRadius.base),\n style: z.enum(borderStyles).default(BorderStyle.none),\n width: z.enum(borderWidths).default(BorderWidth.base),\n })\n .default({\n radius: BorderRadius.base,\n style: BorderStyle.none,\n width: BorderWidth.base,\n });\n\nexport type CABBorder = z.infer<typeof CABBorder>;\n\nexport const CABSection: ZodType<CABSection> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [\n CABBannerSection,\n CABButtonSection,\n CABCarouselSection,\n CABCartLineSection,\n CABDataSourceSection,\n CABDiscountSection,\n CABImageSection,\n CABLayoutSection,\n CABMonetizeSection,\n CABOffersSection,\n CABProductSection,\n CABProductsSection,\n CABProgressBarSection,\n CABQuantitySection,\n CABReviewsSection,\n CABTextSection,\n CABVariantsSection,\n ])\n);\n\nexport type CABSection =\n | CABBannerSection\n | CABButtonSection\n | CABCarouselSection\n | CABCartLineSection\n | CABDataSourceSection\n | CABDiscountSection\n | CABImageSection\n | CABLayoutSection\n | CABMonetizeSection\n | CABOffersSection\n | CABProductSection\n | CABProductsSection\n | CABProgressBarSection\n | CABQuantitySection\n | CABReviewsSection\n | CABTextSection\n | CABVariantsSection;\n\nexport type SectionId = CABSection['sectionId'];\n\n/* @ts-expect-error: TS2589: Type instantiation _is_ excessively deep and infinite. */\nexport type SectionArrayPath = FieldArrayPath<CABRootSection>;\n\nexport type SectionPrefixPath = `${SectionArrayPath}.${number}` | null;\n\nexport type SectionDetails = {\n /**\n * The full React Hook Form dot-notation path to the section object itself,\n * for use with `register` or `control`, e.g. `sections.0.sections.1`.\n *\n * Returns `null` for the root section.\n */\n fieldArrayPath: SectionArrayPath | null;\n /**\n * The index of the found section within its parent `sections` array.\n *\n * Returns `null` for the root section.\n */\n index: number | null;\n /**\n * The parent `sections` object.\n *\n * Returns `null` for the root section.\n */\n parent: CABSection[] | null;\n /**\n * The parent `sectionId`.\n *\n * Returns `undefined` for the root section.\n */\n parentId: SectionId | undefined;\n /**\n * The full React Hook Form dot-notation path to the section object itself,\n * for use with `register` or `control`, e.g. `sections.0.sections.1`.\n *\n * Returns `null` for the root section.\n */\n prefixPath: SectionPrefixPath | null;\n};\n\nexport type CABSectionProps = CABSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { bannerColors, buttonFields, SectionType, type BannerColor } from './common';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABBannerSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n buttonField: z.enum(buttonFields).optional(),\n color: z.enum(bannerColors).default('info'),\n dismissible: z.boolean().default(true),\n sectionType: z.literal(SectionType.banner).default(SectionType.banner),\n })\n);\n\nexport type CABBannerSection = Omit<CABLayoutSection, 'sectionType'> & {\n color: BannerColor;\n dismissible: boolean;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod';\n\nimport {\n buttonActions,\n ButtonStyle,\n buttonStyles,\n PopoverPosition,\n popoverPositions,\n SectionType,\n TextAlignment,\n textAlignments,\n} from './common';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { HEX_COLOR_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABButtonContent = CABImageSection | CABLayoutSection | CABTextSection;\n\nexport const CABButtonContent: ZodType<CABButtonContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABImageSection, CABLayoutSection, CABTextSection])\n);\n\nexport const CABButtonSection = z.object({\n action: z.union([z.literal(''), z.enum(buttonActions)]).default(''),\n buttonStyle: z.enum(buttonStyles).default(ButtonStyle.primary),\n custom: z\n .object({\n color: z.string().regex(HEX_COLOR_REGEX).default('#005bd3'),\n height: z.number().default(52),\n width: z.number().default(300),\n })\n .default({\n color: '#005bd3',\n height: 52,\n width: 300,\n }),\n disableDowngrade: z.boolean().default(false),\n name: z.string().optional(),\n optionId: z.number().optional(),\n popover: z\n .object({\n alignment: z.enum(textAlignments).default(TextAlignment.center),\n position: z.enum(popoverPositions).default(PopoverPosition.blockStart),\n })\n .optional()\n .default(() => ({\n alignment: TextAlignment.center,\n position: PopoverPosition.blockStart,\n })),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABButtonContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.button).default(SectionType.button),\n /** Fire-and-forget pixel POSTed when the button is clicked (e.g. a Monetize decline). */\n trackingUrl: z.string().optional(),\n});\n\nexport type CABButtonSection = z.infer<typeof CABButtonSection>;\n\nexport type CABButtonSectionProps = CABButtonSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { buttonFields, ObjectFit, objectFits, SectionType } from './common';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nexport const CABImageSection = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n aspectRatio: z.literal(1).nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n category: z.enum(['gallery', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n name: z.string().optional(),\n naturalHeight: z.number().default(0),\n naturalWidth: z.number().default(0),\n /**\n * `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and\n * `cover` would crop non-square art (payment badges lost their edges \u2014 15993); `contain` letterboxes.\n */\n objectFit: z.enum(objectFits).default(ObjectFit.contain),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.image).default(SectionType.image),\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(''),\n width: z.number().default(100),\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "/** Matches a valid array index string (e.g., \"0\", \"1\", \"42\"). */\nexport const ARRAY_INDEX_STRING = /^(0|[1-9]\\d*)$/;\n\n/** Matches a dynamic token. */\nexport const DYNAMIC_TOKEN_REGEX = /^\\{\\{\\s*[A-Za-z]+\\s*\\}\\}$/;\n\n/** Matches a valid hex color code. */\nexport const HEX_COLOR_REGEX = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n\n/**\n * Matches a root-relative, same-origin path (single leading slash, e.g. Shopify's\n * `/policies/privacy-policy`). A protocol-relative `//host` is excluded \u2014 it points off-origin.\n */\nexport const ROOT_RELATIVE_PATH_REGEX = /^\\/(?!\\/)/;\n\n/**\n * Matches an HTML-shaped tag: `<` (or `</`) immediately followed by a tag-name letter. This mirrors\n * both the browser `DOMParser` branch of `isHTML` and `stripContentBlockHtml`'s tag regex, so the\n * server-side check agrees with the client and with whatever the sanitizer removes. It deliberately\n * leaves bare comparison brackets alone (`5 < 10 and 10 > 5`) \u2014 those are text, not markup, and the\n * looser `/<\\/?[^>]+>/` it replaced wrongly rejected them and 500'd otherwise-valid content.\n *\n * Keeps the `g` flag because downstream consumers strip ALL tags with `.replace(HTML_TAGS_REGEX, '')`\n * (rebuy-shopify-extensions, admin-nextjs); without it `.replace` would drop only the first tag. The\n * one in-package consumer, `isHTML`, must therefore NOT use `.test()` on it \u2014 a global regex carries a\n * sticky `lastIndex` that makes repeated `.test()` calls flaky. `isHTML` uses `.search()` instead,\n * which ignores and never mutates `lastIndex`.\n */\nexport const HTML_TAGS_REGEX = /<\\/?[a-zA-Z][^>]*>/g;\n", "import { isPlainObject, mapValues } from 'es-toolkit';\nimport { every, get, isArray, isString, map, size, toPairs } from 'es-toolkit/compat';\n\nimport { type CABBannerSection } from './banner';\nimport { type CABButtonSection } from './button';\nimport { type CABCarouselSection } from './carousel';\nimport { type CABCartLineSection } from './cartLine';\nimport { ButtonField, SectionType } from './common';\nimport { type CABDataSourceSection } from './dataSource';\nimport { type CABDiscountSection } from './discount';\nimport { type CABImageSection } from './image';\nimport { type CABLayoutSection } from './layout';\nimport { type CABMonetizeSection } from './monetize';\nimport { type CABOffersSection } from './offers';\nimport { type CABProductSection } from './product';\nimport { type CABProductsSection } from './products';\nimport { type CABProgressBarSection } from './progressBar';\nimport { type CABQuantitySection } from './quantity';\nimport { ARRAY_INDEX_STRING, HTML_TAGS_REGEX } from './regex';\nimport { type CABReviewsSection } from './reviews';\nimport { type CABTextSection, type TiptapDocument } from './text';\nimport { type CABVariantsSection } from './variants';\n\nexport const isHTML = (html: string | undefined = ''): boolean => {\n if (typeof window !== 'undefined') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n\n const hasHTML = (nodeList: NodeList) => Array.from(nodeList).some((node) => node.nodeType === 1);\n\n return hasHTML(doc.body.childNodes) || hasHTML(doc.head.childNodes);\n }\n\n // `.search()` (not `.test()`) because HTML_TAGS_REGEX is global for downstream `.replace` callers;\n // `.search()` ignores and never advances `lastIndex`, so repeated calls stay deterministic.\n return html.search(HTML_TAGS_REGEX) !== -1;\n};\n\nexport const hasHTMLInDoc = (doc: TiptapDocument): boolean =>\n doc.content.some(({ content = [] }) => content.some(({ text }) => isHTML(text)));\n\nexport const checkForHTML = (input: string | TiptapDocument): boolean =>\n !((isString(input) && isHTML(input)) || (isPlainObject(input) && hasHTMLInDoc(input as TiptapDocument)));\n\nexport const NO_HTML = { message: 'HTML is not supported' };\n\nexport const isBannerType = (section: unknown): section is CABBannerSection =>\n get(section, 'sectionType') === SectionType.banner;\n\nexport const isButtonType = (section: unknown): section is CABButtonSection =>\n get(section, 'sectionType') === SectionType.button;\n\nexport const isCarouselType = (section: unknown): section is CABCarouselSection =>\n get(section, 'sectionType') === SectionType.carousel;\n\nexport const isCartLineType = (section: unknown): section is CABCartLineSection =>\n get(section, 'sectionType') === SectionType.cartLine;\n\nexport const isDataSourceType = (section: unknown): section is CABDataSourceSection =>\n get(section, 'sectionType') === SectionType.dataSource;\n\nexport const isDiscountType = (section: unknown): section is CABDiscountSection =>\n get(section, 'sectionType') === SectionType.discount;\n\nexport const isImageType = (section: unknown): section is CABImageSection =>\n get(section, 'sectionType') === SectionType.image;\n\nexport const isLayoutType = (section: unknown): section is CABLayoutSection =>\n get(section, 'sectionType') === SectionType.layout;\n\nexport const isMonetizeType = (section: unknown): section is CABMonetizeSection =>\n get(section, 'sectionType') === SectionType.monetize;\n\nexport const isOffersType = (section: unknown): section is CABOffersSection =>\n get(section, 'sectionType') === SectionType.offers;\n\nexport const isOverlayType = (section: unknown): section is CABLayoutSection =>\n isLayoutType(section) && get(section, 'buttonField') === ButtonField.overlayContent;\n\nexport const isProductType = (section: unknown): section is CABProductSection =>\n get(section, 'sectionType') === SectionType.product;\n\nexport const isProductsType = (section: unknown): section is CABProductsSection =>\n get(section, 'sectionType') === SectionType.products;\n\nexport const isProgressBarType = (section: unknown): section is CABProgressBarSection =>\n get(section, 'sectionType') === SectionType.progressBar;\n\nexport const isQuantityType = (section: unknown): section is CABQuantitySection =>\n get(section, 'sectionType') === SectionType.quantity;\n\nexport const isReviewsType = (section: unknown): section is CABReviewsSection =>\n get(section, 'sectionType') === SectionType.reviews;\n\nexport const isTextType = (section: unknown): section is CABTextSection =>\n get(section, 'sectionType') === SectionType.text;\n\nexport const isVariantsType = (section: unknown): section is CABVariantsSection =>\n get(section, 'sectionType') === SectionType.variants;\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>) =>\n !!size(input) && every(input, (_, key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)));\n\nconst numericObjectToArray = (input: Record<string, unknown>) =>\n toPairs(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([_, value]) => value);\n\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (isArray(input)) return map(input, convertNumericObjects);\n\n if (isPlainObject(input)) {\n const obj = input as Record<string, unknown>;\n\n return hasOnlyNumericKeys(obj)\n ? map(numericObjectToArray(obj), convertNumericObjects)\n : mapValues(obj, convertNumericObjects);\n }\n\n return input;\n};\n", "import { forEach, isString } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport {\n ButtonField,\n buttonFields,\n progressTierTypes,\n ProgressTierType,\n SectionType,\n Spacing,\n spacings,\n TextAlignment,\n textAlignments,\n TextColorName,\n textColorNames,\n TextSizeName,\n textSizeNames,\n} from './common';\nimport { DYNAMIC_TOKEN_REGEX, ROOT_RELATIVE_PATH_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nconst enumOrOmit = <T extends readonly [string, ...string[]]>(...vals: T) =>\n z\n .string()\n .transform((val) => (vals.includes(val as T[number]) ? (val as T[number]) : undefined))\n .optional();\n\nexport const TiptapText = z.object({\n marks: z\n .union([\n z.array(\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('bold') }),\n z.object({ type: z.literal('italic') }),\n z.object({\n attrs: z.object({\n class: z.string().nullable(),\n href: z.union([\n z.url(),\n z.literal('#'),\n z.string().regex(DYNAMIC_TOKEN_REGEX),\n z.string().regex(ROOT_RELATIVE_PATH_REGEX),\n ]),\n rel: z.string().default('noopener noreferrer nofollow'),\n target: z.string().default('_blank'),\n }),\n type: z.literal('link'),\n }),\n z.object({ type: z.literal('strike') }),\n z.object({\n attrs: z.object({\n color: enumOrOmit(...textColorNames).default(TextColorName.base),\n fontSize: enumOrOmit(...textSizeNames).default(TextSizeName.base),\n }),\n type: z.literal('textStyle'),\n }),\n ])\n ),\n z.strictObject({}).transform(() => []),\n ])\n .optional(),\n text: z.string().default(''),\n type: z.literal('text').default('text'),\n});\n\nexport type TiptapText = z.infer<typeof TiptapText>;\n\nexport const TiptapParagraph = z.object({\n attrs: z\n .object({\n textAlign: enumOrOmit(...textAlignments),\n })\n .default({ textAlign: TextAlignment.start }),\n content: z.union([z.array(TiptapText), z.strictObject({}).transform(() => [])]).default(() => []),\n type: z.literal('paragraph').default('paragraph'),\n});\n\nexport type TiptapParagraph = z.infer<typeof TiptapParagraph>;\n\nexport const TiptapDocument = z.object({\n attrs: z\n .object({\n blockSpacing: enumOrOmit(...spacings),\n })\n .default({ blockSpacing: Spacing.base }),\n content: z\n .union([z.array(TiptapParagraph), z.strictObject({}).transform(() => [])])\n .default(() => [TiptapParagraph.parse({})]),\n type: z.literal('doc').default('doc'),\n});\n\nexport type TiptapDocument = z.infer<typeof TiptapDocument>;\n\n/**\n * A text section's tier reference. On the smart-cart per-tier feedback copy it carries the `tierId`, so\n * the renderer shows this section only while its tier is the active (current/last-reached) one \u2014 the\n * full tier (gift/threshold) lives on progressBar.\n */\nexport const CABTextTier = z.object({\n threshold: z.number().int().nonnegative(),\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n tierId: z.string().optional(),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n});\n\nexport type CABTextTier = z.infer<typeof CABTextTier>;\n\nexport const CABTextSection = z\n .object({\n buttonField: z.enum(buttonFields).optional(),\n content: z\n .record(z.string(), z.union([z.string(), TiptapDocument]).refine(checkForHTML, NO_HTML).optional())\n .default({ en: TiptapDocument.parse({}) })\n .optional(),\n name: z.string().optional(),\n optionId: z.number().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.text).default(SectionType.text),\n tier: CABTextTier.optional(),\n })\n .superRefine(({ buttonField, content }, ctx) => {\n if (buttonField === ButtonField.destinationUrl && content) {\n forEach(content, (value, lang) => {\n if (value && isString(value)) {\n if (DYNAMIC_TOKEN_REGEX.test(value)) return;\n\n try {\n new URL(value);\n } catch {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid URL',\n path: ['content', lang],\n });\n }\n }\n });\n }\n });\n\nexport type CABTextSection = z.infer<typeof CABTextSection>;\n\nexport type CABTextSectionProps = CABTextSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABLayoutSection } from './layout';\nimport { CABOffersSection } from './offers';\nimport { CABSection, type SectionDetails } from './shared';\n\nexport const CABCarouselSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n autoAdvanceInterval: z.number().default(0),\n itemsAtOnce: z.number().min(1).default(1),\n sections: z\n .union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])])\n .default(() => [CABOffersSection.parse({})]),\n sectionType: z.literal(SectionType.carousel).default(SectionType.carousel),\n })\n);\n\nexport type CABCarouselSection = Omit<CABLayoutSection, 'sectionType'> & {\n autoAdvanceInterval: number;\n itemsAtOnce: number;\n sectionType: 'carousel';\n};\n\nexport type CABCarouselSectionProps = CABCarouselSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { CABBannerSection } from './banner';\nimport { CABButtonSection } from './button';\nimport { ButtonStyle, SectionType } from './common';\nimport { CABDataSourceSection } from './dataSource';\nimport { CABLayoutSection } from './layout';\nimport { CABProductsSection } from './products';\nimport { CABSection, type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport const CABOffersSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n sections: z.union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])]).default(() => [\n CABBannerSection.parse({\n buttonField: 'undoAddToOrder',\n color: 'success',\n dismissible: true,\n name: 'Success Banner',\n sections: [\n CABTextSection.parse({ content: { en: '{{quantity}} {{productTitle}} added to cart.' } }),\n CABButtonSection.parse({ action: 'undoAddToOrder', buttonStyle: ButtonStyle.plain }),\n ],\n }),\n CABDataSourceSection.parse({}),\n CABProductsSection.parse({}),\n ]),\n sectionType: z.literal(SectionType.offers).default(SectionType.offers),\n })\n);\n\nexport type CABOffersSection = Omit<CABLayoutSection, 'sectionType'> & {\n sectionType: 'offers';\n};\n\nexport type CABOffersSectionProps = CABOffersSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { discountSources, discountTypes, productTypes, SectionType } from './common';\nimport { DEFAULT_ENDPOINTS } from './constants';\nimport { type SectionDetails } from './shared';\n\nexport const CABDiscount = z.object({\n amount: z.union([z.number(), z.string()]).catch(0),\n discountedBy: z.string().optional(),\n discountedFrom: z.enum(discountSources).optional().catch(undefined),\n type: z.enum(discountTypes).catch('none'),\n});\n\nexport type CABDiscount = z.infer<typeof CABDiscount>;\n\nexport const CABIntegrations = z.object({\n judgeme: z.boolean().default(false),\n junip: z.boolean().default(false),\n klaviyo: z.boolean().default(false),\n loox: z.boolean().default(false),\n okendo: z.boolean().default(false),\n opinew: z.boolean().default(false),\n reviewsio: z.boolean().default(false),\n stamped: z.boolean().default(false),\n yotpo: z.boolean().default(false),\n});\n\nexport type CABIntegrations = z.infer<typeof CABIntegrations>;\n\nexport const CABDataSourceSection = z.object({\n dataSourceId: z.number().nullable().default(null),\n dataSourcePath: z.string().default(DEFAULT_ENDPOINTS[0].value),\n discount: CABDiscount.optional(),\n integrations: CABIntegrations.optional(),\n limit: z.number().default(1),\n matchVariant: z.boolean().default(false),\n matchVariantOutOfStock: z.boolean().default(false),\n name: z.string().default(DEFAULT_ENDPOINTS[0].label),\n productType: z.enum(productTypes).optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.dataSource).default(SectionType.dataSource),\n /** Default subscribe-vs-one-time for `productType: both` (legacy `subscription_is_default`). */\n subscriptionIsDefault: z.boolean().default(false),\n treatAsGwp: z.boolean().default(false),\n});\n\nexport type CABDataSourceSection = z.infer<typeof CABDataSourceSection>;\n\nexport type CABDataSourceSectionProps = CABDataSourceSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABProductSection } from './product';\nimport { type SectionDetails } from './shared';\n\nexport const CABProductsSection = z.object({\n name: z.string().optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z\n .union([z.array(z.lazy(() => CABProductSection)), z.strictObject({}).transform(() => [])])\n .default(() => []),\n sectionType: z.literal(SectionType.products).default(SectionType.products),\n});\n\nexport type CABProductsSection = z.infer<typeof CABProductsSection>;\n\nexport type CABProductsSectionProps = CABProductsSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod';\n\nimport { CABButtonSection } from './button';\nimport { SectionType, VariantMode, variantModes, VariantSelector, variantSelectors } from './common';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABVariantContent = CABButtonSection | CABTextSection;\n\nexport const CABVariantContent: ZodType<CABVariantContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABButtonSection, CABTextSection])\n);\n\nexport const CABProductSection = z.object({\n name: z.string().optional(),\n productId: z.number().nullable().default(null),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABVariantContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.product).default(SectionType.product),\n selectors: z.record(z.string(), z.enum(variantSelectors).default(VariantSelector.menu)).default(() => ({})),\n variantMode: z.enum(variantModes).default(VariantMode.multiple),\n});\n\nexport type CABProductSection = z.infer<typeof CABProductSection>;\n\nexport type CABProductSectionProps = CABProductSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { CABButtonSection } from './button';\nimport { ButtonAction, SectionType } from './common';\nimport { CABLayoutSection } from './layout';\nimport { CABSection, type SectionDetails } from './shared';\n\nexport const CABCartLineSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n sections: z\n .union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])])\n .default(() => [CABButtonSection.parse({ action: ButtonAction.switchToSubscription })]),\n sectionType: z.literal(SectionType.cartLine).default(SectionType.cartLine),\n })\n);\n\nexport type CABCartLineSection = Omit<CABLayoutSection, 'sectionType'> & {\n sectionType: 'cartLine';\n};\n\nexport type CABCartLineSectionProps = CABCartLineSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { discountSources, discountTypes, SectionType } from './common';\nimport { type SectionDetails } from './shared';\n\n/**\n * The widget discount, modeled as its own offers child section (toggled on/off in the editor and\n * rendered nowhere \u2014 it's config-only). Discounting is Shopify Functions-only (Scripts is sunset), so a\n * configured discount always applies via Functions and the amount is in Functions (minor-unit) form for\n * fixed types. `discountedFrom` is the compare-from source; `message` is the Functions discount title.\n */\nexport const CABDiscountSection = z.object({\n amount: z.union([z.number(), z.string()]).catch(0),\n discountedBy: z.string().optional(),\n discountedFrom: z.enum(discountSources).optional().catch(undefined),\n message: z.string().optional(),\n name: z.string().optional(),\n quantity: z.number().default(1),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.discount).default(SectionType.discount),\n type: z.enum(discountTypes).catch('none'),\n});\n\nexport type CABDiscountSection = z.infer<typeof CABDiscountSection>;\n\nexport type CABDiscountSectionProps = CABDiscountSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABMonetizeSection = z.object({\n name: z.string().optional(),\n /** Privacy Policy footer href (the widget's `privacy_policy_url` setting); the client relays it to `/cab/monetize`. */\n privacyPolicyUrl: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.monetize).default(SectionType.monetize),\n});\n\nexport type CABMonetizeSection = z.infer<typeof CABMonetizeSection>;\n\nexport type CABMonetizeSectionProps = CABMonetizeSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { ProgressTierType, progressTierTypes, ProgressTierUnit, progressTierUnits, SectionType } from './common';\nimport { GIFT_LABELS } from './giftLabels';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABProgressTier = z.object({\n /**\n * Order-discount tiers only (onsite `discount`): the reward the order-discount Function applies at\n * cart time, carried so the client can resolve the `{{discountAmount}}` token in this tier's copy.\n * `fixedAmount`: shop-currency CENTS (FX-scaled by the client, like {@link CABProgressTier.threshold});\n * `percentage`: the whole-percent number rendered raw (`{n}%`). Absent on non-discount tiers.\n */\n discount: z.object({ amount: z.number().nonnegative(), type: z.enum(['fixedAmount', 'percentage']) }).optional(),\n /**\n * Smart-cart product (gift) tiers only: the reward unlocked at this tier. The client enriches\n * `productId`/`variantIds` to live variants (availability, price) and adds the chosen one to the cart\n * when the tier is reached (attribution `_tier` = {@link CABProgressTier.tierId}). Absent on shipping\n * tiers and on tiers with no configured product. Cart add/remove is a later stage; carried here so the\n * tree is complete.\n */\n gift: z\n .object({\n productId: z.number().int().positive(),\n title: z.string().optional(),\n variantIds: z.array(z.number().int().positive()).default(() => []),\n })\n .optional(),\n /**\n * The step-row label at this tier's slot (onsite `getTierLabel`): the merchant custom label, else the\n * type default ('Free Shipping' / product title / '{n}% Discount'). Localized content; blank \u21D2 no\n * label under the tier's icon. Plain text \u2014 the step row is a compact icon+label, not rich copy.\n */\n label: z.record(z.string(), z.string()).optional(),\n /**\n * The tier's goal, measured per `unit`. `currency` (default): SHOP-currency cents \u2014 the canonical\n * fallback: when the buyer's presentment currency has no entry in `thresholds`, the client\n * multiplies this by the live FX rate (converter maps the v1 `unlock_price`, e.g. `75` \u2192 `7500`).\n * `item`: a raw item count \u2014 no cents, no FX, no `thresholds` overrides.\n */\n threshold: z.number().int().nonnegative(),\n /**\n * Per-presentment-currency goal overrides \u2014 lowercased ISO currency code \u2192 cents (e.g. `{ cad: 9900 }`).\n * When the buyer's currency has an entry, the client uses it verbatim INSTEAD of FX-converting\n * `threshold`, so merchants show intentional, clean per-market amounts (Shopify Markets) rather than a\n * converted base. Defaults to `{}` \u2014 no overrides means always fall back to `threshold`.\n */\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n /**\n * Smart-cart tier identifier, mirrored onto the gift cart line's `_tier` attribute so the client can\n * match an in-cart gift back to its tier (add on reach, remove on downgrade/decline). Absent on the\n * shipping bar (single unlabeled tier, no gift).\n */\n tierId: z.string().optional(),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n /**\n * What this tier's progress is measured in \u2014 PER TIER (onsite's `unlock_condition_type` model, NOT\n * the React port's bar-level `tiers[0]` shortcut). `currency` compares money cents against the\n * adjusted subtotal; `item` compares the raw quantity sum of non-excluded lines (the SAME exclusion\n * set as the money path). A mixed-unit bar stays coherent tier by tier: reach, fill share, and\n * `{{remainingAmount}}` (count-formatted + item/items-pluralized for `item` tiers) each resolve in\n * their own tier's unit \u2014 cross-tier arithmetic never mixes counts with cents.\n */\n unit: z.enum(progressTierUnits).default(ProgressTierUnit.currency),\n});\n\nexport type CABProgressTier = z.infer<typeof CABProgressTier>;\n\n/**\n * A self-contained progress-bar container. Extends `layout` (alignment/border/spacing/`sections`/\u2026), so it\n * holds ALL its pieces as composable children \u2014 the tier display (a `columns \u2192 rows \u2192 text/image` layout)\n * and the reached/remaining message `text`s \u2014 while the renderer adds the bar fill from `tiers` and shows\n * the active message. Everything is encapsulated under this one named section (and one country/FX gate).\n */\nexport const CABProgressBarSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n /** Empty = shown everywhere; otherwise uppercase ISO country codes. */\n countryCodes: z.array(z.string().transform((code) => code.trim().toUpperCase())).default(() => []),\n /**\n * Uppercase ISO codes where a higher-precedence geo bar applies, so this (default, non-geo) bar is\n * hidden there \u2014 replicates React `getbar`'s geo-match-over-default precedence. Empty = never excluded.\n */\n excludeCountryCodes: z.array(z.string().transform((code) => code.trim().toUpperCase())).default(() => []),\n /**\n * Measure progress against the PRE-discount subtotal (onsite `exclude_discount_in_subtotal`, and\n * forced on for bars with a discount tier so its own reward can't un-reach the tier). The client\n * adds the cart's discount allocations back to the live subtotal.\n */\n excludeDiscountInSubtotal: z.boolean().default(false),\n /** Variant ids the client subtracts from the adjusted subtotal (React `bar.excluded_products`). */\n excludedVariantIds: z.array(z.number().int().positive()).default(() => []),\n /**\n * When the cart holds a subscription item, treat the bar as reached regardless of subtotal (React\n * `free_shipping_on_subscription(s)`). `freeShippingOnAll` is already a zero-threshold tier instead.\n */\n freeShippingOnSubscription: z.boolean().default(false),\n /** Localized heading over the gift controls (onsite `gift_area_title`, default 'FREE GIFTS'). */\n giftAreaTitle: z.record(z.string(), z.string()).default(() => ({ en: 'FREE GIFTS' })),\n /** Localized gift-control labels (add/remove/heading); a tier's gift `title` beats `yourGift`. */\n giftLabels: z\n .object({\n addGift: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.addGift })),\n remove: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.remove })),\n selectOptions: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.selectOptions })),\n yourGift: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.yourGift })),\n })\n .default(() => ({\n addGift: { ...GIFT_LABELS.addGift },\n remove: { ...GIFT_LABELS.remove },\n selectOptions: { ...GIFT_LABELS.selectOptions },\n yourGift: { ...GIFT_LABELS.yourGift },\n })),\n /** The bar's a11y label; the merchant names it in the editor, else this default (React parity). */\n name: z.string().default('Order progress'),\n /**\n * Bar fill color. An explicit (widget-authored) value is used verbatim; when absent the server\n * fills it with the live shop theme's `buttonBackground` (React `useRebuyTheme` parity). Still\n * absent after that \u21D2 the theme fetch failed and the client renders its platform-default bar \u2014\n * optional, not defaulted, so \"merchant chose no color\" stays distinguishable from any real value.\n */\n progressColor: z.string().optional(),\n sectionType: z.literal(SectionType.progressBar).default(SectionType.progressBar),\n /**\n * The bar's milestones, in any order \u2014 the renderer sorts by resolved threshold. Drives the fill\n * (even slot per tier) and, for smart-cart product tiers, the gift add/remove. The visual tier\n * display lives in `sections` (composable), NOT here.\n */\n tiers: z.union([z.array(CABProgressTier), z.strictObject({}).transform(() => [])]).default(() => []),\n })\n);\n\nexport type CABProgressBarSection = Omit<CABLayoutSection, 'name' | 'sectionType'> & {\n countryCodes: string[];\n excludeCountryCodes: string[];\n excludeDiscountInSubtotal: boolean;\n excludedVariantIds: number[];\n freeShippingOnSubscription: boolean;\n giftAreaTitle: Record<string, string>;\n giftLabels: Record<'addGift' | 'remove' | 'selectOptions' | 'yourGift', Record<string, string>>;\n name: string;\n progressColor?: string;\n sectionType: 'progressBar';\n tiers: CABProgressTier[];\n};\n\nexport type CABProgressBarSectionProps = CABProgressBarSection & SectionDetails;\n", "/**\n * Default localized labels for the smart-cart gift controls, keyed by slot then locale (same 26 locales\n * as `SWITCH_LABELS`). Schema-default content, never a client dictionary (Peter, 2026-07-06: visible\n * customer strings must be localized). `yourGift` is the generic heading \u2014 a tier's configured gift\n * `title` beats it when present.\n */\nexport const GIFT_LABELS = {\n addGift: {\n ar: '\u0623\u0636\u0641 \u0627\u0644\u0647\u062F\u064A\u0629',\n cs: 'P\u0159idat d\u00E1rek',\n da: 'Tilf\u00F8j gave',\n de: 'Geschenk hinzuf\u00FCgen',\n en: 'Add gift',\n es: 'A\u00F1adir regalo',\n fi: 'Lis\u00E4\u00E4 lahja',\n fr: 'Ajouter le cadeau',\n ga: 'Cuir bronntanas leis',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DE\u05EA\u05E0\u05D4',\n hi: '\u0909\u092A\u0939\u093E\u0930 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambahkan hadiah',\n it: 'Aggiungi regalo',\n ja: '\u30AE\u30D5\u30C8\u3092\u8FFD\u52A0',\n ko: '\uC0AC\uC740\uD488 \uCD94\uAC00',\n nl: 'Cadeau toevoegen',\n no: 'Legg til gave',\n pl: 'Dodaj prezent',\n pt: 'Adicionar presente',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u043E\u0434\u0430\u0440\u043E\u043A',\n sv: 'L\u00E4gg till g\u00E5va',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E02\u0E2D\u0E07\u0E02\u0E27\u0E31\u0E0D',\n tr: 'Hediye ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u043F\u043E\u0434\u0430\u0440\u0443\u043D\u043E\u043A',\n vi: 'Th\u00EAm qu\u00E0 t\u1EB7ng',\n zh: '\u6DFB\u52A0\u8D60\u54C1',\n },\n remove: {\n ar: '\u0625\u0632\u0627\u0644\u0629',\n cs: 'Odebrat',\n da: 'Fjern',\n de: 'Entfernen',\n en: 'Remove',\n es: 'Eliminar',\n fi: 'Poista',\n fr: 'Retirer',\n ga: 'Bain',\n he: '\u05D4\u05E1\u05E8',\n hi: '\u0939\u091F\u093E\u090F\u0901',\n id: 'Hapus',\n it: 'Rimuovi',\n ja: '\u524A\u9664',\n ko: '\uC81C\uAC70',\n nl: 'Verwijderen',\n no: 'Fjern',\n pl: 'Usu\u0144',\n pt: 'Remover',\n ru: '\u0423\u0434\u0430\u043B\u0438\u0442\u044C',\n sv: 'Ta bort',\n th: '\u0E19\u0E33\u0E2D\u0E2D\u0E01',\n tr: 'Kald\u0131r',\n uk: '\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438',\n vi: 'X\u00F3a',\n zh: '\u79FB\u9664',\n },\n selectOptions: {\n ar: '\u0627\u062E\u062A\u0631 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A',\n cs: 'Vyberte mo\u017Enosti',\n da: 'V\u00E6lg muligheder',\n de: 'Optionen w\u00E4hlen',\n en: 'Select Options',\n es: 'Seleccionar opciones',\n fi: 'Valitse vaihtoehdot',\n fr: 'Choisir les options',\n ga: 'Roghnaigh roghanna',\n he: '\u05D1\u05D7\u05E8 \u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA',\n hi: '\u0935\u093F\u0915\u0932\u094D\u092A \u091A\u0941\u0928\u0947\u0902',\n id: 'Pilih opsi',\n it: 'Seleziona le opzioni',\n ja: '\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E',\n ko: '\uC635\uC158 \uC120\uD0DD',\n nl: 'Opties kiezen',\n no: 'Velg alternativer',\n pl: 'Wybierz opcje',\n pt: 'Selecionar op\u00E7\u00F5es',\n ru: '\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B',\n sv: 'V\u00E4lj alternativ',\n th: '\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01',\n tr: 'Se\u00E7enekleri se\u00E7',\n uk: '\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438',\n vi: 'Ch\u1ECDn t\u00F9y ch\u1ECDn',\n zh: '\u9009\u62E9\u9009\u9879',\n },\n yourGift: {\n ar: '\u0647\u062F\u064A\u062A\u0643',\n cs: 'V\u00E1\u0161 d\u00E1rek',\n da: 'Din gave',\n de: 'Ihr Geschenk',\n en: 'Your gift',\n es: 'Tu regalo',\n fi: 'Lahjasi',\n fr: 'Votre cadeau',\n ga: 'Do bhronntanas',\n he: '\u05D4\u05DE\u05EA\u05E0\u05D4 \u05E9\u05DC\u05DA',\n hi: '\u0906\u092A\u0915\u093E \u0909\u092A\u0939\u093E\u0930',\n id: 'Hadiah Anda',\n it: 'Il tuo regalo',\n ja: '\u3042\u306A\u305F\u306E\u30AE\u30D5\u30C8',\n ko: '\uACE0\uAC1D\uB2D8\uC758 \uC0AC\uC740\uD488',\n nl: 'Uw cadeau',\n no: 'Din gave',\n pl: 'Tw\u00F3j prezent',\n pt: 'Seu presente',\n ru: '\u0412\u0430\u0448 \u043F\u043E\u0434\u0430\u0440\u043E\u043A',\n sv: 'Din g\u00E5va',\n th: '\u0E02\u0E2D\u0E07\u0E02\u0E27\u0E31\u0E0D\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13',\n tr: 'Hediyeniz',\n uk: '\u0412\u0430\u0448 \u043F\u043E\u0434\u0430\u0440\u0443\u043D\u043E\u043A',\n vi: 'Qu\u00E0 c\u1EE7a b\u1EA1n',\n zh: '\u60A8\u7684\u8D60\u54C1',\n },\n} satisfies Record<string, Record<string, string>>;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { QuantityInput, quantityInputs, SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABQuantitySection = z.object({\n errorMessages: z\n .record(\n z.string(),\n z.object({\n /** `{{step}}` is interpolated at render \u2014 the off-increment message React never gave a merchant key. */\n increment: z.string().optional(),\n max: z.string().optional(),\n min: z.string().optional(),\n neg: z.string().optional(),\n })\n )\n .default({\n en: {\n increment: 'Quantity must be in increments of {{step}}',\n max: 'Maximum quantity allowed is {{max}}',\n min: 'Minimum quantity required is {{min}}',\n neg: 'Quantity cannot be negative',\n },\n }),\n inputType: z.enum(quantityInputs).default(QuantityInput.select),\n max: z.number().min(1).max(100).default(10),\n min: z.number().min(1).default(1),\n /** The a11y label for the quantity control; the merchant names it in the editor, else this default. */\n name: z.string().default('Quantity'),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.quantity).default(SectionType.quantity),\n});\n\nexport type CABQuantitySection = z.infer<typeof CABQuantitySection>;\n\nexport type CABQuantitySectionProps = CABQuantitySection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { ReviewsSize, reviewsSizes, SectionType } from './common';\nimport { REVIEW_LABELS } from './reviewLabels';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABReviewsSection = z.object({\n color: z.string().default('#fadb14'),\n /**\n * Localized review-count templates (`{{reviewCount}}`), one/other plural forms; the client picks the\n * form via `Intl.PluralRules`. Defaults here (schema-first) so every tree localizes without converter\n * or merchant work.\n */\n countLabels: z\n .object({\n one: z.record(z.string(), z.string()).default(() => ({ ...REVIEW_LABELS.one })),\n other: z.record(z.string(), z.string()).default(() => ({ ...REVIEW_LABELS.other })),\n })\n .default(() => ({ one: { ...REVIEW_LABELS.one }, other: { ...REVIEW_LABELS.other } })),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.reviews).default(SectionType.reviews),\n size: z.enum(reviewsSizes).default(ReviewsSize.default),\n});\n\nexport type CABReviewsSection = z.infer<typeof CABReviewsSection>;\n\nexport type CABReviewsSectionProps = CABReviewsSection & SectionDetails;\n", "/**\n * Default localized review-count templates for the reviews section, keyed by CLDR-ish plural form then\n * locale (same 26 locales as `SWITCH_LABELS`). The client picks `one` vs `other` via `Intl.PluralRules`\n * and interpolates `{{reviewCount}}` \u2014 the two-form simplification maps every non-`one` category\n * (few/many/other) to `other`. Schema-default content, never a client dictionary (Peter, 2026-07-06:\n * visible customer strings must be localized).\n */\nexport const REVIEW_LABELS = {\n one: {\n ar: '({{reviewCount}} \u062A\u0642\u064A\u064A\u0645)',\n cs: '({{reviewCount}} recenze)',\n da: '({{reviewCount}} anmeldelse)',\n de: '({{reviewCount}} Bewertung)',\n en: '({{reviewCount}} review)',\n es: '({{reviewCount}} rese\u00F1a)',\n fi: '({{reviewCount}} arvostelu)',\n fr: '({{reviewCount}} avis)',\n ga: '({{reviewCount}} l\u00E9irmheas)',\n he: '({{reviewCount}} \u05D1\u05D9\u05E7\u05D5\u05E8\u05EA)',\n hi: '({{reviewCount}} \u0938\u092E\u0940\u0915\u094D\u0937\u093E)',\n id: '({{reviewCount}} ulasan)',\n it: '({{reviewCount}} recensione)',\n ja: '({{reviewCount}}\u4EF6\u306E\u30EC\u30D3\u30E5\u30FC)',\n ko: '({{reviewCount}}\uAC1C \uB9AC\uBDF0)',\n nl: '({{reviewCount}} beoordeling)',\n no: '({{reviewCount}} anmeldelse)',\n pl: '({{reviewCount}} opinia)',\n pt: '({{reviewCount}} avalia\u00E7\u00E3o)',\n ru: '({{reviewCount}} \u043E\u0442\u0437\u044B\u0432)',\n sv: '({{reviewCount}} recension)',\n th: '({{reviewCount}} \u0E23\u0E35\u0E27\u0E34\u0E27)',\n tr: '({{reviewCount}} de\u011Ferlendirme)',\n uk: '({{reviewCount}} \u0432\u0456\u0434\u0433\u0443\u043A)',\n vi: '({{reviewCount}} \u0111\u00E1nh gi\u00E1)',\n zh: '({{reviewCount}} \u6761\u8BC4\u4EF7)',\n },\n other: {\n ar: '({{reviewCount}} \u062A\u0642\u064A\u064A\u0645\u0627\u062A)',\n cs: '({{reviewCount}} recenz\u00ED)',\n da: '({{reviewCount}} anmeldelser)',\n de: '({{reviewCount}} Bewertungen)',\n en: '({{reviewCount}} reviews)',\n es: '({{reviewCount}} rese\u00F1as)',\n fi: '({{reviewCount}} arvostelua)',\n fr: '({{reviewCount}} avis)',\n ga: '({{reviewCount}} l\u00E9irmheasanna)',\n he: '({{reviewCount}} \u05D1\u05D9\u05E7\u05D5\u05E8\u05D5\u05EA)',\n hi: '({{reviewCount}} \u0938\u092E\u0940\u0915\u094D\u0937\u093E\u090F\u0901)',\n id: '({{reviewCount}} ulasan)',\n it: '({{reviewCount}} recensioni)',\n ja: '({{reviewCount}}\u4EF6\u306E\u30EC\u30D3\u30E5\u30FC)',\n ko: '({{reviewCount}}\uAC1C \uB9AC\uBDF0)',\n nl: '({{reviewCount}} beoordelingen)',\n no: '({{reviewCount}} anmeldelser)',\n pl: '({{reviewCount}} opinii)',\n pt: '({{reviewCount}} avalia\u00E7\u00F5es)',\n ru: '({{reviewCount}} \u043E\u0442\u0437\u044B\u0432\u043E\u0432)',\n sv: '({{reviewCount}} recensioner)',\n th: '({{reviewCount}} \u0E23\u0E35\u0E27\u0E34\u0E27)',\n tr: '({{reviewCount}} de\u011Ferlendirme)',\n uk: '({{reviewCount}} \u0432\u0456\u0434\u0433\u0443\u043A\u0456\u0432)',\n vi: '({{reviewCount}} \u0111\u00E1nh gi\u00E1)',\n zh: '({{reviewCount}} \u6761\u8BC4\u4EF7)',\n },\n} satisfies Record<'one' | 'other', Record<string, string>>;\n", "import { slice } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType, VariantMode, variantModes, VariantSelector, variantSelectors } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABVariantsSection = z.object({\n hideOutOfStockVariants: z.boolean().default(false),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.variants).default(SectionType.variants),\n selector: z.enum(slice(variantSelectors, 0, 3)).default(VariantSelector.menu),\n variantMode: z.enum(variantModes).default(VariantMode.multiple),\n});\n\nexport type CABVariantsSection = z.infer<typeof CABVariantsSection>;\n\nexport type CABVariantsSectionProps = CABVariantsSection & SectionDetails;\n", "/**\n * Default UI-chrome labels \u2014 the buyer-visible and screen-reader strings that have no per-section\n * merchant slot: the subscription-frequency select's group label, spinner busy text, carousel control\n * names + current-page semantics, the variant selected-state suffix, and the Monetize offer dialog\n * name. Keyed by slot then locale, shipped in the payload so the client never bundles a dictionary\n * (Peter, 2026-07-06: visible customer strings must be localized). English defaults only \u2014 unlike the\n * merchant-authored `SWITCH_LABELS`/`GIFT_LABELS`, these mirror strings legacy hardcoded in English, so\n * the fix is making them payload-sourced (localizable, zero bundle) rather than inventing 25 unreviewed\n * translations; a merchant or a later localization pass can populate other locales. `{{page}}` in the\n * pagination slots is interpolated per control at render.\n */\nexport const UI_LABELS = {\n currentPage: { en: 'Page {{page}}, current' },\n loadingOptions: { en: 'Loading subscription options' },\n nextPage: { en: 'Next' },\n offerDialog: { en: 'Offer' },\n page: { en: 'Page {{page}}' },\n previousPage: { en: 'Previous' },\n selected: { en: 'selected' },\n subscriptionOptions: { en: 'Subscription Options' },\n updating: { en: 'Updating' },\n} satisfies Record<string, Record<string, string>>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const GiftWithPurchase = z.looseObject({\n type: z.literal(WidgetType.gift_with_purchase).default(WidgetType.gift_with_purchase),\n});\n\nexport type GiftWithPurchase = z.infer<typeof GiftWithPurchase>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\n/** v1 English label overrides (React `switchToSubscription.language`); each falls back to a shared `SWITCH_LABELS` default. */\nexport const LineItemEditorSwitchLanguageV1 = z.object({\n downgradeToOneTimeLabel: z.string().optional(),\n /** Frequency-option template (`{{frequency}}`/`{{interval}}`) for the plan select. */\n subscriptionOptionLabel: z.string().optional(),\n upgradeToSubscriptionLabel: z.string().optional(),\n upgradeToSubscriptionWithoutDiscountLabel: z.string().optional(),\n});\n\nexport const LineItemEditorV1 = z.object({\n /** Legacy `getStyles` button style; the converter carries a valid kind, defaulting to `plain`. */\n button: z.object({ kind: z.enum(['plain', 'primary', 'secondary']).optional() }).optional(),\n previewMode: z.boolean().optional(),\n switchToSubscription: z\n .object({\n disableDowngrade: z.boolean().optional(),\n language: LineItemEditorSwitchLanguageV1.optional(),\n })\n .optional(),\n switchToSubscriptionEnabled: z.boolean().optional(),\n tracking: z\n .object({\n enableAttribution: z.boolean().optional(),\n enableSource: z.boolean().optional(),\n enableWidget: z.boolean().optional(),\n })\n .optional(),\n type: z.literal(WidgetType.ui_extension_line_item_editor).default(WidgetType.ui_extension_line_item_editor),\n version: z.literal(1),\n});\n\nexport const LineItemEditor = z.discriminatedUnion('version', [\n LineItemEditorV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_line_item_editor).default(WidgetType.ui_extension_line_item_editor),\n }),\n]);\n\nexport type LineItemEditor = z.infer<typeof LineItemEditor>;\nexport type LineItemEditorSwitchLanguageV1 = z.infer<typeof LineItemEditorSwitchLanguageV1>;\nexport type LineItemEditorV1 = z.infer<typeof LineItemEditorV1>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const ProgressBar = z.looseObject({\n type: z.literal(WidgetType.ui_extension_progress_bar).default(WidgetType.ui_extension_progress_bar),\n});\n\nexport type ProgressBar = z.infer<typeof ProgressBar>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\nexport const RebuyButtonV1 = z.looseObject({\n type: z.literal(WidgetType.ui_extension_button).default(WidgetType.ui_extension_button),\n version: z.literal(1),\n});\n\nexport const RebuyButton = z.discriminatedUnion('version', [\n RebuyButtonV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_button).default(WidgetType.ui_extension_button),\n }),\n]);\n\nexport type RebuyButton = z.infer<typeof RebuyButton>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const RebuyMonetize = z.looseObject({\n type: z.literal(WidgetType.ui_extension_ad).default(WidgetType.ui_extension_ad),\n});\n\nexport type RebuyMonetize = z.infer<typeof RebuyMonetize>;\n", "/**\n * Default localized labels for the offer card's add-to-order button states and the opt-in undo banner,\n * keyed by slot then locale (same 26 locales as `SWITCH_LABELS`). The converter overlays a defined v1\n * merchant value as the `en` entry (verbatim) and falls back to these for blank/absent values, so a\n * migrated widget keeps its copy while new/unset widgets localize. `addedToCartMessage` tokens are\n * camelCase (CAB default); legacy snake_case tokens in merchant overrides still resolve client-side.\n */\nexport const OFFER_LABELS = {\n addedToCart: {\n ar: '\u062A\u0645\u062A \u0627\u0644\u0625\u0636\u0627\u0641\u0629!',\n cs: 'P\u0159id\u00E1no!',\n da: 'Tilf\u00F8jet!',\n de: 'Hinzugef\u00FCgt!',\n en: 'Added!',\n es: '\u00A1A\u00F1adido!',\n fi: 'Lis\u00E4tty!',\n fr: 'Ajout\u00E9 !',\n ga: 'Curtha leis!',\n he: '\u05E0\u05D5\u05E1\u05E3!',\n hi: '\u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E!',\n id: 'Ditambahkan!',\n it: 'Aggiunto!',\n ja: '\u8FFD\u52A0\u3057\u307E\u3057\u305F\uFF01',\n ko: '\uCD94\uAC00\uB428!',\n nl: 'Toegevoegd!',\n no: 'Lagt til!',\n pl: 'Dodano!',\n pt: 'Adicionado!',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E!',\n sv: 'Tillagd!',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E41\u0E25\u0E49\u0E27!',\n tr: 'Eklendi!',\n uk: '\u0414\u043E\u0434\u0430\u043D\u043E!',\n vi: '\u0110\u00E3 th\u00EAm!',\n zh: '\u5DF2\u6DFB\u52A0\uFF01',\n },\n addedToCartMessage: {\n ar: '\u062A\u0645\u062A \u0625\u0636\u0627\u0641\u0629 {{quantity}} {{productTitle}} \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629.',\n cs: '{{quantity}} {{productTitle}} p\u0159id\u00E1no do ko\u0161\u00EDku.',\n da: '{{quantity}} {{productTitle}} lagt i kurven.',\n de: '{{quantity}} {{productTitle}} zum Warenkorb hinzugef\u00FCgt.',\n en: '{{quantity}} {{productTitle}} successfully added to cart.',\n es: '{{quantity}} {{productTitle}} a\u00F1adido al carrito.',\n fi: '{{quantity}} {{productTitle}} lis\u00E4tty ostoskoriin.',\n fr: '{{quantity}} {{productTitle}} ajout\u00E9 au panier.',\n ga: 'Cuireadh {{quantity}} {{productTitle}} sa chairt.',\n he: '{{quantity}} {{productTitle}} \u05E0\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4.',\n hi: '{{quantity}} {{productTitle}} \u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E\u0964',\n id: '{{quantity}} {{productTitle}} ditambahkan ke keranjang.',\n it: '{{quantity}} {{productTitle}} aggiunto al carrello.',\n ja: '{{quantity}} {{productTitle}}\u3092\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F\u3002',\n ko: '{{quantity}} {{productTitle}}\uC774(\uAC00) \uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4.',\n nl: '{{quantity}} {{productTitle}} toegevoegd aan winkelwagen.',\n no: '{{quantity}} {{productTitle}} lagt i handlekurven.',\n pl: '{{quantity}} {{productTitle}} dodano do koszyka.',\n pt: '{{quantity}} {{productTitle}} adicionado ao carrinho.',\n ru: '{{quantity}} {{productTitle}} \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443.',\n sv: '{{quantity}} {{productTitle}} har lagts i varukorgen.',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21 {{quantity}} {{productTitle}} \u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32\u0E41\u0E25\u0E49\u0E27',\n tr: '{{quantity}} {{productTitle}} sepete eklendi.',\n uk: '{{quantity}} {{productTitle}} \u0434\u043E\u0434\u0430\u043D\u043E \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430.',\n vi: '\u0110\u00E3 th\u00EAm {{quantity}} {{productTitle}} v\u00E0o gi\u1ECF h\u00E0ng.',\n zh: '{{quantity}} {{productTitle}} \u5DF2\u52A0\u5165\u8D2D\u7269\u8F66\u3002',\n },\n addingToCart: {\n ar: '\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0636\u0627\u0641\u0629...',\n cs: 'P\u0159id\u00E1v\u00E1n\u00ED...',\n da: 'Tilf\u00F8jer...',\n de: 'Wird hinzugef\u00FCgt...',\n en: 'Adding...',\n es: 'A\u00F1adiendo...',\n fi: 'Lis\u00E4t\u00E4\u00E4n...',\n fr: 'Ajout en cours...',\n ga: '\u00C1 chur leis...',\n he: '\u05DE\u05D5\u05E1\u05D9\u05E3...',\n hi: '\u091C\u094B\u0921\u093C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948...',\n id: 'Menambahkan...',\n it: 'Aggiunta in corso...',\n ja: '\u8FFD\u52A0\u4E2D...',\n ko: '\uCD94\uAC00 \uC911...',\n nl: 'Toevoegen...',\n no: 'Legger til...',\n pl: 'Dodawanie...',\n pt: 'Adicionando...',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435...',\n sv: 'L\u00E4gger till...',\n th: '\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21...',\n tr: 'Ekleniyor...',\n uk: '\u0414\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F...',\n vi: '\u0110ang th\u00EAm...',\n zh: '\u6B63\u5728\u6DFB\u52A0...',\n },\n addToCart: {\n ar: '\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159idat do ko\u0161\u00EDku',\n da: 'L\u00E6g i kurv',\n de: 'In den Warenkorb',\n en: 'Add to cart',\n es: 'A\u00F1adir al carrito',\n fi: 'Lis\u00E4\u00E4 ostoskoriin',\n fr: 'Ajouter au panier',\n ga: 'Cuir sa chairt',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambahkan ke keranjang',\n it: 'Aggiungi al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00',\n nl: 'In winkelwagen',\n no: 'Legg i handlekurven',\n pl: 'Dodaj do koszyka',\n pt: 'Adicionar ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gg i varukorgen',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32',\n tr: 'Sepete ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u0432 \u043A\u043E\u0448\u0438\u043A',\n vi: 'Th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n redirectToCheckout: {\n ar: '\u0627\u0644\u062F\u0641\u0639',\n cs: 'Pokladna',\n da: 'Til kassen',\n de: 'Zur Kasse',\n en: 'Checkout',\n es: 'Finalizar compra',\n fi: 'Kassalle',\n fr: 'Paiement',\n ga: 'Seice\u00E1il amach',\n he: '\u05DC\u05EA\u05E9\u05DC\u05D5\u05DD',\n hi: '\u091A\u0947\u0915\u0906\u0909\u091F',\n id: 'Checkout',\n it: 'Cassa',\n ja: '\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8',\n ko: '\uACB0\uC81C\uD558\uAE30',\n nl: 'Afrekenen',\n no: 'Til kassen',\n pl: 'Do kasy',\n pt: 'Finalizar compra',\n ru: '\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u044C \u0437\u0430\u043A\u0430\u0437',\n sv: 'Till kassan',\n th: '\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19',\n tr: '\u00D6deme',\n uk: '\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u0438 \u0437\u0430\u043C\u043E\u0432\u043B\u0435\u043D\u043D\u044F',\n vi: 'Thanh to\u00E1n',\n zh: '\u7ED3\u8D26',\n },\n soldOut: {\n ar: '\u0646\u0641\u062F\u062A \u0627\u0644\u0643\u0645\u064A\u0629',\n cs: 'Vyprod\u00E1no',\n da: 'Udsolgt',\n de: 'Ausverkauft',\n en: 'Sold out',\n es: 'Agotado',\n fi: 'Loppuunmyyty',\n fr: '\u00C9puis\u00E9',\n ga: 'D\u00EDolta amach',\n he: '\u05D0\u05D6\u05DC \u05DE\u05D4\u05DE\u05DC\u05D0\u05D9',\n hi: '\u0938\u094D\u091F\u0949\u0915 \u0916\u093C\u0924\u094D\u092E',\n id: 'Habis terjual',\n it: 'Esaurito',\n ja: '\u58F2\u308A\u5207\u308C',\n ko: '\uD488\uC808',\n nl: 'Uitverkocht',\n no: 'Utsolgt',\n pl: 'Wyprzedane',\n pt: 'Esgotado',\n ru: '\u0420\u0430\u0441\u043F\u0440\u043E\u0434\u0430\u043D\u043E',\n sv: 'Sluts\u00E5ld',\n th: '\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E2B\u0E21\u0E14',\n tr: 'T\u00FCkendi',\n uk: '\u0420\u043E\u0437\u043F\u0440\u043E\u0434\u0430\u043D\u043E',\n vi: 'H\u1EBFt h\u00E0ng',\n zh: '\u5DF2\u552E\u7F44',\n },\n undo: {\n ar: '\u062A\u0631\u0627\u062C\u0639',\n cs: 'Zp\u011Bt',\n da: 'Fortryd',\n de: 'R\u00FCckg\u00E4ngig',\n en: 'Undo',\n es: 'Deshacer',\n fi: 'Kumoa',\n fr: 'Annuler',\n ga: 'Cealaigh',\n he: '\u05D1\u05D8\u05DC',\n hi: '\u092A\u0942\u0930\u094D\u0935\u0935\u0924 \u0915\u0930\u0947\u0902',\n id: 'Urungkan',\n it: 'Annulla',\n ja: '\u5143\u306B\u623B\u3059',\n ko: '\uC2E4\uD589 \uCDE8\uC18C',\n nl: 'Ongedaan maken',\n no: 'Angre',\n pl: 'Cofnij',\n pt: 'Desfazer',\n ru: '\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C',\n sv: '\u00C5ngra',\n th: '\u0E40\u0E25\u0E34\u0E01\u0E17\u0E33',\n tr: 'Geri al',\n uk: '\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438',\n vi: 'Ho\u00E0n t\u00E1c',\n zh: '\u64A4\u9500',\n },\n} as const satisfies Record<string, Record<string, string>>;\n", "/**\n * Default localized labels for the switch-to-subscription button content, keyed by `buttonField` then locale.\n * The single source of truth shared by the admin editor and the read-time `convertLineItemEditorToV2` transform\n * so a widget renders identically whether migrated in admin or converted on the fly. `{{subscriptionDiscount}}`\n * is substituted per-plan at render \u2014 CAB tokens are camelCase by default; a legacy snake_case token in a v1\n * merchant override still resolves (the client camelCases unknown token keys against its camelCase variables).\n * `subscriptionOption` is the frequency-select option template (legacy\n * `SwitchToSubscriptionLanguageDefaults.subscription_option_label`); the client resolves `{{interval}}`\n * through `Intl.NumberFormat` unit style, so the noun arrives in the buyer's language, pluralized per count\n * from the runtime's CLDR data (English CLDR nouns are lowercase \u2014 an accepted divergence from legacy).\n */\nexport const SWITCH_LABELS = {\n subscriptionOption: {\n ar: '\u064A\u062A\u0645 \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0643\u0644 {{frequency}} {{interval}}',\n cs: 'Doru\u010Den\u00ED ka\u017Ed\u00FDch {{frequency}} {{interval}}',\n da: 'Leveres hver {{frequency}} {{interval}}',\n de: 'Lieferung alle {{frequency}} {{interval}}',\n en: 'Delivers every {{frequency}} {{interval}}',\n es: 'Entrega cada {{frequency}} {{interval}}',\n fi: 'Toimitus {{frequency}} {{interval}} v\u00E4lein',\n fr: 'Livraison tous les {{frequency}} {{interval}}',\n ga: 'Seachadtar gach {{frequency}} {{interval}}',\n he: '\u05DE\u05E9\u05DC\u05D5\u05D7 \u05DB\u05DC {{frequency}} {{interval}}',\n hi: '\u0939\u0930 {{frequency}} {{interval}} \u092E\u0947\u0902 \u0921\u093F\u0932\u0940\u0935\u0930\u0940',\n id: 'Dikirim setiap {{frequency}} {{interval}}',\n it: 'Consegna ogni {{frequency}} {{interval}}',\n ja: '{{frequency}} {{interval}}\u3054\u3068\u306B\u304A\u5C4A\u3051',\n ko: '{{frequency}} {{interval}}\uB9C8\uB2E4 \uBC30\uC1A1',\n nl: 'Wordt elke {{frequency}} {{interval}} geleverd',\n no: 'Leveres hver {{frequency}} {{interval}}',\n pl: 'Dostawa co {{frequency}} {{interval}}',\n pt: 'Entrega a cada {{frequency}} {{interval}}',\n ru: '\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u0430\u0436\u0434\u044B\u0435 {{frequency}} {{interval}}',\n sv: 'Levereras var {{frequency}} {{interval}}',\n th: '\u0E08\u0E31\u0E14\u0E2A\u0E48\u0E07\u0E17\u0E38\u0E01 {{frequency}} {{interval}}',\n tr: 'Her {{frequency}} {{interval}} aral\u0131\u011F\u0131nda teslimat',\n uk: '\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u043E\u0436\u043D\u0456 {{frequency}} {{interval}}',\n vi: 'Giao h\u00E0ng m\u1ED7i {{frequency}} {{interval}}',\n zh: '\u6BCF {{frequency}} {{interval}} \u914D\u9001\u4E00\u6B21',\n },\n switchToOneTimePurchase: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0634\u0631\u0627\u0621 \u0644\u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629',\n cs: 'P\u0159epnout na jednor\u00E1zov\u00FD n\u00E1kup',\n da: 'Skift til engangsk\u00F8b',\n de: 'Zu einmaligem Kauf wechseln',\n en: 'Switch to One-time Purchase',\n es: 'Cambiar a compra \u00FAnica',\n fi: 'Vaihda kertaluonteiseen ostoon',\n fr: 'Passer \u00E0 un achat unique',\n ga: 'Athraigh go ceannach aonuaire',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05E8\u05DB\u05D9\u05E9\u05D4 \u05D7\u05D3-\u05E4\u05E2\u05DE\u05D9\u05EA',\n hi: '\u090F\u0915 \u092C\u093E\u0930 \u0915\u0940 \u0916\u0930\u0940\u0926 \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902',\n id: 'Beralih ke pembelian satu kali',\n it: 'Passa all\u2019acquisto una tantum',\n ja: '1\u56DE\u9650\u308A\u306E\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B',\n ko: '\uC77C\uD68C\uC131 \uAD6C\uB9E4\uB85C \uC804\uD658',\n nl: 'Overschakelen naar eenmalige aankoop',\n no: 'Bytt til engangskj\u00F8p',\n pl: 'Prze\u0142\u0105cz na jednorazowy zakup',\n pt: 'Mudar para compra \u00FAnica',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u0440\u0430\u0437\u043E\u0432\u0443\u044E \u043F\u043E\u043A\u0443\u043F\u043A\u0443',\n sv: 'Byt till eng\u00E5ngsk\u00F6p',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27',\n tr: 'Tek seferlik sat\u0131n almaya ge\u00E7',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0443 \u043F\u043E\u043A\u0443\u043F\u043A\u0443',\n vi: 'Chuy\u1EC3n sang mua m\u1ED9t l\u1EA7n',\n zh: '\u5207\u6362\u4E3A\u4E00\u6B21\u6027\u8D2D\u4E70',\n },\n switchToSubscriptionNoDiscount: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643',\n cs: 'P\u0159epnout na p\u0159edplatn\u00E9',\n da: 'Skift til abonnement',\n de: 'Zu einem Abonnement wechseln',\n en: 'Switch to Subscription',\n es: 'Cambiar a suscripci\u00F3n',\n fi: 'Vaihda tilaukseen',\n fr: 'Passer \u00E0 un abonnement',\n ga: 'Athraigh go s\u00EDnti\u00FAs',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9',\n hi: '\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902',\n id: 'Beralih ke langganan',\n it: 'Passa all\u2019abbonamento',\n ja: '\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B',\n ko: '\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658',\n nl: 'Overschakelen naar abonnement',\n no: 'Bytt til abonnement',\n pl: 'Prze\u0142\u0105cz na subskrypcj\u0119',\n pt: 'Mudar para assinatura',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443',\n sv: 'Byt till prenumeration',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01',\n tr: 'Aboneli\u011Fe ge\u00E7',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443',\n vi: 'Chuy\u1EC3n sang \u0111\u0103ng k\u00FD',\n zh: '\u5207\u6362\u4E3A\u8BA2\u9605',\n },\n switchToSubscriptionWithDiscount: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643 \u0648\u062A\u0648\u0641\u064A\u0631 {{subscriptionDiscount}}%',\n cs: 'P\u0159epnout na p\u0159edplatn\u00E9 a u\u0161et\u0159it {{subscriptionDiscount}} %',\n da: 'Skift til abonnement og spar {{subscriptionDiscount}}%',\n de: 'Zu einem Abonnement wechseln und {{subscriptionDiscount}} % sparen',\n en: 'Switch to Subscription & Save {{subscriptionDiscount}}%',\n es: 'Cambiar a suscripci\u00F3n y ahorrar {{subscriptionDiscount}}%',\n fi: 'Vaihda tilaukseen ja s\u00E4\u00E4st\u00E4 {{subscriptionDiscount}} %',\n fr: 'Passer \u00E0 un abonnement et \u00E9conomiser {{subscriptionDiscount}} %',\n ga: 'Athraigh go s\u00EDnti\u00FAs agus s\u00E1bh\u00E1il {{subscriptionDiscount}}%',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9 \u05D5\u05D7\u05E1\u05D5\u05DA {{subscriptionDiscount}}%',\n hi: '\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902 \u0914\u0930 {{subscriptionDiscount}}% \u092C\u091A\u093E\u090F\u0902',\n id: 'Beralih ke langganan dan hemat {{subscriptionDiscount}}%',\n it: 'Passa all\u2019abbonamento e risparmia {{subscriptionDiscount}}%',\n ja: '\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u3066{{subscriptionDiscount}}%\u304A\u5F97',\n ko: '\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658\uD558\uACE0 {{subscriptionDiscount}}% \uC808\uC57D',\n nl: 'Overschakelen naar abonnement en {{subscriptionDiscount}}% besparen',\n no: 'Bytt til abonnement og spar {{subscriptionDiscount}}%',\n pl: 'Prze\u0142\u0105cz na subskrypcj\u0119 i oszcz\u0119d\u017A {{subscriptionDiscount}}%',\n pt: 'Mudar para assinatura e economizar {{subscriptionDiscount}}%',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443 \u0438 \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0442\u044C {{subscriptionDiscount}}%',\n sv: 'Byt till prenumeration och spara {{subscriptionDiscount}}%',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E2B\u0E22\u0E31\u0E14 {{subscriptionDiscount}}%',\n tr: 'Aboneli\u011Fe ge\u00E7 ve {{subscriptionDiscount}}% tasarruf et',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443 \u0442\u0430 \u0437\u0430\u043E\u0449\u0430\u0434\u0438\u0442\u0438 {{subscriptionDiscount}}%',\n vi: 'Chuy\u1EC3n sang \u0111\u0103ng k\u00FD v\u00E0 ti\u1EBFt ki\u1EC7m {{subscriptionDiscount}}%',\n zh: '\u5207\u6362\u4E3A\u8BA2\u9605\u5E76\u8282\u7701 {{subscriptionDiscount}}%',\n },\n} as const satisfies Record<string, Record<string, string>>;\n", "import { replace, toNumber, toString } from 'es-toolkit/compat';\nimport { z } from 'zod';\n\nexport const strictNumber = z.union([\n z.number(),\n z.string().transform((value) => toNumber(replace(toString(value), /[^0-9.]/g, '')) || 0),\n z.unknown().transform(() => 0),\n]);\n", "import { z } from 'zod';\n\nexport const blockTypes = [\n 'callout_banner',\n 'image',\n 'image_content',\n 'pay_button',\n 'product_information',\n 'separator',\n 'text',\n 'timer',\n] as const;\n\nconst blockType = z.enum(blockTypes);\n\nexport const BlockType = blockType.enum;\nexport type BlockType = z.infer<typeof blockType>;\n", "import { get, isEqual } from 'es-toolkit/compat';\nimport { v4 as uuidv4 } from 'uuid';\nimport { z } from 'zod';\n\nimport { BlockType } from './constants';\nimport { TiptapDocument } from '../checkout-and-beyond/text';\n\nconst TextAlignment = z.union([z.enum(['leading', 'center', 'trailing']), z.unknown().transform(() => 'leading')]);\n\nconst TextSize = z.union([\n z.enum(['xsmall', 'small', 'base', 'default', 'medium', 'large', 'xlarge']),\n z.unknown().transform(() => 'medium'),\n]);\n\nexport const CalloutBannerBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n superTitle: z.union([z.string(), TiptapDocument]).default(() => 'Limited-time Offer'),\n title: z.union([z.string(), TiptapDocument]).default(() => 'Add this customer favorite to your order'),\n }),\n styles: z.object({\n superTitleEmphasized: z.boolean().default(false),\n superTitleSize: TextSize.default('large'),\n textAlignment: TextAlignment.default('center'),\n titleEmphasized: z.boolean().default(true),\n titleSize: TextSize.default('large'),\n }),\n type: z.literal(BlockType.callout_banner).default(BlockType.callout_banner),\n});\n\nexport type CalloutBannerBlock = z.infer<typeof CalloutBannerBlock>;\n\nexport const ImageBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.union([\n z.object({\n /** This isn't used in the post-purchase offer widget */\n alt: z.string().optional().default(''),\n image: z.union([z.literal(''), z.url()]).default(''),\n imageSize: z.number().default(20),\n imageType: z.enum(['URL', 'UPLOAD']).default('URL'),\n }),\n z.array(z.never()).transform(() => ({})),\n ]),\n type: z.literal(BlockType.image).default(BlockType.image),\n});\n\nexport type ImageBlock = z.infer<typeof ImageBlock>;\n\nexport const ImageContentBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n alt: z.string().optional().default(''),\n description: z\n .union([z.string(), TiptapDocument, z.null()])\n .default(\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'\n ),\n descriptionSize: TextSize.default('medium'),\n horizontalAlignment: TextAlignment.default('leading'),\n image: z.union([z.literal(''), z.url()]).default(''),\n imagePlacement: z.enum(['bottom', 'left', 'right', 'top']).optional().default('left'),\n imageSize: z.number().default(20),\n superTitle: z.union([z.string(), TiptapDocument]).default('Lorem Ipsum!'),\n superTitleSize: TextSize.default('medium'),\n /** This isn't configurable in the admin-nextjs editor */\n swapContent: z.boolean().optional().default(false),\n title: z.union([z.string(), TiptapDocument]).nullable().default('Lorem ipsum dolor sit amet'),\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.image_content).default(BlockType.image_content),\n});\n\nexport type ImageContentBlock = z.infer<typeof ImageContentBlock>;\n\nexport const PayButtonBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.union([\n z.object({\n label: z.string().default('Pay Now'),\n }),\n z.array(z.never()).transform(() => ({\n label: 'Pay Now',\n })),\n ]),\n styles: z.union([\n z.object({\n buttonWidth: z.number().min(10).max(100).default(50),\n }),\n z.array(z.never()).transform(() => ({\n buttonWidth: 50,\n })),\n ]),\n type: z.literal(BlockType.pay_button).default(BlockType.pay_button),\n});\n\nexport type PayButtonBlock = z.infer<typeof PayButtonBlock>;\n\nexport const ProductInformationBlock = z.object({\n /** This isn't configurable in the admin-nextjs editor */\n hideProductImage: z.boolean().optional().default(false),\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n type: z.literal(BlockType.product_information).default(BlockType.product_information),\n});\n\nexport type ProductInformationBlock = z.infer<typeof ProductInformationBlock>;\n\nexport const SeparatorBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n type: z.literal(BlockType.separator).default(BlockType.separator),\n});\n\nexport type SeparatorBlock = z.infer<typeof SeparatorBlock>;\n\nexport const TextBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n description: z\n .union([z.string(), TiptapDocument])\n .optional()\n .default(\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'\n ),\n /** This isn't used in the post-purchase offer widget */\n descriptionSize: TextSize.default('medium'),\n horizontalAlignment: TextAlignment.default('leading'),\n superTitle: z.union([z.string(), TiptapDocument]).default('Super Title'),\n /** This isn't used in the post-purchase offer widget */\n superTitleSize: TextSize.default('medium'),\n title: z.union([z.string(), TiptapDocument]).nullable().default('Lorem ipsum dolor sit amet.'),\n /** This isn't used in the post-purchase offer widget */\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.text).default(BlockType.text),\n});\n\nexport type TextBlock = z.infer<typeof TextBlock>;\n\nexport const TimerBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n durationMinutes: z.number().min(0).default(10),\n durationSeconds: z.union([z.number().min(0), z.unknown().transform(() => 0)]).default(0),\n endOffer: z.boolean().default(true),\n title: z.union([z.string(), TiptapDocument]).default('Hurry \u2014 your special offer ends in:'),\n }),\n styles: z.object({\n textAlignment: TextAlignment.default('center'),\n timerBackgroundColor: z.enum(['info', 'warning', 'success', 'critical']).default('warning'),\n timerEmphasized: z.union([z.boolean(), z.unknown().transform(() => true)]).default(true),\n timerSize: TextSize.default('medium'),\n timerWidth: z.number().min(10).max(100).optional().default(100),\n titleEmphasized: z.union([z.boolean(), z.unknown().transform(() => true)]).default(false),\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.timer).default(BlockType.timer),\n});\n\nexport type TimerBlock = z.infer<typeof TimerBlock>;\n\nexport const PostPurchaseBlock = z.discriminatedUnion('type', [\n CalloutBannerBlock,\n ImageBlock,\n ImageContentBlock,\n PayButtonBlock,\n ProductInformationBlock,\n SeparatorBlock,\n TextBlock,\n TimerBlock,\n]);\n\nexport type PostPurchaseBlock = z.infer<typeof PostPurchaseBlock>;\n\nexport const isCalloutBannerBlock = (block: unknown): block is CalloutBannerBlock =>\n isEqual(get(block, 'type'), BlockType.callout_banner);\n\nexport const isImageBlock = (block: unknown): block is ImageBlock => isEqual(get(block, 'type'), BlockType.image);\n\nexport const isImageContentBlock = (block: unknown): block is ImageContentBlock =>\n isEqual(get(block, 'type'), BlockType.image_content);\n\nexport const isPayButtonBlock = (block: unknown): block is PayButtonBlock =>\n isEqual(get(block, 'type'), BlockType.pay_button);\n\nexport const isProductInformationBlock = (block: unknown): block is ProductInformationBlock =>\n isEqual(get(block, 'type'), BlockType.product_information);\n\nexport const isSeparatorBlock = (block: unknown): block is SeparatorBlock =>\n isEqual(get(block, 'type'), BlockType.separator);\n\nexport const isTextBlock = (block: unknown): block is TextBlock => isEqual(get(block, 'type'), BlockType.text);\n\nexport const isTimerBlock = (block: unknown): block is TimerBlock => isEqual(get(block, 'type'), BlockType.timer);\n", "import { z } from 'zod';\n\nimport { PostPurchaseWidget } from './postPurchaseWidget';\n\nexport const PostPurchaseOffer = z.discriminatedUnion('successful', [\n z.strictObject({\n errors: z.array(z.object({ message: z.string() })),\n message: z.string(),\n successful: z.literal(false),\n }),\n z.strictObject({\n successful: z.literal(true),\n widget: PostPurchaseWidget,\n }),\n]);\n\nexport type PostPurchaseOffer = z.infer<typeof PostPurchaseOffer>;\n", "import { z } from 'zod';\n\nimport { PostPurchaseSettings } from './postPurchaseSettings';\n\nexport const PostPurchaseWidgetLinkedFlow = z.object({\n id: z.number(),\n name: z.string(),\n});\n\nexport type PostPurchaseWidgetLinkedFlow = z.infer<typeof PostPurchaseWidgetLinkedFlow>;\n\nexport const PostPurchaseWidget = z.object({\n classification: z.literal('post_purchase_offer_page').default('post_purchase_offer_page'),\n createdAtTime: z.iso.datetime({ offset: true }).optional(),\n customEndpointName: z.string().nullish(),\n id: z.number().default(0),\n lastViewed: z.iso.datetime({ offset: true }).nullish(),\n linkedCustomEndpointId: z.number().nullish(),\n linkedFlows: z.array(PostPurchaseWidgetLinkedFlow).optional(),\n name: z.string().default(''),\n owner: z.number().nullish(),\n settings: PostPurchaseSettings,\n});\n\nexport type PostPurchaseWidget = z.infer<typeof PostPurchaseWidget>;\n", "import { z } from 'zod';\n\nimport { strictNumber } from './common';\nimport { BlockType } from './constants';\nimport { PostPurchaseBlock } from './postPurchaseBlocks';\n\nexport const PostPurchaseSettings = z.object({\n advance: z\n .object({ removePartialOrder: z.boolean().default(true) })\n .optional()\n .default(() => ({ removePartialOrder: true })),\n blocks: z\n .union([z.array(PostPurchaseBlock), z.unknown().transform(() => [])])\n .default(() => [\n PostPurchaseBlock.parse({ settings: {}, styles: {}, type: BlockType.timer }),\n PostPurchaseBlock.parse({ settings: {}, styles: {}, type: BlockType.callout_banner }),\n PostPurchaseBlock.parse({ type: BlockType.product_information }),\n ]),\n columnLayout: z.boolean().optional(),\n discount: z.object({\n amount: strictNumber.default(30),\n shouldShowSavingText: z.boolean().optional().default(true),\n type: z.enum(['none', 'fixed_amount', 'percentage']).default('none'),\n }),\n discountedFrom: z.enum(['price', 'compare_at_price']).optional().default('price'),\n endpoint: z.string().optional(),\n integrations: z.object({\n judgeme: z.boolean().default(false),\n junip: z.boolean().optional().default(false),\n klaviyo: z.boolean().default(false),\n loox: z.boolean().default(false),\n okendo: z.boolean().default(false),\n opinew: z.boolean().optional().default(false),\n reviewsio: z.boolean().optional().default(false),\n stamped: z.boolean().default(false),\n yotpo: z.boolean().default(false),\n }),\n key: z.string().optional(),\n language: z.object({\n description: z.union([z.string(), z.unknown().transform(() => '')]).default(''),\n descriptionEnabled: z.boolean().optional().default(false),\n descriptionRte: z\n .object({\n content: z.array(z.unknown()),\n type: z.string(),\n })\n .optional(),\n descriptionSpacing: z.enum(['none', 'xtight', 'tight', 'default', 'loose', 'xloose']).optional(),\n displayCtaPrice: z.boolean().default(true),\n global: z\n .object({\n declineAll: z.string().optional().default('Decline All'),\n declineThisOffer: z.string().default('Decline this offer'),\n free: z.string().optional().default('Free'),\n notAvailable: z.string().optional().default('Not available'),\n payNow: z.string().default('Pay Now'),\n payNowUpgradeToSubscription: z.string().optional().default('Upgrade to Subscription'),\n quantity: z.string().default('Quantity'),\n /** This isn't configurable in the admin-nextjs editor */\n recurringShipping: z.string().optional().default('Recurring shipping'),\n recurringSubtotal: z.string().default('Recurring subtotal'),\n reviewsPlural: z.string().optional().default('Reviews'),\n reviewsSingular: z.string().optional().default('Review'),\n save: z\n .union([z.string(), z.unknown().transform(() => 'Save')])\n .optional()\n .default('Save'),\n shipping: z.string().default('Shipping'),\n subscriptionOption: z.string().optional().default('Subscribe and Save'),\n subtotal: z.string().default('Subtotal'),\n taxes: z.string().default('Taxes'),\n total: z.string().default('Total'),\n })\n .optional()\n .default(() => ({\n declineAll: 'Decline All',\n declineThisOffer: 'Decline this offer',\n free: 'Free',\n notAvailable: 'Not available',\n payNow: 'Pay Now',\n payNowUpgradeToSubscription: 'Upgrade to Subscription',\n quantity: 'Quantity',\n /** This isn't configurable in the admin-nextjs editor */\n recurringShipping: 'Recurring shipping',\n recurringSubtotal: 'Recurring subtotal',\n reviewsPlural: 'Reviews',\n reviewsSingular: 'Review',\n save: 'Save',\n shipping: 'Shipping',\n subscriptionOption: 'Subscribe and Save',\n subtotal: 'Subtotal',\n taxes: 'Taxes',\n total: 'Total',\n })),\n globalTranslation: z.string().optional().default('english'),\n }),\n metafields: z.boolean().default(false),\n /** This isn't configurable in the admin-nextjs editor */\n offer: z.object({\n count: z.number().default(1),\n }),\n offersLayout: z\n .object({\n itemsPerPage: z.number().optional(),\n type: z.enum(['list', 'grid', 'carousel']).default('list'),\n })\n .optional()\n .default({\n type: 'list',\n }),\n /** This isn't configurable in the admin-nextjs editor */\n previewMode: z.boolean().default(false),\n productLimit: z.number().optional().default(1),\n productOptions: z.object({\n /** This isn't configurable in the admin-nextjs editor */\n hideOutOfStockVariants: z.boolean().optional().default(false),\n matchVariant: z.boolean().optional().default(true),\n showDeclineAll: z.enum(['above', 'below', 'both', 'none']).optional(),\n showShipping: z.boolean().optional().default(true),\n showSubtotal: z.boolean().optional().default(true),\n showTaxes: z.boolean().optional().default(true),\n showTotal: z.boolean().optional().default(true),\n showVariantSelectors: z.boolean().optional().default(true),\n variantSelectorDisplayMode: z.enum(['separate', 'single']).optional().default('separate'),\n }),\n productType: z\n .union([z.enum(['one-time', 'subscription', 'both']), z.literal('').transform(() => 'one-time')])\n .default('one-time'),\n productTypeSelector: z.enum(['dropdown', 'radio']).optional().default('radio'),\n quantityInputs: z.object({\n defaultQuantity: z.union([z.number(), z.null().transform(() => 1)]).default(1),\n enabled: z.boolean().default(true),\n maxValue: z.union([z.number(), z.null().transform(() => 15)]).default(15),\n minValue: z.union([z.number().min(0), z.unknown().transform(() => 0)]).default(1),\n }),\n shipping: z.object({\n amount: strictNumber.default(10),\n /** This isn't configurable in the admin-nextjs editor */\n enabled: z.boolean().default(true),\n title: z.string().optional().default('Shipping Fees'),\n type: z.enum(['free', 'fixed_amount']).default('free'),\n }),\n styles: z\n .object({\n starColor: z.string().optional().default('#fadb14'),\n starSize: z\n .union([z.enum(['small', 'medium', 'large']), z.unknown().transform(() => 'large')])\n .optional()\n .default('large'),\n starStrokeColor: z.string().optional().default('#fadb14'),\n strokeWidth: z.string().optional().default('1'),\n })\n .optional(),\n subImages: z.number().nullish().default(8),\n subscription: z\n .object({\n discount: z.object({\n amount: strictNumber.default(30),\n shouldShowSavingText: z.boolean().optional().default(true),\n type: z.enum(['none', 'fixed_amount', 'percentage']).default('none'),\n }),\n shipping: z.object({\n amount: strictNumber.default(1),\n /** This isn't configurable in the admin-nextjs editor */\n enabled: z.boolean().default(true),\n /** This isn't configurable in the admin-nextjs editor */\n recurringAmount: strictNumber.default(2),\n shippingTitle: z.string().default('Shipping Fees'),\n type: z.enum(['free', 'fixed_amount']).default('free'),\n }),\n })\n .optional()\n .default({\n discount: {\n amount: 30,\n shouldShowSavingText: true,\n type: 'none',\n },\n shipping: {\n amount: 1,\n /** This isn't configurable in the admin-nextjs editor */\n enabled: true,\n /** This isn't configurable in the admin-nextjs editor */\n recurringAmount: 2,\n shippingTitle: 'Shipping Fees',\n type: 'free',\n },\n }),\n subscriptionIsDefault: z.boolean().optional(),\n /** This isn't configurable in the admin-nextjs editor */\n template: z.string().optional().default(''),\n type: z.literal('shopify_post_purchase_extension').default('shopify_post_purchase_extension'),\n upgradeToSubscription: z\n .object({\n acceptButtonText: z.string().optional().default('Upgrade'),\n allow: z.boolean().optional().default(false),\n emailRefundNotice: z.boolean().optional().default(false),\n errorBannerText: z.string().optional().default('This subscription cannot be added - limit one per order'),\n })\n .optional()\n .default(() => ({\n acceptButtonText: 'Upgrade',\n allow: false,\n emailRefundNotice: false,\n errorBannerText: 'This subscription cannot be added - limit one per order',\n })),\n});\n\nexport type PostPurchaseSettings = z.infer<typeof PostPurchaseSettings>;\n", "const HTML_COMMENT_RE = /<!--[\\s\\S]*?-->/g;\nconst STRIPPED_ELEMENT_RE = /<(script|style|iframe|object|embed|noscript|template)\\b[^>]*>[\\s\\S]*?(?:<\\/\\1\\s*>|$)/gi;\nconst HTML_TAG_RE = /<\\/?[a-zA-Z][^>]*>/g;\n\nexport const stripContentBlockHtml = (text: string): string =>\n text.replace(HTML_COMMENT_RE, '').replace(STRIPPED_ELEMENT_RE, '').replace(HTML_TAG_RE, '');\n", "import { TiptapParagraph, type TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\n\ntype ConvertTextToTiptapArgs = {\n color: string;\n fontSize: string;\n marks?: NonNullable<TiptapText['marks']>;\n text: string;\n textAlign: 'start' | 'center' | 'end';\n};\n\nexport const convertTextToTiptapParagraph = ({\n color,\n fontSize,\n marks = [],\n text,\n textAlign,\n}: ConvertTextToTiptapArgs): TiptapParagraph => {\n const sanitizedText = stripContentBlockHtml(text);\n\n return TiptapParagraph.parse({\n attrs: { textAlign },\n content: sanitizedText\n ? [\n {\n marks: [{ attrs: { color, fontSize }, type: 'textStyle' }, ...marks],\n text: sanitizedText,\n type: 'text',\n },\n ]\n : [],\n type: 'paragraph',\n });\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\n\nexport const convertContentBlockTextToV2 = (language: V1Language | undefined): TiptapDocument => {\n const description = language?.description;\n const superTitle = language?.superTitle;\n const title = language?.title;\n\n return TiptapDocument.parse({\n attrs: { blockSpacing: 'tight' },\n content: [\n superTitle\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'extraLarge',\n marks: [{ type: 'bold' }],\n text: superTitle,\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: title,\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: description,\n textAlign: 'center',\n })\n : null,\n ].filter((p): p is NonNullable<typeof p> => p !== null),\n type: 'doc',\n });\n};\n", "import { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\n\n/**\n * The v1 label-override policy shared by the offer-card and line-item-editor converters: a defined v1\n * label ALWAYS passes through verbatim as the `en` entry over the localized defaults \u2014 existing widget\n * language is never rewritten (product owner, 2026-07-02); blank/whitespace falls back to the full\n * default locale set (legacy `getLabelWithFallback` parity). HTML the merchant typed into a label is\n * stripped first \u2014 `CABTextSection.content` rejects tag-shaped strings at parse, so a raw `<b>`-style\n * label would otherwise 500 the whole widget.\n */\nexport const localizedContent = (defaults: Record<string, string>, override: string | undefined) => {\n const trimmed = stripContentBlockHtml(override ?? '').trim();\n\n return trimmed ? { ...defaults, en: trimmed } : defaults;\n};\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\n\n/**\n * The canonical base \"Checkout Offers\" CAB layout \u2014 designed in the editor by Jeff (REB-23182) and\n * exported. It was authored inside the content-block editor (the only surface that can lay out an\n * offers section), so the export originally carried that widget type + the test store's data source;\n * those have been cleaned here to read as a real offer template. `buildOfferTemplate` still strips any\n * residual section ids (so each created widget gets fresh ones) and injects the per-widget name +\n * editor mode at runtime. Regenerate by re-exporting + the generator script, not by hand \u2014 with ONE\n * hand-completed exception a re-export must preserve: the add button's `addedToCart`/`soldOut`/\n * `redirectToCheckout` slots (`OFFER_LABELS` defaults). The editor export carried only\n * `addingToCart`/`addToCart`, which left the sold-out/added/Buy-Now states falling back to the add\n * label at runtime (guarded by a `buildOfferTemplate` test).\n */\nexport const OFFER_TEMPLATE_SEED = {\n alignment: {\n horizontal: 'center',\n vertical: 'top',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'thick',\n },\n direction: 'rows',\n editorMode: 'checkoutExtension',\n grid: {\n columns: ['auto'],\n rows: ['auto'],\n },\n padding: 'tight',\n previewMode: false,\n sections: [\n {\n alignment: {\n horizontal: 'end',\n vertical: 'top',\n },\n autoAdvanceInterval: 0,\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['auto'],\n rows: ['auto', 'auto'],\n },\n itemsAtOnce: 2,\n padding: 'none',\n sections: [\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'columns',\n grid: {\n columns: ['auto', 'auto'],\n rows: ['auto'],\n },\n name: 'pagination',\n padding: 'none',\n sections: [\n {\n action: 'goToPrevPage',\n buttonStyle: 'plain',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'buttonLabel',\n content: {\n ar: '\u2039',\n cs: '\u2039',\n da: '\u2039',\n de: '\u2039',\n en: '\u2039',\n es: '\u2039',\n fi: '\u2039',\n fr: '\u2039',\n ga: '\u2039',\n he: '\u2039',\n hi: '\u2039',\n id: '\u2039',\n it: '\u2039',\n ja: '\u2039',\n ko: '\u2039',\n nl: '\u2039',\n no: '\u2039',\n pl: '\u2039',\n pt: '\u2039',\n ru: '\u2039',\n sv: '\u2039',\n th: '\u2039',\n tr: '\u2039',\n uk: '\u2039',\n vi: '\u2039',\n zh: '\u2039',\n },\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n {\n action: 'goToNextPage',\n buttonStyle: 'plain',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'buttonLabel',\n content: {\n ar: '\u203A',\n cs: '\u203A',\n da: '\u203A',\n de: '\u203A',\n en: '\u203A',\n es: '\u203A',\n fi: '\u203A',\n fr: '\u203A',\n ga: '\u203A',\n he: '\u203A',\n hi: '\u203A',\n id: '\u203A',\n it: '\u203A',\n ja: '\u203A',\n ko: '\u203A',\n nl: '\u203A',\n no: '\u203A',\n pl: '\u203A',\n pt: '\u203A',\n ru: '\u203A',\n sv: '\u203A',\n th: '\u203A',\n tr: '\u203A',\n uk: '\u203A',\n vi: '\u203A',\n zh: '\u203A',\n },\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'base',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['15%'],\n rows: ['auto', 'auto'],\n },\n padding: 'base',\n sections: [\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'grid',\n grid: {\n columns: ['15%', 'fill', 'auto'],\n rows: ['auto'],\n },\n padding: 'none',\n sections: [\n {\n altText: '',\n aspectRatio: null,\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n category: null,\n name: 'Product Image',\n naturalHeight: 0,\n naturalWidth: 0,\n objectFit: 'cover',\n sectionType: 'image',\n source: '{{productImage}}',\n width: 100,\n },\n {\n content: {\n en: {\n attrs: {\n blockSpacing: 'none',\n },\n content: [\n {\n attrs: {\n textAlign: 'start',\n },\n content: [\n {\n marks: [\n {\n attrs: {\n color: 'base',\n fontSize: 'medium',\n },\n type: 'textStyle',\n },\n {\n type: 'bold',\n },\n ],\n text: '{{productAndVariantTitle}}',\n type: 'text',\n },\n ],\n type: 'paragraph',\n },\n {\n attrs: {\n textAlign: 'start',\n },\n content: [\n {\n marks: [\n {\n attrs: {\n color: 'accent',\n fontSize: 'medium',\n },\n type: 'textStyle',\n },\n ],\n text: '{{variantPrice}}',\n type: 'text',\n },\n ],\n type: 'paragraph',\n },\n ],\n type: 'doc',\n },\n },\n name: 'Product Info',\n sectionType: 'text',\n },\n {\n action: 'addToOrder',\n buttonStyle: 'primary',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'addingToCart',\n content: {\n ar: '\u064A\u062A\u0645 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159id\u00E1v\u00E1m do ko\u0161\u00EDku',\n da: 'Tilf\u00F8jer til kurv',\n de: 'Wird zum Warenkorb hinzugef\u00FCgt',\n en: 'Adding...',\n es: 'Agregando al carrito',\n fi: 'Lis\u00E4t\u00E4\u00E4n ostoskoriin',\n fr: 'Ajout au panier',\n ga: '\u00C1 Chur le Cairt',\n he: '\u05DE\u05D5\u05E1\u05D9\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902',\n id: 'Menambahkan ke Keranjang',\n it: 'Aggiungendo al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0\u4E2D',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00 \uC911',\n nl: 'Toevoegen aan winkelwagen',\n no: 'Legger i handlekurv',\n pl: 'Dodaj\u0119 do koszyka',\n pt: 'Adicionando ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gger till i varukorg',\n th: '\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E43\u0E19\u0E23\u0E16\u0E40\u0E02\u0E47\u0E19',\n tr: 'Sepete Ekleniyor',\n uk: '\u0414\u043E\u0434\u0430\u0454\u043C\u043E \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430',\n vi: '\u0110ang th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u6B63\u5728\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n sectionType: 'text',\n },\n {\n buttonField: 'addToCart',\n content: {\n ar: '\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159idat do ko\u0161\u00EDku',\n da: 'F\u00F8j til kurv',\n de: 'In den Warenkorb',\n en: 'Add',\n es: 'Agregar al carrito',\n fi: 'Lis\u00E4\u00E4 ostoskoriin',\n fr: 'Ajouter au panier',\n ga: 'Cuir le Cairt',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambah ke Keranjang',\n it: 'Aggiungi al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00',\n nl: 'Toevoegen aan winkelwagen',\n no: 'Legg i handlekurv',\n pl: 'Dodaj do koszyka',\n pt: 'Adicionar ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gg i varukorg',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E43\u0E19\u0E23\u0E16\u0E40\u0E02\u0E47\u0E19',\n tr: 'Sepete Ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430',\n vi: 'Th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n sectionType: 'text',\n },\n {\n buttonField: 'addedToCart',\n content: OFFER_LABELS.addedToCart,\n sectionType: 'text',\n },\n {\n buttonField: 'soldOut',\n content: OFFER_LABELS.soldOut,\n sectionType: 'text',\n },\n {\n buttonField: 'redirectToCheckout',\n content: OFFER_LABELS.redirectToCheckout,\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n alignment: {\n horizontal: 'start',\n vertical: 'top',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['auto'],\n rows: ['auto'],\n },\n padding: 'none',\n sections: [\n {\n errorMessages: {\n en: {\n max: 'Maximum quantity allowed is {{max}}',\n min: 'Minimum quantity required is {{min}}',\n neg: 'Quantity cannot be negative',\n },\n },\n inputType: 'select',\n max: 10,\n min: 1,\n sectionType: 'quantity',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n limit: 3,\n sectionType: 'dataSource',\n },\n {\n sectionType: 'products',\n },\n ],\n sectionType: 'offers',\n spacing: 'base',\n width: 100,\n },\n ],\n sectionType: 'carousel',\n spacing: 'base',\n width: 100,\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n targetArea: {\n icon: 'splitscreen_left',\n label: 'Main Column',\n width: '503px',\n },\n type: 'shopify_checkout_extension',\n version: 2,\n width: 100,\n};\n", "/**\n * Minimal v1 Offer (Checkout Offers / product recommendations) input types.\n * The legacy widget's settings `type` is the generic `shopify_checkout_extension`\n * (the offer is the \"base\" checkout-extension type; other widgets carry\n * `ui_extension_*`), which uniquely identifies it at the settings level.\n */\nimport { type TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const SHOPIFY_CHECKOUT_EXTENSION = 'shopify_checkout_extension' as const;\n\nexport type V1OfferLanguage = {\n addedToCart?: string;\n addingToCart?: string;\n addToCart?: string;\n /** Subscribe \u2192 one-time label for the offers `switchToSubscription` button. */\n cartSwitchToOnetime?: string;\n /** One-time \u2192 subscribe label (carries `{{subscription_discount}}`) for the `switchToSubscription` button. */\n cartSwitchToSubscription?: string;\n description?: string;\n /** Buy Now link label on off-checkout surfaces (thank-you / order-status), real key `redirect_to_checkout`. */\n redirectToCheckout?: string;\n /** Real payload key is `sold_out_label` \u2192 `soldOutLabel` (NOT `soldOut`). */\n soldOutLabel?: string;\n /** Opt-in undo banner shown after a buyer adds a recommended product. */\n successBannerEnabled?: boolean;\n successBannerMessageRte?: TiptapDocument | string;\n superTitle?: string;\n title?: string;\n /** Legacy \"Upgrade to Subscription and Save {{subscription_discount}}%\" upsell label. */\n upgradeToSubscription?: string;\n};\n\n/** v1 per-product text styling; `textSize` is the CAB `textSizeNames` enum verbatim. */\nexport type V1TextStyle = {\n textEmphasis?: 'base' | 'bold' | 'italic';\n textSize?: 'extraSmall' | 'small' | 'base' | 'medium' | 'large' | 'extraLarge';\n};\n\n/** v1 `displaySettings` \u2014 the controls behind product/variant/image/review presentation. */\nexport type V1OfferDisplaySettings = {\n image?: { imageFit?: 'contain' | 'cover' };\n product?: V1TextStyle;\n reviews?: { color?: string; size?: 'small' | 'default' | 'large' };\n variant?: V1TextStyle;\n};\n\n/**\n * v1 layout is per-breakpoint; CAB has no breakpoints, so the converter collapses them.\n * `style` drives orientation: list \u2192 rows, line \u2192 columns, grid \u2192 grid (none \u2192 rows).\n */\nexport type V1OfferBreakpointLayout = {\n carousel?: boolean;\n columns?: number;\n showPaginations?: boolean;\n style?: 'grid' | 'line' | 'list' | 'none';\n};\n\nexport type V1OfferSettings = {\n /** Free-form in real payloads; the converter safelists to the CAB enum (junk \u2192 'primary'). */\n button?: { kind?: string };\n /** `showSavingAmount` false hides the compare-at (sale) price; `amount`/`type`/`discountedFrom`/`discountedBy` drive the discount-setting price computation (emitted onto the offers section for the client's pricing pass). */\n discount?: {\n amount?: number | string;\n discountedBy?: string;\n discountedFrom?: string;\n /** Merchant-facing promo label (e.g. \"Enjoy 10% off!\") \u2192 carried onto the data-source discount. */\n message?: string;\n /** How many items the discount applies to (defaults to 1) \u2192 carried onto the discount section. */\n quantity?: number;\n showSavingAmount?: boolean;\n type?: string;\n };\n /** Per-product/variant/image/review presentation controls. */\n displaySettings?: V1OfferDisplaySettings;\n /** Engine path appended to `/api/v1` (e.g. '/products/recommended'). */\n endpoint?: string | null;\n images?: { source?: 'product' | 'variant' };\n /**\n * Nominally boolean, but legacy data carries \"yes\"/\"no\" strings (reviewsio, in prod) and numeric\n * 1/0 (PHP serialization) \u2014 the converter coerces both so neither throws at the schema boolean.\n */\n integrations?: Record<string, boolean | number | string>;\n language?: V1OfferLanguage;\n layout?: { large?: V1OfferBreakpointLayout; medium?: V1OfferBreakpointLayout; small?: V1OfferBreakpointLayout };\n limit?: number;\n location?: 'checkout' | 'order-status' | 'thank-you';\n /** The legacy widget's name, present in the settings payload; carried to the converted root. */\n name?: string;\n previewMode?: boolean;\n productOptions?: {\n hideOutOfStockVariants?: boolean;\n matchVariant?: boolean;\n matchVariantOutOfStock?: boolean;\n /** 'hide' (or absent) hides the per-card product description; any other value shows it. */\n showProductDescription?: string;\n showVariantOptions?: 'always' | 'default' | 'never';\n showVariantsAsProducts?: boolean;\n /** 'hide' (or absent) hides the selected-variant title line; any other value shows it. */\n showVariantTitle?: string;\n };\n productType?: 'both' | 'one-time' | 'subscription';\n quantityInputs?: {\n enabled?: boolean;\n /** Custom over-max error copy \u2192 CAB `errorMessages.en.max`. */\n maxError?: string;\n maxValue?: number;\n /** Custom under-min error copy \u2192 CAB `errorMessages.en.min`. */\n minError?: string;\n minValue?: number;\n /** Custom negative-value error copy \u2192 CAB `errorMessages.en.neg`. */\n negativeError?: string;\n /** Stepper kind ('dropdown-select' | 'buttons-manual-input') \u2192 CAB `inputType` (select | number). */\n type?: string;\n };\n /** Default subscribe-vs-one-time when `productType` is `both`. */\n subscriptionIsDefault?: boolean;\n tracking?: { enableAttribution?: boolean; enableSource?: boolean; enableWidget?: boolean };\n treatAsGwp?: boolean;\n type: typeof SHOPIFY_CHECKOUT_EXTENSION;\n /** Absent on real checkout-offers payloads; only `type` is the reliable discriminator. */\n version?: 1;\n /** v1 `viewOptions`: `displayActions === false` hides the variant selector (legacy `getVariantSelect`). */\n viewOptions?: { displayActions?: boolean; variantSelector?: 'select' | 'radio' | 'button' };\n};\n\nexport type V1OfferConvertInput = {\n id: number;\n /** The legacy widget's name; set on the converted root (the admin save schema requires it). */\n name?: string;\n settings: V1OfferSettings;\n};\n\n/**\n * The offer's settings `type` uniquely identifies it. Unlike the `ui_extension_*` widgets, the legacy\n * checkout-offers payload carries NO top-level `version` \u2014 so we must NOT gate on it (doing so silently\n * dropped real offers to the passthrough branch). `version: 2` payloads are already claimed upstream by\n * `isCABRootSection`, so they never reach here.\n */\nexport const isOfferV1 = (data: unknown): data is V1OfferSettings => {\n if (!data || typeof data !== 'object') return false;\n\n return (data as Record<string, unknown>).type === SHOPIFY_CHECKOUT_EXTENSION;\n};\n", "import { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { OFFER_TEMPLATE_SEED } from '~/transforms/offerV1/offerTemplateSeed';\nimport { SHOPIFY_CHECKOUT_EXTENSION } from '~/transforms/offerV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\nexport type BuildOfferTemplateInput = {\n location?: 'checkout' | 'order-status' | 'thank-you';\n name?: string;\n};\n\n/**\n * Build a brand-new \"Checkout Offers\" widget as a `CABRootSection` from the designed base layout.\n * Pure and synchronous (admin-side, network-free): overlays the per-widget `name` + editor mode and\n * the offer widget type, then parses. The seed carries NO section ids (enforced by a test), so `parse`\n * mints fresh `uuidv7`s on every call \u2014 two created widgets never share section ids.\n */\nexport const buildOfferTemplate = ({ location, name }: BuildOfferTemplateInput = {}): CABRootSection =>\n CABRootSection.parse({\n ...OFFER_TEMPLATE_SEED,\n editorMode: LOCATION_TO_EDITOR_MODE[location ?? 'checkout'],\n ...(name && { name }),\n previewMode: false,\n type: SHOPIFY_CHECKOUT_EXTENSION,\n });\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\nimport { SWITCH_LABELS } from '~/schema/widgets/checkout-and-beyond/switchLabels';\nimport { localizedContent } from '~/transforms/localizedContent';\nimport { type V1OfferSettings, type V1TextStyle } from '~/transforms/offerV1/types';\n\n/** v1 `viewOptions.variantSelector` \u2192 CAB `variants.selector` ('select' is the v1 name for a dropdown menu). */\nconst VARIANT_SELECTOR = { button: 'button', radio: 'radio', select: 'menu' } as const;\n\n/**\n * A single-token Tiptap doc carrying a v1 text style: `textSize` is the CAB `fontSize`\n * verbatim (identical enums); `textEmphasis` adds a bold/italic mark ('base' adds none).\n */\nconst buildStyledText = (token: string, style: V1TextStyle | undefined, color = 'base') => {\n const marks: Record<string, unknown>[] = [\n { attrs: { color, fontSize: style?.textSize ?? 'base' }, type: 'textStyle' },\n ];\n\n if (style?.textEmphasis === 'bold') marks.push({ type: 'bold' });\n\n if (style?.textEmphasis === 'italic') marks.push({ type: 'italic' });\n\n return { content: [{ content: [{ marks, text: token, type: 'text' }], type: 'paragraph' }], type: 'doc' };\n};\n\n/**\n * The price line: the variant price, optionally followed by a strikethrough,\n * subdued compare-at price. The extension resolves `{{variantCompareAtPrice}}`\n * to '' off-sale, so the strikethrough disappears unless the variant is genuinely\n * discounted. `discount.showSavingAmount` false drops the compare-at node entirely.\n */\nconst buildPriceContent = (settings: V1OfferSettings) => {\n const content: Record<string, unknown>[] = [{ text: '{{variantPrice}}', type: 'text' }];\n\n if (settings.discount?.showSavingAmount !== false) {\n content.push(\n { text: ' ', type: 'text' },\n {\n marks: [{ type: 'strike' }, { attrs: { color: 'subdued' }, type: 'textStyle' }],\n text: '{{variantCompareAtPrice}}',\n type: 'text',\n }\n );\n }\n\n return { content: [{ content, type: 'paragraph' }], type: 'doc' };\n};\n\n/** A `reviews` star section, emitted only when the merchant has a review integration enabled. */\nconst buildReviews = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (!settings.integrations || !Object.values(settings.integrations).some(Boolean)) return [];\n\n const reviews = settings.displaySettings?.reviews;\n\n return [\n {\n ...(reviews?.color && { color: reviews.color }),\n sectionType: 'reviews',\n ...(reviews?.size && { size: reviews.size }),\n },\n ];\n};\n\n/** The recommended product's image; objectFit comes from v1 `displaySettings.image.imageFit`. */\nconst buildImage = (settings: V1OfferSettings): Record<string, unknown> => ({\n ...(settings.displaySettings?.image?.imageFit && {\n objectFit: settings.displaySettings.image.imageFit,\n }),\n sectionType: 'image',\n source: settings.images?.source === 'product' ? '{{productImage}}' : '{{variantImage}}',\n width: 100,\n});\n\n/** The product title text, styled from v1 `displaySettings.product`. */\nconst buildTitle = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildStyledText('{{productTitle}}', settings.displaySettings?.product) },\n sectionType: 'text',\n});\n\n/** The price line (variant price + on-sale compare-at strikethrough). */\nconst buildPrice = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildPriceContent(settings) },\n sectionType: 'text',\n});\n\n/** The selected-variant title line, gated by `productOptions.showVariantTitle` ('hide'/absent = off). */\nconst buildVariantTitle = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showVariantTitle;\n\n if (!show || show === 'hide') return [];\n\n return [\n {\n content: { en: buildStyledText('{{variantTitle}}', settings.displaySettings?.variant) },\n sectionType: 'text',\n },\n ];\n};\n\n/** The per-card product description, gated by `productOptions.showProductDescription` ('hide'/absent = off). */\nconst buildDescription = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showProductDescription;\n\n if (!show || show === 'hide') return [];\n\n return [{ content: { en: buildStyledText('{{productDescription}}', undefined) }, sectionType: 'text' }];\n};\n\n/** The variant selector, unless the merchant hid variant options or turned actions off entirely. */\nconst buildVariants = (settings: V1OfferSettings): Record<string, unknown>[] => {\n /** Legacy `getVariantSelect`: `view_options.display_actions === false` suppresses the selector. */\n if (settings.viewOptions?.displayActions === false) return [];\n\n if (settings.productOptions?.showVariantOptions === 'never') return [];\n\n const selector = settings.viewOptions?.variantSelector;\n\n return [\n {\n hideOutOfStockVariants: !!settings.productOptions?.hideOutOfStockVariants,\n ...(selector && { selector: VARIANT_SELECTOR[selector] }),\n sectionType: 'variants',\n },\n ];\n};\n\n/** v1 stepper kind \u2192 CAB `inputType`. Unknown/absent \u2192 omitted so the schema default ('select') applies. */\nconst QUANTITY_INPUT_TYPE: Record<string, 'number' | 'select'> = {\n 'buttons-manual-input': 'number',\n 'dropdown-select': 'select',\n};\n\n/** Custom quantity error copy \u2192 CAB `errorMessages.en.{min,max,neg}`; omitted entirely when none is set. */\nconst buildQuantityErrors = (quantity: NonNullable<V1OfferSettings['quantityInputs']>) => {\n const en = {\n ...(quantity.maxError && { max: quantity.maxError }),\n ...(quantity.minError && { min: quantity.minError }),\n ...(quantity.negativeError && { neg: quantity.negativeError }),\n };\n\n return Object.keys(en).length ? { errorMessages: { en } } : {};\n};\n\n/** The quantity stepper, when the merchant enabled quantity input. */\nconst buildQuantity = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const quantity = settings.quantityInputs;\n\n if (!quantity?.enabled) return [];\n\n const inputType = quantity.type ? QUANTITY_INPUT_TYPE[quantity.type] : undefined;\n\n // Legacy quantity had no upper bound (DefaultQuantityRule.MAX = null) and allowed 0; the CAB\n // schema pins `max` to [1, 100] and `min` to >= 1. Clamp instead of passing through so a legacy\n // `maxValue: 250` (or a 0) degrades to a valid widget rather than throwing at parse.\n const max = Math.min(Math.max(quantity.maxValue ?? 10, 1), 100);\n // Also cap `min` at `max` \u2014 the schema has no cross-field refine, so a legacy `min > max` (e.g.\n // {maxValue: 5, minValue: 8}) would parse but render a degenerate stepper (REB #766).\n const min = Math.min(Math.max(quantity.minValue ?? 1, 1), max);\n\n return [\n {\n ...buildQuantityErrors(quantity),\n ...(inputType && { inputType }),\n max,\n min,\n sectionType: 'quantity',\n },\n ];\n};\n\n/**\n * The in-card subscribe / one-time toggle: a `switchToSubscription` button with its four label slots\n * (the same `SWITCH_LABELS` slot set as the line-item editor, including the `subscriptionOption`\n * frequency template, so the frequency select localizes). Emitted when the merchant offers\n * subscriptions (`productType` both/subscription); the extension shows it per-product by selling-plan\n * availability. v1 carries the with-discount upsell (`upgradeToSubscription`) plus the cart switch\n * labels; anything blank/absent falls back to the shared localized defaults.\n */\nconst buildSubscriptionButton = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (settings.productType !== 'both' && settings.productType !== 'subscription') return [];\n\n const language = settings.language;\n\n const slot = (buttonField: keyof typeof SWITCH_LABELS, override: string | undefined) => ({\n buttonField,\n content: localizedContent(SWITCH_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return [\n {\n action: 'switchToSubscription',\n buttonStyle: 'plain',\n sections: [\n slot('subscriptionOption', undefined),\n slot('switchToOneTimePurchase', language?.cartSwitchToOnetime),\n slot('switchToSubscriptionNoDiscount', language?.cartSwitchToSubscription),\n slot('switchToSubscriptionWithDiscount', language?.upgradeToSubscription),\n ],\n sectionType: 'button',\n },\n ];\n};\n\n/** v1 stores free-form `button.kind`; anything outside the CAB enum falls back to the legacy 'primary'. */\nconst BUTTON_KINDS = ['plain', 'primary', 'secondary'] as const;\n\n/** The add-to-order button with its four label slots (add / adding / added / sold-out). */\nconst buildAddButton = (settings: V1OfferSettings): Record<string, unknown> => {\n const kind = settings.button?.kind;\n\n const slot = (\n buttonField: 'addedToCart' | 'addingToCart' | 'addToCart' | 'redirectToCheckout' | 'soldOut',\n override?: string\n ) => ({\n buttonField,\n content: localizedContent(OFFER_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return {\n action: 'addToOrder',\n buttonStyle: BUTTON_KINDS.includes(kind as (typeof BUTTON_KINDS)[number]) ? kind : 'primary',\n sections: [\n slot('addToCart', settings.language?.addToCart),\n slot('addingToCart', settings.language?.addingToCart),\n slot('addedToCart', settings.language?.addedToCart),\n slot('soldOut', settings.language?.soldOutLabel),\n // Off-checkout Buy Now: the label the button shows once it links to the created checkout.\n slot('redirectToCheckout', settings.language?.redirectToCheckout),\n ],\n sectionType: 'button',\n };\n};\n\n/** A `rows` layout wrapping sections into one grid cell (so they stack within a column of the card). */\nconst rowsLayout = (sections: Record<string, unknown>[]): Record<string, unknown> => ({\n direction: 'rows',\n sections,\n sectionType: 'layout',\n});\n\n/**\n * The per-offer product card: the sections rendered once per recommended product (the\n * offers renderer mounts a product context, so the `{{...}}` tokens resolve per product).\n *\n * `horizontal` mirrors the v1 layout orientation (see `convertOfferToV2`):\n * - horizontal (v1 `list`/default, vertical-stacked products): a 3-column grid card \u2014\n * image | title/price/reviews/variants | actions \u2014 matching the compact V1 row.\n * - vertical (v1 `grid`/`line`, side-by-side products): a flat top-to-bottom stack\n * (image \u2192 title \u2192 price \u2192 \u2026 \u2192 button), the narrow column card.\n *\n * Quantity is a full-width row beneath the card in the horizontal layout; in the vertical\n * layout it sits inline in the stack. NOT carried: the savings-amount badge (no live v1\n * control) and variant text styling (no CAB field).\n */\nexport const buildOfferCard = (settings: V1OfferSettings, horizontal: boolean): Record<string, unknown>[] => {\n const image = buildImage(settings);\n const title = buildTitle(settings);\n const variantTitle = buildVariantTitle(settings);\n const price = buildPrice(settings);\n const description = buildDescription(settings);\n const reviews = buildReviews(settings);\n const variants = buildVariants(settings);\n const quantity = buildQuantity(settings);\n const subscription = buildSubscriptionButton(settings);\n const addButton = buildAddButton(settings);\n\n if (!horizontal) {\n return [\n image,\n title,\n ...variantTitle,\n price,\n ...description,\n ...reviews,\n ...variants,\n ...quantity,\n ...subscription,\n addButton,\n ];\n }\n\n const info = rowsLayout([title, ...variantTitle, price, ...description, ...reviews, ...variants]);\n const actions = [...subscription, addButton];\n const actionsCell = actions.length === 1 ? actions[0] : rowsLayout(actions);\n\n const card = {\n direction: 'grid',\n grid: { columns: ['15%', 'fill', 'auto'], rows: ['auto'] },\n sections: [image, info, actionsCell],\n sectionType: 'layout',\n };\n\n return [card, ...quantity];\n};\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\nimport { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\nimport { buildOfferCard } from '~/transforms/offerV1/offerCard';\nimport {\n SHOPIFY_CHECKOUT_EXTENSION,\n type V1OfferBreakpointLayout,\n type V1OfferConvertInput,\n type V1OfferSettings,\n} from '~/transforms/offerV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\n/**\n * v1 per-breakpoint `layout.style` \u2192 CAB product-list `direction`. This is the product-TO-product\n * orientation and the card orientation flips with it (see `convertOfferToV2`):\n * - `grid`/`line` \u2192 products sit side-by-side (`grid`/`columns`); each card is a vertical stack.\n * - `list`/`none`/absent \u2192 products stack vertically (`rows`); each card is a horizontal row.\n * The v1 carousel toggle writes exactly these two: VERTICAL \u2192 `list`, HORIZONTAL \u2192 `grid`.\n */\nconst STYLE_TO_DIRECTION = {\n grid: 'grid',\n line: 'columns',\n list: 'rows',\n none: 'rows',\n} as const;\n\nconst directionForStyle = (style: V1OfferBreakpointLayout['style']) => (style ? STYLE_TO_DIRECTION[style] : 'rows');\n\n/**\n * The product-to-product layout \u2014 it belongs on the CONTAINER that holds the offers (the carousel\n * wrapper), NOT on the offers section. The renderer repeats the offers layout per product into its\n * parent's stack/grid, so a `grid` direction with N `'fill'` columns lays the products out N-across;\n * `list`/`none` stay a vertical stack.\n *\n * `'fill'` (equal share) \u2014 NOT `'auto'` (sizes to content), which yields unequal columns and so\n * unequal `objectFit: contain` image heights across products.\n */\nconst buildProductListLayout = (direction: string, columns: number) =>\n direction === 'grid'\n ? { direction, grid: { columns: Array.from({ length: Math.max(columns, 1) }, () => 'fill'), rows: ['auto'] } }\n : { direction };\n\nconst hasHeaderText = (language: V1OfferSettings['language']): boolean =>\n !!(language?.title || language?.superTitle || language?.description);\n\n/**\n * v1 `discountedFrom` \u2192 CAB `discountSources`. v1's \"Discounted From\" / \"Compare Price With\" select\n * stores `price` / `compare_at_price` directly; the legacy `original_price` (written in Shopify-Functions\n * mode) is the regular price, i.e. `price`. Unknown values are omitted (the CAB enum would reject them).\n */\nconst DISCOUNTED_FROM: Record<string, 'compare_at_price' | 'price'> = {\n compare_at_price: 'compare_at_price',\n original_price: 'price',\n price: 'price',\n};\n\n/**\n * The active widget-level discount as the `CABDiscount` carried on the DATA-SOURCE section \u2014 the field\n * the extension's price forecast actually reads (`dataSource.discount` \u2192 `priceVariant`); a discount\n * emitted anywhere else never reaches the card price. Undefined when there's no active discount;\n * `showSavingAmount` is a card-display concern handled in `buildOfferCard`.\n */\nconst dataSourceDiscount = (discount: V1OfferSettings['discount']): Record<string, unknown> | undefined => {\n if (!discount?.type || discount.type === 'none') return undefined;\n\n const discountedFrom = discount.discountedFrom ? DISCOUNTED_FROM[discount.discountedFrom] : undefined;\n\n return {\n amount: discount.amount ?? 0,\n ...(discount.discountedBy && { discountedBy: discount.discountedBy }),\n ...(discountedFrom && { discountedFrom }),\n type: discount.type,\n };\n};\n\n/**\n * The same discount as the config-only `discount` section just above the undo banner \u2014 the editor-facing\n * home of the FULL v1 shape (`message`/`quantity` have no `CABDiscount` counterpart). Both projections\n * come from the one v1 input in the same pass, so they cannot drift apart.\n */\nconst buildDiscountSection = (discount: V1OfferSettings['discount']): Record<string, unknown>[] => {\n const base = dataSourceDiscount(discount);\n\n if (!base) return [];\n\n return [\n {\n ...base,\n ...(discount?.message && { message: discount.message }),\n ...(discount?.quantity != null && { quantity: discount.quantity }),\n sectionType: 'discount',\n },\n ];\n};\n\n/**\n * The banner's success message content: a defined v1 message overrides `en`, absent falls back to the\n * localized defaults (P4 language policy). A string message is sanitized (a raw-HTML label would fail\n * `CABTextSection.content` and 500 the widget); an RTE doc passes through as authored. A string that\n * sanitizes to empty falls back to the defaults, same as absent.\n */\nconst bannerMessageContent = (message: NonNullable<V1OfferSettings['language']>['successBannerMessageRte']) => {\n const sanitized = typeof message === 'string' ? stripContentBlockHtml(message) : message;\n\n return sanitized ? { ...OFFER_LABELS.addedToCartMessage, en: sanitized } : OFFER_LABELS.addedToCartMessage;\n};\n\n/**\n * Legacy integrations values are nominally boolean but prod data carries \"yes\"/\"no\" strings\n * (React special-cased exactly this for reviewsio: only 'true'/'yes' count as enabled) and numeric\n * 1/0 (legacy PHP serialization). Coerce every value so neither a string nor a number can throw at\n * the schema's `z.boolean()` and kill the widget: only 'true'/'yes' and 1 count as enabled.\n */\nconst coerceIntegrations = (integrations: Record<string, boolean | number | string>): Record<string, boolean> =>\n Object.fromEntries(\n Object.entries(integrations).map(([key, value]) => {\n if (typeof value === 'string') return [key, ['true', 'yes'].includes(value.toLowerCase())];\n\n if (typeof value === 'number') return [key, value === 1];\n\n return [key, value];\n })\n );\n\n/** The opt-in undo banner: a success `banner` of the message + a plain undo button. */\nconst buildBanner = (language: V1OfferSettings['language']): Record<string, unknown>[] =>\n language?.successBannerEnabled\n ? [\n {\n /**\n * The banner-level tag is the extraction/routing key on BOTH renderers (React CAB's\n * `isBannerType` + marker check; the Preact extension's `isUndoBanner`) \u2014 without it\n * the banner renders per card as an always-visible plain success banner and the\n * cart-scoped undo rail never runs. The schema's default offers tree carries it too.\n */\n buttonField: 'undoAddToOrder',\n color: 'success',\n dismissible: true,\n sections: [\n {\n content: bannerMessageContent(language.successBannerMessageRte),\n sectionType: 'text',\n },\n {\n action: 'undoAddToOrder',\n buttonStyle: 'plain',\n /**\n * Tagged `undoAddToOrder`, never `buttonLabel` \u2014 the renderers (React CAB and\n * the Preact extension) and the schema's default offers tree resolve that slot.\n */\n sections: [\n { buttonField: 'undoAddToOrder', content: OFFER_LABELS.undo, sectionType: 'text' },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'banner',\n },\n ]\n : [];\n\n/**\n * Translates a v1 Offer (Checkout Offers / product recommendations) widget into\n * a `CABRootSection`: an optional header (title/superTitle/description, reusing\n * the content-block text converter) over a `carousel` wrapper that ALWAYS contains\n * the `offers` section (the carousel is the required structural parent; it only\n * paginates when the v1 layout has carousel on). The offers section's `dataSource`\n * child carries the engine fetch config; its remaining children are the\n * per-offer card (see `buildOfferCard`).\n *\n * v1 `layout` is per-breakpoint; CAB has none, so the converter collapses to\n * the largest provided breakpoint. A widget-level discount lands on the data\n * source's `discount` field (what the extension prices cards from) plus a\n * config-only `discount` section, and an opt-in undo `banner` is appended after\n * the data source (discount above, banner pinned last) when each is configured.\n */\nexport const convertOfferToV2 = ({ id, name, settings }: V1OfferConvertInput): CABRootSection => {\n const layout = settings.layout?.large ?? settings.layout?.medium ?? settings.layout?.small;\n const columns = layout?.columns ?? 1;\n const direction = directionForStyle(layout?.style);\n const listLayout = buildProductListLayout(direction, columns);\n\n // The card orientation is the inverse of the product-list orientation: vertically-stacked\n // products (`rows`) carry a compact horizontal card (image | info | add); side-by-side products\n // (`grid`/`columns`) carry a narrow vertical card (image \u2192 info \u2192 add).\n const horizontalCard = direction === 'rows';\n\n const discount = dataSourceDiscount(settings.discount);\n\n const dataSource = {\n ...(settings.endpoint && { dataSourcePath: settings.endpoint }),\n ...(discount && { discount }),\n ...(settings.integrations && { integrations: coerceIntegrations(settings.integrations) }),\n ...(settings.limit !== undefined && { limit: settings.limit }),\n matchVariant: !!settings.productOptions?.matchVariant,\n matchVariantOutOfStock: !!settings.productOptions?.matchVariantOutOfStock,\n ...(settings.productType && { productType: settings.productType }),\n sectionType: 'dataSource',\n ...(settings.subscriptionIsDefault && { subscriptionIsDefault: true }),\n ...(settings.treatAsGwp && { treatAsGwp: true }),\n };\n\n // The visible card sections come first so their indices stay contiguous from\n // the top (the admin UI prepends newly-added visible sections). The trailing\n // config-only sections are never rendered per-card: data source (engine fetch\n // config), then the optional discount, then the undo banner pinned to the very\n // bottom. `offers` keeps the default `rows` direction; the card's own\n // orientation is baked into the sections `buildOfferCard` returns.\n const offers = {\n sections: [\n ...buildOfferCard(settings, horizontalCard),\n dataSource,\n ...buildDiscountSection(settings.discount),\n ...buildBanner(settings.language),\n ],\n sectionType: 'offers',\n };\n\n // Offers ALWAYS live inside a `carousel` section \u2014 it's the structural wrapper the CAB offers\n // architecture requires, regardless of whether the widget actually paginates (the name is\n // historical). It only shows pagination when there are more products than `itemsAtOnce`, so a\n // non-carousel v1 widget sets `itemsAtOnce` to the full limit and shows everything at once. The\n // product-list layout (direction/grid from the v1 style + columns) rides on this wrapper.\n const display = {\n autoAdvanceInterval: 0,\n // `itemsAtOnce` feeds the carousel schema's `.min(1)`; a legacy `columns`/`limit` of 0 would\n // otherwise throw at parse, so floor it at 1 (the carousel still shows a product per page).\n itemsAtOnce: Math.max(layout?.carousel ? columns : (settings.limit ?? columns), 1),\n ...listLayout,\n sections: [offers],\n sectionType: 'carousel',\n };\n\n return CABRootSection.parse({\n direction: 'rows',\n editorMode: LOCATION_TO_EDITOR_MODE[settings.location ?? 'checkout'],\n // The widget name is required by the admin save schema; carry the legacy widget's name through.\n ...(name && { name }),\n previewMode: settings.previewMode,\n sections: [\n ...(hasHeaderText(settings.language)\n ? [{ content: { en: convertContentBlockTextToV2(settings.language) }, sectionType: 'text' }]\n : []),\n display,\n ],\n tracking: {\n enableAttribution: settings.tracking?.enableAttribution ?? true,\n enableSource: settings.tracking?.enableSource ?? true,\n enableWidget: settings.tracking?.enableWidget ?? true,\n },\n type: SHOPIFY_CHECKOUT_EXTENSION,\n version: 2,\n widgetId: id,\n });\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSO,SAAS,gBAAgB,KAAsB;AAClD,QAAM,cAAc;AAEpB,SAAO,YAAY,KAAK,GAAG,IAAI,OAAO;AAC1C;AAUO,SAAS,aAAa,MAAc,QAAsB;AAC7D,MAAI,WAAW;AAGf,MAAI,WAAW,MAAM;AACjB,eAAW,KAAK,QAAQ;AAAA,EAC5B;AAEA,MAAI;AACA,eAAW,KAAK,MAAM,QAAQ;AAAA,EAClC,SAAS,GAAG;AAER,eAAW;AAAA,EACf;AAEA,SAAO;AACX;AAUO,SAAS,aAAa,MAAW,QAAyB;AAC7D,MAAI,WAAW;AAEf,MAAI,OAAO,YAAY,UAAU;AAC7B,eAAW,KAAK,UAAU,QAAQ;AAAA,EACtC;AAGA,MAAI,WAAW,MAAM;AACjB,eAAW,KAAK,QAAQ;AAAA,EAC5B;AAEA,SAAO;AACX;AASO,SAAS,UAAU,KAAqB;AAC3C,SAAO,KAAK,QAAQ,eAAe,EAAE,KAAK;AAC9C;AAUO,SAAS,kBAAkB,SAAiB,YAAmC;AAClF,MAAI,KAAoB;AAExB,QAAM,QAAQ,IAAI,OAAO,iBAAiB,UAAU,OAAO;AAC3D,QAAM,UAAU,QAAQ,MAAM,KAAK;AAEnC,MAAI,WAAW,MAAM;AACjB,UAAM,YAAY,QAAQ,CAAC;AAE3B,QAAI,CAAC,MAAM,OAAO,SAAS,CAAC,GAAG;AAC3B,WAAK,OAAO,SAAS;AAAA,IACzB;AAAA,EACJ;AAEA,SAAO;AACX;AASO,SAAS,iBAAiB,SAAuB;AACpD,SAAO,EAAE,QAAQ,wBAAwB,QAAQ,qBAAqB,UAAU,QAAQ,sBAAsB;AAClH;AASO,SAAS,sBAAsB,SAAmB;AAErD,MAAI,kBAAkB,QAAQ,SAAS,CAAC;AAGxC,WAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,QAAQ,KAAK;AAC9C,QAAI,iBAAiB,QAAQ,SAAS,CAAC,CAAC,GAAG;AACvC,wBAAkB,QAAQ,SAAS,CAAC;AACpC;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAOO,SAAS,OAAe;AAC3B,MAAI,KAAI,oBAAI,KAAK,GAAE,QAAQ;AAC3B,MAAI,KAAM,eAAe,YAAY,OAAO,YAAY,IAAI,IAAI,OAAS;AAEzE,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AAClE,QAAI,IAAI,KAAK,OAAO,IAAI;AAExB,QAAI,IAAI,GAAG;AACP,WAAM,IAAI,KAAK,KAAM;AACrB,UAAI,KAAK,MAAM,IAAI,EAAE;AAAA,IACzB,OAAO;AACH,WAAM,KAAK,KAAK,KAAM;AACtB,WAAK,KAAK,MAAM,KAAK,EAAE;AAAA,IAC3B;AAEA,YAAQ,MAAM,MAAM,IAAK,IAAI,IAAO,GAAK,SAAS,EAAE;AAAA,EACxD,CAAC;AACL;AAOO,SAAS,YAAoB;AAChC,QAAMA,UAAS;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AAEA,MAAIC,aAAY;AAChB,QAAM,gBAAe,oBAAI,KAAK,GAAE,QAAQ;AAExC,WAAS,IAAID,QAAO,QAAQ,IAAI,GAAG,KAAK;AACpC,IAAAC,cAAaD,QAAO,MAAM,KAAK,MAAM,KAAK,OAAO,IAAIA,QAAO,MAAM,MAAM,CAAC;AAAA,EAC7E;AAEA,SAAO,SAAS,YAAY,IAAIC,UAAS;AAC7C;AASO,SAAS,iCAAiC,SAAmB;AAChE,QAAM,iBAAiB,sBAAsB,OAAO;AACpD,QAAM,kBAAkB,yBAAyB,SAAS,SAAS,KAAK;AACxE,QAAM,kBAAkB,yBAAyB,SAAS,SAAS,KAAK;AACxE,QAAM,2BAA2B,yBAAyB,SAAS,oBAAoB,KAAK;AAC5F,QAAM,2BAA2B,yBAAyB,SAAS,oBAAoB,KAAK;AAC5F,QAAM,kBAAkB,uBAAuB,SAAS,cAAc;AAEtE,QAAM,WAAW,QAAQ,SAAS,IAAI,CAAC,YAAiB,iCAAiC,SAAS,OAAO,CAAC;AAE1G,SAAO;AAAA,IACH,aAAa;AAAA,IACb,qBAAqB;AAAA,MACjB;AAAA,MACA;AAAA,IACJ;AAAA,IACA,aAAa,UAAU,QAAQ,SAAS;AAAA,IACxC,iBAAiB,QAAQ;AAAA,IACzB,eAAe,mBAAmB,SAAS,IAAI;AAAA,IAC/C,QAAQ,QAAQ;AAAA,IAChB,IAAI,yBAAyB,QAAQ,EAAE;AAAA,IACvC,QAAQ;AAAA,IACR,OAAO,CAAC;AAAA,IACR,YAAY,CAAC;AAAA,IACb,SAAS;AAAA,MACL,GAAG,QAAQ,QAAQ,IAAI,CAAC,WAAgB;AACpC,eAAO,EAAE,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO;AAAA,MACtD,CAAC;AAAA,IACL;AAAA,IACA,YAAY;AAAA,MACR;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,IACA,qBAAqB;AAAA,IACrB,+BAA+B;AAAA,IAC/B,mBAAmB,CAAC;AAAA,IACpB,KAAK,EAAE,aAAa,MAAM,OAAO,KAAK;AAAA,IACtC,OAAO,QAAQ;AAAA,IACf,UAAU,eAAe,QAAQ;AAAA,IACjC,QAAQ,QAAQ;AAAA,EACpB;AACJ;AASO,SAAS,eAAe,KAAe;AAC1C,SAAO;AAAA,IACH,OAAO;AAAA,MACH,GAAG,IAAI,IAAI,CAAC,SAAc;AACtB,eAAO,EAAE,KAAK;AAAA,MAClB,CAAC;AAAA,IACL;AAAA,EACJ;AACJ;AAUO,SAAS,iCAAiC,SAAc,SAAmB;AAC9E,QAAM,kBAAkB,uBAAuB,SAAS,OAAO;AAC/D,QAAM,QAAQ,mBAAmB,SAAS,QAAQ,QAAQ;AAE1D,SAAO;AAAA,IACH,kBAAkB,iBAAiB,OAAO;AAAA,IAC1C,kBAAkB,mBAAmB,SAAS,kBAAkB;AAAA,IAChE,IAAI,gCAAgC,QAAQ,EAAE;AAAA,IAC9C;AAAA,IACA,SAAS,mBAAmB,SAAS,OAAO;AAAA,IAC5C,SAAS;AAAA,MACL,QAAQ,QAAQ;AAAA,MAChB,IAAI,QAAQ;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,QAAQ,QAAQ;AAAA,IACpB;AAAA,IACA,iBAAiB,CAAC,eAAe;AAAA,IACjC,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ;AAAA,EACnB;AACJ;AAWO,SAAS,yBAAyB,SAAc,MAAc,SAAS,WAAmB,OAAY;AACzG,MAAI,cAAc,mBAAmB,QAAQ,SAAS,CAAC,GAAG,GAAG;AAE7D,WAAS,IAAI,GAAG,IAAI,QAAQ,SAAS,QAAQ,KAAK;AAC9C,UAAM,eAAe,mBAAmB,QAAQ,SAAS,CAAC,GAAG,GAAG;AAEhE,QAAI,gBAAgB,MAAM;AACtB,YAAM,qBAAqB,OAAO,aAAa,MAAM;AACrD,YAAM,qBAAqB,eAAe,OAAO,OAAO,YAAY,MAAM,IAAI;AAE9E,UACI,sBAAsB,QACrB,aAAa,SAAS,qBAAqB,sBAC3C,aAAa,SAAS,qBAAqB,oBAC9C;AACE,sBAAc;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AAUO,SAAS,mBAAmB,SAAc,MAAc,SAAc;AACzE,MAAI,QAAQ,GAAG,KAAK,MAAM;AACtB,WAAO;AAAA,MACH,QAAQ,QAAQ,GAAG;AAAA,MACnB,cAAc;AAAA,IAClB;AAAA,EACJ;AAEA,SAAO;AACX;AAUO,SAAS,uBAAuB,SAAc,SAAmB;AACpE,QAAM,kBAAuC,CAAC;AAE9C,MAAI,QAAQ,WAAW,MAAM;AACzB,oBAAgB,QAAQ,QAAQ,CAAC,EAAE,IAAI,IAAI,QAAQ;AAAA,EACvD;AAEA,MAAI,QAAQ,WAAW,MAAM;AACzB,oBAAgB,QAAQ,QAAQ,CAAC,EAAE,IAAI,IAAI,QAAQ;AAAA,EACvD;AAEA,MAAI,QAAQ,WAAW,MAAM;AACzB,oBAAgB,QAAQ,QAAQ,CAAC,EAAE,IAAI,IAAI,QAAQ;AAAA,EACvD;AAEA,SAAO;AACX;AAUO,SAAS,mBAAmB,SAAc,IAAwB;AACrE,MAAI,QAAQ;AAEZ,MAAI,QAAQ,OAAO;AACf,YAAQ;AAAA,MACJ,SAAS,QAAQ,MAAM;AAAA,MACvB,QAAQ,QAAQ,MAAM;AAAA,MACtB,IAAI,8BAA8B,QAAQ,MAAM,EAAE;AAAA,MAClD,KAAK,QAAQ,MAAM;AAAA,MACnB,OAAO,QAAQ,MAAM;AAAA,IACzB;AAAA,EACJ;AAEA,MAAI,QAAQ,UAAU,QAAQ,OAAO,SAAS,KAAK,MAAM,MAAM;AAC3D,UAAM,gBAAgB,QAAQ,OAAO,KAAK,CAAC,MAAW,EAAE,OAAO,EAAE;AAEjE,QAAI,eAAe;AACf,cAAQ;AAAA,QACJ,SAAS,cAAc;AAAA,QACvB,QAAQ,cAAc;AAAA,QACtB,IAAI,8BAA8B,cAAc,EAAE;AAAA,QAClD,KAAK,cAAc;AAAA,QACnB,OAAO,cAAc;AAAA,MACzB;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO;AACX;AASO,SAAS,oBAAoB,KAAkB;AAClD,QAAM,SAAS,IAAI,gBAAgB,GAAG;AAEtC,SAAO,OAAO,YAAY,OAAO,QAAQ,CAAC;AAC9C;AASO,SAAS,oBAAoB,KAAkB;AAClD,QAAM,UAAU,CAAC,gBAAgB,cAAc,cAAc,YAAY,aAAa;AAEtF,QAAM,UAA+B,CAAC;AAEtC,QAAM,MAAM,IAAI,IAAI,GAAG;AACvB,QAAM,cAAc,oBAAoB,IAAI,MAAM;AAElD,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,WAAW,GAAG;AACpD,QAAI,QAAQ,SAAS,GAAG,GAAG;AACvB,cAAQ,GAAG,IAAI;AAAA,IACnB;AAAA,EACJ;AAEA,SAAO,OAAO,KAAK,OAAO,EAAE,SAAS,IAAI,UAAU;AACvD;AASO,SAAS,cAAc,QAAiC;AAC3D,MAAI,mBAA2B;AAE/B,MAAI,OAAO,WAAW,UAAU;AAC5B,QAAI,OAAO,QAAQ,GAAG,MAAM,IAAI;AAC5B,yBAAmB,KAAK,MAAM,WAAW,MAAM,IAAI,GAAG;AAAA,IAC1D,OAAO;AACH,yBAAmB,SAAS,QAAQ,EAAE;AAAA,IAC1C;AAAA,EACJ,WAAW,OAAO,WAAW,UAAU;AACnC,uBAAmB,KAAK,MAAM,SAAS,GAAG;AAAA,EAC9C;AAEA,MAAI,MAAM,gBAAgB,GAAG;AACzB,uBAAmB;AAAA,EACvB;AAEA,SAAO;AACX;AASO,SAAS,UAAU,KAAsC;AAC5D,QAAM,aAAuB,CAAC;AAE9B,QAAM,MAAM,CAAC,KAAa,UAAe;AACrC,YAAQ,OAAO,UAAU,aAAa,MAAM,IAAI;AAChD,YAAQ,UAAU,OAAO,KAAK,UAAU,SAAY,KAAK;AACzD,eAAW,WAAW,MAAM,IAAI,mBAAmB,GAAG,IAAI,MAAM,mBAAmB,KAAK;AAAA,EAC5F;AAEA,QAAM,kBAAkB,CAAC,QAAgBC,SAAa;AAClD,QAAI,GAAG,KAAK;AAEZ,QAAI,QAAQ;AACR,UAAI,MAAM,QAAQA,IAAG,GAAG;AACpB,aAAK,IAAI,GAAG,MAAMA,KAAI,QAAQ,IAAI,KAAK,KAAK;AACxC,0BAAgB,SAAS,OAAO,OAAOA,KAAI,CAAC,MAAM,YAAYA,KAAI,CAAC,IAAI,IAAI,MAAM,KAAKA,KAAI,CAAC,CAAC;AAAA,QAChG;AAAA,MACJ,WAAW,OAAO,UAAU,SAAS,KAAKA,IAAG,MAAM,mBAAmB;AAClE,aAAK,OAAOA,MAAK;AACb,0BAAgB,SAAS,MAAM,MAAM,KAAKA,KAAI,GAAG,CAAC;AAAA,QACtD;AAAA,MACJ,OAAO;AACH,YAAI,QAAQA,IAAG;AAAA,MACnB;AAAA,IACJ,WAAW,MAAM,QAAQA,IAAG,GAAG;AAC3B,WAAK,IAAI,GAAG,MAAMA,KAAI,QAAQ,IAAI,KAAK,KAAK;AACxC,YAAIA,KAAI,CAAC,EAAE,MAAMA,KAAI,CAAC,EAAE,KAAK;AAAA,MACjC;AAAA,IACJ,OAAO;AACH,WAAK,OAAOA,MAAK;AACb,wBAAgB,KAAKA,KAAI,GAAG,CAAC;AAAA,MACjC;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAEA,SAAO,gBAAgB,IAAI,GAAG,EAAE,KAAK,GAAG;AAC5C;;;ACxdA,IAAM,UAAmB;AAAA;AAAA;AAAA;AAAA,EAIrB,WAAW;AAAA,EACX,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAClB;AAEA,IAAM,iBAA2B;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,WAAW,OACb,KACA,QACA,MACA,MACA,QACA,UAAwB,CAAC,MACV;AACf,QAAM,MAAM,GAAG,MAAM,GAAG,IAAI;AAC5B,QAAM,aAAa,IAAI,IAAI,GAAG;AAC9B,QAAM,eAAe,SAAS,SAAS,CAAC;AAExC,QAAM,cAA2B,CAAC;AAElC,MAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AACzC,WAAO,OAAO,aAAa,IAAI;AAAA,EACnC;AAEA,MAAI,OAAO,OAAO,YAAY,IAAI,SAAS,GAAG;AAC1C,WAAO,OAAO,aAAa,EAAE,IAAS,CAAC;AAAA,EAC3C;AAEA,QAAM,gBAA0D;AAAA,IAC5D;AAAA,IACA,GAAG;AAAA,EACP;AAEA,MAAI,WAAW,OAAO;AAClB,eAAW,SAAS,UAAU,WAAW;AAAA,EAC7C,WAAW,WAAW,QAAQ;AAC1B,kBAAc,UAAU;AAAA,MACpB,gBAAgB;AAAA,IACpB;AACA,kBAAc,OAAO,IAAI,gBAAgB,WAAW;AAAA,EACxD;AAEA,QAAM,UAAU,MAAM,MAAM,WAAW,SAAS,GAAG,aAAa;AAChE,QAAM,WAAW,MAAM,QAAQ,KAAK;AAEpC,MAAI,CAAC,QAAQ,MAAM,aAAa,iBAAiB,MAAM;AACnD,UAAM,UAAU,0BAA0B,QAAQ,MAAM;AACxD,UAAM,IAAI,MAAM,SAAS,EAAE,OAAO,SAAS,CAAC;AAAA,EAChD;AAEA,SAAO;AACX;AAEO,IAAM,MAAN,MAAU;AAAA,EAGb,YAAY,SAA0C;AAClD,SAAK,SAAS;AAAA;AAAA;AAAA;AAAA,MAIV,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,WAAW;AAAA,MACX,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM;AAAA,MACN,cAAc;AAAA,IAClB;AAEA,QAAI,OAAO,WAAW,UAAU;AAC5B,WAAK,OAAO,MAAM;AAAA,IACtB,WAAW,OAAO,WAAW,YAAY,WAAW,MAAM;AACtD,aAAO,OAAO,KAAK,QAAQ,OAAO;AAAA,IACtC;AAEA,eAAW,UAAU,gBAAgB;AACjC,UAAI,OAAO,aAAa,YAAa,UAAkB,MAAM,SAAS,MAAM,GAAG;AAC3E,eAAO,OAAO,KAAK,QAAQ,OAAO;AAClC;AAAA,MACJ;AAEA,UAAI,OAAO,KAAK,OAAO,SAAS,YAAY,KAAK,OAAO,KAAK,SAAS,MAAM,GAAG;AAC3E,eAAO,OAAO,KAAK,QAAQ,OAAO;AAClC;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,UAAU,QAAgB,MAAc,MAAmB,SAAsC;AACnG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,aAAa,OAAO;AAAA,EAC/F;AAAA,EAEA,MAAM,WAAW,QAAgB,MAAc,MAAmB,SAAsC;AACpG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,cAAc,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,WAAW,QAAgB,MAAc,MAAmB,SAAsC;AACpG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,cAAc,OAAO;AAAA,EAChG;AAAA,EAEA,MAAM,QAAQ,QAAgB,MAAc,MAAmB,SAAsC;AACjG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,WAAW,OAAO;AAAA,EAC7F;AAAA,EAEA,MAAM,QAAQ,QAAgB,MAAc,MAAmB,SAAsC;AACjG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,WAAW,OAAO;AAAA,EAC7F;AAAA,EAEA,MAAM,QAAQ,QAAgB,MAAc,MAAmB,SAAsC;AACjG,WAAO,MAAM,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,QAAQ,OAAO;AAAA,EAC1F;AACJ;AAGA,IAAO,cAAQ;;;AC1JR,SAAS,IAAI,MAA0B;AAC1C,MAAI,OAAO,YAAY,eAAe,CAAC,SAAS,QAAQ;AACpD,WAAO;AAAA,EACX;AAGA,QAAM,SAAS,SAAS,OAAO,MAAM,YAAY,mBAAmB,IAAI,IAAI,eAAe;AAE3F,MAAI,QAAa;AAEjB,MAAI,UAAU,MAAM;AAEhB,UAAM,OAAO,mBAAmB,OAAO,CAAC,CAAC;AAGzC,UAAM,SAAS,gBAAgB,IAAI,IAAI,OAAO;AAG9C,YAAQ,aAAa,MAAM,MAAM;AAAA,EACrC;AAEA,SAAO;AACX;AAOO,SAAS,SAA8B;AAC1C,QAAM,UAA+B,CAAC;AAEtC,MAAI,YAAY,SAAS,UAAU,SAAS,WAAW,IAAI;AACvD,UAAM,QAAQ,SAAS,OAAO,MAAM,GAAG;AAEvC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,QAAQ,MAAM,CAAC,EAAE,MAAM,GAAG;AAEhC,YAAM,CAAC,IAAI,MAAM,CAAC,EAAE,QAAQ,MAAM,EAAE;AAEpC,YAAM,MAAM,mBAAmB,MAAM,CAAC,CAAC;AACvC,YAAM,QAAQ,mBAAmB,MAAM,CAAC,CAAC;AAGzC,YAAM,SAAS,gBAAgB,KAAK,IAAI,OAAO;AAE/C,cAAQ,GAAG,IAAI,aAAa,OAAO,MAAM;AAAA,IAC7C;AAAA,EACJ;AAEA,SAAO;AACX;AAWO,SAAS,IAAI,MAAc,OAAYC,SAAmB;AAC7D,MAAI,OAAO,YAAY,eAAe,CAAC,SAAS,QAAQ;AACpD;AAAA,EACJ;AAEA,QAAM,aAAa,CAAC,QAAQ,UAAU,UAAU,WAAW,UAAU,UAAU;AAC/E,QAAM,mBAAmB,CAAC,WAAW,WAAW,SAAS,QAAQ,SAAS,UAAU,OAAO;AAE3F,QAAM,mBAAwC;AAAA,IAC1C,MAAM;AAAA,EACV;AAEA,MAAI,OAAOA,WAAU,eAAe,OAAO,UAAUA,OAAM,GAAG;AAC1D,qBAAiB,SAAS,IAAIA;AAAA,EAClC,WAAW,OAAOA,YAAW,YAAYA,YAAW,MAAM;AACtD,eAAW,OAAOA,SAAQ;AACtB,UAAI,WAAW,SAAS,GAAG,GAAG;AAC1B,YAAI,QAAQ,UAAU;AAClB,2BAAiB,SAAS,IAAIA,QAAO,GAAG;AAAA,QAC5C,WAAW,QAAQ,YAAY;AAC3B,2BAAiB,UAAU,IAAIA,QAAO,GAAG;AAAA,QAC7C,WAAW,QAAQ,WAAW;AAC1B,2BAAiB,GAAG,IAAI,IAAI,KAAKA,QAAO,GAAG,CAAC,EAAE,YAAY;AAAA,QAC9D,OAAO;AACH,2BAAiB,GAAG,IAAIA,QAAO,GAAG;AAAA,QACtC;AAAA,MACJ,WAAW,iBAAiB,SAAS,GAAG,GAAG;AACvC,YAAI,WAAWA,QAAO,GAAG;AAEzB,YAAI,QAAQ,WAAW;AACnB,qBAAW,WAAW;AAAA,QAC1B,WAAW,QAAQ,WAAW;AAC1B,qBAAW,WAAW;AAAA,QAC1B,WAAW,QAAQ,SAAS;AACxB,qBAAW,WAAW,KAAK;AAAA,QAC/B,WAAW,QAAQ,QAAQ;AACvB,qBAAW,WAAW,KAAK,KAAK;AAAA,QACpC,WAAW,QAAQ,SAAS;AACxB,qBAAW,WAAW,KAAK,KAAK,KAAK;AAAA,QACzC,WAAW,QAAQ,UAAU;AACzB,qBAAW,WAAW,KAAK,KAAK,KAAK;AAAA,QACzC,WAAW,QAAQ,SAAS;AACxB,qBAAW,WAAW,KAAK,KAAK,KAAK;AAAA,QACzC;AAEA,yBAAiB,SAAS,IAAI;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAGA,UAAQ,aAAa,OAAOA,SAAQ,MAAM;AAG1C,MAAI,SAAS,mBAAmB,IAAI,IAAI,MAAM,mBAAmB,KAAK;AAGtE,aAAW,OAAO,kBAAkB;AAChC,cAAU,MAAM,MAAM,MAAM,iBAAiB,GAAG;AAAA,EACpD;AAGA,WAAS,SAAS;AACtB;AASO,SAAS,KAAK,MAA8C;AAC/D,QAAM,UAA0C,CAAC;AACjD,QAAM,UAAU,OAAO;AAEvB,aAAW,OAAO,SAAS;AACvB,QAAI,IAAI,SAAS,IAAI,GAAG;AACpB,cAAQ,KAAK;AAAA,QACT,MAAM;AAAA,QACN,OAAO,QAAQ,GAAG;AAAA,MACtB,CAAC;AAAA,IACL;AAAA,EACJ;AAEA,SAAO;AACX;AAOO,SAAS,QAAQ,MAAoB;AACxC,MAAI,MAAM,IAAI,EAAE,QAAQ,OAAO,SAAS,EAAE,CAAC;AAC/C;AAOO,SAAS,UAAmB;AAC/B,QAAM,OAAO;AAAA,IACT,KAAK;AAAA,IACL,OAAO;AAAA,EACX;AAEA,MAAI,KAAK,KAAK,KAAK,OAAO,EAAE,QAAQ,MAAM,CAAC;AAE3C,QAAMC,WAAU,IAAI,KAAK,GAAG,MAAM,KAAK,QAAQ,OAAO;AAEtD,MAAIA,UAAS;AACT,YAAQ,KAAK,GAAG;AAAA,EACpB;AAEA,SAAOA;AACX;AAGA,IAAO,iBAAQ,EAAE,SAAS,SAAS,MAAM,KAAK,QAAQ,IAAI;;;ACnLnD,IAAM,cAAN,MAAkB;AAAA,EAGrB,YAAY,KAAoB;AAC5B,SAAK,SAAS;AAAA,MACV,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,QACjB,SAAS;AAAA,MACb;AAAA,MACA,KAAK;AAAA,IACT;AAEA,QAAI,OAAO,YAAY,eAAe,CAAC,SAAS,QAAQ;AACpD;AAAA,IACJ;AAEA,QAAI,OAAO,OAAO,UAAU;AACxB,WAAK,OAAO,MAAM;AAAA,IACtB;AAEA,SAAK,OAAO,cAAc,eAAO,IAAI,KAAK,OAAO,iBAAiB;AAGlE,QAAI,KAAK,OAAO,gBAAgB,MAAM;AAClC,WAAK,kBAAkB;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,MAAM,oBAAkC;AACpC,UAAM,MAAM,IAAI,YAAI,EAAE,KAAK,KAAK,OAAO,IAAI,CAAC;AAC5C,UAAM,WAAW,MAAM,IAAI,QAAQ,OAAO,KAAK,IAAI;AAEnD,QAAI,SAAS,MAAM;AAEf,WAAK,OAAO,cAAc,SAAS;AAGnC,YAAM,gBAAqC;AAAA,QACvC,QAAQ;AAAA,MACZ;AAGA,aAAO,OAAO,eAAe,KAAK,OAAO,mBAAmB;AAG5D,qBAAO,IAAI,KAAK,OAAO,mBAAmB,KAAK,OAAO,aAAa,EAAE,GAAG,eAAe,QAAQ,MAAM,CAAC;AAAA,IAC1G;AAEA,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,MAAM,cAA4B;AAC9B,QAAI,KAAK,OAAO,eAAe,MAAM;AACjC,YAAM,KAAK,kBAAkB;AAAA,IACjC;AAEA,WAAO,KAAK,OAAO;AAAA,EACvB;AACJ;AAGA,IAAO,sBAAQ;;;AC9Df,IAAM,SAAiB;AAAA,EACnB,KAAK;AAAA,EACL,iBAAiB;AAAA,IACb,SAAS;AAAA,EACb;AAAA,EACA,WAAW;AAAA,EACX,iBAAiB;AACrB;AAEO,IAAM,UAAN,MAAc;AAAA,EACjB,cAAc;AACV,QAAI,OAAO,YAAY,eAAe,CAAC,SAAS,QAAQ;AACpD;AAAA,IACJ;AAEA,WAAO,OAAM,oBAAI,KAAK,GAAE,QAAQ;AAChC,WAAO,YAAY,eAAO,IAAI,OAAO,eAAe;AAGpD,QAAI,OAAO,cAAc,MAAM;AAC3B,aAAO,YAAY,UAAU;AAAA,IACjC;AAGA,UAAM,gBAAqC;AAAA,MACvC,QAAQ;AAAA,IACZ;AAGA,WAAO,OAAO,eAAe,OAAO,eAAe;AAGnD,mBAAO,IAAI,OAAO,iBAAiB,OAAO,WAAW,aAAa;AAAA,EACtE;AAAA,EAEA,YAA2B;AACvB,WAAO,OAAO;AAAA,EAClB;AAAA,EAEA,eAAuB;AACnB,WAAO,OAAO,YAAY,OAAO,OAAO,UAAU,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI;AAAA,EACvE;AAAA,EAEA,kBAA0B;AACtB,WAAO,OAAO,QAAQ,OAAO,WAAW,OAAO,MAAM,KAAK,aAAa,KAAK,MAAO,IAAI,SAAS,CAAC,IAAI;AAAA,EACzG;AACJ;AAGA,IAAO,kBAAQ;;;AC7CR,IAAM,WAAN,MAAe;AAAA,EAGlB,YAAY,KAAoB;AAC5B,SAAK,SAAS;AAAA,MACV,aAAa;AAAA,MACb,KAAK;AAAA,MACL,SAAS;AAAA,MACT,iBAAiB;AAAA,QACb,OAAO;AAAA,MACX;AAAA,MACA,WAAW;AAAA,MACX,iBAAiB;AAAA,IACrB;AAEA,QAAI,OAAO,YAAY,eAAe,CAAC,SAAS,QAAQ;AACpD;AAAA,IACJ;AAEA,QAAI,OAAO,OAAO,UAAU;AACxB,WAAK,OAAO,MAAM;AAAA,IACtB;AAEA,SAAK,OAAO,YAAY,eAAO,IAAI,KAAK,OAAO,eAAe;AAG9D,QAAI,KAAK,OAAO,cAAc,MAAM;AAChC,WAAK,OAAO,YAAY,KAAK;AAAA,IACjC;AAGA,UAAM,gBAAqC;AAAA,MACvC,QAAQ;AAAA,IACZ;AAGA,WAAO,OAAO,eAAe,KAAK,OAAO,eAAe;AAGxD,mBAAO,IAAI,KAAK,OAAO,iBAAiB,KAAK,OAAO,WAAW,aAAa;AAG5E,SAAK,OAAO,UAAU,IAAI,gBAAQ;AAGlC,SAAK,OAAO,cAAc,IAAI,oBAAY,KAAK,OAAO,GAAG;AAAA,EAC7D;AAAA,EAEA,YAA2B;AACvB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,YAA2B;AACvB,WAAO,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,UAAU,IAAI;AAAA,EACnE;AAAA,EAEA,eAA8B;AAC1B,WAAO,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,aAAa,IAAI;AAAA,EACtE;AAAA,EAEA,kBAAiC;AAC7B,WAAO,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,gBAAgB,IAAI;AAAA,EACzE;AAAA,EAEA,MAAM,cAA4B;AAC9B,WAAO,KAAK,OAAO,cAAc,MAAM,KAAK,OAAO,YAAY,YAAY,IAAI;AAAA,EACnF;AACJ;AAGA,IAAO,mBAAQ;;;ACzEf,IAAM,aAAa,OAAOC,SAAgB,cAAiD;AACvF,MAAIA,QAAO,YAAYA,QAAO,SAAS,UAAU,GAAG;AAChD,cAAU,OAAOA,QAAO,SAAS,UAAU;AAAA,EAC/C;AAEA,SAAO,MAAMA,QAAO,IAAI,UAAU,QAAQ,2BAA2B,SAAS;AAClF;AAEA,IAAM,iBAAiB,OACnBA,SACA,UACA,QACA,QACA,UAA+B,CAAC,MACjB;AACf,SAAO,MAAMC,UAASD,SAAQ,UAAU,QAAQ,QAAQ,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;AACxF;AAEA,IAAM,iBAAiB,OACnBA,SACA,UACA,QACA,QACA,UAA+B,CAAC,MACjB;AACf,SAAO,MAAMC,UAASD,SAAQ,UAAU,QAAQ,QAAQ,EAAE,GAAG,SAAS,QAAQ,KAAK,CAAC;AACxF;AAEA,IAAM,cAAc,OAChBA,SACA,UACA,QACA,QACA,UAA+B,CAAC,MACjB;AACf,SAAO,MAAMC,UAASD,SAAQ,UAAU,QAAQ,QAAQ,EAAE,GAAG,SAAS,KAAK,KAAK,CAAC;AACrF;AAEA,IAAMC,YAAW,OACbD,SACA,UACA,QACA,QACA,UAA+B,CAAC,MACjB;AACf,QAAM,QAA6B,CAAC;AAEpC,MAAIA,QAAO,qBAAqB,MAAM;AAClC,WAAO,OAAO,OAAOA,QAAO,iBAAiB;AAAA,EACjD;AAEA,MAAIA,QAAO,qBAAqB,MAAM;AAClC,WAAO,OAAO,OAAOA,QAAO,iBAAiB;AAAA,EACjD;AAEA,MAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAC7C,WAAO,OAAO,OAAO,MAAM;AAAA,EAC/B;AAEA,MAAI,OAAO,WAAW,YAAY,WAAW,MAAM;AAC/C,YAAQ,KAAK,uCAAuC,OAAO;AAC3D,cAAU,CAAC;AAAA,EACf;AAEA,MAAIA,QAAO,YAAYA,QAAO,SAAS,UAAU,GAAG;AAChD,UAAM,OAAOA,QAAO,SAAS,UAAU;AAAA,EAC3C;AAGA,QAAM,SAAS,QAAQ,MAAM,YAAY,QAAQ,SAAS,eAAe,QAAQ,SAAS,eAAe;AACzG,QAAM,WAAW,MAAMA,QAAO,IAAI,MAAM,EAAE,OAAO,UAAU,OAAO,OAAO;AAEzE,MAAI,SAAS,QAAQ,WAAW,cAAc;AAC1C,aAAS,IAAI,GAAG,IAAI,SAAS,KAAK,QAAQ,KAAK;AAC3C,eAAS,KAAK,CAAC,IAAI,iCAAiC,SAAS,KAAK,CAAC,CAAC;AAAA,IACxE;AAAA,EACJ;AAEA,SAAO;AACX;AAEO,IAAM,cAAN,MAAkB;AAAA,EAGrB,YAAY,KAAc,mBAAyC,MAAe;AAC9E,SAAK,SAAS;AAAA,MACV,KAAK;AAAA,MACL,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,UAAU;AAAA,MACV,KAAK;AAAA,MACL,MAAM;AAAA,IACV;AAEA,QAAI,OAAO,OAAO,UAAU;AACxB,WAAK,OAAO,MAAM;AAAA,IACtB;AAEA,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,MAAM;AACnE,WAAK,OAAO,oBAAoB;AAAA,IACpC;AAEA,QAAI,OAAO,QAAQ,YAAY,KAAK,SAAS,gBAAgB,GAAG;AAC5D,WAAK,OAAO,OAAO;AAAA,IACvB;AAEA,SAAK,OAAO,MAAM,IAAI,YAAI,EAAE,KAAK,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,CAAC;AAC1E,SAAK,OAAO,WAAW,IAAI,iBAAS,KAAK,OAAO,GAAG;AAAA,EACvD;AAAA,EAEA,qBAAqB,mBAA8C;AAC/D,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,MAAM;AACnE,WAAK,OAAO,oBAAoB;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,qBAAqB,mBAA8C;AAC/D,QAAI,OAAO,qBAAqB,YAAY,qBAAqB,MAAM;AACnE,WAAK,OAAO,oBAAoB;AAAA,IACpC;AAAA,EACJ;AAAA,EAEA,MAAM,QAAQ,UAAkB,QAA6B,UAA+B,CAAC,GAAiB;AAC1G,WAAO,MAAMC,UAAS,KAAK,QAAQ,UAAU,QAAQ,MAAM,OAAO;AAAA,EACtE;AAAA,EAEA,MAAM,eACF,UACA,QACA,UAA+B,CAAC,GACpB;AACZ,WAAO,MAAM,YAAY,KAAK,QAAQ,UAAU,QAAQ,MAAM,OAAO;AAAA,EACzE;AAAA,EAEA,MAAM,iBACF,UACA,QACA,UAA+B,CAAC,GACpB;AACZ,WAAO,MAAM,eAAe,KAAK,QAAQ,UAAU,QAAQ,MAAM,OAAO;AAAA,EAC5E;AAAA,EAEA,MAAM,eACF,UACA,QACA,UAA+B,CAAC,GACpB;AACZ,WAAO,MAAM,eAAe,KAAK,QAAQ,UAAU,QAAQ,MAAM,OAAO;AAAA,EAC5E;AAAA,EAEA,MAAM,kBACF,UACA,QACA,UAA+B,CAAC,GACpB;AACZ,WAAO,MAAMA,UAAS,KAAK,QAAQ,UAAU,QAAQ,cAAc,OAAO;AAAA,EAC9E;AAAA,EAEA,MAAM,mBAAmB,MAAyC;AAC9D,UAAM,eAAe,CAAC,sBAAsB,wBAAwB;AAEpE,UAAM,cAAc;AAAA,MAChB,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IACV;AAEA,QAAI,OAAO,QAAQ,eAAe,QAAQ,MAAM;AAC5C,YAAM,WAAW,OAAO,KAAK,IAAI;AAEjC,UAAI,SAAS,KAAK,CAAC,QAAQ,aAAa,SAAS,GAAG,CAAC,GAAG;AACpD,cAAM,UAAU,OAAO,OAAO,MAAM,WAAW;AAE/C,eAAO,MAAM,WAAW,KAAK,QAAQ,OAAO;AAAA,MAChD;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;;;AClMA,IAAAC,cAAkB;;;ACAlB,iBAAkB;AAMX,IAAM,uBAAuB,aAAE,YAAY;AAAA,EAC9C,QAAQ,aAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,IAAI,aAAE,OAAO,OAAO,EAAE,SAAS;AAAA,EAC/B,WAAW,aAAE,OAAO,OAAO,EAAE,SAAS;AAAA,EACtC,OAAO,aAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,YAAY,aAAE,MAAM,aAAE,OAAO,OAAO,CAAC,EAAE,SAAS;AACpD,CAAC;AAcM,IAAM,gBAAgB,aAAE,YAAY;AAAA,EACvC,aAAa,aAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA;AAAA,EAEpD,iBAAiB,aAAE,QAAQ,EAAE,SAAS;AAAA,EACtC,qBAAqB,aAAE,OAAO,EAAE,SAAS;AAAA,EACzC,8BAA8B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACnD,kCAAkC,aAAE,OAAO,EAAE,SAAS;AAAA,EACtD,gCAAgC,aAAE,QAAQ,EAAE,SAAS;AAAA,EACrD,oCAAoC,aAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAExD,yBAAyB,aAAE,OAAO,OAAO,EAAE,SAAS;AAAA,EACpD,4BAA4B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,gCAAgC,aAAE,OAAO,EAAE,SAAS;AAAA,EACpD,8BAA8B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACnD,kCAAkC,aAAE,OAAO,EAAE,SAAS;AAAA,EACtD,cAAc,aAAE,OAAO,EAAE,SAAS;AAAA,EAClC,mBAAmB,aAAE,QAAQ,EAAE,SAAS;AAAA,EACxC,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,EACxB,SAAS,aAAE,OAAO,OAAO,EAAE,SAAS;AAAA,EACpC,uBAAuB,aAAE,YAAY,EAAE,SAAS,aAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EACnF,2BAA2B,aAAE,QAAQ,EAAE,SAAS;AAAA,EAChD,+BAA+B,aAAE,OAAO,EAAE,SAAS;AAAA,EACnD,6BAA6B,aAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,iCAAiC,aAAE,OAAO,EAAE,SAAS;AAAA,EACrD,UAAU,aAAE,MAAM,oBAAoB,EAAE,SAAS;AAAA,EACjD,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1B,qBAAqB,aAAE,OAAO,EAAE,SAAS;AAC7C,CAAC;AAOM,IAAM,eAAe,aAAE,YAAY;AAAA,EACtC,cAAc,aAAE,MAAM,aAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAK3C,2BAA2B,aAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAEhD,kBAAkB,aAAE,MAAM,aAAE,YAAY,EAAE,YAAY,aAAE,MAAM,aAAE,OAAO,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACzG,4BAA4B,aAAE,QAAQ,EAAE,SAAS;AAAA,EACjD,oBAAoB,aAAE,QAAQ,EAAE,SAAS;AAAA,EACzC,IAAI,aAAE,OAAO,EAAE,SAAS;AAAA,EACxB,UAAU,aACL,YAAY;AAAA,IACT,qBAAqB,aAAE,OAAO,EAAE,SAAS;AAAA,IACzC,uBAAuB,aAAE,OAAO,EAAE,SAAS;AAAA,IAC3C,eAAe,aAAE,OAAO,EAAE,SAAS;AAAA,EACvC,CAAC,EACA,SAAS;AAAA,EACd,MAAM,aAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,aAAE,MAAM,aAAa,EAAE,SAAS;AAC3C,CAAC;AAGM,IAAM,qBAAqB,aAAE,YAAY;AAAA,EAC5C,UAAU,aAAE,YAAY,EAAE,MAAM,aAAE,MAAM,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EAC7E,MAAM,aAAE,OAAO,EAAE,SAAS;AAC9B,CAAC;AAUM,IAAM,kBAAkB,aAAE,YAAY;AAAA,EACzC,YAAY,aAAE,MAAM,kBAAkB,EAAE,SAAS;AACrD,CAAC;;;AD/FM,IAAM,sBAAsB,cAAE,OAAO;AAAA,EACxC,MAAM,cAAE;AAAA,IACJ,cAAE,OAAO;AAAA,MACL,WAAW,cAAE,OAAO,OAAO;AAAA,MAC3B,IAAI,cAAE,OAAO,OAAO;AAAA,MACpB,SAAS,cAAE,OAAO,OAAO;AAAA,IAC7B,CAAC;AAAA,EACL;AAAA,EACA,IAAI,cAAE,OAAO,OAAO;AAAA,EACpB,eAAe,cAAE,OAAO,OAAO,EAAE,SAAS;AAAA,EAC1C,MAAM,cAAE,OAAO;AACnB,CAAC;AAWM,IAAM,gBAAgB,cAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlC,mBAAmB,cACd,MAAM,cAAE,QAAQ,CAAC,EACjB,MAAM,CAAC,CAAC,EACR,QAAQ,CAAC,CAAC,EACV;AAAA,IAAU,CAAC,gBACR,YAAY,QAAQ,CAAC,eAAe;AAChC,YAAM,SAAS,oBAAoB,UAAU,UAAU;AAEvD,aAAO,OAAO,UAAU,CAAC,OAAO,IAAI,IAAI,CAAC;AAAA,IAC7C,CAAC;AAAA,EACL;AAAA,EACJ,QAAQ,cAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,UAAU,cAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAS;AAAA,EAC/C,UAAU,cAAE,OAAO,EAAE,cAAc,cAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,MAAS;AAAA,EACrF,QAAQ,cAAE,OAAO,EAAE,SAAS,EAAE,MAAM,MAAS;AACjD,CAAC;AASM,IAAM,gBAAgB,cAAE,OAAO;AAAA,EAClC,MAAM;AAAA,EACN,WAAW,gBAAgB,QAAQ,EAAE,MAAM,MAAS;AACxD,CAAC;;;AEtED,IAAAC,cAAkB;;;ACAlB,IAAAC,cAAkB;AAElB,IAAM,YAAY,cAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC;AAE1C,IAAM,YAAY,cAAE,OAAO;AAAA,EAC9B,cAAc,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC;AAAA,EAC9C,cAAc,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC,EAAE,SAAS;AAAA,EACzD,UAAU,cAAE,OAAO;AAAA,EACnB,kBAAkB,cAAE,OAAO;AAAA,EAC3B,WAAW,cAAE,OAAO,EAAE,SAAS;AAAA,EAC/B,eAAe,cAAE,OAAO,cAAE,OAAO,GAAG,cAAE,QAAQ,CAAC,EAAE,SAAS;AAC9D,CAAC;AAED,IAAM,WAAW,cAAE,OAAO;AAAA,EACtB,mBAAmB,cAAE,OAAO;AAAA,EAC5B,UAAU,cAAE,OAAO;AAAA,EACnB,MAAM,cAAE,OAAO;AACnB,CAAC;AAED,IAAM,YAAY,cAAE,OAAO;AAAA,EACvB,KAAK,cAAE,OAAO;AAAA,EACd,WAAW,cAAE,OAAO;AAAA,EACpB,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,OAAO;AACpB,CAAC;AAED,IAAM,QAAQ,cAAE,OAAO;AAAA,EACnB,mBAAmB,cAAE,OAAO;AAAA,EAC5B,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,WAAW,UAAU,SAAS;AAAA,EAC9B,QAAQ,cAAE,OAAO;AAAA,EACjB,IAAI,cAAE,OAAO;AAAA,EACb,YAAY,cAAE,MAAM,SAAS,EAAE,SAAS;AAAA,EACxC,UAAU,cAAE,OAAO;AAAA,EACnB,WAAW,cAAE,OAAO;AAAA,EACpB,KAAK,cAAE,IAAI;AAAA,EACX,WAAW,UAAU,SAAS;AAAA,EAC9B,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EAC9B,OAAO,cAAE,OAAO;AACpB,CAAC;AAED,IAAM,QAAQ,cAAE,OAAO;AAAA,EACnB,mBAAmB,cAAE,OAAO;AAAA,EAC5B,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,WAAW;AAAA,EACX,IAAI,cAAE,OAAO;AAAA,EACb,kBAAkB,cAAE,OAAO;AAAA,EAC3B,UAAU,cAAE,OAAO;AAAA,EACnB,cAAc,cAAE,OAAO,EAAE,QAAQ,cAAE,OAAO,GAAG,KAAK,cAAE,IAAI,GAAG,QAAQ,cAAE,OAAO,GAAG,OAAO,cAAE,OAAO,EAAE,CAAC;AAAA,EAClG,WAAW,cAAE,OAAO;AAAA,EACpB,QAAQ,cAAE,OAAO;AAAA,EACjB,WAAW;AAAA,EACX,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC;AAClC,CAAC;AAED,IAAM,SAAS,cAAE,OAAO;AAAA,EACpB,IAAI,cAAE,OAAO;AAAA,EACb,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO;AAAA,EACnB,WAAW,cAAE,OAAO;AAAA,EACpB,QAAQ,cAAE,MAAM,cAAE,OAAO,CAAC;AAC9B,CAAC;AAID,IAAM,kBAAkB,cAAE,OAAO;AAAA,EAC7B,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,EAChC,UAAU,cAAE,OAAO;AAAA,EACnB,OAAO,cAAE,OAAO;AAAA,EAChB,WAAW,cAAE,OAAO;AACxB,CAAC;AAID,IAAM,UAAU,cAAE,MAAM;AAAA,EACpB,cAAE,OAAO,EAAE,0BAA0B,cAAE,OAAO,GAAG,qBAAqB,cAAE,OAAO,EAAE,CAAC;AAAA,EAClF,cAAE,OAAO,EAAE,wBAAwB,cAAE,OAAO,GAAG,mBAAmB,cAAE,OAAO,EAAE,CAAC;AAAA,EAC9E,cAAE,OAAO,EAAE,0BAA0B,cAAE,OAAO,GAAG,qBAAqB,cAAE,OAAO,EAAE,CAAC;AAAA,EAClF,cAAE,OAAO,EAAE,uBAAuB,cAAE,OAAO,GAAG,kBAAkB,cAAE,OAAO,EAAE,CAAC;AAAA,EAC5E,cAAE,OAAO,EAAE,yBAAyB,cAAE,OAAO,GAAG,oBAAoB,cAAE,OAAO,EAAE,CAAC;AAAA,EAChF,cAAE,OAAO,EAAE,yBAAyB,cAAE,OAAO,GAAG,oBAAoB,cAAE,OAAO,EAAE,CAAC;AAAA,EAChF,cAAE,OAAO,EAAE,4BAA4B,cAAE,OAAO,GAAG,uBAAuB,cAAE,OAAO,EAAE,CAAC;AAAA,EACtF,cAAE,OAAO,EAAE,0BAA0B,cAAE,OAAO,GAAG,qBAAqB,cAAE,OAAO,EAAE,CAAC;AAAA,EAClF,cAAE,OAAO,EAAE,wBAAwB,cAAE,OAAO,GAAG,mBAAmB,cAAE,OAAO,EAAE,CAAC;AAClF,CAAC;AAED,IAAM,cAAc,cAAE,OAAO;AAAA,EACzB,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,IAAI,cAAE,OAAO;AAAA,EACb,MAAM,cAAE,OAAO;AAAA,EACf,SAAS,cAAE,MAAM,cAAE,OAAO,EAAE,MAAM,cAAE,OAAO,GAAG,UAAU,cAAE,OAAO,GAAG,OAAO,cAAE,OAAO,EAAE,CAAC,CAAC;AAAA,EACxF,wBAAwB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,kBAAkB,cAAE,MAAM,eAAe;AAAA,EACzC,kBAAkB,cAAE,OAAO,EAAE,SAAS;AAC1C,CAAC;AAID,IAAM,wBAAwB,cAAE,OAAO;AAAA,EACnC,gBAAgB,cAAE,OAAO;AAAA,EACzB,kBAAkB,cAAE,OAAO;AAAA,EAC3B,OAAO,cAAE,OAAO;AAAA,EAChB,kBAAkB,cAAE,MAAM,eAAe;AAAA,EACzC,oBAAoB,cAAE,OAAO;AAAA,EAC7B,eAAe,cAAE,OAAO;AAC5B,CAAC;AAIM,IAAM,mBAAmB,cAAE,OAAO;AAAA,EACrC,OAAO,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3B,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,IAAI,cAAE,OAAO;AAAA,EACb,MAAM,cAAE,OAAO;AAAA,EACf,SAAS,cAAE,MAAM,MAAM;AAAA,EACvB,qBAAqB,cAAE,QAAQ,EAAE,SAAS;AAAA,EAC1C,cAAc,cAAE,MAAM,WAAW;AAAA,EACjC,UAAU,cAAE,MAAM,cAAE,OAAO,CAAC;AAChC,CAAC;AAID,IAAM,UAAU,cAAE,OAAO;AAAA,EACrB,mBAAmB,cAAE,OAAO;AAAA,EAC5B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,WAAW;AAAA,EACX,oBAAoB,cAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,OAAO,cAAE,OAAO;AAAA,EAChB,IAAI,cAAE,OAAO;AAAA,EACb,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,iBAAiB,cAAE,OAAO,EAAE,SAAS;AAAA,EACrC,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAAA,EACzC,iBAAiB,cAAE,OAAO;AAAA,EAC1B,mBAAmB,cAAE,OAAO;AAAA,EAC5B,MAAM,cAAE,IAAI;AAAA,EACZ,sBAAsB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,SAAS,cAAE,OAAO;AAAA,EAClB,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,UAAU,cAAE,OAAO;AAAA,EACnB,OAAO,cAAE,OAAO;AAAA,EAChB,WAAW,cAAE,OAAO;AAAA,EACpB,kBAAkB,cAAE,QAAQ;AAAA,EAC5B,wBAAwB,cAAE,MAAM,qBAAqB,EAAE,SAAS;AAAA,EAChE,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,SAAS,cAAE,QAAQ;AAAA,EACnB,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO;AAAA,EAChB,WAAW;AAAA,EACX,QAAQ,cAAE,OAAO;AAAA,EACjB,YAAY,cAAE,OAAO,EAAE,SAAS;AACpC,CAAC;AAIM,IAAM,UAAU,cAAE,OAAO;AAAA,EAC5B,mBAAmB,cAAE,OAAO;AAAA,EAC5B,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,WAAW;AAAA,EACX,UAAU,SAAS,QAAQ;AAAA,EAC3B,eAAe,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EACjC,WAAW;AAAA,EACX,aAAa,cAAE,OAAO;AAAA,EACtB,QAAQ,cAAE,OAAO;AAAA,EACjB,mCAAmC,cAAE,QAAQ,EAAE,SAAS;AAAA,EACxD,IAAI,cAAE,OAAO;AAAA,EACb,OAAO,MAAM,SAAS;AAAA,EACtB,QAAQ,cAAE,MAAM,KAAK,EAAE,SAAS;AAAA,EAChC,MAAM,cAAE,IAAI;AAAA,EACZ,OAAO,cAAE,MAAM,KAAK,EAAE,SAAS;AAAA,EAC/B,YAAY,cAAE,MAAM,SAAS,EAAE,SAAS;AAAA,EACxC,SAAS,cAAE,MAAM,MAAM;AAAA,EACvB,OAAO,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC;AAAA,EACvC,aAAa,cAAE,OAAO;AAAA,EACtB,aAAa,UAAU,SAAS;AAAA,EAChC,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,iBAAiB,cAAE,MAAM,cAAE,OAAO,EAAE,iBAAiB,cAAE,MAAM,cAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACrF,SAAS,QAAQ,SAAS;AAAA,EAC1B,8BAA8B,cAAE,OAAO,EAAE,SAAS;AAAA,EAClD,uBAAuB,sBAAsB,SAAS;AAAA,EACtD,mBAAmB,cAAE,MAAM,gBAAgB,EAAE,SAAS;AAAA,EACtD,QAAQ,cAAE,OAAO;AAAA,EACjB,MAAM,cAAE,OAAO;AAAA,EACf,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,OAAO,cAAE,OAAO;AAAA,EAChB,WAAW;AAAA,EACX,aAAa,cAAE,MAAM,cAAE,OAAO,EAAE,mBAAmB,cAAE,OAAO,GAAG,WAAW,UAAU,CAAC,CAAC,EAAE,SAAS;AAAA,EACjG,YAAY,cAAE,MAAM,cAAE,OAAO,EAAE,IAAI,cAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EAC3D,UAAU,cAAE,MAAM,OAAO;AAAA,EACzB,QAAQ,cAAE,OAAO;AACrB,CAAC;;;AD/LD,IAAM,WAAW,cAAE,OAAO;AAAA,EACtB,UAAU,cAAE,OAAO;AAAA,EACnB,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,IAAM,OAAO,SAAS,OAAO;AAAA,EACzB,YAAY,cAAE,MAAM,cAAE,OAAO,EAAE,MAAM,cAAE,OAAO,GAAG,OAAO,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACvG,UAAU,cACL;AAAA,IACG,cAAE,OAAO;AAAA,MACL,WAAW,cAAE,OAAO;AAAA,MACpB,UAAU,cAAE,OAAO,EAAE,OAAO,cAAE,MAAM,cAAE,OAAO,EAAE,OAAO,cAAE,MAAM,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS;AAAA,MACxF,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,IAClC,CAAC;AAAA,EACL,EACC,SAAS;AAClB,CAAC;AAED,IAAM,SAAS,cAAE,OAAO;AAAA,EACpB,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,oBAAoB,cAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,cAAE,OAAO,EAAE,QAAQ,cAAE,OAAO,GAAG,MAAM,cAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,EACtE,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,KAAK,cAAE,OAAO,EAAE,SAAS;AAAA,EACzB,UAAU,cAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,cAAE,OAAO,EAAE,QAAQ,cAAE,OAAO,GAAG,MAAM,cAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,EAC1E,UAAU,cAAE,MAAM,cAAE,OAAO,EAAE,WAAW,cAAE,OAAO,GAAG,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACjG,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAAA,EACzC,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,MAAM,cAAE,OAAO;AAAA,EACf,OAAO,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,GAAG,cAAE,QAAQ,CAAC,CAAC,EAAE,SAAS;AACnE,CAAC;AAED,IAAM,cAAc,cAAE,OAAO;AAAA,EACzB,WAAW,cAAE,QAAQ,EAAE,SAAS;AAAA,EAChC,eAAe,cAAE,QAAQ;AAAA,EACzB,OAAO,cAAE,OAAO;AAAA,EAChB,OAAO,cAAE,MAAM,cAAE,OAAO,EAAE,OAAO,cAAE,MAAM,IAAI,EAAE,CAAC,CAAC;AAAA,EACjD,QAAQ,cAAE,MAAM,MAAM;AAC1B,CAAC;AAQM,IAAM,cAAc,cAAE,OAAO,EAAE,QAAQ,cAAE,OAAO,EAAE,YAAY,cAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAI9E,IAAM,WAAW,cAAE,OAAO;AAAA,EAC7B,WAAW,UAAU,SAAS;AAAA,EAC9B,WAAW,cAAE,MAAM,cAAE,MAAM,CAAC,EAAE,SAAS;AAAA,EACvC,QAAQ,cAAE,MAAM,cAAE,MAAM,CAAC,EAAE,SAAS;AAAA,EACpC,uBAAuB,cAAE,MAAM,cAAE,MAAM,CAAC,EAAE,SAAS;AAAA,EACnD,qBAAqB,cAAE,MAAM,OAAO,EAAE,SAAS;AAAA,EAC/C,wBAAwB,cAAE,MAAM,OAAO,EAAE,SAAS;AAAA,EAClD,eAAe,cAAE,MAAM,cAAE,MAAM,CAAC,EAAE,SAAS;AAAA,EAC3C,cAAc,cAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EAC5C,kBAAkB,cAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,kBAAkB,cAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EAChD,gBAAgB,cAAE,MAAM,WAAW,EAAE,SAAS;AAAA,EAC9C,QAAQ,cACH,OAAO;AAAA,IACJ,UAAU,cAAE,OAAO,EAAE,QAAQ,cAAE,OAAO,GAAG,MAAM,cAAE,OAAO,EAAE,CAAC,EAAE,SAAS;AAAA,IACtE,UAAU,cAAE,OAAO,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACxD,CAAC,EACA,SAAS;AAClB,CAAC;;;AE7ED,IAAAC,cAAkB;AAOlB,IAAM,uBAAuB,cAAE,OAAO;AAAA,EAClC,QAAQ,cAAE,MAAM,CAAC,cAAE,OAAO,GAAG,cAAE,OAAO,CAAC,CAAC;AAAA,EACxC,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,MAAM,cAAE,OAAO;AACnB,CAAC;AAED,IAAM,qBAAqB,cAAE,OAAO;AAAA,EAChC,IAAI,cAAE,OAAO;AAAA,EACb,MAAM,cAAE,OAAO;AAAA,EACf,UAAU,cAAE,OAAO;AAAA,EACnB,QAAQ,cAAE,MAAM,cAAE,OAAO,CAAC;AAC9B,CAAC;AAGD,IAAM,sBAAsB,cAAE,OAAO;AAAA,EACjC,mBAAmB,cAAE,OAAO;AAAA,EAC5B,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,IAAI,cAAE,OAAO;AAAA,EACb,qBAAqB,cAAE,OAAO,EAAE,SAAS;AAAA,EACzC,iBAAiB,cAAE,OAAO;AAAA,EAC1B,mBAAmB,cAAE,OAAO;AAAA,EAC5B,MAAM,cAAE,OAAO;AAAA,EACf,SAAS,cAAE,OAAO;AAAA,EAClB,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,SAAS,cAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,cAAE,OAAO;AAAA,EAChB,OAAO,cAAE,OAAO;AACpB,CAAC;AAUM,IAAM,eAAe,cAAE,OAAO;AAAA,EACjC,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,EACjC,UAAU,qBAAqB,SAAS;AAAA,EACxC,IAAI,cAAE,OAAO;AAAA,EACb,OAAO,cAAE,OAAO,EAAE,KAAK,cAAE,OAAO,EAAE,CAAC,EAAE,QAAQ;AAAA,EAC7C,QAAQ,cAAE,MAAM,cAAE,OAAO,EAAE,KAAK,cAAE,OAAO,GAAG,YAAY,cAAE,MAAM,cAAE,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ;AAAA,EACxF,MAAM,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,YAAY,cAAE,MAAM,cAAE,OAAO,EAAE,KAAK,cAAE,OAAO,GAAG,WAAW,cAAE,OAAO,GAAG,OAAO,cAAE,OAAO,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EACtG,SAAS,cAAE,MAAM,kBAAkB;AAAA,EACnC,mBAAmB,cAAE,MAAM,cAAE,OAAO,EAAE,qBAAqB,cAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS;AAAA,EAC/F,OAAO,cAAE,OAAO;AAAA,EAChB,UAAU,cAAE,MAAM,mBAAmB;AACzC,CAAC;;;ACzDD,IAAAC,cAAkB;AAGX,IAAM,aAAa,cAAE,OAAO;AAAA,EAC/B,mBAAmB,cAAE;AAAA,IACjB,cAAE,OAAO;AAAA,MACL,MAAM,cAAE;AAAA,QACJ,cAAE,OAAO;AAAA,UACL,WAAW,cAAE,OAAO;AAAA,UACpB,UAAU,cAAE,OAAO,EAAE,QAAQ;AAAA,UAC7B,WAAW,cAAE,OAAO,OAAO;AAAA,UAC3B,IAAI,cAAE,OAAO,OAAO;AAAA,UACpB,iBAAiB,cAAE,OAAO,EAAE,QAAQ;AAAA,UACpC,SAAS,cAAE,OAAO,OAAO;AAAA,QAC7B,CAAC;AAAA,MACL;AAAA,MACA,IAAI,cAAE,OAAO,OAAO;AAAA,MACpB,MAAM,cAAE,OAAO;AAAA,MACf,YAAY,cAAE,OAAO,EAAE,SAAS;AAAA,MAChC,eAAe,cAAE,OAAO,EAAE,SAAS;AAAA,MACnC,eAAe,cAAE,OAAO,OAAO,EAAE,SAAS;AAAA,MAC1C,MAAM,cAAE,OAAO;AAAA,IACnB,CAAC;AAAA,EACL;AAAA,EACA,gBAAgB,cAAE;AAAA,IACd,cAAE,OAAO;AAAA,MACL,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,MACjC,IAAI,cAAE,OAAO;AAAA,MACb,aAAa,cAAE,OAAO,EAAE,SAAS;AAAA,MACjC,UAAU,cAAE,QAAQ;AAAA,MACpB,YAAY,cAAE,QAAQ;AAAA,MACtB,WAAW,cAAE,OAAO;AAAA,MACpB,aAAa,cAAE,OAAO;AAAA,MACtB,WAAW,cAAE,OAAO;AAAA,MACpB,WAAW,cAAE,OAAO;AAAA,MACpB,eAAe,cAAE,OAAO,EAAE,SAAS;AAAA,IACvC,CAAC;AAAA,EACL;AAAA,EACA,QAAQ,cAAE,OAAO;AAAA,EACjB,gBAAgB,cAAE,OAAO,EAAE,SAAS;AAAA,EACpC,UAAU,cAAE,OAAO,OAAO;AAAA,EAC1B,UAAU,cAAE,KAAK,CAAC,YAAY,QAAQ,CAAC;AAAA,EACvC,UAAU,cAAE,OAAO;AAAA,EACnB,gBAAgB,cAAE,OAAO;AAAA,EACzB,QAAQ,cAAE,OAAO;AAAA,EACjB,eAAe,cAAE,QAAQ;AAAA,EACzB,8BAA8B,cAAE,MAAM,cAAE,OAAO,CAAC;AAAA,EAChD,4BAA4B,cAAE,QAAQ;AAAA,EACtC,uBAAuB,cAAE,QAAQ;AAAA,EACjC,IAAI,cAAE,OAAO,OAAO;AAAA,EACpB,cAAc,cAAE;AAAA,IACZ,cAAE,KAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,IACD,cAAE,MAAM,CAAC,cAAE,QAAQ,GAAG,cAAE,QAAQ,CAAC,CAAC;AAAA,EACtC;AAAA,EACA,SAAS,cAAE,OAAO;AAAA,IACd,SAAS,cAAE,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,UAAU,cACL,OAAO;AAAA,IACJ,cAAc,cAAE,OAAO,EAAE,SAAS;AAAA,EACtC,CAAC,EACA,QAAQ;AAAA,EACb,aAAa,cAAE,OAAO;AAAA,EACtB,iBAAiB,cAAE,OAAO;AAAA,EAC1B,eAAe,cAAE,OAAO;AAAA,EACxB,sBAAsB,cAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,UAAU,CAAC,UAAU,UAAU,KAAK;AAAA,EAChF,sBAAsB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC1C,qBAAqB,cAAE,QAAQ;AAAA,EAC/B,QAAQ,cAAE,OAAO;AAAA,EACjB,4BAA4B,cAAE,QAAQ;AAAA,EACtC,UAAU,cAAE,OAAO;AAAA,EACnB,uBAAuB,cAAE,OAAO,EAAE,SAAS;AAAA,EAC3C,eAAe,cAAE,QAAQ;AAC7B,CAAC;;;ACrFD,IAAAC,cAAkB;AAKX,IAAM,aAAa,cAAE,OAAO;AAAA,EAC/B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,EAKN,WAAW,gBAAgB,QAAQ,EAAE,MAAM,MAAS;AAAA,EACpD,YAAY,cAAE,MAAM,cAAE,QAAQ,CAAC;AACnC,CAAC;;;ACbD,IAAAC,eAAkB;;;ACAlB,IAAAC,cAAkB;AAEX,IAAM,uBAAuB,cAAE,YAAY;AAAA,EAC9C,MAAM,cAAE,QAAQ,aAAa;AACjC,CAAC;;;ACJD,wBAAuB;;;ACAhB,IAAM,aAAa,CAA8B,WACpD,OAAO,OAAO,OAAO,YAAY,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExD,IAAM,eAAe,CAAC,QAAQ,WAAW,WAAW,UAAU;AAC9D,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,cAAc,CAAC,QAAQ,SAAS,QAAQ,SAAS,cAAc;AACrE,IAAM,eAAe,WAAW,WAAW;AAG3C,IAAM,eAAe,CAAC,QAAQ,QAAQ,UAAU,QAAQ;AACxD,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,eAAe,CAAC,QAAQ,UAAU,OAAO;AAC/C,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,gBAAgB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,eAAe,WAAW,aAAa;AAG7C,IAAM,eAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,eAAe,CAAC,WAAW,aAAa,SAAS,QAAQ;AAC/D,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,aAAa,CAAC,WAAW,QAAQ,MAAM;AAC7C,IAAM,YAAY,WAAW,UAAU;AAGvC,IAAM,kBAAkB,CAAC,SAAS,kBAAkB;AACpD,IAAM,iBAAiB,WAAW,eAAe;AAGjD,IAAM,gBAAgB,CAAC,QAAQ,cAAc,SAAS,cAAc;AACpE,IAAM,eAAe,WAAW,aAAa;AAG7C,IAAM,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,aAAa,WAAW,WAAW;AAGzC,IAAM,uBAAuB,CAAC,SAAS,UAAU,KAAK;AACtD,IAAM,sBAAsB,WAAW,oBAAoB;AAG3D,IAAM,eAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,aAAa,CAAC,SAAS,SAAS;AACtC,IAAM,YAAY,WAAW,UAAU;AAGvC,IAAM,mBAAmB,CAAC,eAAe,aAAa,cAAc,UAAU;AAC9E,IAAM,kBAAkB,WAAW,gBAAgB;AAGnD,IAAM,qBAAqB;AAAA,EAC9B,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,OAAO;AAAA,EACP,KAAK;AACT;AAEO,IAAM,eAAe,CAAC,YAAY,gBAAgB,MAAM;AACxD,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,oBAAoB,CAAC,cAAc,YAAY,WAAW,UAAU;AAC1E,IAAM,mBAAmB,WAAW,iBAAiB;AAGrD,IAAM,oBAAoB,CAAC,YAAY,MAAM;AAC7C,IAAM,mBAAmB,WAAW,iBAAiB;AAGrD,IAAM,iBAAiB,CAAC,UAAU,QAAQ;AAC1C,IAAM,gBAAgB,WAAW,cAAc;AAG/C,IAAM,eAAe,CAAC,SAAS,WAAW,OAAO;AACjD,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,eAAe;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,WAAW,CAAC,QAAQ,cAAc,SAAS,QAAQ,SAAS,YAAY;AAC9E,IAAM,UAAU,WAAW,QAAQ;AAGnC,IAAM,iBAAiB,CAAC,SAAS,UAAU,KAAK;AAChD,IAAM,gBAAgB,WAAW,cAAc;AAG/C,IAAM,iBAAiB,CAAC,QAAQ,WAAW,UAAU,cAAc,WAAW,WAAW,UAAU;AACnG,IAAM,gBAAgB,WAAW,cAAc;AAG/C,IAAM,gBAAgB,CAAC,cAAc,SAAS,QAAQ,UAAU,SAAS,YAAY;AACrF,IAAM,eAAe,WAAW,aAAa;AAG7C,IAAM,eAAe,CAAC,YAAY,QAAQ;AAC1C,IAAM,cAAc,WAAW,YAAY;AAG3C,IAAM,mBAAmB,CAAC,QAAQ,SAAS,QAAQ;AACnD,IAAM,kBAAkB,WAAW,gBAAgB;AAGnD,IAAM,qBAAqB,CAAC,OAAO,UAAU,QAAQ;AACrD,IAAM,oBAAoB,WAAW,kBAAkB;;;ADlNvD,IAAM,oBAAoB;AAAA,EAC7B,EAAE,OAAO,oBAAoB,OAAO,wBAAwB;AAAA,EAC5D,EAAE,OAAO,eAAe,OAAO,wBAAwB;AAAA,EACvD,EAAE,OAAO,gBAAgB,OAAO,sBAAsB;AAAA,EACtD,EAAE,OAAO,mBAAmB,OAAO,mBAAmB;AAAA,EACtD,EAAE,OAAO,mBAAmB,OAAO,mBAAmB;AAAA,EACtD,EAAE,OAAO,uBAAuB,OAAO,wBAAwB;AAAA,EAC/D,EAAE,OAAO,yBAAyB,OAAO,6BAA6B;AAC1E;AAEO,IAAM,mBAAmB;AAAA,EAC5B,EAAE,OAAO,oBAAoB,OAAO,wBAAwB;AAAA,EAC5D,EAAE,OAAO,eAAe,OAAO,wBAAwB;AAAA,EACvD,EAAE,OAAO,qBAAqB,OAAO,8BAA8B;AAAA,EACnE,EAAE,OAAO,gBAAgB,OAAO,sBAAsB;AAAA,EACtD,EAAE,OAAO,uBAAuB,OAAO,wBAAwB;AAAA,EAC/D,EAAE,OAAO,mBAAmB,OAAO,mBAAmB;AAAA,EACtD,EAAE,OAAO,mBAAmB,OAAO,mBAAmB;AAAA,EACtD,EAAE,OAAO,mBAAmB,OAAO,mBAAmB;AAAA,EACtD,EAAE,OAAO,yBAAyB,OAAO,6BAA6B;AAC1E;AAEO,IAAM,yBAAqB,0BAAO,CAAC,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,CAAC,SAAS,KAAK,KAAK;AAEnG,IAAM,cAAc;AAAA,EACvB,CAAC,WAAW,iBAAiB,GAAG;AAAA,IAC5B,EAAE,MAAM,mBAAmB,OAAO,eAAe,OAAO,QAAQ;AAAA,IAChE,EAAE,MAAM,oBAAoB,OAAO,eAAe,OAAO,QAAQ;AAAA,IACjE,EAAE,MAAM,qBAAqB,OAAO,kBAAkB,OAAO,QAAQ;AAAA,EACzE;AAAA,EACA,CAAC,WAAW,iBAAiB,GAAG;AAAA,EAChC,CAAC,WAAW,YAAY,GAAG;AAAA,IACvB,EAAE,MAAM,mBAAmB,OAAO,eAAe,OAAO,QAAQ;AAAA,IAChE,EAAE,MAAM,oBAAoB,OAAO,eAAe,OAAO,QAAQ;AAAA,IACjE,EAAE,MAAM,qBAAqB,OAAO,kBAAkB,OAAO,QAAQ;AAAA,EACzE;AAAA,EACA,CAAC,WAAW,eAAe,GAAG;AAAA;AAAA,IAE1B,EAAE,MAAM,mBAAmB,OAAO,eAAe,OAAO,SAAS;AAAA,IACjE,EAAE,MAAM,MAAM,MAAM,iBAAiB,OAAO,aAAa,OAAO,QAAQ;AAAA,IACxE,EAAE,MAAM,sBAAsB,OAAO,eAAe,OAAO,SAAS;AAAA,EACxE;AAAA,EACA,CAAC,WAAW,eAAe,GAAG;AAAA;AAAA,IAE1B,EAAE,MAAM,mBAAmB,OAAO,aAAa,OAAO,SAAS;AAAA,EACnE;AAAA,EACA,CAAC,WAAW,mBAAmB,GAAG;AAAA;AAAA,IAE9B,EAAE,MAAM,mBAAmB,OAAO,aAAa,OAAO,SAAS;AAAA,EACnE;AACJ;AAEO,IAAM,cAAc;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEO,IAAM,aAAa,WAAW,WAAW;;;AElFhD,IAAAC,cAAkB;AAIX,IAAM,oBAAoB,cAAE,YAAY;AAAA,EAC3C,MAAM,cAAE,QAAQ,WAAW,0BAA0B,EAAE,QAAQ,WAAW,0BAA0B;AACxG,CAAC;;;ACND,IAAAC,eAAkB;;;ACAlB,IAAAC,eAAkB;;;ACAlB,IAAAC,gBAA6B;AAC7B,IAAAC,eAAkB;;;ACDlB,IAAAC,eAAkB;AAEX,IAAM,YAAY;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,WAAW,eAAE,KAAK,SAAS;AAE1B,IAAM,WAAW,SAAS;AAG1B,IAAM,gBAAgB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,eAAe,eAAE,KAAK,aAAa;AAElC,IAAM,eAAe,aAAa;AAGlC,IAAM,gBAAgB,eAAE,OAAO;AAAA,EAClC,UAAU,eAAE,KAAK,aAAa,EAAE,QAAQ,aAAa,QAAQ;AAAA,EAC7D,UAAU,eAAE,MAAM,CAAC,eAAE,MAAM,eAAE,QAAQ,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EAClG,MAAM,eAAE,KAAK,SAAS,EAAE,QAAQ,SAAS,aAAa;AAAA,EACtD,OAAO,eAAE,OAAO,OAAO,EAAE,QAAQ,EAAE;AACvC,CAAC;AAIM,IAAM,iBAAiB,eAAE,OAAO;AAAA,EACnC,OAAO,eAAE,MAAM,aAAa,EAAE,QAAQ,MAAM,CAAC,CAAC;AAClD,CAAC;AAIM,IAAM,UAAU,eAAE,OAAO;AAAA,EAC5B,cAAc,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,SAAS,eACJ,MAAM;AAAA,IACH,eAAE;AAAA,MACE,eAAE,OAAO;AAAA,QACL,eAAe,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,QACvC,OAAO,eAAE,MAAM,cAAc,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,QAC/C,QAAQ,eACH;AAAA,UACG,eAAE,OAAO;AAAA,YACL,KAAK,eAAE,OAAO,EAAE,QAAQ,aAAa;AAAA,YACrC,MAAM,eAAE,QAAQ,WAAW,EAAE,QAAQ,WAAW;AAAA,YAChD,OAAO,eAAE,OAAO,EAAE,QAAQ,MAAM;AAAA,UACpC,CAAC;AAAA,QACL,EACC,QAAQ,MAAM,CAAC,EAAE,KAAK,eAAe,MAAM,aAAsB,OAAO,OAAO,CAAC,CAAC;AAAA,MAC1F,CAAC;AAAA,IACL;AAAA,IACA,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,QAAQ,MAAM,CAAC,CAAC;AACzB,CAAC;;;AClFD,IAAAC,eAAgC;;;ACDhC,IAAAC,eAAkB;AAMX,IAAM,mBAAmB,eAAE;AAAA,EAAK,MACnC,iBAAiB,KAAK,EAAE,aAAa,KAAK,CAAC,EAAE,OAAO;AAAA,IAChD,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA,IAC3C,OAAO,eAAE,KAAK,YAAY,EAAE,QAAQ,MAAM;AAAA,IAC1C,aAAa,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACrC,aAAa,eAAE,QAAQ,YAAY,MAAM,EAAE,QAAQ,YAAY,MAAM;AAAA,EACzE,CAAC;AACL;;;ACbA,IAAAC,eAA6B;AAC7B,IAAAC,eAAgC;;;ACDhC,kBAA6B;AAC7B,IAAAC,eAAkB;;;ACAX,IAAM,qBAAqB;AAG3B,IAAM,sBAAsB;AAG5B,IAAM,kBAAkB;AAMxB,IAAM,2BAA2B;AAejC,IAAM,kBAAkB;;;AC5B/B,IAAAC,qBAAyC;AACzC,oBAAkE;AAsB3D,IAAM,SAAS,CAAC,OAA2B,OAAgB;AAC9D,MAAI,OAAO,WAAW,aAAa;AAC/B,UAAM,SAAS,IAAI,UAAU;AAC7B,UAAM,MAAM,OAAO,gBAAgB,MAAM,WAAW;AAEpD,UAAM,UAAU,CAAC,aAAuB,MAAM,KAAK,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,aAAa,CAAC;AAE/F,WAAO,QAAQ,IAAI,KAAK,UAAU,KAAK,QAAQ,IAAI,KAAK,UAAU;AAAA,EACtE;AAIA,SAAO,KAAK,OAAO,eAAe,MAAM;AAC5C;AAEO,IAAM,eAAe,CAAC,QACzB,IAAI,QAAQ,KAAK,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC,EAAE,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC;AAE5E,IAAM,eAAe,CAAC,UACzB,MAAG,wBAAS,KAAK,KAAK,OAAO,KAAK,SAAO,kCAAc,KAAK,KAAK,aAAa,KAAuB;AAElG,IAAM,UAAU,EAAE,SAAS,wBAAwB;AAEnD,IAAM,eAAe,CAAC,gBACzB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,eAAe,CAAC,gBACzB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,mBAAmB,CAAC,gBAC7B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,cAAc,CAAC,gBACxB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,eAAe,CAAC,gBACzB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,eAAe,CAAC,gBACzB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,gBAAgB,CAAC,YAC1B,aAAa,OAAO,SAAK,mBAAI,SAAS,aAAa,MAAM,YAAY;AAElE,IAAM,gBAAgB,CAAC,gBAC1B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,oBAAoB,CAAC,gBAC9B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,gBAAgB,CAAC,gBAC1B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,aAAa,CAAC,gBACvB,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEzC,IAAM,iBAAiB,CAAC,gBAC3B,mBAAI,SAAS,aAAa,MAAM,YAAY;AAEhD,IAAM,qBAAqB,CAAC,UACxB,CAAC,KAAC,oBAAK,KAAK,SAAK,qBAAM,OAAO,CAAC,GAAG,QAAQ,mBAAmB,KAAK,GAAG,KAAK,OAAO,cAAc,OAAO,GAAG,CAAC,CAAC;AAE/G,IAAM,uBAAuB,CAAC,cAC1B,uBAAQ,KAAK,EACR,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,OAAO,CAAC,CAAC,EACxC,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,KAAK;AAE3B,IAAM,wBAAwB,CAAC,UAA4B;AAC9D,UAAI,uBAAQ,KAAK,EAAG,YAAO,mBAAI,OAAO,qBAAqB;AAE3D,UAAI,kCAAc,KAAK,GAAG;AACtB,UAAM,MAAM;AAEZ,WAAO,mBAAmB,GAAG,QACvB,mBAAI,qBAAqB,GAAG,GAAG,qBAAqB,QACpD,8BAAU,KAAK,qBAAqB;AAAA,EAC9C;AAEA,SAAO;AACX;;;AF/GO,IAAM,kBAAkB,eAAE,OAAO;AAAA,EACpC,SAAS,eAAE,OAAO,EAAE,OAAO,cAAc,OAAO,EAAE,QAAQ,EAAE;AAAA,EAC5D,aAAa,eAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACjD,QAAQ,eAAE,KAAK,MAAM,SAAS;AAAA,EAC9B,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA,EAC3C,UAAU,eAAE,KAAK,CAAC,WAAW,SAAS,mBAAmB,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACpG,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,eAAe,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EACnC,cAAc,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlC,WAAW,eAAE,KAAK,UAAU,EAAE,QAAQ,UAAU,OAAO;AAAA,EACvD,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,YAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,KAAK,EAAE,QAAQ,YAAY,KAAK;AAAA,EACnE,QAAQ,eAAE,MAAM,CAAC,eAAE,IAAI,GAAG,eAAE,QAAQ,EAAE,GAAG,eAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,EAC3F,OAAO,eAAE,OAAO,EAAE,QAAQ,GAAG;AACjC,CAAC;;;AG5BD,IAAAC,iBAAkC;AAClC,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;AAsBlB,IAAM,aAAa,IAA8C,SAC7D,eACK,OAAO,EACP,UAAU,CAAC,QAAS,KAAK,SAAS,GAAgB,IAAK,MAAoB,MAAU,EACrF,SAAS;AAEX,IAAM,aAAa,eAAE,OAAO;AAAA,EAC/B,OAAO,eACF,MAAM;AAAA,IACH,eAAE;AAAA,MACE,eAAE,mBAAmB,QAAQ;AAAA,QACzB,eAAE,OAAO,EAAE,MAAM,eAAE,QAAQ,MAAM,EAAE,CAAC;AAAA,QACpC,eAAE,OAAO,EAAE,MAAM,eAAE,QAAQ,QAAQ,EAAE,CAAC;AAAA,QACtC,eAAE,OAAO;AAAA,UACL,OAAO,eAAE,OAAO;AAAA,YACZ,OAAO,eAAE,OAAO,EAAE,SAAS;AAAA,YAC3B,MAAM,eAAE,MAAM;AAAA,cACV,eAAE,IAAI;AAAA,cACN,eAAE,QAAQ,GAAG;AAAA,cACb,eAAE,OAAO,EAAE,MAAM,mBAAmB;AAAA,cACpC,eAAE,OAAO,EAAE,MAAM,wBAAwB;AAAA,YAC7C,CAAC;AAAA,YACD,KAAK,eAAE,OAAO,EAAE,QAAQ,8BAA8B;AAAA,YACtD,QAAQ,eAAE,OAAO,EAAE,QAAQ,QAAQ;AAAA,UACvC,CAAC;AAAA,UACD,MAAM,eAAE,QAAQ,MAAM;AAAA,QAC1B,CAAC;AAAA,QACD,eAAE,OAAO,EAAE,MAAM,eAAE,QAAQ,QAAQ,EAAE,CAAC;AAAA,QACtC,eAAE,OAAO;AAAA,UACL,OAAO,eAAE,OAAO;AAAA,YACZ,OAAO,WAAW,GAAG,cAAc,EAAE,QAAQ,cAAc,IAAI;AAAA,YAC/D,UAAU,WAAW,GAAG,aAAa,EAAE,QAAQ,aAAa,IAAI;AAAA,UACpE,CAAC;AAAA,UACD,MAAM,eAAE,QAAQ,WAAW;AAAA,QAC/B,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAAA,IACA,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,SAAS;AAAA,EACd,MAAM,eAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAC3B,MAAM,eAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM;AAC1C,CAAC;AAIM,IAAM,kBAAkB,eAAE,OAAO;AAAA,EACpC,OAAO,eACF,OAAO;AAAA,IACJ,WAAW,WAAW,GAAG,cAAc;AAAA,EAC3C,CAAC,EACA,QAAQ,EAAE,WAAW,cAAc,MAAM,CAAC;AAAA,EAC/C,SAAS,eAAE,MAAM,CAAC,eAAE,MAAM,UAAU,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EAChG,MAAM,eAAE,QAAQ,WAAW,EAAE,QAAQ,WAAW;AACpD,CAAC;AAIM,IAAM,iBAAiB,eAAE,OAAO;AAAA,EACnC,OAAO,eACF,OAAO;AAAA,IACJ,cAAc,WAAW,GAAG,QAAQ;AAAA,EACxC,CAAC,EACA,QAAQ,EAAE,cAAc,QAAQ,KAAK,CAAC;AAAA,EAC3C,SAAS,eACJ,MAAM,CAAC,eAAE,MAAM,eAAe,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EACxE,QAAQ,MAAM,CAAC,gBAAgB,MAAM,CAAC,CAAC,CAAC,CAAC;AAAA,EAC9C,MAAM,eAAE,QAAQ,KAAK,EAAE,QAAQ,KAAK;AACxC,CAAC;AASM,IAAM,cAAc,eAAE,OAAO;AAAA,EAChC,WAAW,eAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACxC,YAAY,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,QAAQ,OAAO,CAAC,EAAE;AAAA,EACnF,QAAQ,eAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,eAAE,KAAK,iBAAiB,EAAE,QAAQ,iBAAiB,QAAQ;AACzE,CAAC;AAIM,IAAM,iBAAiB,eACzB,OAAO;AAAA,EACJ,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA,EAC3C,SAAS,eACJ,OAAO,eAAE,OAAO,GAAG,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,OAAO,cAAc,OAAO,EAAE,SAAS,CAAC,EACjG,QAAQ,EAAE,IAAI,eAAe,MAAM,CAAC,CAAC,EAAE,CAAC,EACxC,SAAS;AAAA,EACd,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,IAAI,EAAE,QAAQ,YAAY,IAAI;AAAA,EACjE,MAAM,YAAY,SAAS;AAC/B,CAAC,EACA,YAAY,CAAC,EAAE,aAAa,QAAQ,GAAG,QAAQ;AAC5C,MAAI,gBAAgB,YAAY,kBAAkB,SAAS;AACvD,gCAAQ,SAAS,CAAC,OAAO,SAAS;AAC9B,UAAI,aAAS,yBAAS,KAAK,GAAG;AAC1B,YAAI,oBAAoB,KAAK,KAAK,EAAG;AAErC,YAAI;AACA,cAAI,IAAI,KAAK;AAAA,QACjB,QAAQ;AACJ,cAAI,SAAS;AAAA,YACT,MAAM;AAAA,YACN,SAAS;AAAA,YACT,MAAM,CAAC,WAAW,IAAI;AAAA,UAC1B,CAAC;AAAA,QACL;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AACJ,CAAC;;;AJxHE,IAAM,mBAA8C,eAAE;AAAA,EAAK,MAC9D,eAAE,mBAAmB,eAAe,CAAC,iBAAiB,kBAAkB,cAAc,CAAC;AAC3F;AAEO,IAAM,mBAAmB,eAAE,OAAO;AAAA,EACrC,QAAQ,eAAE,MAAM,CAAC,eAAE,QAAQ,EAAE,GAAG,eAAE,KAAK,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,EAClE,aAAa,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,OAAO;AAAA,EAC7D,QAAQ,eACH,OAAO;AAAA,IACJ,OAAO,eAAE,OAAO,EAAE,MAAM,eAAe,EAAE,QAAQ,SAAS;AAAA,IAC1D,QAAQ,eAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,IAC7B,OAAO,eAAE,OAAO,EAAE,QAAQ,GAAG;AAAA,EACjC,CAAC,EACA,QAAQ;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACX,CAAC;AAAA,EACL,kBAAkB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC3C,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,SAAS,eACJ,OAAO;AAAA,IACJ,WAAW,eAAE,KAAK,cAAc,EAAE,QAAQ,cAAc,MAAM;AAAA,IAC9D,UAAU,eAAE,KAAK,gBAAgB,EAAE,QAAQ,gBAAgB,UAAU;AAAA,EACzE,CAAC,EACA,SAAS,EACT,QAAQ,OAAO;AAAA,IACZ,WAAW,cAAc;AAAA,IACzB,UAAU,gBAAgB;AAAA,EAC9B,EAAE;AAAA,EACN,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,UAAU,eAAE,MAAM,CAAC,eAAE,MAAM,gBAAgB,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EACvG,aAAa,eAAE,QAAQ,YAAY,MAAM,EAAE,QAAQ,YAAY,MAAM;AAAA;AAAA,EAErE,aAAa,eAAE,OAAO,EAAE,SAAS;AACrC,CAAC;;;AK3DD,IAAAC,eAAkB;;;ACAlB,IAAAC,eAAkB;;;ACAlB,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;AAMX,IAAM,cAAc,eAAE,OAAO;AAAA,EAChC,QAAQ,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;AAAA,EACjD,cAAc,eAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,eAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,MAAS;AAAA,EAClE,MAAM,eAAE,KAAK,aAAa,EAAE,MAAM,MAAM;AAC5C,CAAC;AAIM,IAAM,kBAAkB,eAAE,OAAO;AAAA,EACpC,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,OAAO,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAChC,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,MAAM,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAC/B,QAAQ,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,QAAQ,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjC,WAAW,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAClC,OAAO,eAAE,QAAQ,EAAE,QAAQ,KAAK;AACpC,CAAC;AAIM,IAAM,uBAAuB,eAAE,OAAO;AAAA,EACzC,cAAc,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAChD,gBAAgB,eAAE,OAAO,EAAE,QAAQ,kBAAkB,CAAC,EAAE,KAAK;AAAA,EAC7D,UAAU,YAAY,SAAS;AAAA,EAC/B,cAAc,gBAAgB,SAAS;AAAA,EACvC,OAAO,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC3B,cAAc,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvC,wBAAwB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjD,MAAM,eAAE,OAAO,EAAE,QAAQ,kBAAkB,CAAC,EAAE,KAAK;AAAA,EACnD,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA,EAC3C,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,UAAU,EAAE,QAAQ,YAAY,UAAU;AAAA;AAAA,EAE7E,uBAAuB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EAChD,YAAY,eAAE,QAAQ,EAAE,QAAQ,KAAK;AACzC,CAAC;;;AC7CD,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;;;ACDlB,IAAAC,eAA6B;AAC7B,IAAAC,eAAgC;AASzB,IAAM,oBAAgD,eAAE;AAAA,EAAK,MAChE,eAAE,mBAAmB,eAAe,CAAC,kBAAkB,cAAc,CAAC;AAC1E;AAEO,IAAM,oBAAoB,eAAE,OAAO;AAAA,EACtC,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC7C,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,UAAU,eAAE,MAAM,CAAC,eAAE,MAAM,iBAAiB,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EACxG,aAAa,eAAE,QAAQ,YAAY,OAAO,EAAE,QAAQ,YAAY,OAAO;AAAA,EACvE,WAAW,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,KAAK,gBAAgB,EAAE,QAAQ,gBAAgB,IAAI,CAAC,EAAE,QAAQ,OAAO,CAAC,EAAE;AAAA,EAC1G,aAAa,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,QAAQ;AAClE,CAAC;;;ADfM,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,UAAU,eACL,MAAM,CAAC,eAAE,MAAM,eAAE,KAAK,MAAM,iBAAiB,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EACxF,QAAQ,MAAM,CAAC,CAAC;AAAA,EACrB,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAC7E,CAAC;;;AFHM,IAAM,mBAAmB,eAAE;AAAA,EAAK,MACnC,iBAAiB,KAAK,EAAE,UAAU,MAAM,aAAa,KAAK,CAAC,EAAE,OAAO;AAAA,IAChE,UAAU,eAAE,MAAM,CAAC,eAAE,MAAM,eAAE,KAAK,MAAM,UAAU,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM;AAAA,MACzG,iBAAiB,MAAM;AAAA,QACnB,aAAa;AAAA,QACb,OAAO;AAAA,QACP,aAAa;AAAA,QACb,MAAM;AAAA,QACN,UAAU;AAAA,UACN,eAAe,MAAM,EAAE,SAAS,EAAE,IAAI,+CAA+C,EAAE,CAAC;AAAA,UACxF,iBAAiB,MAAM,EAAE,QAAQ,kBAAkB,aAAa,YAAY,MAAM,CAAC;AAAA,QACvF;AAAA,MACJ,CAAC;AAAA,MACD,qBAAqB,MAAM,CAAC,CAAC;AAAA,MAC7B,mBAAmB,MAAM,CAAC,CAAC;AAAA,IAC/B,CAAC;AAAA,IACD,aAAa,eAAE,QAAQ,YAAY,MAAM,EAAE,QAAQ,YAAY,MAAM;AAAA,EACzE,CAAC;AACL;;;ADtBO,IAAM,qBAAqB,eAAE;AAAA,EAAK,MACrC,iBAAiB,KAAK,EAAE,UAAU,MAAM,aAAa,KAAK,CAAC,EAAE,OAAO;AAAA,IAChE,qBAAqB,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,IACzC,aAAa,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA,IACxC,UAAU,eACL,MAAM,CAAC,eAAE,MAAM,eAAE,KAAK,MAAM,UAAU,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EACjF,QAAQ,MAAM,CAAC,iBAAiB,MAAM,CAAC,CAAC,CAAC,CAAC;AAAA,IAC/C,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAAA,EAC7E,CAAC;AACL;;;AKhBA,IAAAC,eAAkB;AAOX,IAAM,qBAAqB,eAAE;AAAA,EAAK,MACrC,iBAAiB,KAAK,EAAE,UAAU,MAAM,aAAa,KAAK,CAAC,EAAE,OAAO;AAAA,IAChE,UAAU,eACL,MAAM,CAAC,eAAE,MAAM,eAAE,KAAK,MAAM,UAAU,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EACjF,QAAQ,MAAM,CAAC,iBAAiB,MAAM,EAAE,QAAQ,aAAa,qBAAqB,CAAC,CAAC,CAAC;AAAA,IAC1F,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAAA,EAC7E,CAAC;AACL;;;ACdA,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;AAWX,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,QAAQ,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC;AAAA,EACjD,cAAc,eAAE,OAAO,EAAE,SAAS;AAAA,EAClC,gBAAgB,eAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,MAAS;AAAA,EAClE,SAAS,eAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC9B,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAAA,EACzE,MAAM,eAAE,KAAK,aAAa,EAAE,MAAM,MAAM;AAC5C,CAAC;;;ACtBD,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;AAMX,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE1B,kBAAkB,eAAE,OAAO,EAAE,SAAS;AAAA,EACtC,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAC7E,CAAC;;;ACdD,IAAAC,eAAkB;;;ACMX,IAAM,cAAc;AAAA,EACvB,SAAS;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,QAAQ;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,eAAe;AAAA,IACX,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACN,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AACJ;;;ADhHO,IAAM,kBAAkB,eAAE,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOpC,UAAU,eAAE,OAAO,EAAE,QAAQ,eAAE,OAAO,EAAE,YAAY,GAAG,MAAM,eAAE,KAAK,CAAC,eAAe,YAAY,CAAC,EAAE,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/G,MAAM,eACD,OAAO;AAAA,IACJ,WAAW,eAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,IACrC,OAAO,eAAE,OAAO,EAAE,SAAS;AAAA,IAC3B,YAAY,eAAE,MAAM,eAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EACrE,CAAC,EACA,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,OAAO,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjD,WAAW,eAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxC,YAAY,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,QAAQ,OAAO,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnF,QAAQ,eAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,eAAE,KAAK,iBAAiB,EAAE,QAAQ,iBAAiB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrE,MAAM,eAAE,KAAK,iBAAiB,EAAE,QAAQ,iBAAiB,QAAQ;AACrE,CAAC;AAUM,IAAM,wBAAwB,eAAE;AAAA,EAAK,MACxC,iBAAiB,KAAK,EAAE,aAAa,KAAK,CAAC,EAAE,OAAO;AAAA;AAAA,IAEhD,cAAc,eAAE,MAAM,eAAE,OAAO,EAAE,UAAU,CAAC,SAAS,KAAK,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKjG,qBAAqB,eAAE,MAAM,eAAE,OAAO,EAAE,UAAU,CAAC,SAAS,KAAK,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMxG,2BAA2B,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAEpD,oBAAoB,eAAE,MAAM,eAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKzE,4BAA4B,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,IAErD,eAAe,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,IAAI,aAAa,EAAE;AAAA;AAAA,IAEpF,YAAY,eACP,OAAO;AAAA,MACJ,SAAS,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,YAAY,QAAQ,EAAE;AAAA,MACpF,QAAQ,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,YAAY,OAAO,EAAE;AAAA,MAClF,eAAe,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,YAAY,cAAc,EAAE;AAAA,MAChG,UAAU,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,YAAY,SAAS,EAAE;AAAA,IAC1F,CAAC,EACA,QAAQ,OAAO;AAAA,MACZ,SAAS,EAAE,GAAG,YAAY,QAAQ;AAAA,MAClC,QAAQ,EAAE,GAAG,YAAY,OAAO;AAAA,MAChC,eAAe,EAAE,GAAG,YAAY,cAAc;AAAA,MAC9C,UAAU,EAAE,GAAG,YAAY,SAAS;AAAA,IACxC,EAAE;AAAA;AAAA,IAEN,MAAM,eAAE,OAAO,EAAE,QAAQ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOzC,eAAe,eAAE,OAAO,EAAE,SAAS;AAAA,IACnC,aAAa,eAAE,QAAQ,YAAY,WAAW,EAAE,QAAQ,YAAY,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAM/E,OAAO,eAAE,MAAM,CAAC,eAAE,MAAM,eAAe,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EACvG,CAAC;AACL;;;AElIA,IAAAC,eAA6B;AAC7B,IAAAC,eAAkB;AAMX,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,eAAe,eACV;AAAA,IACG,eAAE,OAAO;AAAA,IACT,eAAE,OAAO;AAAA;AAAA,MAEL,WAAW,eAAE,OAAO,EAAE,SAAS;AAAA,MAC/B,KAAK,eAAE,OAAO,EAAE,SAAS;AAAA,MACzB,KAAK,eAAE,OAAO,EAAE,SAAS;AAAA,MACzB,KAAK,eAAE,OAAO,EAAE,SAAS;AAAA,IAC7B,CAAC;AAAA,EACL,EACC,QAAQ;AAAA,IACL,IAAI;AAAA,MACA,WAAW;AAAA,MACX,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAAA,EACJ,CAAC;AAAA,EACL,WAAW,eAAE,KAAK,cAAc,EAAE,QAAQ,cAAc,MAAM;AAAA,EAC9D,KAAK,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,EAC1C,KAAK,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;AAAA;AAAA,EAEhC,MAAM,eAAE,OAAO,EAAE,QAAQ,UAAU;AAAA,EACnC,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,aAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAC7E,CAAC;;;ACnCD,IAAAC,gBAA6B;AAC7B,IAAAC,eAAkB;;;ACMX,IAAM,gBAAgB;AAAA,EACzB,KAAK;AAAA,IACD,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,OAAO;AAAA,IACH,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AACJ;;;ADxDO,IAAM,oBAAoB,eAAE,OAAO;AAAA,EACtC,OAAO,eAAE,OAAO,EAAE,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,aAAa,eACR,OAAO;AAAA,IACJ,KAAK,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,cAAc,IAAI,EAAE;AAAA,IAC9E,OAAO,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAAE,QAAQ,OAAO,EAAE,GAAG,cAAc,MAAM,EAAE;AAAA,EACtF,CAAC,EACA,QAAQ,OAAO,EAAE,KAAK,EAAE,GAAG,cAAc,IAAI,GAAG,OAAO,EAAE,GAAG,cAAc,MAAM,EAAE,EAAE;AAAA,EACzF,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,OAAO,EAAE,QAAQ,YAAY,OAAO;AAAA,EACvE,MAAM,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,OAAO;AAC1D,CAAC;;;AE1BD,IAAAC,iBAAsB;AACtB,IAAAC,gBAA6B;AAC7B,IAAAC,eAAkB;AAMX,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,wBAAwB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACjD,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC1C,aAAa,eAAE,QAAQ,YAAY,QAAQ,EAAE,QAAQ,YAAY,QAAQ;AAAA,EACzE,UAAU,eAAE,SAAK,sBAAM,kBAAkB,GAAG,CAAC,CAAC,EAAE,QAAQ,gBAAgB,IAAI;AAAA,EAC5E,aAAa,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,QAAQ;AAClE,CAAC;;;ApBOM,IAAM,YAAY,eACpB,OAAO;AAAA,EACJ,QAAQ,eAAE,KAAK,WAAW,EAAE,QAAQ,aAAa,IAAI;AAAA,EACrD,OAAO,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,IAAI;AAAA,EACpD,OAAO,eAAE,KAAK,YAAY,EAAE,QAAQ,YAAY,IAAI;AACxD,CAAC,EACA,QAAQ;AAAA,EACL,QAAQ,aAAa;AAAA,EACrB,OAAO,YAAY;AAAA,EACnB,OAAO,YAAY;AACvB,CAAC;AAIE,IAAM,aAAkC,eAAE;AAAA,EAAK,MAClD,eAAE,mBAAmB,eAAe;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;;;AFtCO,IAAM,WAAW,eAAE,MAAM,CAAC,eAAE,QAAQ,MAAM,GAAG,eAAE,QAAQ,MAAM,GAAG,eAAE,OAAO,EAAE,MAAM,QAAQ,GAAG,eAAE,OAAO,CAAC,CAAC;AAGvG,IAAM,mBAAmB,eAAE,OAAO;AAAA,EACrC,WAAW,eACN,OAAO;AAAA,IACJ,YAAY,eAAE,KAAK,oBAAoB,EAAE,QAAQ,oBAAoB,KAAK;AAAA,IAC1E,UAAU,eAAE,KAAK,kBAAkB,EAAE,QAAQ,kBAAkB,GAAG;AAAA,EACtE,CAAC,EACA,QAAQ;AAAA,IACL,YAAY,oBAAoB;AAAA,IAChC,UAAU,kBAAkB;AAAA,EAChC,CAAC;AAAA,EACL,QAAQ,eAAE,KAAK,MAAM,SAAS;AAAA,EAC9B,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA,EAC3C,WAAW,eAAE,KAAK,UAAU,EAAE,QAAQ,UAAU,IAAI;AAAA,EACpD,MAAM,eACD,OAAO;AAAA,IACJ,SAAS,eAAE,MAAM,CAAC,eAAE,MAAM,QAAQ,GAAG,eAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC;AAAA,IAC3E,MAAM,eAAE,MAAM,CAAC,eAAE,MAAM,QAAQ,GAAG,eAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC;AAAA,EAC5E,CAAC,EACA,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAC7C,SAAS;AAAA,EACd,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,SAAS,eAAE,KAAK,QAAQ,EAAE,QAAQ,QAAQ,IAAI;AAAA,EAC9C,MAAM,QAAQ,SAAS;AAAA,EACvB,WAAW,eAAE,KAAK,EAAE,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC1C,UAAU,eAAE,MAAM,CAAC,eAAE,MAAM,eAAE,KAAK,MAAM,UAAU,CAAC,GAAG,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC;AAAA,EAC/G,aAAa,eAAE,QAAQ,YAAY,MAAM,EAAE,QAAQ,YAAY,MAAM;AAAA,EACrE,SAAS,eAAE,KAAK,QAAQ,EAAE,QAAQ,QAAQ,IAAI;AAAA;AAAA,EAE9C,SAAS,eAAE,OAAO,EAAE,SAAS;AAAA,EAC7B,OAAO,eAAE,OAAO,EAAE,QAAQ,GAAG;AACjC,CAAC;;;AuBzCM,IAAM,YAAY;AAAA,EACrB,aAAa,EAAE,IAAI,yBAAyB;AAAA,EAC5C,gBAAgB,EAAE,IAAI,+BAA+B;AAAA,EACrD,UAAU,EAAE,IAAI,OAAO;AAAA,EACvB,aAAa,EAAE,IAAI,QAAQ;AAAA,EAC3B,MAAM,EAAE,IAAI,gBAAgB;AAAA,EAC5B,cAAc,EAAE,IAAI,WAAW;AAAA,EAC/B,UAAU,EAAE,IAAI,WAAW;AAAA,EAC3B,qBAAqB,EAAE,IAAI,uBAAuB;AAAA,EAClD,UAAU,EAAE,IAAI,WAAW;AAC/B;;;AxBTA,IAAM,YAAY,CAAC,aACf,eACK,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,CAAC,EAC7B,QAAQ,OAAO,EAAE,GAAG,SAAS,EAAE,EAC/B,UAAU,CAAC,WAAY,OAAO,KAAK,MAAM,EAAE,SAAS,IAAI,SAAS,EAAE,GAAG,SAAS,CAAE;AAQnF,IAAM,cAAc,eACtB,OAAO;AAAA,EACJ,aAAa,UAAU,UAAU,WAAW;AAAA,EAC5C,gBAAgB,UAAU,UAAU,cAAc;AAAA,EAClD,UAAU,UAAU,UAAU,QAAQ;AAAA,EACtC,aAAa,UAAU,UAAU,WAAW;AAAA,EAC5C,MAAM,UAAU,UAAU,IAAI;AAAA,EAC9B,cAAc,UAAU,UAAU,YAAY;AAAA,EAC9C,UAAU,UAAU,UAAU,QAAQ;AAAA,EACtC,qBAAqB,UAAU,UAAU,mBAAmB;AAAA,EAC5D,UAAU,UAAU,UAAU,QAAQ;AAC1C,CAAC,EACA,QAAQ,OAAO;AAAA,EACZ,aAAa,EAAE,GAAG,UAAU,YAAY;AAAA,EACxC,gBAAgB,EAAE,GAAG,UAAU,eAAe;AAAA,EAC9C,UAAU,EAAE,GAAG,UAAU,SAAS;AAAA,EAClC,aAAa,EAAE,GAAG,UAAU,YAAY;AAAA,EACxC,MAAM,EAAE,GAAG,UAAU,KAAK;AAAA,EAC1B,cAAc,EAAE,GAAG,UAAU,aAAa;AAAA,EAC1C,UAAU,EAAE,GAAG,UAAU,SAAS;AAAA,EAClC,qBAAqB,EAAE,GAAG,UAAU,oBAAoB;AAAA,EACxD,UAAU,EAAE,GAAG,UAAU,SAAS;AACtC,EAAE;AAIN,IAAM,aAAa,eACd,OAAO;AAAA,EACJ,MAAM,eAAE,QAAQ,EAAE,SAAS;AAAA,EAC3B,MAAM,eAAE,KAAK,CAAC,QAAQ,cAAc,UAAU,CAAC,EAAE,SAAS;AAAA,EAC1D,MAAM,eAAE,OAAO;AAAA,EACf,OAAO,eAAE,OAAO;AAAA,EAChB,OAAO,eAAE,OAAO;AACpB,CAAC,EACA,QAAQ,YAAY,WAAW,iBAAiB,EAAE,CAAC,CAAC;AAUlD,IAAM,cAAc,eACtB,OAAO;AAAA,EACJ,mBAAmB,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EAC3C,cAAc,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACtC,cAAc,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAC1C,CAAC,EACA,QAAQ,EAAE,mBAAmB,MAAM,cAAc,MAAM,cAAc,KAAK,CAAC;AASzE,IAAM,gBAAgB,eAAE,OAAO;AAAA,EAClC,WAAW,eAAE,OAAO;AAAA,EACpB,cAAc,eAAE,OAAO;AAAA,EACvB,gBAAgB,eAAE,OAAO;AAAA,EACzB,YAAY,eAAE,OAAO;AACzB,CAAC;AAIM,IAAM,iBAAiB,iBAAiB,OAAO;AAAA,EAClD,YAAY,eAAE,KAAK,WAAW,EAAE,QAAQ,WAAW,iBAAiB;AAAA,EACpE,YAAY,cAAc,SAAS;AAAA,EACnC,aAAa,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACtC,SAAS,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC3C,YAAY,WAAW,SAAS;AAAA,EAChC,UAAU;AAAA,EACV,MAAM,eAAE,KAAK,WAAW,EAAE,QAAQ,WAAW,0BAA0B;AAAA,EACvE,UAAU;AAAA,EACV,SAAS,eAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC;AAAA,EAC/B,UAAU,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI;AAChD,CAAC;;;ADjGM,IAAM,iBAAiB,eAAE,OAAO;AAAA,EACnC,cAAc,eAAE,KAAK,QAAQ,EAAE,SAAS;AAAA,EACxC,aAAa,eACR,MAAM;AAAA,IACH,eAAE;AAAA,MACE,eAAE,OAAO;AAAA,QACL,SAAS,eAAE,OAAO,EAAE,SAAS;AAAA,QAC7B,aAAa,eAAE,OAAO,EAAE,SAAS;AAAA,QACjC,IAAI,eAAE,KAAK;AAAA,QACX,gBAAgB,eAAE,KAAK,CAAC,OAAO,SAAS,UAAU,MAAM,CAAC;AAAA,QACzD,WAAW,eAAE,OAAO;AAAA,QACpB,UAAU,eAAE,IAAI;AAAA,QAChB,eAAe,eAAE,KAAK,CAAC,QAAQ,UAAU,OAAO,CAAC;AAAA,QACjD,UAAU,eAAE,KAAK,aAAa;AAAA,MAClC,CAAC;AAAA,IACL;AAAA,IACA,eAAE,aAAa,CAAC,CAAC,EAAE,UAAU,MAAM,CAAC,CAAC;AAAA,EACzC,CAAC,EACA,SAAS;AAAA,EACd,aAAa,eAAE,KAAK,CAAC,OAAO,QAAQ,CAAC,EAAE,SAAS;AAAA,EAChD,UAAU,eAAE,OAAO;AAAA,IACf,aAAa,eAAE,OAAO;AAAA,IACtB,YAAY,eAAE,OAAO;AAAA,IACrB,OAAO,eAAE,OAAO;AAAA,EACpB,CAAC;AAAA,EACD,aAAa,eAAE,QAAQ;AAAA,EACvB,MAAM,eAAE,QAAQ,WAAW,0BAA0B,EAAE,QAAQ,WAAW,0BAA0B;AAAA,EACpG,SAAS,eAAE,QAAQ,CAAC;AACxB,CAAC;AAEM,IAAM,eAAe,eAAE,mBAAmB,WAAW;AAAA,EACxD;AAAA,EACA,eAAe,OAAO;AAAA,IAClB,MAAM,eAAE,QAAQ,WAAW,0BAA0B,EAAE,QAAQ,WAAW,0BAA0B;AAAA,EACxG,CAAC;AACL,CAAC;;;A0BzCD,IAAAC,eAAkB;AAIX,IAAM,mBAAmB,eAAE,YAAY;AAAA,EAC1C,MAAM,eAAE,QAAQ,WAAW,kBAAkB,EAAE,QAAQ,WAAW,kBAAkB;AACxF,CAAC;;;ACND,IAAAC,eAAkB;AAMX,IAAM,iCAAiC,eAAE,OAAO;AAAA,EACnD,yBAAyB,eAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAE7C,yBAAyB,eAAE,OAAO,EAAE,SAAS;AAAA,EAC7C,4BAA4B,eAAE,OAAO,EAAE,SAAS;AAAA,EAChD,2CAA2C,eAAE,OAAO,EAAE,SAAS;AACnE,CAAC;AAEM,IAAM,mBAAmB,eAAE,OAAO;AAAA;AAAA,EAErC,QAAQ,eAAE,OAAO,EAAE,MAAM,eAAE,KAAK,CAAC,SAAS,WAAW,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS;AAAA,EAC1F,aAAa,eAAE,QAAQ,EAAE,SAAS;AAAA,EAClC,sBAAsB,eACjB,OAAO;AAAA,IACJ,kBAAkB,eAAE,QAAQ,EAAE,SAAS;AAAA,IACvC,UAAU,+BAA+B,SAAS;AAAA,EACtD,CAAC,EACA,SAAS;AAAA,EACd,6BAA6B,eAAE,QAAQ,EAAE,SAAS;AAAA,EAClD,UAAU,eACL,OAAO;AAAA,IACJ,mBAAmB,eAAE,QAAQ,EAAE,SAAS;AAAA,IACxC,cAAc,eAAE,QAAQ,EAAE,SAAS;AAAA,IACnC,cAAc,eAAE,QAAQ,EAAE,SAAS;AAAA,EACvC,CAAC,EACA,SAAS;AAAA,EACd,MAAM,eAAE,QAAQ,WAAW,6BAA6B,EAAE,QAAQ,WAAW,6BAA6B;AAAA,EAC1G,SAAS,eAAE,QAAQ,CAAC;AACxB,CAAC;AAEM,IAAM,iBAAiB,eAAE,mBAAmB,WAAW;AAAA,EAC1D;AAAA,EACA,eAAe,OAAO;AAAA,IAClB,MAAM,eAAE,QAAQ,WAAW,6BAA6B,EAAE,QAAQ,WAAW,6BAA6B;AAAA,EAC9G,CAAC;AACL,CAAC;;;ACzCD,IAAAC,eAAkB;AAIX,IAAM,cAAc,eAAE,YAAY;AAAA,EACrC,MAAM,eAAE,QAAQ,WAAW,yBAAyB,EAAE,QAAQ,WAAW,yBAAyB;AACtG,CAAC;;;ACND,IAAAC,eAAkB;AAKX,IAAM,gBAAgB,eAAE,YAAY;AAAA,EACvC,MAAM,eAAE,QAAQ,WAAW,mBAAmB,EAAE,QAAQ,WAAW,mBAAmB;AAAA,EACtF,SAAS,eAAE,QAAQ,CAAC;AACxB,CAAC;AAEM,IAAM,cAAc,eAAE,mBAAmB,WAAW;AAAA,EACvD;AAAA,EACA,eAAe,OAAO;AAAA,IAClB,MAAM,eAAE,QAAQ,WAAW,mBAAmB,EAAE,QAAQ,WAAW,mBAAmB;AAAA,EAC1F,CAAC;AACL,CAAC;;;ACfD,IAAAC,eAAkB;AAIX,IAAM,gBAAgB,eAAE,YAAY;AAAA,EACvC,MAAM,eAAE,QAAQ,WAAW,eAAe,EAAE,QAAQ,WAAW,eAAe;AAClF,CAAC;;;AnCMM,IAAM,uBAAuB;AAAA,EAChC;AAAA,EACA,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AAAA,EACX,WAAW;AACf;AAEO,IAAM,aAAa,eAAE,mBAAmB,QAAQ;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;;;AoCzBM,IAAM,eAAe;AAAA,EACxB,aAAa;AAAA,IACT,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,oBAAoB;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,cAAc;AAAA,IACV,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,WAAW;AAAA,IACP,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,oBAAoB;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACL,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,MAAM;AAAA,IACF,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AACJ;;;ACjMO,IAAM,gBAAgB;AAAA,EACzB,oBAAoB;AAAA,IAChB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,yBAAyB;AAAA,IACrB,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,gCAAgC;AAAA,IAC5B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AAAA,EACA,kCAAkC;AAAA,IAC9B,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,IACJ,IAAI;AAAA,EACR;AACJ;;;AC5HA,IAAAC,iBAA4C;AAC5C,IAAAC,eAAkB;AAEX,IAAM,eAAe,eAAE,MAAM;AAAA,EAChC,eAAE,OAAO;AAAA,EACT,eAAE,OAAO,EAAE,UAAU,CAAC,cAAU,6BAAS,4BAAQ,yBAAS,KAAK,GAAG,YAAY,EAAE,CAAC,KAAK,CAAC;AAAA,EACvF,eAAE,QAAQ,EAAE,UAAU,MAAM,CAAC;AACjC,CAAC;;;ACPD,IAAAC,eAAkB;AAEX,IAAM,aAAa;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AAEA,IAAM,YAAY,eAAE,KAAK,UAAU;AAE5B,IAAM,YAAY,UAAU;;;ACfnC,IAAAC,iBAA6B;AAC7B,IAAAC,gBAA6B;AAC7B,IAAAC,eAAkB;AAKlB,IAAMC,iBAAgB,eAAE,MAAM,CAAC,eAAE,KAAK,CAAC,WAAW,UAAU,UAAU,CAAC,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,SAAS,CAAC,CAAC;AAEjH,IAAM,WAAW,eAAE,MAAM;AAAA,EACrB,eAAE,KAAK,CAAC,UAAU,SAAS,QAAQ,WAAW,UAAU,SAAS,QAAQ,CAAC;AAAA,EAC1E,eAAE,QAAQ,EAAE,UAAU,MAAM,QAAQ;AACxC,CAAC;AAEM,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO;AAAA,IACf,YAAY,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,QAAQ,MAAM,oBAAoB;AAAA,IACpF,OAAO,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,QAAQ,MAAM,0CAA0C;AAAA,EACzG,CAAC;AAAA,EACD,QAAQ,eAAE,OAAO;AAAA,IACb,sBAAsB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAC/C,gBAAgB,SAAS,QAAQ,OAAO;AAAA,IACxC,eAAeD,eAAc,QAAQ,QAAQ;AAAA,IAC7C,iBAAiB,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACzC,WAAW,SAAS,QAAQ,OAAO;AAAA,EACvC,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,cAAc,EAAE,QAAQ,UAAU,cAAc;AAC9E,CAAC;AAIM,IAAM,aAAa,eAAE,OAAO;AAAA,EAC/B,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,MAAM;AAAA,IACd,eAAE,OAAO;AAAA;AAAA,MAEL,KAAK,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,MACrC,OAAO,eAAE,MAAM,CAAC,eAAE,QAAQ,EAAE,GAAG,eAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,MACnD,WAAW,eAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,MAChC,WAAW,eAAE,KAAK,CAAC,OAAO,QAAQ,CAAC,EAAE,QAAQ,KAAK;AAAA,IACtD,CAAC;AAAA,IACD,eAAE,MAAM,eAAE,MAAM,CAAC,EAAE,UAAU,OAAO,CAAC,EAAE;AAAA,EAC3C,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,KAAK,EAAE,QAAQ,UAAU,KAAK;AAC5D,CAAC;AAIM,IAAM,oBAAoB,eAAE,OAAO;AAAA,EACtC,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAA,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO;AAAA,IACf,KAAK,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,IACrC,aAAa,eACR,MAAM,CAAC,eAAE,OAAO,GAAG,gBAAgB,eAAE,KAAK,CAAC,CAAC,EAC5C;AAAA,MACG;AAAA,IACJ;AAAA,IACJ,iBAAiB,SAAS,QAAQ,QAAQ;AAAA,IAC1C,qBAAqBD,eAAc,QAAQ,SAAS;AAAA,IACpD,OAAO,eAAE,MAAM,CAAC,eAAE,QAAQ,EAAE,GAAG,eAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,IACnD,gBAAgB,eAAE,KAAK,CAAC,UAAU,QAAQ,SAAS,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,MAAM;AAAA,IACpF,WAAW,eAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,IAChC,YAAY,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,QAAQ,cAAc;AAAA,IACxE,gBAAgB,SAAS,QAAQ,QAAQ;AAAA;AAAA,IAEzC,aAAa,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IACjD,OAAO,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,4BAA4B;AAAA,IAC5F,WAAW,SAAS,QAAQ,QAAQ;AAAA,EACxC,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,aAAa,EAAE,QAAQ,UAAU,aAAa;AAC5E,CAAC;AAIM,IAAM,iBAAiB,eAAE,OAAO;AAAA,EACnC,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,MAAM;AAAA,IACd,eAAE,OAAO;AAAA,MACL,OAAO,eAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,IACvC,CAAC;AAAA,IACD,eAAE,MAAM,eAAE,MAAM,CAAC,EAAE,UAAU,OAAO;AAAA,MAChC,OAAO;AAAA,IACX,EAAE;AAAA,EACN,CAAC;AAAA,EACD,QAAQ,eAAE,MAAM;AAAA,IACZ,eAAE,OAAO;AAAA,MACL,aAAa,eAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,EAAE,QAAQ,EAAE;AAAA,IACvD,CAAC;AAAA,IACD,eAAE,MAAM,eAAE,MAAM,CAAC,EAAE,UAAU,OAAO;AAAA,MAChC,aAAa;AAAA,IACjB,EAAE;AAAA,EACN,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,UAAU,EAAE,QAAQ,UAAU,UAAU;AACtE,CAAC;AAIM,IAAM,0BAA0B,eAAE,OAAO;AAAA;AAAA,EAE5C,kBAAkB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,EACtD,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAA,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,eAAE,QAAQ,UAAU,mBAAmB,EAAE,QAAQ,UAAU,mBAAmB;AACxF,CAAC;AAIM,IAAM,iBAAiB,eAAE,OAAO;AAAA,EACnC,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAA,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,MAAM,eAAE,QAAQ,UAAU,SAAS,EAAE,QAAQ,UAAU,SAAS;AACpE,CAAC;AAIM,IAAM,YAAY,eAAE,OAAO;AAAA,EAC9B,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAA,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO;AAAA,IACf,aAAa,eACR,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAClC,SAAS,EACT;AAAA,MACG;AAAA,IACJ;AAAA;AAAA,IAEJ,iBAAiB,SAAS,QAAQ,QAAQ;AAAA,IAC1C,qBAAqBD,eAAc,QAAQ,SAAS;AAAA,IACpD,YAAY,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,QAAQ,aAAa;AAAA;AAAA,IAEvE,gBAAgB,SAAS,QAAQ,QAAQ;AAAA,IACzC,OAAO,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,6BAA6B;AAAA;AAAA,IAE7F,WAAW,SAAS,QAAQ,QAAQ;AAAA,EACxC,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,IAAI,EAAE,QAAQ,UAAU,IAAI;AAC1D,CAAC;AAIM,IAAM,aAAa,eAAE,OAAO;AAAA,EAC/B,IAAI,eACC,OAAO,EACP,SAAS,EACT,QAAQ,UAAM,cAAAC,IAAO,CAAC;AAAA,EAC3B,MAAM,eAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,UAAU,eAAE,OAAO;AAAA,IACf,iBAAiB,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE;AAAA,IAC7C,iBAAiB,eAAE,MAAM,CAAC,eAAE,OAAO,EAAE,IAAI,CAAC,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAAA,IACvF,UAAU,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IAClC,OAAO,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,cAAc,CAAC,EAAE,QAAQ,0CAAqC;AAAA,EAC9F,CAAC;AAAA,EACD,QAAQ,eAAE,OAAO;AAAA,IACb,eAAeD,eAAc,QAAQ,QAAQ;AAAA,IAC7C,sBAAsB,eAAE,KAAK,CAAC,QAAQ,WAAW,WAAW,UAAU,CAAC,EAAE,QAAQ,SAAS;AAAA,IAC1F,iBAAiB,eAAE,MAAM,CAAC,eAAE,QAAQ,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,IAAI,CAAC,CAAC,EAAE,QAAQ,IAAI;AAAA,IACvF,WAAW,SAAS,QAAQ,QAAQ;AAAA,IACpC,YAAY,eAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA,IAC9D,iBAAiB,eAAE,MAAM,CAAC,eAAE,QAAQ,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,IAAI,CAAC,CAAC,EAAE,QAAQ,KAAK;AAAA,IACxF,WAAW,SAAS,QAAQ,QAAQ;AAAA,EACxC,CAAC;AAAA,EACD,MAAM,eAAE,QAAQ,UAAU,KAAK,EAAE,QAAQ,UAAU,KAAK;AAC5D,CAAC;AAIM,IAAM,oBAAoB,eAAE,mBAAmB,QAAQ;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AAIM,IAAM,uBAAuB,CAAC,cACjC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,cAAc;AAEjD,IAAM,eAAe,CAAC,cAAwC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,KAAK;AAEzG,IAAM,sBAAsB,CAAC,cAChC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,aAAa;AAEhD,IAAM,mBAAmB,CAAC,cAC7B,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,UAAU;AAE7C,IAAM,4BAA4B,CAAC,cACtC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,mBAAmB;AAEtD,IAAM,mBAAmB,CAAC,cAC7B,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,SAAS;AAE5C,IAAM,cAAc,CAAC,cAAuC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,IAAI;AAEtG,IAAM,eAAe,CAAC,cAAwC,4BAAQ,oBAAI,OAAO,MAAM,GAAG,UAAU,KAAK;;;AChOhH,IAAAE,eAAkB;;;ACAlB,IAAAC,eAAkB;;;ACAlB,IAAAC,eAAkB;AAMX,IAAM,uBAAuB,eAAE,OAAO;AAAA,EACzC,SAAS,eACJ,OAAO,EAAE,oBAAoB,eAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,CAAC,EACxD,SAAS,EACT,QAAQ,OAAO,EAAE,oBAAoB,KAAK,EAAE;AAAA,EACjD,QAAQ,eACH,MAAM,CAAC,eAAE,MAAM,iBAAiB,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,CAAC,EACnE,QAAQ,MAAM;AAAA,IACX,kBAAkB,MAAM,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM,UAAU,MAAM,CAAC;AAAA,IAC3E,kBAAkB,MAAM,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,MAAM,UAAU,eAAe,CAAC;AAAA,IACpF,kBAAkB,MAAM,EAAE,MAAM,UAAU,oBAAoB,CAAC;AAAA,EACnE,CAAC;AAAA,EACL,cAAc,eAAE,QAAQ,EAAE,SAAS;AAAA,EACnC,UAAU,eAAE,OAAO;AAAA,IACf,QAAQ,aAAa,QAAQ,EAAE;AAAA,IAC/B,sBAAsB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACzD,MAAM,eAAE,KAAK,CAAC,QAAQ,gBAAgB,YAAY,CAAC,EAAE,QAAQ,MAAM;AAAA,EACvE,CAAC;AAAA,EACD,gBAAgB,eAAE,KAAK,CAAC,SAAS,kBAAkB,CAAC,EAAE,SAAS,EAAE,QAAQ,OAAO;AAAA,EAChF,UAAU,eAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,eAAE,OAAO;AAAA,IACnB,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAClC,OAAO,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC3C,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAClC,MAAM,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAC/B,QAAQ,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IACjC,QAAQ,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC5C,WAAW,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC/C,SAAS,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,IAClC,OAAO,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACpC,CAAC;AAAA,EACD,KAAK,eAAE,OAAO,EAAE,SAAS;AAAA,EACzB,UAAU,eAAE,OAAO;AAAA,IACf,aAAa,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,IAC9E,oBAAoB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IACxD,gBAAgB,eACX,OAAO;AAAA,MACJ,SAAS,eAAE,MAAM,eAAE,QAAQ,CAAC;AAAA,MAC5B,MAAM,eAAE,OAAO;AAAA,IACnB,CAAC,EACA,SAAS;AAAA,IACd,oBAAoB,eAAE,KAAK,CAAC,QAAQ,UAAU,SAAS,WAAW,SAAS,QAAQ,CAAC,EAAE,SAAS;AAAA,IAC/F,iBAAiB,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACzC,QAAQ,eACH,OAAO;AAAA,MACJ,YAAY,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,aAAa;AAAA,MACvD,kBAAkB,eAAE,OAAO,EAAE,QAAQ,oBAAoB;AAAA,MACzD,MAAM,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,MAAM;AAAA,MAC1C,cAAc,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,eAAe;AAAA,MAC3D,QAAQ,eAAE,OAAO,EAAE,QAAQ,SAAS;AAAA,MACpC,6BAA6B,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,yBAAyB;AAAA,MACpF,UAAU,eAAE,OAAO,EAAE,QAAQ,UAAU;AAAA;AAAA,MAEvC,mBAAmB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,oBAAoB;AAAA,MACrE,mBAAmB,eAAE,OAAO,EAAE,QAAQ,oBAAoB;AAAA,MAC1D,eAAe,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,SAAS;AAAA,MACtD,iBAAiB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,QAAQ;AAAA,MACvD,MAAM,eACD,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,MAAM,CAAC,CAAC,EACvD,SAAS,EACT,QAAQ,MAAM;AAAA,MACnB,UAAU,eAAE,OAAO,EAAE,QAAQ,UAAU;AAAA,MACvC,oBAAoB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,oBAAoB;AAAA,MACtE,UAAU,eAAE,OAAO,EAAE,QAAQ,UAAU;AAAA,MACvC,OAAO,eAAE,OAAO,EAAE,QAAQ,OAAO;AAAA,MACjC,OAAO,eAAE,OAAO,EAAE,QAAQ,OAAO;AAAA,IACrC,CAAC,EACA,SAAS,EACT,QAAQ,OAAO;AAAA,MACZ,YAAY;AAAA,MACZ,kBAAkB;AAAA,MAClB,MAAM;AAAA,MACN,cAAc;AAAA,MACd,QAAQ;AAAA,MACR,6BAA6B;AAAA,MAC7B,UAAU;AAAA;AAAA,MAEV,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,MACnB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,MAAM;AAAA,MACN,UAAU;AAAA,MACV,oBAAoB;AAAA,MACpB,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,IACX,EAAE;AAAA,IACN,mBAAmB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,SAAS;AAAA,EAC9D,CAAC;AAAA,EACD,YAAY,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA,EAErC,OAAO,eAAE,OAAO;AAAA,IACZ,OAAO,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EAC/B,CAAC;AAAA,EACD,cAAc,eACT,OAAO;AAAA,IACJ,cAAc,eAAE,OAAO,EAAE,SAAS;AAAA,IAClC,MAAM,eAAE,KAAK,CAAC,QAAQ,QAAQ,UAAU,CAAC,EAAE,QAAQ,MAAM;AAAA,EAC7D,CAAC,EACA,SAAS,EACT,QAAQ;AAAA,IACL,MAAM;AAAA,EACV,CAAC;AAAA;AAAA,EAEL,aAAa,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACtC,cAAc,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC;AAAA,EAC7C,gBAAgB,eAAE,OAAO;AAAA;AAAA,IAErB,wBAAwB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC5D,cAAc,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACjD,gBAAgB,eAAE,KAAK,CAAC,SAAS,SAAS,QAAQ,MAAM,CAAC,EAAE,SAAS;AAAA,IACpE,cAAc,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACjD,cAAc,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACjD,WAAW,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IAC9C,WAAW,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IAC9C,sBAAsB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,IACzD,4BAA4B,eAAE,KAAK,CAAC,YAAY,QAAQ,CAAC,EAAE,SAAS,EAAE,QAAQ,UAAU;AAAA,EAC5F,CAAC;AAAA,EACD,aAAa,eACR,MAAM,CAAC,eAAE,KAAK,CAAC,YAAY,gBAAgB,MAAM,CAAC,GAAG,eAAE,QAAQ,EAAE,EAAE,UAAU,MAAM,UAAU,CAAC,CAAC,EAC/F,QAAQ,UAAU;AAAA,EACvB,qBAAqB,eAAE,KAAK,CAAC,YAAY,OAAO,CAAC,EAAE,SAAS,EAAE,QAAQ,OAAO;AAAA,EAC7E,gBAAgB,eAAE,OAAO;AAAA,IACrB,iBAAiB,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,KAAK,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAAA,IAC7E,SAAS,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACjC,UAAU,eAAE,MAAM,CAAC,eAAE,OAAO,GAAG,eAAE,KAAK,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,IACxE,UAAU,eAAE,MAAM,CAAC,eAAE,OAAO,EAAE,IAAI,CAAC,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC;AAAA,EACpF,CAAC;AAAA,EACD,UAAU,eAAE,OAAO;AAAA,IACf,QAAQ,aAAa,QAAQ,EAAE;AAAA;AAAA,IAE/B,SAAS,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA,IACjC,OAAO,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,eAAe;AAAA,IACpD,MAAM,eAAE,KAAK,CAAC,QAAQ,cAAc,CAAC,EAAE,QAAQ,MAAM;AAAA,EACzD,CAAC;AAAA,EACD,QAAQ,eACH,OAAO;AAAA,IACJ,WAAW,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,SAAS;AAAA,IAClD,UAAU,eACL,MAAM,CAAC,eAAE,KAAK,CAAC,SAAS,UAAU,OAAO,CAAC,GAAG,eAAE,QAAQ,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC,EAClF,SAAS,EACT,QAAQ,OAAO;AAAA,IACpB,iBAAiB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,SAAS;AAAA,IACxD,aAAa,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,GAAG;AAAA,EAClD,CAAC,EACA,SAAS;AAAA,EACd,WAAW,eAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;AAAA,EACzC,cAAc,eACT,OAAO;AAAA,IACJ,UAAU,eAAE,OAAO;AAAA,MACf,QAAQ,aAAa,QAAQ,EAAE;AAAA,MAC/B,sBAAsB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,MACzD,MAAM,eAAE,KAAK,CAAC,QAAQ,gBAAgB,YAAY,CAAC,EAAE,QAAQ,MAAM;AAAA,IACvE,CAAC;AAAA,IACD,UAAU,eAAE,OAAO;AAAA,MACf,QAAQ,aAAa,QAAQ,CAAC;AAAA;AAAA,MAE9B,SAAS,eAAE,QAAQ,EAAE,QAAQ,IAAI;AAAA;AAAA,MAEjC,iBAAiB,aAAa,QAAQ,CAAC;AAAA,MACvC,eAAe,eAAE,OAAO,EAAE,QAAQ,eAAe;AAAA,MACjD,MAAM,eAAE,KAAK,CAAC,QAAQ,cAAc,CAAC,EAAE,QAAQ,MAAM;AAAA,IACzD,CAAC;AAAA,EACL,CAAC,EACA,SAAS,EACT,QAAQ;AAAA,IACL,UAAU;AAAA,MACN,QAAQ;AAAA,MACR,sBAAsB;AAAA,MACtB,MAAM;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACN,QAAQ;AAAA;AAAA,MAER,SAAS;AAAA;AAAA,MAET,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,MAAM;AAAA,IACV;AAAA,EACJ,CAAC;AAAA,EACL,uBAAuB,eAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAE5C,UAAU,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE;AAAA,EAC1C,MAAM,eAAE,QAAQ,iCAAiC,EAAE,QAAQ,iCAAiC;AAAA,EAC5F,uBAAuB,eAClB,OAAO;AAAA,IACJ,kBAAkB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,SAAS;AAAA,IACzD,OAAO,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IAC3C,mBAAmB,eAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,KAAK;AAAA,IACvD,iBAAiB,eAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,yDAAyD;AAAA,EAC5G,CAAC,EACA,SAAS,EACT,QAAQ,OAAO;AAAA,IACZ,kBAAkB;AAAA,IAClB,OAAO;AAAA,IACP,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,EACrB,EAAE;AACV,CAAC;;;AD1MM,IAAM,+BAA+B,eAAE,OAAO;AAAA,EACjD,IAAI,eAAE,OAAO;AAAA,EACb,MAAM,eAAE,OAAO;AACnB,CAAC;AAIM,IAAM,qBAAqB,eAAE,OAAO;AAAA,EACvC,gBAAgB,eAAE,QAAQ,0BAA0B,EAAE,QAAQ,0BAA0B;AAAA,EACxF,eAAe,eAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,SAAS;AAAA,EACzD,oBAAoB,eAAE,OAAO,EAAE,QAAQ;AAAA,EACvC,IAAI,eAAE,OAAO,EAAE,QAAQ,CAAC;AAAA,EACxB,YAAY,eAAE,IAAI,SAAS,EAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ;AAAA,EACrD,wBAAwB,eAAE,OAAO,EAAE,QAAQ;AAAA,EAC3C,aAAa,eAAE,MAAM,4BAA4B,EAAE,SAAS;AAAA,EAC5D,MAAM,eAAE,OAAO,EAAE,QAAQ,EAAE;AAAA,EAC3B,OAAO,eAAE,OAAO,EAAE,QAAQ;AAAA,EAC1B,UAAU;AACd,CAAC;;;ADlBM,IAAM,oBAAoB,eAAE,mBAAmB,cAAc;AAAA,EAChE,eAAE,aAAa;AAAA,IACX,QAAQ,eAAE,MAAM,eAAE,OAAO,EAAE,SAAS,eAAE,OAAO,EAAE,CAAC,CAAC;AAAA,IACjD,SAAS,eAAE,OAAO;AAAA,IAClB,YAAY,eAAE,QAAQ,KAAK;AAAA,EAC/B,CAAC;AAAA,EACD,eAAE,aAAa;AAAA,IACX,YAAY,eAAE,QAAQ,IAAI;AAAA,IAC1B,QAAQ;AAAA,EACZ,CAAC;AACL,CAAC;;;AGdD,IAAM,kBAAkB;AACxB,IAAM,sBAAsB;AAC5B,IAAM,cAAc;AAEb,IAAM,wBAAwB,CAAC,SAClC,KAAK,QAAQ,iBAAiB,EAAE,EAAE,QAAQ,qBAAqB,EAAE,EAAE,QAAQ,aAAa,EAAE;;;ACMvF,IAAM,+BAA+B,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,EACA,QAAQ,CAAC;AAAA,EACT;AAAA,EACA;AACJ,MAAgD;AAC5C,QAAM,gBAAgB,sBAAsB,IAAI;AAEhD,SAAO,gBAAgB,MAAM;AAAA,IACzB,OAAO,EAAE,UAAU;AAAA,IACnB,SAAS,gBACH;AAAA,MACI;AAAA,QACI,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,SAAS,GAAG,MAAM,YAAY,GAAG,GAAG,KAAK;AAAA,QACnE,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,IACJ,IACA,CAAC;AAAA,IACP,MAAM;AAAA,EACV,CAAC;AACL;;;AC7BO,IAAM,8BAA8B,CAAC,aAAqD;AAC7F,QAAM,cAAc,UAAU;AAC9B,QAAM,aAAa,UAAU;AAC7B,QAAM,QAAQ,UAAU;AAExB,SAAO,eAAe,MAAM;AAAA,IACxB,OAAO,EAAE,cAAc,QAAQ;AAAA,IAC/B,SAAS;AAAA,MACL,aACM,6BAA6B;AAAA,QACzB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;AAAA,QACxB,MAAM;AAAA,QACN,WAAW;AAAA,MACf,CAAC,IACD;AAAA,MACN,QACM,6BAA6B;AAAA,QACzB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;AAAA,QACxB,MAAM;AAAA,QACN,WAAW;AAAA,MACf,CAAC,IACD;AAAA,MACN,cACM,6BAA6B;AAAA,QACzB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM;AAAA,QACN,WAAW;AAAA,MACf,CAAC,IACD;AAAA,IACV,EAAE,OAAO,CAAC,MAAkC,MAAM,IAAI;AAAA,IACtD,MAAM;AAAA,EACV,CAAC;AACL;;;AC/BO,IAAM,mBAAmB,CAAC,UAAkC,aAAiC;AAChG,QAAM,UAAU,sBAAsB,YAAY,EAAE,EAAE,KAAK;AAE3D,SAAO,UAAU,EAAE,GAAG,UAAU,IAAI,QAAQ,IAAI;AACpD;;;ACAO,IAAM,sBAAsB;AAAA,EAC/B,WAAW;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,EACd;AAAA,EACA,QAAQ;AAAA,IACJ,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,OAAO;AAAA,EACX;AAAA,EACA,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM;AAAA,IACF,SAAS,CAAC,MAAM;AAAA,IAChB,MAAM,CAAC,MAAM;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,EACT,aAAa;AAAA,EACb,UAAU;AAAA,IACN;AAAA,MACI,WAAW;AAAA,QACP,YAAY;AAAA,QACZ,UAAU;AAAA,MACd;AAAA,MACA,qBAAqB;AAAA,MACrB,QAAQ;AAAA,QACJ,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,MACX;AAAA,MACA,WAAW;AAAA,MACX,MAAM;AAAA,QACF,SAAS,CAAC,MAAM;AAAA,QAChB,MAAM,CAAC,QAAQ,MAAM;AAAA,MACzB;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,QACN;AAAA,UACI,WAAW;AAAA,YACP,YAAY;AAAA,YACZ,UAAU;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACJ,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO;AAAA,UACX;AAAA,UACA,WAAW;AAAA,UACX,MAAM;AAAA,YACF,SAAS,CAAC,QAAQ,MAAM;AAAA,YACxB,MAAM,CAAC,MAAM;AAAA,UACjB;AAAA,UACA,MAAM;AAAA,UACN,SAAS;AAAA,UACT,UAAU;AAAA,YACN;AAAA,cACI,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,kBAAkB;AAAA,cAClB,SAAS;AAAA,gBACL,WAAW;AAAA,gBACX,UAAU;AAAA,cACd;AAAA,cACA,UAAU;AAAA,gBACN;AAAA,kBACI,aAAa;AAAA,kBACb,SAAS;AAAA,oBACL,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,kBACR;AAAA,kBACA,aAAa;AAAA,gBACjB;AAAA,cACJ;AAAA,cACA,aAAa;AAAA,YACjB;AAAA,YACA;AAAA,cACI,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,kBAAkB;AAAA,cAClB,SAAS;AAAA,gBACL,WAAW;AAAA,gBACX,UAAU;AAAA,cACd;AAAA,cACA,UAAU;AAAA,gBACN;AAAA,kBACI,aAAa;AAAA,kBACb,SAAS;AAAA,oBACL,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,oBACJ,IAAI;AAAA,kBACR;AAAA,kBACA,aAAa;AAAA,gBACjB;AAAA,cACJ;AAAA,cACA,aAAa;AAAA,YACjB;AAAA,UACJ;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,UACT,OAAO;AAAA,QACX;AAAA,QACA;AAAA,UACI,WAAW;AAAA,YACP,YAAY;AAAA,YACZ,UAAU;AAAA,UACd;AAAA,UACA,QAAQ;AAAA,YACJ,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,OAAO;AAAA,UACX;AAAA,UACA,WAAW;AAAA,UACX,MAAM;AAAA,YACF,SAAS,CAAC,KAAK;AAAA,YACf,MAAM,CAAC,QAAQ,MAAM;AAAA,UACzB;AAAA,UACA,SAAS;AAAA,UACT,UAAU;AAAA,YACN;AAAA,cACI,WAAW;AAAA,gBACP,YAAY;AAAA,gBACZ,UAAU;AAAA,cACd;AAAA,cACA,QAAQ;AAAA,gBACJ,QAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,OAAO;AAAA,cACX;AAAA,cACA,WAAW;AAAA,cACX,MAAM;AAAA,gBACF,SAAS,CAAC,OAAO,QAAQ,MAAM;AAAA,gBAC/B,MAAM,CAAC,MAAM;AAAA,cACjB;AAAA,cACA,SAAS;AAAA,cACT,UAAU;AAAA,gBACN;AAAA,kBACI,SAAS;AAAA,kBACT,aAAa;AAAA,kBACb,QAAQ;AAAA,oBACJ,QAAQ;AAAA,oBACR,OAAO;AAAA,oBACP,OAAO;AAAA,kBACX;AAAA,kBACA,UAAU;AAAA,kBACV,MAAM;AAAA,kBACN,eAAe;AAAA,kBACf,cAAc;AAAA,kBACd,WAAW;AAAA,kBACX,aAAa;AAAA,kBACb,QAAQ;AAAA,kBACR,OAAO;AAAA,gBACX;AAAA,gBACA;AAAA,kBACI,SAAS;AAAA,oBACL,IAAI;AAAA,sBACA,OAAO;AAAA,wBACH,cAAc;AAAA,sBAClB;AAAA,sBACA,SAAS;AAAA,wBACL;AAAA,0BACI,OAAO;AAAA,4BACH,WAAW;AAAA,0BACf;AAAA,0BACA,SAAS;AAAA,4BACL;AAAA,8BACI,OAAO;AAAA,gCACH;AAAA,kCACI,OAAO;AAAA,oCACH,OAAO;AAAA,oCACP,UAAU;AAAA,kCACd;AAAA,kCACA,MAAM;AAAA,gCACV;AAAA,gCACA;AAAA,kCACI,MAAM;AAAA,gCACV;AAAA,8BACJ;AAAA,8BACA,MAAM;AAAA,8BACN,MAAM;AAAA,4BACV;AAAA,0BACJ;AAAA,0BACA,MAAM;AAAA,wBACV;AAAA,wBACA;AAAA,0BACI,OAAO;AAAA,4BACH,WAAW;AAAA,0BACf;AAAA,0BACA,SAAS;AAAA,4BACL;AAAA,8BACI,OAAO;AAAA,gCACH;AAAA,kCACI,OAAO;AAAA,oCACH,OAAO;AAAA,oCACP,UAAU;AAAA,kCACd;AAAA,kCACA,MAAM;AAAA,gCACV;AAAA,8BACJ;AAAA,8BACA,MAAM;AAAA,8BACN,MAAM;AAAA,4BACV;AAAA,0BACJ;AAAA,0BACA,MAAM;AAAA,wBACV;AAAA,sBACJ;AAAA,sBACA,MAAM;AAAA,oBACV;AAAA,kBACJ;AAAA,kBACA,MAAM;AAAA,kBACN,aAAa;AAAA,gBACjB;AAAA,gBACA;AAAA,kBACI,QAAQ;AAAA,kBACR,aAAa;AAAA,kBACb,kBAAkB;AAAA,kBAClB,SAAS;AAAA,oBACL,WAAW;AAAA,oBACX,UAAU;AAAA,kBACd;AAAA,kBACA,UAAU;AAAA,oBACN;AAAA,sBACI,aAAa;AAAA,sBACb,SAAS;AAAA,wBACL,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,sBACR;AAAA,sBACA,aAAa;AAAA,oBACjB;AAAA,oBACA;AAAA,sBACI,aAAa;AAAA,sBACb,SAAS;AAAA,wBACL,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,wBACJ,IAAI;AAAA,sBACR;AAAA,sBACA,aAAa;AAAA,oBACjB;AAAA,oBACA;AAAA,sBACI,aAAa;AAAA,sBACb,SAAS,aAAa;AAAA,sBACtB,aAAa;AAAA,oBACjB;AAAA,oBACA;AAAA,sBACI,aAAa;AAAA,sBACb,SAAS,aAAa;AAAA,sBACtB,aAAa;AAAA,oBACjB;AAAA,oBACA;AAAA,sBACI,aAAa;AAAA,sBACb,SAAS,aAAa;AAAA,sBACtB,aAAa;AAAA,oBACjB;AAAA,kBACJ;AAAA,kBACA,aAAa;AAAA,gBACjB;AAAA,cACJ;AAAA,cACA,aAAa;AAAA,cACb,SAAS;AAAA,cACT,OAAO;AAAA,YACX;AAAA,YACA;AAAA,cACI,WAAW;AAAA,gBACP,YAAY;AAAA,gBACZ,UAAU;AAAA,cACd;AAAA,cACA,QAAQ;AAAA,gBACJ,QAAQ;AAAA,gBACR,OAAO;AAAA,gBACP,OAAO;AAAA,cACX;AAAA,cACA,WAAW;AAAA,cACX,MAAM;AAAA,gBACF,SAAS,CAAC,MAAM;AAAA,gBAChB,MAAM,CAAC,MAAM;AAAA,cACjB;AAAA,cACA,SAAS;AAAA,cACT,UAAU;AAAA,gBACN;AAAA,kBACI,eAAe;AAAA,oBACX,IAAI;AAAA,sBACA,KAAK;AAAA,sBACL,KAAK;AAAA,sBACL,KAAK;AAAA,oBACT;AAAA,kBACJ;AAAA,kBACA,WAAW;AAAA,kBACX,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,aAAa;AAAA,gBACjB;AAAA,cACJ;AAAA,cACA,aAAa;AAAA,cACb,SAAS;AAAA,cACT,OAAO;AAAA,YACX;AAAA,YACA;AAAA,cACI,OAAO;AAAA,cACP,aAAa;AAAA,YACjB;AAAA,YACA;AAAA,cACI,aAAa;AAAA,YACjB;AAAA,UACJ;AAAA,UACA,aAAa;AAAA,UACb,SAAS;AAAA,UACT,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,aAAa;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACX;AAAA,EACJ;AAAA,EACA,aAAa;AAAA,EACb,SAAS;AAAA,EACT,YAAY;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,EACX;AAAA,EACA,MAAM;AAAA,EACN,SAAS;AAAA,EACT,OAAO;AACX;;;ACxaO,IAAM,6BAA6B;AAkInC,IAAM,YAAY,CAAC,SAA2C;AACjE,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAE9C,SAAQ,KAAiC,SAAS;AACtD;;;AC1IA,IAAM,0BAA0B;AAAA,EAC5B,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,aAAa;AACjB;AAaO,IAAM,qBAAqB,CAAC,EAAE,UAAAC,WAAU,KAAK,IAA6B,CAAC,MAC9E,eAAe,MAAM;AAAA,EACjB,GAAG;AAAA,EACH,YAAY,wBAAwBA,aAAY,UAAU;AAAA,EAC1D,GAAI,QAAQ,EAAE,KAAK;AAAA,EACnB,aAAa;AAAA,EACb,MAAM;AACV,CAAC;;;ACtBL,IAAM,mBAAmB,EAAE,QAAQ,UAAU,OAAO,SAAS,QAAQ,OAAO;AAM5E,IAAM,kBAAkB,CAAC,OAAe,OAAgC,QAAQ,WAAW;AACvF,QAAM,QAAmC;AAAA,IACrC,EAAE,OAAO,EAAE,OAAO,UAAU,OAAO,YAAY,OAAO,GAAG,MAAM,YAAY;AAAA,EAC/E;AAEA,MAAI,OAAO,iBAAiB,OAAQ,OAAM,KAAK,EAAE,MAAM,OAAO,CAAC;AAE/D,MAAI,OAAO,iBAAiB,SAAU,OAAM,KAAK,EAAE,MAAM,SAAS,CAAC;AAEnE,SAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,MAAM,OAAO,MAAM,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,GAAG,MAAM,MAAM;AAC5G;AAQA,IAAM,oBAAoB,CAAC,aAA8B;AACrD,QAAM,UAAqC,CAAC,EAAE,MAAM,oBAAoB,MAAM,OAAO,CAAC;AAEtF,MAAI,SAAS,UAAU,qBAAqB,OAAO;AAC/C,YAAQ;AAAA,MACJ,EAAE,MAAM,KAAK,MAAM,OAAO;AAAA,MAC1B;AAAA,QACI,OAAO,CAAC,EAAE,MAAM,SAAS,GAAG,EAAE,OAAO,EAAE,OAAO,UAAU,GAAG,MAAM,YAAY,CAAC;AAAA,QAC9E,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAEA,SAAO,EAAE,SAAS,CAAC,EAAE,SAAS,MAAM,YAAY,CAAC,GAAG,MAAM,MAAM;AACpE;AAGA,IAAM,eAAe,CAAC,aAAyD;AAC3E,MAAI,CAAC,SAAS,gBAAgB,CAAC,OAAO,OAAO,SAAS,YAAY,EAAE,KAAK,OAAO,EAAG,QAAO,CAAC;AAE3F,QAAM,UAAU,SAAS,iBAAiB;AAE1C,SAAO;AAAA,IACH;AAAA,MACI,GAAI,SAAS,SAAS,EAAE,OAAO,QAAQ,MAAM;AAAA,MAC7C,aAAa;AAAA,MACb,GAAI,SAAS,QAAQ,EAAE,MAAM,QAAQ,KAAK;AAAA,IAC9C;AAAA,EACJ;AACJ;AAGA,IAAM,aAAa,CAAC,cAAwD;AAAA,EACxE,GAAI,SAAS,iBAAiB,OAAO,YAAY;AAAA,IAC7C,WAAW,SAAS,gBAAgB,MAAM;AAAA,EAC9C;AAAA,EACA,aAAa;AAAA,EACb,QAAQ,SAAS,QAAQ,WAAW,YAAY,qBAAqB;AAAA,EACrE,OAAO;AACX;AAGA,IAAM,aAAa,CAAC,cAAwD;AAAA,EACxE,SAAS,EAAE,IAAI,gBAAgB,oBAAoB,SAAS,iBAAiB,OAAO,EAAE;AAAA,EACtF,aAAa;AACjB;AAGA,IAAM,aAAa,CAAC,cAAwD;AAAA,EACxE,SAAS,EAAE,IAAI,kBAAkB,QAAQ,EAAE;AAAA,EAC3C,aAAa;AACjB;AAGA,IAAM,oBAAoB,CAAC,aAAyD;AAChF,QAAM,OAAO,SAAS,gBAAgB;AAEtC,MAAI,CAAC,QAAQ,SAAS,OAAQ,QAAO,CAAC;AAEtC,SAAO;AAAA,IACH;AAAA,MACI,SAAS,EAAE,IAAI,gBAAgB,oBAAoB,SAAS,iBAAiB,OAAO,EAAE;AAAA,MACtF,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAGA,IAAM,mBAAmB,CAAC,aAAyD;AAC/E,QAAM,OAAO,SAAS,gBAAgB;AAEtC,MAAI,CAAC,QAAQ,SAAS,OAAQ,QAAO,CAAC;AAEtC,SAAO,CAAC,EAAE,SAAS,EAAE,IAAI,gBAAgB,0BAA0B,MAAS,EAAE,GAAG,aAAa,OAAO,CAAC;AAC1G;AAGA,IAAM,gBAAgB,CAAC,aAAyD;AAE5E,MAAI,SAAS,aAAa,mBAAmB,MAAO,QAAO,CAAC;AAE5D,MAAI,SAAS,gBAAgB,uBAAuB,QAAS,QAAO,CAAC;AAErE,QAAM,WAAW,SAAS,aAAa;AAEvC,SAAO;AAAA,IACH;AAAA,MACI,wBAAwB,CAAC,CAAC,SAAS,gBAAgB;AAAA,MACnD,GAAI,YAAY,EAAE,UAAU,iBAAiB,QAAQ,EAAE;AAAA,MACvD,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAGA,IAAM,sBAA2D;AAAA,EAC7D,wBAAwB;AAAA,EACxB,mBAAmB;AACvB;AAGA,IAAM,sBAAsB,CAAC,aAA6D;AACtF,QAAM,KAAK;AAAA,IACP,GAAI,SAAS,YAAY,EAAE,KAAK,SAAS,SAAS;AAAA,IAClD,GAAI,SAAS,YAAY,EAAE,KAAK,SAAS,SAAS;AAAA,IAClD,GAAI,SAAS,iBAAiB,EAAE,KAAK,SAAS,cAAc;AAAA,EAChE;AAEA,SAAO,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,CAAC;AACjE;AAGA,IAAM,gBAAgB,CAAC,aAAyD;AAC5E,QAAM,WAAW,SAAS;AAE1B,MAAI,CAAC,UAAU,QAAS,QAAO,CAAC;AAEhC,QAAM,YAAY,SAAS,OAAO,oBAAoB,SAAS,IAAI,IAAI;AAKvE,QAAM,MAAM,KAAK,IAAI,KAAK,IAAI,SAAS,YAAY,IAAI,CAAC,GAAG,GAAG;AAG9D,QAAM,MAAM,KAAK,IAAI,KAAK,IAAI,SAAS,YAAY,GAAG,CAAC,GAAG,GAAG;AAE7D,SAAO;AAAA,IACH;AAAA,MACI,GAAG,oBAAoB,QAAQ;AAAA,MAC/B,GAAI,aAAa,EAAE,UAAU;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAUA,IAAM,0BAA0B,CAAC,aAAyD;AACtF,MAAI,SAAS,gBAAgB,UAAU,SAAS,gBAAgB,eAAgB,QAAO,CAAC;AAExF,QAAM,WAAW,SAAS;AAE1B,QAAM,OAAO,CAAC,aAAyC,cAAkC;AAAA,IACrF;AAAA,IACA,SAAS,iBAAiB,cAAc,WAAW,GAAG,QAAQ;AAAA,IAC9D,aAAa;AAAA,EACjB;AAEA,SAAO;AAAA,IACH;AAAA,MACI,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,UAAU;AAAA,QACN,KAAK,sBAAsB,MAAS;AAAA,QACpC,KAAK,2BAA2B,UAAU,mBAAmB;AAAA,QAC7D,KAAK,kCAAkC,UAAU,wBAAwB;AAAA,QACzE,KAAK,oCAAoC,UAAU,qBAAqB;AAAA,MAC5E;AAAA,MACA,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAGA,IAAM,eAAe,CAAC,SAAS,WAAW,WAAW;AAGrD,IAAM,iBAAiB,CAAC,aAAuD;AAC3E,QAAM,OAAO,SAAS,QAAQ;AAE9B,QAAM,OAAO,CACT,aACA,cACE;AAAA,IACF;AAAA,IACA,SAAS,iBAAiB,aAAa,WAAW,GAAG,QAAQ;AAAA,IAC7D,aAAa;AAAA,EACjB;AAEA,SAAO;AAAA,IACH,QAAQ;AAAA,IACR,aAAa,aAAa,SAAS,IAAqC,IAAI,OAAO;AAAA,IACnF,UAAU;AAAA,MACN,KAAK,aAAa,SAAS,UAAU,SAAS;AAAA,MAC9C,KAAK,gBAAgB,SAAS,UAAU,YAAY;AAAA,MACpD,KAAK,eAAe,SAAS,UAAU,WAAW;AAAA,MAClD,KAAK,WAAW,SAAS,UAAU,YAAY;AAAA;AAAA,MAE/C,KAAK,sBAAsB,SAAS,UAAU,kBAAkB;AAAA,IACpE;AAAA,IACA,aAAa;AAAA,EACjB;AACJ;AAGA,IAAM,aAAa,CAAC,cAAkE;AAAA,EAClF,WAAW;AAAA,EACX;AAAA,EACA,aAAa;AACjB;AAgBO,IAAM,iBAAiB,CAAC,UAA2B,eAAmD;AACzG,QAAM,QAAQ,WAAW,QAAQ;AACjC,QAAM,QAAQ,WAAW,QAAQ;AACjC,QAAM,eAAe,kBAAkB,QAAQ;AAC/C,QAAM,QAAQ,WAAW,QAAQ;AACjC,QAAM,cAAc,iBAAiB,QAAQ;AAC7C,QAAM,UAAU,aAAa,QAAQ;AACrC,QAAM,WAAW,cAAc,QAAQ;AACvC,QAAM,WAAW,cAAc,QAAQ;AACvC,QAAM,eAAe,wBAAwB,QAAQ;AACrD,QAAM,YAAY,eAAe,QAAQ;AAEzC,MAAI,CAAC,YAAY;AACb,WAAO;AAAA,MACH;AAAA,MACA;AAAA,MACA,GAAG;AAAA,MACH;AAAA,MACA,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,OAAO,WAAW,CAAC,OAAO,GAAG,cAAc,OAAO,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAC;AAChG,QAAM,UAAU,CAAC,GAAG,cAAc,SAAS;AAC3C,QAAM,cAAc,QAAQ,WAAW,IAAI,QAAQ,CAAC,IAAI,WAAW,OAAO;AAE1E,QAAM,OAAO;AAAA,IACT,WAAW;AAAA,IACX,MAAM,EAAE,SAAS,CAAC,OAAO,QAAQ,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,IACzD,UAAU,CAAC,OAAO,MAAM,WAAW;AAAA,IACnC,aAAa;AAAA,EACjB;AAEA,SAAO,CAAC,MAAM,GAAG,QAAQ;AAC7B;;;AC1RA,IAAMC,2BAA0B;AAAA,EAC5B,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,aAAa;AACjB;AASA,IAAM,qBAAqB;AAAA,EACvB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AACV;AAEA,IAAM,oBAAoB,CAAC,UAA6C,QAAQ,mBAAmB,KAAK,IAAI;AAW5G,IAAM,yBAAyB,CAAC,WAAmB,YAC/C,cAAc,SACR,EAAE,WAAW,MAAM,EAAE,SAAS,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,SAAS,CAAC,EAAE,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,IAC3G,EAAE,UAAU;AAEtB,IAAM,gBAAgB,CAAC,aACnB,CAAC,EAAE,UAAU,SAAS,UAAU,cAAc,UAAU;AAO5D,IAAM,kBAAgE;AAAA,EAClE,kBAAkB;AAAA,EAClB,gBAAgB;AAAA,EAChB,OAAO;AACX;AAQA,IAAM,qBAAqB,CAAC,aAA+E;AACvG,MAAI,CAAC,UAAU,QAAQ,SAAS,SAAS,OAAQ,QAAO;AAExD,QAAM,iBAAiB,SAAS,iBAAiB,gBAAgB,SAAS,cAAc,IAAI;AAE5F,SAAO;AAAA,IACH,QAAQ,SAAS,UAAU;AAAA,IAC3B,GAAI,SAAS,gBAAgB,EAAE,cAAc,SAAS,aAAa;AAAA,IACnE,GAAI,kBAAkB,EAAE,eAAe;AAAA,IACvC,MAAM,SAAS;AAAA,EACnB;AACJ;AAOA,IAAM,uBAAuB,CAAC,aAAqE;AAC/F,QAAM,OAAO,mBAAmB,QAAQ;AAExC,MAAI,CAAC,KAAM,QAAO,CAAC;AAEnB,SAAO;AAAA,IACH;AAAA,MACI,GAAG;AAAA,MACH,GAAI,UAAU,WAAW,EAAE,SAAS,SAAS,QAAQ;AAAA,MACrD,GAAI,UAAU,YAAY,QAAQ,EAAE,UAAU,SAAS,SAAS;AAAA,MAChE,aAAa;AAAA,IACjB;AAAA,EACJ;AACJ;AAQA,IAAM,uBAAuB,CAAC,YAAiF;AAC3G,QAAM,YAAY,OAAO,YAAY,WAAW,sBAAsB,OAAO,IAAI;AAEjF,SAAO,YAAY,EAAE,GAAG,aAAa,oBAAoB,IAAI,UAAU,IAAI,aAAa;AAC5F;AAQA,IAAM,qBAAqB,CAAC,iBACxB,OAAO;AAAA,EACH,OAAO,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,QAAI,OAAO,UAAU,SAAU,QAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,EAAE,SAAS,MAAM,YAAY,CAAC,CAAC;AAEzF,QAAI,OAAO,UAAU,SAAU,QAAO,CAAC,KAAK,UAAU,CAAC;AAEvD,WAAO,CAAC,KAAK,KAAK;AAAA,EACtB,CAAC;AACL;AAGJ,IAAM,cAAc,CAAC,aACjB,UAAU,uBACJ;AAAA,EACI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOI,aAAa;AAAA,IACb,OAAO;AAAA,IACP,aAAa;AAAA,IACb,UAAU;AAAA,MACN;AAAA,QACI,SAAS,qBAAqB,SAAS,uBAAuB;AAAA,QAC9D,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,QAKb,UAAU;AAAA,UACN,EAAE,aAAa,kBAAkB,SAAS,aAAa,MAAM,aAAa,OAAO;AAAA,QACrF;AAAA,QACA,aAAa;AAAA,MACjB;AAAA,IACJ;AAAA,IACA,aAAa;AAAA,EACjB;AACJ,IACA,CAAC;AAiBJ,IAAM,mBAAmB,CAAC,EAAE,IAAI,MAAM,SAAS,MAA2C;AAC7F,QAAM,SAAS,SAAS,QAAQ,SAAS,SAAS,QAAQ,UAAU,SAAS,QAAQ;AACrF,QAAM,UAAU,QAAQ,WAAW;AACnC,QAAM,YAAY,kBAAkB,QAAQ,KAAK;AACjD,QAAM,aAAa,uBAAuB,WAAW,OAAO;AAK5D,QAAM,iBAAiB,cAAc;AAErC,QAAM,WAAW,mBAAmB,SAAS,QAAQ;AAErD,QAAM,aAAa;AAAA,IACf,GAAI,SAAS,YAAY,EAAE,gBAAgB,SAAS,SAAS;AAAA,IAC7D,GAAI,YAAY,EAAE,SAAS;AAAA,IAC3B,GAAI,SAAS,gBAAgB,EAAE,cAAc,mBAAmB,SAAS,YAAY,EAAE;AAAA,IACvF,GAAI,SAAS,UAAU,UAAa,EAAE,OAAO,SAAS,MAAM;AAAA,IAC5D,cAAc,CAAC,CAAC,SAAS,gBAAgB;AAAA,IACzC,wBAAwB,CAAC,CAAC,SAAS,gBAAgB;AAAA,IACnD,GAAI,SAAS,eAAe,EAAE,aAAa,SAAS,YAAY;AAAA,IAChE,aAAa;AAAA,IACb,GAAI,SAAS,yBAAyB,EAAE,uBAAuB,KAAK;AAAA,IACpE,GAAI,SAAS,cAAc,EAAE,YAAY,KAAK;AAAA,EAClD;AAQA,QAAM,SAAS;AAAA,IACX,UAAU;AAAA,MACN,GAAG,eAAe,UAAU,cAAc;AAAA,MAC1C;AAAA,MACA,GAAG,qBAAqB,SAAS,QAAQ;AAAA,MACzC,GAAG,YAAY,SAAS,QAAQ;AAAA,IACpC;AAAA,IACA,aAAa;AAAA,EACjB;AAOA,QAAM,UAAU;AAAA,IACZ,qBAAqB;AAAA;AAAA;AAAA,IAGrB,aAAa,KAAK,IAAI,QAAQ,WAAW,UAAW,SAAS,SAAS,SAAU,CAAC;AAAA,IACjF,GAAG;AAAA,IACH,UAAU,CAAC,MAAM;AAAA,IACjB,aAAa;AAAA,EACjB;AAEA,SAAO,eAAe,MAAM;AAAA,IACxB,WAAW;AAAA,IACX,YAAYA,yBAAwB,SAAS,YAAY,UAAU;AAAA;AAAA,IAEnE,GAAI,QAAQ,EAAE,KAAK;AAAA,IACnB,aAAa,SAAS;AAAA,IACtB,UAAU;AAAA,MACN,GAAI,cAAc,SAAS,QAAQ,IAC7B,CAAC,EAAE,SAAS,EAAE,IAAI,4BAA4B,SAAS,QAAQ,EAAE,GAAG,aAAa,OAAO,CAAC,IACzF,CAAC;AAAA,MACP;AAAA,IACJ;AAAA,IACA,UAAU;AAAA,MACN,mBAAmB,SAAS,UAAU,qBAAqB;AAAA,MAC3D,cAAc,SAAS,UAAU,gBAAgB;AAAA,MACjD,cAAc,SAAS,UAAU,gBAAgB;AAAA,IACrD;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,EACd,CAAC;AACL;",
4
+ "sourcesContent": ["export * from './api';\nexport * from './client';\nexport * from './cookie';\nexport * from './geolocation';\nexport * from './identity';\nexport * from './schema';\nexport * from './session';\n// Offer V1\u2192V2 helpers re-exported on the root so consumers on classic `moduleResolution: node`\n// (e.g. admin-nextjs) can use them without the `/transforms` subpath. The full `/transforms`\n// subpath stays available for bundler/node16 consumers.\nexport { buildOfferTemplate, type BuildOfferTemplateInput, convertOfferToV2, isOfferV1 } from './transforms';\nexport * from './utilities';\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Returns true if the string is a valid base64 encoded string.\n *\n * @param {string} str - The string to check.\n *\n * @returns {boolean} True if the string is a valid base64 encoded string.\n */\nexport function isBase64Encoded(str: string): boolean {\n const base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n\n return base64Regex.test(str) ? true : false;\n}\n\n/**\n * Returns a string as a JSON object.\n *\n * @param {string} data - The string to convert to a JSON object.\n * @param {boolean} decode - Whether to decode the string. *\n *\n * @returns {any} The JSON object.\n */\nexport function stringToData(data: string, decode: boolean): any {\n let response = data;\n\n // Base64 decode\n if (decode === true) {\n response = atob(response);\n }\n\n try {\n response = JSON.parse(response);\n } catch (e) {\n // failure to parse cookie\n response = data;\n }\n\n return response;\n}\n\n/**\n * Returns a JSON object as a string.\n *\n * @param {any} data - The JSON object to convert to a string.\n * @param {boolean} encode - Whether to encode the string. *\n *\n * @returns {string} The string.\n */\nexport function dataToString(data: any, encode: boolean): string {\n let response = data;\n\n if (typeof response != 'string') {\n response = JSON.stringify(response);\n }\n\n // Base64 encode\n if (encode === true) {\n response = btoa(response);\n }\n\n return response;\n}\n\n/**\n * Returns a string with HTML tags removed.\n *\n * @param {string} str - The string to strip HTML tags from.\n *\n * @returns {string} The string with HTML tags removed.\n */\nexport function stripHtml(str: string): string {\n return str?.replace(/<(.|\\n)*?>/g, '') ?? '';\n}\n\n/**\n * Returns the ID from a GraphQL URL.\n *\n * @param {string} graphId - The GraphQL URL.\n * @param {string} objectType - The object type.\n *\n * @returns {number | null} The ID.\n */\nexport function getIdFromGraphUrl(graphId: string, objectType: string): number | null {\n let id: number | null = null;\n\n const regex = new RegExp(`gid://shopify/${objectType}/(.*)`);\n const matches = graphId.match(regex);\n\n if (matches != null) {\n const matchedId = matches[1];\n\n if (!isNaN(Number(matchedId))) {\n id = Number(matchedId);\n }\n }\n\n return id;\n}\n\n/**\n * Returns true if the variant is available.\n *\n * @param {any} variant - The variant.\n *\n * @returns {boolean} True if the variant is available.\n */\nexport function variantAvailable(variant: any): boolean {\n return !(variant.inventory_management && variant.inventory_policy === 'deny' && variant.inventory_quantity <= 0);\n}\n\n/**\n * Returns the first available variant.\n *\n * @param {any} product - The product.\n *\n * @returns {any} The first available variant.\n */\nexport function firstAvailableVariant(product: any): any {\n // Select first variant\n let selectedVariant = product.variants[0];\n\n // Upgrade to first available\n for (let i = 0; i < product.variants.length; i++) {\n if (variantAvailable(product.variants[i])) {\n selectedVariant = product.variants[i];\n break;\n }\n }\n\n return selectedVariant;\n}\n\n/**\n * Returns a UUID.\n *\n * @returns {string} The UUID.\n */\nexport function uuid(): string {\n let d = new Date().getTime();\n let d2 = (performance && performance.now && performance.now() * 1000) || 0;\n\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n let r = Math.random() * 16;\n\n if (d > 0) {\n r = ((d + r) % 16) | 0;\n d = Math.floor(d / 16);\n } else {\n r = ((d2 + r) % 16) | 0;\n d2 = Math.floor(d2 / 16);\n }\n\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n}\n\n/**\n * Returns a session ID.\n *\n * @returns {string} The session ID.\n */\nexport function sessionId(): string {\n const config = {\n chars: '0123456789',\n length: 12,\n };\n\n let sessionId = '';\n const sessionStart = new Date().getTime();\n\n for (let i = config.length; i > 0; i--) {\n sessionId += config.chars[Math.floor(Math.random() * config.chars.length)];\n }\n\n return `REBUY.${sessionStart}.${sessionId}`;\n}\n\n/**\n * Converts a product to the storefront format.\n *\n * @param {any} product - The product.\n *\n * @returns {any} The product in the storefront format.\n */\nexport function convertProductToStorefrontFormat(product: any): any {\n const defaultVariant = firstAvailableVariant(product);\n const minVariantPrice = variantMinMaxPriceObject(product, 'price', 'min');\n const maxVariantPrice = variantMinMaxPriceObject(product, 'price', 'max');\n const minVariantCompareAtPrice = variantMinMaxPriceObject(product, 'compare_at_price', 'min');\n const maxVariantCompareAtPrice = variantMinMaxPriceObject(product, 'compare_at_price', 'max');\n const selectedOptions = selectedVariantOptions(product, defaultVariant);\n\n const variants = product.variants.map((variant: any) => convertVariantToStorefrontFormat(product, variant));\n\n return {\n collections: null,\n compareAtPriceRange: {\n maxVariantCompareAtPrice,\n minVariantCompareAtPrice,\n },\n description: stripHtml(product.body_html),\n descriptionHtml: product.body_html,\n featuredImage: productImageObject(product, null),\n handle: product.handle,\n id: `gid://shopify/Product/${product.id}`,\n images: null,\n media: [],\n metafields: [],\n options: [\n ...product.options.map((option: any) => {\n return { name: option.name, values: option.values };\n }),\n ],\n priceRange: {\n maxVariantPrice,\n minVariantPrice,\n },\n selectedOptions,\n selectedSellingPlan: null,\n selectedSellingPlanAllocation: null,\n sellingPlanGroups: [],\n seo: { description: null, title: null },\n title: product.title,\n variants: convertToNodes(variants),\n vendor: product.vendor,\n };\n}\n\n/**\n * Converts an array to a nodes object.\n *\n * @param {any} arr - The array to convert to a nodes object.\n *\n * @returns {any} The nodes object.\n */\nexport function convertToNodes(arr: any): any {\n return {\n edges: [\n ...arr.map((node: any) => {\n return { node };\n }),\n ],\n };\n}\n\n/**\n * Converts a variant to the storefront format.\n *\n * @param {any} product - The product.\n * @param {any} variant - The variant.\n *\n * @returns {any} The variant in the storefront format.\n */\nexport function convertVariantToStorefrontFormat(product: any, variant: any): any {\n const selectedOptions = selectedVariantOptions(product, variant);\n const image = productImageObject(product, variant.image_id);\n\n return {\n availableForSale: variantAvailable(variant),\n compareAtPriceV2: variantPriceObject(variant, 'compare_at_price'),\n id: `gid://shopify/ProductVariant/${variant.id}`,\n image: image,\n priceV2: variantPriceObject(variant, 'price'),\n product: {\n handle: product.handle,\n id: product.id,\n title: product.title,\n vendor: product.vendor,\n },\n selectedOptions: [selectedOptions],\n sku: variant.sku,\n title: variant.title,\n };\n}\n\n/**\n * Returns the minimum or maximum price object for a variant.\n *\n * @param {any} product - The product.\n * @param {string} key - The key to get the price object for.\n * @param {string} operator - The operator to use. *\n *\n * @returns {any} The price object.\n */\nexport function variantMinMaxPriceObject(product: any, key: string = 'price', operator: string = 'min'): any {\n let priceObject = variantPriceObject(product.variants[0], key);\n\n for (let i = 0; i < product.variants.length; i++) {\n const variantPrice = variantPriceObject(product.variants[i], key);\n\n if (variantPrice != null) {\n const variantPriceAmount = Number(variantPrice.amount);\n const currentPriceAmount = priceObject != null ? Number(priceObject.amount) : null;\n\n if (\n currentPriceAmount == null ||\n (operator === 'min' && variantPriceAmount < currentPriceAmount) ||\n (operator === 'max' && variantPriceAmount > currentPriceAmount)\n ) {\n priceObject = variantPrice;\n }\n }\n }\n\n return priceObject;\n}\n\n/**\n * Returns the price object for a variant.\n *\n * @param {any} variant - The variant.\n * @param {string} key - The key to get the price object for.\n *\n * @returns {any} The price object.\n */\nexport function variantPriceObject(variant: any, key: string = 'price'): any {\n if (variant[key] != null) {\n return {\n amount: variant[key],\n currencyCode: 'USD',\n };\n }\n\n return null;\n}\n\n/**\n * Returns the selected variant options.\n *\n * @param {any} product - The product.\n * @param {any} variant - The variant.\n *\n * @returns {any} The selected variant options.\n */\nexport function selectedVariantOptions(product: any, variant: any): any {\n const selectedOptions: Record<string, any> = {};\n\n if (variant.option1 != null) {\n selectedOptions[product.options[0].name] = variant.option1;\n }\n\n if (variant.option2 != null) {\n selectedOptions[product.options[1].name] = variant.option2;\n }\n\n if (variant.option3 != null) {\n selectedOptions[product.options[2].name] = variant.option3;\n }\n\n return selectedOptions;\n}\n\n/**\n * Returns the product image object.\n *\n * @param {any} product - The product.\n * @param {number | null} id - The ID of the image. *\n *\n * @returns {any} The product image object.\n */\nexport function productImageObject(product: any, id: number | null): any {\n let image = null;\n\n if (product.image) {\n image = {\n altText: product.image.alt,\n height: product.image.height,\n id: `gid://shopify/ProductImage/${product.image.id}`,\n url: product.image.src,\n width: product.image.width,\n };\n }\n\n if (product.images && product.images.length > 0 && id != null) {\n const matchingImage = product.images.find((i: any) => i.id === id);\n\n if (matchingImage) {\n image = {\n altText: matchingImage.alt,\n height: matchingImage.height,\n id: `gid://shopify/ProductImage/${matchingImage.id}`,\n url: matchingImage.src,\n width: matchingImage.width,\n };\n }\n }\n\n return image;\n}\n\n/**\n * Returns a query string as an object.\n *\n * @param {string} str - The query string to convert to an object.\n *\n * @returns {any} The object.\n */\nexport function queryStringToObject(str: string): any {\n const params = new URLSearchParams(str);\n\n return Object.fromEntries(params.entries());\n}\n\n/**\n * Returns a UTM object from a string.\n *\n * @param {string} str - The string to convert to a UTM object.\n *\n * @returns {any} The UTM object.\n */\nexport function utmObjectFromString(str: string): any {\n const utmKeys = ['utm_campaign', 'utm_medium', 'utm_source', 'utm_term', 'utm_content'];\n\n const matches: Record<string, any> = {};\n\n const url = new URL(str);\n const queryObject = queryStringToObject(url.search);\n\n for (const [key, value] of Object.entries(queryObject)) {\n if (utmKeys.includes(key)) {\n matches[key] = value;\n }\n }\n\n return Object.keys(matches).length > 0 ? matches : null;\n}\n\n/**\n * Returns the amount in cents.\n *\n * @param {number} amount - The amount to convert to cents.\n *\n * @returns {number} The amount in cents.\n */\nexport function amountToCents(amount: number | string): number {\n let normalizedAmount: number = 0;\n\n if (typeof amount === 'string') {\n if (amount.indexOf('.') !== -1) {\n normalizedAmount = Math.round(parseFloat(amount) * 100);\n } else {\n normalizedAmount = parseInt(amount, 10);\n }\n } else if (typeof amount === 'number') {\n normalizedAmount = Math.round(amount * 100);\n }\n\n if (isNaN(normalizedAmount)) {\n normalizedAmount = 0;\n }\n\n return normalizedAmount;\n}\n\n/**\n * Serializes an object.\n *\n * @param {Record<string, unknown>} obj - The object to serialize.\n *\n * @returns {string} The serialized object.\n */\nexport function serialize(obj: Record<string, unknown>): string {\n const serialized: string[] = [];\n\n const add = (key: string, value: any) => {\n value = typeof value === 'function' ? value() : value;\n value = value === null ? '' : value === undefined ? '' : value;\n serialized[serialized.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value);\n };\n\n const buildParameters = (prefix: string, obj: any) => {\n let i, key, len;\n\n if (prefix) {\n if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n buildParameters(prefix + '[' + (typeof obj[i] === 'object' && obj[i] ? i : '') + ']', obj[i]);\n }\n } else if (Object.prototype.toString.call(obj) === '[object Object]') {\n for (key in obj) {\n buildParameters(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (Array.isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParameters(key, obj[key]);\n }\n }\n\n return serialized;\n };\n\n return buildParameters('', obj).join('&');\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { serialize } from '~/utilities';\n\n// Type definitions\n\ntype Config = {\n /**\n * @deprecated\n */\n cdnDomain: string;\n domain: string;\n eventDomain: string;\n geoDomain: string;\n key: string | null;\n shieldDomain: string;\n shop: string | null;\n staticDomain: string;\n};\n\ntype Staging = Omit<Config, 'key' | 'shop'>;\n\ntype FetchOptions = {\n fetch?: RequestInit & { strictErrors?: boolean };\n};\n\ntype RequestData = Record<string, any> | null;\n\nconst staging: Staging = {\n /**\n * @deprecated\n */\n cdnDomain: 'https://cdn.enigneyuber.com',\n domain: 'https://enigneyuber.com',\n eventDomain: 'https://enigneyuber.com',\n geoDomain: 'https://geo.enigneyuber.com',\n shieldDomain: 'https://cached.enigneyuber.com',\n staticDomain: 'https://cdn.enigneyuber.com',\n};\n\nconst stagingDomains: string[] = [\n 'cab-staging.myshopify.com',\n 'enigneyuber.com',\n 'rebuy-engine-regression.myshopify.com',\n 'rebuy-stage-currency-test.myshopify.com',\n 'rebuy-staging-automation.myshopify.com',\n 'rebuy-staging-regression.myshopify.com',\n 'rebuy-uat.myshopify.com',\n 'rebuy-regression-qa.myshopify.com',\n 'senator-staging.myshopify.com',\n 'mike-reids-test-store.myshopify.com',\n 'dash-ext-hoke.myshopify.com',\n 'rebuy-checkout-e2e-staging.myshopify.com',\n];\n\nconst makeCall = async (\n key: string | null,\n method: string,\n path: string,\n data: RequestData,\n origin: string,\n options: FetchOptions = {}\n): Promise<any> => {\n const url = `${origin}${path}`;\n const requestUrl = new URL(url);\n const fetchOptions = options?.fetch ?? {};\n\n const requestData: RequestData = {};\n\n if (typeof data == 'object' && data != null) {\n Object.assign(requestData, data);\n }\n\n if (typeof key == 'string' && key.length > 0) {\n Object.assign(requestData, { key: key });\n }\n\n const requestObject: RequestInit & { strictErrors?: boolean } = {\n method,\n ...fetchOptions,\n };\n\n if (method === 'GET') {\n requestUrl.search = serialize(requestData);\n } else if (method === 'POST') {\n requestObject.headers = {\n 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',\n };\n requestObject.body = new URLSearchParams(requestData) as any;\n }\n\n const request = await fetch(requestUrl.toString(), requestObject);\n const response = await request.json();\n\n if (!request.ok && fetchOptions.strictErrors === true) {\n const message = `An error has occurred: ${request.status}`;\n throw new Error(message, { cause: response });\n }\n\n return response;\n};\n\nexport class Api {\n private config: Config;\n\n constructor(options: string | Partial<Config> | null) {\n this.config = {\n /**\n * @deprecated\n */\n cdnDomain: 'https://cdn.rebuyengine.com',\n domain: 'https://rebuyengine.com',\n eventDomain: 'https://rebuyengine.com',\n geoDomain: 'https://geo.rebuyengine.com',\n key: null,\n shieldDomain: 'https://cached.rebuyengine.com',\n shop: null,\n staticDomain: 'https://cdn.rebuyengine.com',\n };\n\n if (typeof options == 'string') {\n this.config.key = options;\n } else if (typeof options == 'object' && options != null) {\n Object.assign(this.config, options);\n }\n\n for (const domain of stagingDomains) {\n if (typeof location === 'object' && (location as any)?.host?.includes(domain)) {\n Object.assign(this.config, staging);\n break;\n }\n\n if (typeof this.config.shop === 'string' && this.config.shop.includes(domain)) {\n Object.assign(this.config, staging);\n break;\n }\n }\n }\n\n async callEvent(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.eventDomain, options);\n }\n\n async callShield(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.shieldDomain, options);\n }\n\n async callStatic(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.staticDomain, options);\n }\n\n async callGeo(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.geoDomain, options);\n }\n\n async callCdn(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.cdnDomain, options);\n }\n\n async callApi(method: string, path: string, data: RequestData, options?: FetchOptions): Promise<any> {\n return await makeCall(this.config.key, method, path, data, this.config.domain, options);\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Api;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport { dataToString, isBase64Encoded, stringToData } from '~/utilities';\n\n/**\n * Get a cookie by name\n *\n * @param {string} name - The name of the cookie to get\n *\n * @returns {any} The value of the cookie or null if the cookie is not found\n */\nexport function get(name: string): any | null {\n if (typeof document == 'undefined' || !document.cookie) {\n return null;\n }\n\n // Get cookie\n const cookie = document.cookie.match('(^|;) ?' + decodeURIComponent(name) + '=([^;]*)(;|$)');\n\n let value: any = null;\n\n if (cookie != null) {\n // Get data\n const data = decodeURIComponent(cookie[2]);\n\n // Auto decode\n const decode = isBase64Encoded(data) ? true : false;\n\n // Convert to data object\n value = stringToData(data, decode);\n }\n\n return value;\n}\n\n/**\n * Get all cookies\n *\n * @returns {Record<string, any>} All cookies\n */\nexport function getAll(): Record<string, any> {\n const cookies: Record<string, any> = {};\n\n if (document && document.cookie && document.cookie !== '') {\n const split = document.cookie.split(';');\n\n for (let i = 0; i < split.length; i++) {\n const pairs = split[i].split('=');\n\n pairs[0] = pairs[0].replace(/^ /, '');\n\n const key = decodeURIComponent(pairs[0]);\n const value = decodeURIComponent(pairs[1]);\n\n // Auto decode\n const decode = isBase64Encoded(value) ? true : false;\n\n cookies[key] = stringToData(value, decode);\n }\n }\n\n return cookies;\n}\n\n/**\n * Set a cookie\n *\n * @param {string} name - The name of the cookie\n * @param {any} value - The value of the cookie\n * @param {any} config - The configuration of the cookie\n *\n * @returns {void}\n */\nexport function set(name: string, value: any, config: any): void {\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n const attributes = ['path', 'domain', 'maxAge', 'expires', 'secure', 'sameSite'];\n const convenienceTimes = ['seconds', 'minutes', 'hours', 'days', 'weeks', 'months', 'years'];\n\n const cookieAttributes: Record<string, any> = {\n path: '/',\n };\n\n if (typeof config != 'undefined' && Number.isInteger(config)) {\n cookieAttributes['max-age'] = config;\n } else if (typeof config === 'object' && config !== null) {\n for (const key in config) {\n if (attributes.includes(key)) {\n if (key === 'maxAge') {\n cookieAttributes['max-age'] = config[key];\n } else if (key === 'sameSite') {\n cookieAttributes['samesite'] = config[key];\n } else if (key === 'expires') {\n cookieAttributes[key] = new Date(config[key]).toUTCString();\n } else {\n cookieAttributes[key] = config[key];\n }\n } else if (convenienceTimes.includes(key)) {\n let duration = config[key];\n\n if (key === 'seconds') {\n duration = duration * 1;\n } else if (key === 'minutes') {\n duration = duration * 60;\n } else if (key === 'hours') {\n duration = duration * 60 * 60;\n } else if (key === 'days') {\n duration = duration * 60 * 60 * 24;\n } else if (key === 'weeks') {\n duration = duration * 60 * 60 * 24 * 7;\n } else if (key === 'months') {\n duration = duration * 60 * 60 * 24 * 30;\n } else if (key === 'years') {\n duration = duration * 60 * 60 * 24 * 365;\n }\n\n cookieAttributes['max-age'] = duration;\n }\n }\n }\n\n // Convert data to string\n value = dataToString(value, config?.encode);\n\n // Define cookie\n let cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value);\n\n // Add optional cookie attributes\n for (const key in cookieAttributes) {\n cookie += ';' + key + '=' + cookieAttributes[key];\n }\n\n // Write cookie\n document.cookie = cookie;\n}\n\n/**\n * Find all cookies that match a name\n *\n * @param {string} name - The name of the cookie to find\n *\n * @returns {Array<{ name: string; value: any }>} All cookies that match the name\n */\nexport function find(name: string): { name: string; value: any }[] {\n const matches: { name: string; value: any }[] = [];\n const cookies = getAll();\n\n for (const key in cookies) {\n if (key.includes(name)) {\n matches.push({\n name: key,\n value: cookies[key],\n });\n }\n }\n\n return matches;\n}\n\n/**\n * Destroy a cookie\n *\n * @param {string} name - The name of the cookie to destroy\n */\nexport function destroy(name: string): void {\n set(name, '', { encode: false, seconds: 0 });\n}\n\n/**\n * Check if cookies are enabled\n *\n * @returns {boolean} True if cookies are enabled, false otherwise\n */\nexport function enabled(): boolean {\n const test = {\n key: '__cookie_test',\n value: 1,\n };\n\n set(test.key, test.value, { encode: false });\n\n const enabled = get(test.key) === test.value ? true : false;\n\n if (enabled) {\n destroy(test.key);\n }\n\n return enabled;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default { destroy, enabled, find, get, getAll, set };\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Api from '~/api';\nimport Cookie from '~/cookie';\n\ntype Config = {\n geolocation: any;\n geolocationCookie: string;\n geolocationDuration: {\n minutes: number;\n };\n key: string | null;\n};\n\nexport class Geolocation {\n private config: Config;\n\n constructor(key: string | null) {\n this.config = {\n geolocation: null,\n geolocationCookie: '_rebuyGeolocation',\n geolocationDuration: {\n minutes: 30,\n },\n key: null,\n };\n\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n this.config.geolocation = Cookie.get(this.config.geolocationCookie);\n\n // Create a new geolocation (if needed)\n if (this.config.geolocation === null) {\n this._fetchGeolocation();\n }\n }\n\n async _fetchGeolocation(): Promise<any> {\n const api = new Api({ key: this.config.key });\n const response = await api.callGeo('GET', '/', null);\n\n if (response.data) {\n // Update instance config with geolocation\n this.config.geolocation = response.data;\n\n // Write cookie with geolocation\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with geolocation config\n Object.assign(cookieOptions, this.config.geolocationDuration);\n\n // Write cookie with geolocation\n Cookie.set(this.config.geolocationCookie, this.config.geolocation, { ...cookieOptions, encode: false });\n }\n\n return this.config.geolocation;\n }\n\n async geolocation(): Promise<any> {\n if (this.config.geolocation == null) {\n await this._fetchGeolocation();\n }\n\n return this.config.geolocation;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Geolocation;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Cookie from '~/cookie';\nimport { sessionId } from '~/utilities';\n\ntype Config = {\n now: number | null;\n sessionDuration: {\n minutes: number;\n };\n sessionId: string | null;\n sessionIdCookie: string;\n};\n\nconst config: Config = {\n now: null,\n sessionDuration: {\n minutes: 30,\n },\n sessionId: null,\n sessionIdCookie: '_rebuySessionId',\n};\n\nexport class Session {\n constructor() {\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n config.now = new Date().getTime();\n config.sessionId = Cookie.get(config.sessionIdCookie);\n\n // Create a new session (if needed)\n if (config.sessionId === null) {\n config.sessionId = sessionId();\n }\n\n // Write cookie with session ID\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with session config\n Object.assign(cookieOptions, config.sessionDuration);\n\n // Write cookie with session ID\n Cookie.set(config.sessionIdCookie, config.sessionId, cookieOptions);\n }\n\n sessionId(): string | null {\n return config.sessionId;\n }\n\n sessionStart(): number {\n return config.sessionId ? Number(config.sessionId.split('.')[1]) : 0;\n }\n\n sessionDuration(): number {\n return config.now !== null ? parseInt(((config.now - this.sessionStart()) / 1000 / 60).toString()) : 0;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Session;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Cookie from '~/cookie';\nimport Geolocation from '~/geolocation';\nimport Session from '~/session';\nimport { uuid } from '~/utilities';\n\ntype Config = {\n geolocation?: any;\n key: string | null;\n session: any;\n visitorDuration: {\n years: number;\n };\n visitorId: string | null;\n visitorIdCookie: string;\n};\n\nexport class Identity {\n private config: Config;\n\n constructor(key: string | null) {\n this.config = {\n geolocation: null,\n key: null,\n session: null,\n visitorDuration: {\n years: 1,\n },\n visitorId: null,\n visitorIdCookie: '_rebuyVisitorId',\n };\n\n if (typeof document == 'undefined' || !document.cookie) {\n return;\n }\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n this.config.visitorId = Cookie.get(this.config.visitorIdCookie);\n\n // Create a new identifier (if needed)\n if (this.config.visitorId === null) {\n this.config.visitorId = uuid();\n }\n\n // Write cookie with visitor ID\n const cookieOptions: Record<string, any> = {\n secure: true,\n };\n\n // Merge cookie options with visitor config\n Object.assign(cookieOptions, this.config.visitorDuration);\n\n // Write cookie with session ID\n Cookie.set(this.config.visitorIdCookie, this.config.visitorId, cookieOptions);\n\n // Create visitor session\n this.config.session = new Session();\n\n // Create visitor geolocation, passing the key\n this.config.geolocation = new Geolocation(this.config.key);\n }\n\n visitorId(): string | null {\n return this.config.visitorId;\n }\n\n sessionId(): string | null {\n return this.config.session ? this.config.session.sessionId() : null;\n }\n\n sessionStart(): string | null {\n return this.config.session ? this.config.session.sessionStart() : null;\n }\n\n sessionDuration(): string | null {\n return this.config.session ? this.config.session.sessionDuration() : null;\n }\n\n async geolocation(): Promise<any> {\n return this.config.geolocation ? await this.config.geolocation.geolocation() : null;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Identity;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport Api from '~/api';\nimport Identity from '~/identity';\nimport { convertProductToStorefrontFormat } from '~/utilities';\n\ntype Config = {\n api: any;\n contextParameters: Record<string, any> | null;\n defaultParameters: Record<string, any> | null;\n identity: any;\n key: string | null;\n shop: string | null;\n};\n\nconst trackEvent = async (config: Config, eventData: Record<string, any>): Promise<any> => {\n if (config.identity && config.identity.visitorId()) {\n eventData.uuid = config.identity.visitorId();\n }\n\n return await config.api.callEvent('POST', '/api/v1/analytics/event', eventData);\n};\n\nconst makeShieldCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, shield: true });\n};\n\nconst makeStaticCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, static: true });\n};\n\nconst makeCDNCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n return await makeCall(config, endpoint, params, format, { ...options, cdn: true });\n};\n\nconst makeCall = async (\n config: Config,\n endpoint: string,\n params: Record<string, any>,\n format: string | null,\n options: Record<string, any> = {}\n): Promise<any> => {\n const query: Record<string, any> = {};\n\n if (config.defaultParameters != null) {\n Object.assign(query, config.defaultParameters);\n }\n\n if (config.contextParameters != null) {\n Object.assign(query, config.contextParameters);\n }\n\n if (typeof params == 'object' && params != null) {\n Object.assign(query, params);\n }\n\n if (typeof options != 'object' || options == null) {\n console.warn('Unsupported fetch options provided.', options);\n options = {};\n }\n\n if (config.identity && config.identity.visitorId()) {\n query.uuid = config.identity.visitorId();\n }\n\n // Origin or dedicated edge?\n const source = options.cdn ? 'callCdn' : options.shield ? 'callShield' : options.static ? 'callStatic' : 'callApi';\n const response = await config.api[source]('GET', endpoint, query, options);\n\n if (response.data && format === 'storefront') {\n for (let i = 0; i < response.data.length; i++) {\n response.data[i] = convertProductToStorefrontFormat(response.data[i]);\n }\n }\n\n return response;\n};\n\nexport class RebuyClient {\n private config: Config;\n\n constructor(key?: string, defaultParameters?: Record<string, any>, shop?: string) {\n this.config = {\n api: null,\n contextParameters: null,\n defaultParameters: null,\n identity: null,\n key: null,\n shop: null,\n };\n\n if (typeof key == 'string') {\n this.config.key = key;\n }\n\n if (typeof defaultParameters == 'object' && defaultParameters != null) {\n this.config.defaultParameters = defaultParameters;\n }\n\n if (typeof shop == 'string' && shop.endsWith('.myshopify.com')) {\n this.config.shop = shop;\n }\n\n this.config.api = new Api({ key: this.config.key, shop: this.config.shop });\n this.config.identity = new Identity(this.config.key);\n }\n\n setDefaultParameters(defaultParameters: Record<string, any>): void {\n if (typeof defaultParameters == 'object' && defaultParameters != null) {\n this.config.defaultParameters = defaultParameters;\n }\n }\n\n setContextParameters(contextParameters: Record<string, any>): void {\n if (typeof contextParameters == 'object' && contextParameters != null) {\n this.config.contextParameters = contextParameters;\n }\n }\n\n async getData(endpoint: string, params: Record<string, any>, options: Record<string, any> = {}): Promise<any> {\n return await makeCall(this.config, endpoint, params, null, options);\n }\n\n async getDataFromCDN(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeCDNCall(this.config, endpoint, params, null, options);\n }\n\n async getShieldedAsset(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeShieldCall(this.config, endpoint, params, null, options);\n }\n\n async getStaticAsset(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeStaticCall(this.config, endpoint, params, null, options);\n }\n\n async getStorefrontData(\n endpoint: string,\n params: Record<string, any>,\n options: Record<string, any> = {}\n ): Promise<any> {\n return await makeCall(this.config, endpoint, params, 'storefront', options);\n }\n\n async trackProductViewed(data: Record<string, any>): Promise<any> {\n const requiredKeys = ['shopify_product_id', 'shopify_product_handle'];\n\n const defaultData = {\n noun: 'product',\n subject: 'user',\n verb: 'viewed',\n };\n\n if (typeof data != 'undefined' && data != null) {\n const dataKeys = Object.keys(data);\n\n if (dataKeys.some((key) => requiredKeys.includes(key))) {\n const payload = Object.assign(data, defaultData);\n\n return await trackEvent(this.config, payload);\n }\n }\n\n return null;\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default RebuyClient;\n", "import { z } from 'zod';\n\nimport { SmartCartConfig } from './smartCart';\n\n/**\n * The A/B experiment fields `resolveExperiment` actually reads \u2014 a lean projection of the engine's\n * `activeExperiments`. Peripheral experiment metadata (name, page targeting, alias/CSS/JS inputs) is\n * dropped so a change there can't fail the shared config parse.\n */\nexport const CabActiveExperiment = z.object({\n data: z.array(\n z.object({\n elementId: z.coerce.number(),\n id: z.coerce.number(),\n traffic: z.coerce.number(),\n })\n ),\n id: z.coerce.number(),\n placeholderId: z.coerce.number().nullable(),\n type: z.string(),\n});\n\nexport type CabActiveExperiment = z.infer<typeof CabActiveExperiment>;\n\n/**\n * The lean shop config CAB actually consumes \u2014 the five load-bearing fields, not the ~30 the\n * editor-facing `ShopConfig` carries. `apiKey` stays strict (every offers/monetize/gift/analytics\n * request authenticates with it); the rest use `.catch()` so a peripheral engine change (a renamed\n * field, a new `carousel` enum value like `'css'`, an experiment shape drift) degrades that one field\n * instead of 500-ing the shared `fetchUserConfig` and killing every dynamic CAB rail fleet-wide.\n */\nexport const CabShopConfig = z.object({\n /**\n * Per-element resilient: parse as `unknown[]` (non-array \u2192 `[]`), then keep only the experiments that\n * validate. A single drifted experiment drops itself instead of `.catch`-ing the WHOLE array to `[]` and\n * silently disabling every live A/B test fleet-wide.\n */\n activeExperiments: z\n .array(z.unknown())\n .catch([])\n .default([])\n .transform((experiments) =>\n experiments.flatMap((experiment) => {\n const result = CabActiveExperiment.safeParse(experiment);\n\n return result.success ? [result.data] : [];\n })\n ),\n apiKey: z.string(),\n /**\n * The shop's base-currency ISO code (e.g. `'USD'`). CAB derives the shop minor-unit exponent from it\n * (`currencyDecimals`) so a Functions-applied fixed discount \u2014 whose amount is in shop minor units \u2014\n * converts to the buyer's currency exactly in a cross-decimal market. `.catch()` like its siblings: a\n * missing/renamed currency degrades to \"unknown\" (client falls back to buyer decimals), never a parse fail.\n */\n currency: z.string().optional().catch(undefined),\n monetize: z.object({ publisherKey: z.string().nullable() }).nullish().catch(undefined),\n shopId: z.number().optional().catch(undefined),\n});\n\nexport type CabShopConfig = z.infer<typeof CabShopConfig>;\n\n/**\n * The lean `/api/v1/user/config` projection `fetchUserConfig` parses. `smartFlows` (schema-required on\n * the full `UserConfig` but read by no CAB path) is dropped; `smartCart` keeps its `.catch()`\n * safety bar so a smart-cart shape drift can never fail apiKey resolution.\n */\nexport const CabUserConfig = z.object({\n shop: CabShopConfig,\n smartCart: SmartCartConfig.nullish().catch(undefined),\n});\n\nexport type CabUserConfig = z.infer<typeof CabUserConfig>;\n", "import { z } from 'zod';\n\n/**\n * A gift/product reference attached to a smart-cart tier. Kept loose for S0 (data\n * plumbing) \u2014 S2 (gift mechanics) pins the variant/availability fields it consumes.\n */\nexport const SmartCartTierProduct = z.looseObject({\n handle: z.string().optional(),\n id: z.coerce.number().optional(),\n productId: z.coerce.number().optional(),\n title: z.string().optional(),\n variantIds: z.array(z.coerce.number()).optional(),\n});\n\n/**\n * One reward tier on a smart-cart tiered progress bar. `type` is `product` (gift), `shipping`,\n * `discount` (order discount applied by the order-discount Function, keyed by `_barId`) or\n * `decorative` (cosmetic milestone) \u2014 all four render at checkout. `minimum` is the unlock\n * threshold in shop-currency DOLLARS \u2014 except on `unlockConditionType: 'item_quantity'` tiers,\n * where it is a raw ITEM COUNT; `presentmentCurrencies` carries per-ISO-code CENTS overrides.\n *\n * The `*AmountRemainingLabel*`/`*AmountReachedLabel*` pairs are onsite's per-tier feedback copy\n * (`product_amount_remaining_label_text` etc.): the boolean gates whether the prompt shows, the\n * `*Text` holds the merchant sentence with `{{remaining_amount}}`/`{{product_title}}`/`{{discount_amount}}`\n * tokens. Blank/disabled tiers fall back to the bar-level shipping copy client-side.\n */\nexport const SmartCartTier = z.looseObject({\n allProducts: z.array(SmartCartTierProduct).optional(),\n /** Merchant-set tier label (e.g. \"Free gift\", \"$100 reward\"), shown on the step row when enabled. */\n customTierLabel: z.boolean().optional(),\n customTierLabelText: z.string().optional(),\n decorativeAmountReachedLabel: z.boolean().optional(),\n decorativeAmountReachedLabelText: z.string().optional(),\n decorativeAmountRemainingLabel: z.boolean().optional(),\n decorativeAmountRemainingLabelText: z.string().optional(),\n /** Order-discount reward: `'fixedAmount'` (shop-currency dollars) or `'percentage'` (whole percent). */\n discountAmountFromTotal: z.coerce.number().optional(),\n discountAmountReachedLabel: z.boolean().optional(),\n discountAmountReachedLabelText: z.string().optional(),\n discountAmountRemainingLabel: z.boolean().optional(),\n discountAmountRemainingLabelText: z.string().optional(),\n discountType: z.string().optional(),\n filterOosVariants: z.boolean().optional(),\n id: z.string().optional(),\n minimum: z.coerce.number().optional(),\n presentmentCurrencies: z.looseObject({ enabled: z.boolean().optional() }).optional(),\n productAmountReachedLabel: z.boolean().optional(),\n productAmountReachedLabelText: z.string().optional(),\n productAmountRemainingLabel: z.boolean().optional(),\n productAmountRemainingLabelText: z.string().optional(),\n products: z.array(SmartCartTierProduct).optional(),\n type: z.string().optional(),\n /**\n * onsite's PER-TIER unit switch (`unlock_condition_type`): `'item_quantity'` makes `minimum` an\n * item count (checked before any money handling \u2014 no \u00D7100, no FX, no presentment overrides,\n * mirroring onsite `getTierMinimum`); anything else (or absent) keeps the money semantics.\n */\n unlockConditionType: z.string().optional(),\n});\n\n/**\n * A single smart-cart progress bar (one per geo segment). `countryCodes` +\n * `geolocationEnabled` drive client-side country gating; `tiers` are the unlock steps;\n * `language` holds the bar-level reached/remaining copy.\n */\nexport const SmartCartBar = z.looseObject({\n countryCodes: z.array(z.string()).optional(),\n /**\n * onsite `exclude_discount_in_subtotal`: measure progress against the PRE-discount subtotal so an\n * applied code/order discount doesn't lower progress. The client adds cart discount allocations back.\n */\n excludeDiscountInSubtotal: z.boolean().optional(),\n /** Products excluded from the progress subtotal; the client subtracts their variants' cart cost. */\n excludedProducts: z.array(z.looseObject({ variantIds: z.array(z.coerce.number()).optional() })).optional(),\n freeShippingOnSubscription: z.boolean().optional(),\n geolocationEnabled: z.boolean().optional(),\n id: z.string().optional(),\n language: z\n .looseObject({\n freeShippingReached: z.string().optional(),\n freeShippingRemaining: z.string().optional(),\n giftAreaTitle: z.string().optional(),\n })\n .optional(),\n name: z.string().optional(),\n tiers: z.array(SmartCartTier).optional(),\n});\n\n/** A smart-cart layout component; only `type === 'tiered_progress_bar'` carries the bars we render. */\nexport const SmartCartComponent = z.looseObject({\n settings: z.looseObject({ bars: z.array(SmartCartBar).optional() }).optional(),\n type: z.string().optional(),\n});\n\n/**\n * The subset of the shop's smart-cart config the checkout extension reads: the\n * `tiered_progress_bar` component(s) and their bars/tiers. The rest of the onsite\n * smart-cart config (buy-more-save-more, custom templates/CSS, callbacks) is out of\n * scope \u2014 `looseObject` preserves-but-ignores it. Parsed under `UserConfig.smartCart`\n * with `.catch(undefined)` so a shape drift here can NEVER break apiKey resolution for\n * offers / monetize / analytics / gift validation.\n */\nexport const SmartCartConfig = z.looseObject({\n components: z.array(SmartCartComponent).optional(),\n});\n\nexport type SmartCartBar = z.infer<typeof SmartCartBar>;\nexport type SmartCartConfig = z.infer<typeof SmartCartConfig>;\nexport type SmartCartTier = z.infer<typeof SmartCartTier>;\nexport type SmartCartTierProduct = z.infer<typeof SmartCartTierProduct>;\n", "import { z } from 'zod';\n\nimport { CacheInfo, Product } from './product';\n\nconst BaseRule = z.object({\n operator: z.string(),\n type: z.string(),\n value: z.union([z.string(), z.number()]),\n});\n\nconst Rule = BaseRule.extend({\n conditions: z.array(z.object({ type: z.string(), value: z.union([z.string(), z.number()]) })).optional(),\n products: z\n .array(\n z.object({\n productId: z.number(),\n subRules: z.object({ logic: z.array(z.object({ rules: z.array(BaseRule) })) }).optional(),\n variantIds: z.array(z.number()),\n })\n )\n .optional(),\n});\n\nconst Output = z.object({\n channel: z.string().optional(),\n collectionId: z.number().optional(),\n collectionSort: z.string().optional(),\n collectionSortType: z.string().nullish(),\n days: z.string().optional(),\n discount: z.object({ amount: z.string(), type: z.string() }).optional(),\n endpoint: z.string().optional(),\n key: z.string().optional(),\n operator: z.string().optional(),\n productPrice: z.object({ amount: z.string(), type: z.string() }).optional(),\n products: z.array(z.object({ productId: z.number(), variantIds: z.array(z.number()) })).optional(),\n productWithTagsSort: z.string().optional(),\n trendingSort: z.string().optional(),\n type: z.string(),\n value: z.union([z.string(), z.number(), z.boolean()]).optional(),\n});\n\nconst MatchedRule = z.object({\n collapsed: z.boolean().optional(),\n exitIfMatched: z.boolean(),\n index: z.number(),\n logic: z.array(z.object({ rules: z.array(Rule) })),\n output: z.array(Output),\n});\n\n/**\n * The rule-gating verdict the client's `useRule` reads (`metadata.custom.should_show`, camelCased). A\n * data-source evaluated at `limit: 0` returns it; validating the shape server-side lets an unreadable\n * verdict (an engine `custom` rename) be told apart from a rule legitimately evaluating false, which\n * would otherwise hide every gated section on every shop with no signal.\n */\nexport const RuleVerdict = z.object({ custom: z.object({ shouldShow: z.boolean() }) });\n\nexport type RuleVerdict = z.infer<typeof RuleVerdict>;\n\nexport const Metadata = z.object({\n cacheInfo: CacheInfo.optional(),\n cartItems: z.array(z.never()).optional(),\n errors: z.array(z.never()).optional(),\n filteredInputProducts: z.array(z.never()).optional(),\n filteredOosProducts: z.array(Product).optional(),\n globalExcludedProducts: z.array(Product).optional(),\n inputProducts: z.array(z.never()).optional(),\n matchedRules: z.array(MatchedRule).optional(),\n topSellersFilled: z.boolean().optional(),\n unevaluatedRules: z.array(MatchedRule).optional(),\n unmatchedRules: z.array(MatchedRule).optional(),\n widget: z\n .object({\n discount: z.object({ amount: z.string(), type: z.string() }).optional(),\n language: z.record(z.string(), z.string()).optional(),\n })\n .optional(),\n});\n\nexport type Metadata = z.infer<typeof Metadata>;\n", "import { z } from 'zod';\n\nconst zDatetime = z.iso.datetime({ offset: true });\n\nexport const CacheInfo = z.object({\n cachedAtTime: z.union([z.string(), z.number()]),\n cacheExpires: z.union([z.string(), z.number()]).optional(),\n cacheKey: z.string(),\n cacheKeyReadable: z.string(),\n cacheType: z.string().optional(),\n loadedOptions: z.record(z.string(), z.boolean()).optional(),\n});\n\nconst Category = z.object({\n adminGraphqlApiId: z.string(),\n fullName: z.string(),\n name: z.string(),\n});\n\nconst Metafield = z.object({\n key: z.string(),\n namespace: z.string(),\n type: z.string(),\n value: z.string(),\n});\n\nconst Image = z.object({\n adminGraphqlApiId: z.string(),\n alt: z.string().nullable(),\n createdAt: zDatetime.optional(),\n height: z.number(),\n id: z.number(),\n metafields: z.array(Metafield).optional(),\n position: z.number(),\n productId: z.number(),\n src: z.url(),\n updatedAt: zDatetime.optional(),\n variantIds: z.array(z.number()),\n width: z.number(),\n});\n\nconst Media = z.object({\n adminGraphqlApiId: z.string(),\n alt: z.string().nullable(),\n createdAt: zDatetime,\n id: z.number(),\n mediaContentType: z.string(),\n position: z.number(),\n previewImage: z.object({ height: z.number(), src: z.url(), status: z.string(), width: z.number() }),\n productId: z.number(),\n status: z.string(),\n updatedAt: zDatetime,\n variantIds: z.array(z.number()),\n});\n\nconst Option = z.object({\n id: z.number(),\n name: z.string(),\n position: z.number(),\n productId: z.number(),\n values: z.array(z.string()),\n});\n\nexport type Option = z.infer<typeof Option>;\n\nconst PriceAdjustment = z.object({\n orderCount: z.number().optional(),\n position: z.number(),\n value: z.string(),\n valueType: z.string(),\n});\n\nexport type PriceAdjustment = z.infer<typeof PriceAdjustment>;\n\nconst Ratings = z.union([\n z.object({ judgemeAverageStarRating: z.number(), judgemeTotalReviews: z.number() }),\n z.object({ junipAverageStarRating: z.number(), junipTotalReviews: z.number() }),\n z.object({ klaviyoAverageStarRating: z.number(), klaviyoTotalReviews: z.number() }),\n z.object({ looxAverageStarRating: z.number(), looxTotalReviews: z.number() }),\n z.object({ okendoAverageStarRating: z.number(), okendoTotalReviews: z.number() }),\n z.object({ opinewAverageStarRating: z.number(), opinewTotalReviews: z.number() }),\n z.object({ reviewsioAverageStarRating: z.number(), reviewsioTotalReviews: z.number() }),\n z.object({ stampedAverageStarRating: z.number(), stampedTotalReviews: z.number() }),\n z.object({ yotpoAverageStarRating: z.number(), yotpoTotalReviews: z.number() }),\n]);\n\nconst SellingPlan = z.object({\n description: z.string().optional(),\n id: z.number(),\n name: z.string(),\n options: z.array(z.object({ name: z.string(), position: z.number(), value: z.string() })),\n orderIntervalFrequency: z.string().optional(),\n orderIntervalUnitType: z.string().optional(),\n position: z.number().optional(),\n priceAdjustments: z.array(PriceAdjustment),\n shopifyVariantId: z.string().optional(),\n});\n\nexport type SellingPlan = z.infer<typeof SellingPlan>;\n\nconst SellingPlanAllocation = z.object({\n compareAtPrice: z.number(),\n perDeliveryPrice: z.number(),\n price: z.number(),\n priceAdjustments: z.array(PriceAdjustment),\n sellingPlanGroupId: z.string(),\n sellingPlanId: z.number(),\n});\n\nexport type SellingPlanAllocation = z.infer<typeof SellingPlanAllocation>;\n\nexport const SellingPlanGroup = z.object({\n appId: z.string().optional(),\n description: z.string().optional(),\n discountAmount: z.number().optional(),\n discountType: z.string().optional(),\n id: z.string(),\n name: z.string(),\n options: z.array(Option),\n requiresSellingPlan: z.boolean().optional(),\n sellingPlans: z.array(SellingPlan),\n variants: z.array(z.number()),\n});\n\nexport type SellingPlanGroup = z.infer<typeof SellingPlanGroup>;\n\nconst Variant = z.object({\n adminGraphqlApiId: z.string(),\n barcode: z.string().nullable(),\n compareAtPrice: z.string().nullable(),\n createdAt: zDatetime,\n fulfillmentService: z.string().nullish(),\n grams: z.number(),\n id: z.number(),\n imageId: z.number().nullable(),\n inventoryItemId: z.number().optional(),\n inventoryManagement: z.string().nullable(),\n inventoryPolicy: z.string(),\n inventoryQuantity: z.number(),\n link: z.url(),\n oldInventoryQuantity: z.number().optional(),\n option1: z.string(),\n option2: z.string().nullable(),\n option3: z.string().nullable(),\n position: z.number(),\n price: z.string(),\n productId: z.number(),\n requiresShipping: z.boolean(),\n sellingPlanAllocations: z.array(SellingPlanAllocation).optional(),\n sku: z.string().nullable(),\n taxable: z.boolean(),\n taxCode: z.string().optional(),\n title: z.string(),\n updatedAt: zDatetime,\n weight: z.number(),\n weightUnit: z.string().optional(),\n});\n\nexport type Variant = z.infer<typeof Variant>;\n\nexport const Product = z.object({\n adminGraphqlApiId: z.string(),\n bodyHtml: z.string().nullable(),\n cacheInfo: CacheInfo,\n category: Category.nullish(),\n collectionIds: z.array(z.number()),\n createdAt: zDatetime,\n description: z.string(),\n handle: z.string(),\n hasVariantsThatRequiresComponents: z.boolean().optional(),\n id: z.number(),\n image: Image.nullable(),\n images: z.array(Image).nullable(),\n link: z.url(),\n media: z.array(Media).optional(),\n metafields: z.array(Metafield).optional(),\n options: z.array(Option),\n owner: z.union([z.string(), z.number()]),\n productType: z.string(),\n publishedAt: zDatetime.nullable(),\n publishedScope: z.string().optional(),\n purchaseOptions: z.array(z.object({ discountOptions: z.array(z.never()) })).optional(),\n ratings: Ratings.optional(),\n selectedIndexPurchasedOption: z.number().optional(),\n sellingPlanAllocation: SellingPlanAllocation.optional(),\n sellingPlanGroups: z.array(SellingPlanGroup).optional(),\n status: z.string(),\n tags: z.string(),\n templateSuffix: z.string().nullable(),\n title: z.string(),\n updatedAt: zDatetime,\n variantGids: z.array(z.object({ adminGraphqlApiId: z.string(), updatedAt: zDatetime })).optional(),\n variantIds: z.array(z.object({ id: z.number() })).optional(),\n variants: z.array(Variant),\n vendor: z.string(),\n});\n\nexport type Product = z.infer<typeof Product>;\n", "import { z } from 'zod';\n\n/**\n * Per-product discount override a data source can attach \u2014 shaped like the legacy `settings.discount` /\n * `product.discount` (`@rebuy/rebuy/pricing`). Absent on the curated `Product` type, but present on\n * the wire, so the lean offer schema declares it explicitly.\n */\nconst OfferProductDiscount = z.object({\n amount: z.union([z.number(), z.string()]),\n discountedBy: z.string().optional(),\n discountedFrom: z.string().optional(),\n type: z.string(),\n});\n\nconst OfferProductOption = z.object({\n id: z.number(),\n name: z.string(),\n position: z.number(),\n values: z.array(z.string()),\n});\n\n/** Only what `toProduct` (`getIsOutOfStock` + `toPrice` + selection) reads off a variant. */\nconst OfferProductVariant = z.object({\n adminGraphqlApiId: z.string(),\n compareAtPrice: z.string().nullable(),\n id: z.number(),\n inventoryManagement: z.string().nullable(),\n inventoryPolicy: z.string(),\n inventoryQuantity: z.number(),\n link: z.string(),\n option1: z.string(),\n option2: z.string().nullable(),\n option3: z.string().nullable(),\n price: z.string(),\n title: z.string(),\n});\n\n/**\n * The lean server-side offer-product schema \u2014 exactly the fields the extension's `toProduct` consumes,\n * with the over-strict validators of the editor-facing `Product` (required `cacheInfo`, ISO\n * datetimes, `z.url()` links) relaxed to what the wire actually carries. `fetchDataSourceResults`\n * `safeParse`s each product against this and drops the ones that fail, so one malformed product costs\n * one offer card instead of the whole rail. This is also the type CAB imports in place of the loose\n * root `Product`, keeping the extension `any`-free.\n */\nexport const OfferProduct = z.object({\n description: z.string().optional(),\n discount: OfferProductDiscount.optional(),\n id: z.number(),\n image: z.object({ src: z.string() }).nullish(),\n images: z.array(z.object({ src: z.string(), variantIds: z.array(z.number()) })).nullish(),\n link: z.string().optional(),\n metafields: z.array(z.object({ key: z.string(), namespace: z.string(), value: z.string() })).optional(),\n options: z.array(OfferProductOption),\n sellingPlanGroups: z.array(z.object({ requiresSellingPlan: z.boolean().optional() })).optional(),\n title: z.string(),\n variants: z.array(OfferProductVariant),\n});\n\nexport type OfferProduct = z.infer<typeof OfferProduct>;\n", "import { z } from 'zod';\n\n/** @see {@link https://bitbucket.org/rebuyengine/rebuyengine.com/src/main/application/libraries/Cache/ShopConfigCache.php#lines-143} */\nexport const ShopConfig = z.object({\n activeExperiments: z.array(\n z.object({\n data: z.array(\n z.object({\n aliasName: z.string(),\n cssInput: z.string().nullish(),\n elementId: z.coerce.number(),\n id: z.coerce.number(),\n javascriptInput: z.string().nullish(),\n traffic: z.coerce.number(),\n })\n ),\n id: z.coerce.number(),\n name: z.string(),\n pageTarget: z.string().nullable(),\n pageTargetUrl: z.string().nullable(),\n placeholderId: z.coerce.number().nullable(),\n type: z.string(),\n })\n ),\n activePackages: z.array(\n z.object({\n cancelledAt: z.string().nullable(),\n id: z.number(),\n installedAt: z.string().nullable(),\n isActive: z.boolean(),\n isBillable: z.boolean(),\n packageId: z.number(),\n packageName: z.string(),\n shortName: z.string(),\n trialDays: z.number(),\n uninstalledAt: z.string().nullable(),\n })\n ),\n apiKey: z.string(),\n billingVersion: z.string().nullable(),\n cacheKey: z.coerce.number(),\n carousel: z.enum(['flickity', 'splide']),\n currency: z.string(),\n currencySymbol: z.string(),\n domain: z.string(),\n enabledJquery: z.boolean(),\n enabledPresentmentCurrencies: z.array(z.string()),\n hasSmartCollectionsEnabled: z.boolean(),\n hasSmartSearchEnabled: z.boolean(),\n id: z.coerce.number(),\n integrations: z.record(\n z.enum([\n 'attentive',\n 'judgeme',\n 'junip',\n 'klaviyo',\n 'loox',\n 'okendo',\n 'opinew',\n 'recharge',\n 'reviewsio',\n 'stamped',\n 'yotpo',\n ]),\n z.union([z.boolean(), z.unknown()])\n ),\n markets: z.object({\n enabled: z.boolean(),\n }),\n monetize: z\n .object({\n publisherKey: z.string().nullable(),\n })\n .nullish(),\n moneyFormat: z.string(),\n myshopifyDomain: z.string(),\n primaryLocale: z.string(),\n productGroupsEnabled: z.enum(['no', 'yes']).transform((value) => value === 'yes'),\n rechargeCustomDomain: z.string().nullable(),\n sellingPlansEnabled: z.boolean(),\n shopId: z.number(),\n shopifySellingPlansEnabled: z.boolean(),\n shopName: z.string(),\n storefrontAccessToken: z.string().nullable(),\n useRebuyIcons: z.boolean(),\n});\n\nexport type ShopConfig = z.infer<typeof ShopConfig>;\n", "import { z } from 'zod';\n\nimport { ShopConfig } from './shopConfig';\nimport { SmartCartConfig } from './smartCart';\n\nexport const UserConfig = z.object({\n shop: ShopConfig,\n /**\n * `.catch(undefined)` is the safety bar: smart-cart shape drift can NEVER fail `fetchUserConfig`,\n * which resolves the apiKey for every offers/monetize/analytics/gift request.\n */\n smartCart: SmartCartConfig.nullish().catch(undefined),\n smartFlows: z.array(z.unknown()),\n});\n\nexport type UserConfig = z.infer<typeof UserConfig>;\n", "import { z } from 'zod';\n\nimport { ABTestingPlaceholder } from './widgets/abTestingPlaceholder';\nimport { WidgetType } from './widgets/checkout-and-beyond/constants';\nimport { CheckoutExtension } from './widgets/checkoutExtension';\nimport { ContentBlock } from './widgets/contentBlock';\nimport { GiftWithPurchase } from './widgets/giftWithPurchase';\nimport { LineItemEditor } from './widgets/lineItemEditor';\nimport { ProgressBar } from './widgets/progressBar';\nimport { RebuyButton } from './widgets/rebuyButton';\nimport { RebuyMonetize } from './widgets/rebuyMonetize';\n\nexport const extensionWidgetTypes = [\n 'placeholder',\n WidgetType.gift_with_purchase,\n WidgetType.shopify_checkout_extension,\n WidgetType.ui_extension_ad,\n WidgetType.ui_extension_button,\n WidgetType.ui_extension_content_block,\n WidgetType.ui_extension_line_item_editor,\n WidgetType.ui_extension_progress_bar,\n] as const;\n\nexport const WidgetData = z.discriminatedUnion('type', [\n ABTestingPlaceholder,\n CheckoutExtension,\n ContentBlock,\n GiftWithPurchase,\n LineItemEditor,\n ProgressBar,\n RebuyButton,\n RebuyMonetize,\n]);\n\nexport type WidgetData = z.infer<typeof WidgetData>;\n", "import { z } from 'zod';\n\nexport const ABTestingPlaceholder = z.looseObject({\n type: z.literal('placeholder'),\n});\n\nexport type ABTestingPlaceholder = z.infer<typeof ABTestingPlaceholder>;\n", "import { uniqBy } from 'es-toolkit';\n\nimport { EditorMode, freezeEnum } from './common';\nimport { type TargetArea } from './root';\n\nexport const DEFAULT_ENDPOINTS = [\n { label: 'Recommended (AI)', value: '/products/recommended' },\n { label: 'Top Sellers', value: '/products/top_sellers' },\n { label: 'Buy It Again', value: '/products/purchased' },\n { label: 'Recently Viewed', value: '/products/viewed' },\n { label: 'Products Search', value: '/products/search' },\n { label: 'Collection Products', value: '/products/collections' },\n { label: 'Similar Products (AI)', value: '/products/similar_products' },\n] as const;\n\nexport const STATIC_ENDPOINTS = [\n { label: 'Recommended (AI)', value: '/products/recommended' },\n { label: 'Top Sellers', value: '/products/top_sellers' },\n { label: 'Trending Products', value: '/products/trending_products' },\n { label: 'Buy It Again', value: '/products/purchased' },\n { label: 'Collection Products', value: '/products/collections' },\n { label: 'Recently Viewed', value: '/products/viewed' },\n { label: 'Static Products', value: '/products/static' },\n { label: 'Products Search', value: '/products/search' },\n { label: 'Similar Products (AI)', value: '/products/similar_products' },\n] as const;\n\nexport const COMBINED_ENDPOINTS = uniqBy([...DEFAULT_ENDPOINTS, ...STATIC_ENDPOINTS], (item) => item.value);\n\nexport const targetAreas = {\n [EditorMode.checkoutExtension]: [\n { icon: 'splitscreen_top', label: 'Header Area', width: '984px' },\n { icon: 'splitscreen_left', label: 'Main Column', width: '503px' },\n { icon: 'splitscreen_right', label: 'Summary Column', width: '404px' },\n ] satisfies TargetArea[],\n [EditorMode.postPurchaseOffer]: null,\n [EditorMode.thankYouPage]: [\n { icon: 'splitscreen_top', label: 'Header Area', width: '984px' },\n { icon: 'splitscreen_left', label: 'Main Column', width: '503px' },\n { icon: 'splitscreen_right', label: 'Summary Column', width: '404px' },\n ] satisfies TargetArea[],\n [EditorMode.orderStatusPage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Header Area', width: '1124px' },\n { fill: true, icon: 'view_column_2', label: 'Main Area', width: '646px' },\n { icon: 'splitscreen_bottom', label: 'Footer Area', width: '1124px' },\n ] satisfies TargetArea[],\n [EditorMode.ordersIndexPage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Main Area', width: '1124px' },\n ] satisfies TargetArea[],\n [EditorMode.customerProfilePage]: [\n // { fill: true, flip: 'vertical', icon: 'bottom_navigation', label: 'Announcement Bar' },\n { icon: 'splitscreen_top', label: 'Main Area', width: '1124px' },\n ] satisfies TargetArea[],\n} as const;\n\nexport const widgetTypes = [\n 'bundle_builder',\n 'cart',\n 'cart_subscription',\n 'dynamic_bundle',\n 'gift_with_purchase',\n 'pre_purchase',\n 'product',\n 'product_addon',\n 'product_upsell',\n 'recharge_checkout',\n 'recharge_customer_portal',\n 'recharge_post_purchase',\n 'shopify_checkout',\n 'shopify_checkout_extension',\n 'shopify_post_purchase',\n 'shopify_post_purchase_extension',\n 'switch_to_subscription',\n 'ui_extension_ad',\n 'ui_extension_button',\n 'ui_extension_content_block',\n 'ui_extension_line_item_editor',\n 'ui_extension_progress_bar',\n] as const;\n\nexport const WidgetType = freezeEnum(widgetTypes);\nexport type WidgetType = (typeof widgetTypes)[number];\n", "export const freezeEnum = <T extends readonly string[]>(values: T) =>\n Object.freeze(Object.fromEntries(values.map((v) => [v, v]))) as { readonly [K in T[number]]: K };\n\nexport const bannerColors = ['info', 'success', 'warning', 'critical'] as const;\nexport const BannerColor = freezeEnum(bannerColors);\nexport type BannerColor = (typeof bannerColors)[number];\n\nexport const borderRadii = ['none', 'small', 'base', 'large', 'fullyRounded'] as const;\nexport const BorderRadius = freezeEnum(borderRadii);\nexport type BorderRadius = (typeof borderRadii)[number];\n\nexport const borderStyles = ['none', 'base', 'dotted', 'dashed'] as const;\nexport const BorderStyle = freezeEnum(borderStyles);\nexport type BorderStyle = (typeof borderStyles)[number];\n\nexport const borderWidths = ['base', 'medium', 'thick'] as const;\nexport const BorderWidth = freezeEnum(borderWidths);\nexport type BorderWidth = (typeof borderWidths)[number];\n\nexport const buttonActions = [\n 'acceptOffer',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromOrder',\n 'selectVariant',\n 'showPagination',\n 'switchToSubscription',\n 'undoAddToOrder',\n] as const;\n\nexport const ButtonAction = freezeEnum(buttonActions);\nexport type ButtonAction = (typeof buttonActions)[number];\n\nexport const buttonFields = [\n 'activePage',\n 'addedToCart',\n 'addingToCart',\n 'addToCart',\n 'buttonLabel',\n 'declineAllOffers',\n 'declineOffer',\n 'destinationUrl',\n 'inactivePage',\n 'overlayContent',\n 'payNow',\n 'progressReached',\n 'progressRemaining',\n 'redirectToCheckout',\n 'removeFromOrder',\n 'showVariant',\n 'showVariants',\n 'soldOut',\n 'subscriptionOption',\n 'switchToOneTimePurchase',\n 'switchToSubscriptionNoDiscount',\n 'switchToSubscriptionWithDiscount',\n 'undoAddToOrder',\n] as const;\n\nexport const ButtonField = freezeEnum(buttonFields);\nexport type ButtonField = (typeof buttonFields)[number];\n\nexport const buttonStyles = ['primary', 'secondary', 'plain', 'custom'] as const;\nexport const ButtonStyle = freezeEnum(buttonStyles);\nexport type ButtonStyle = (typeof buttonStyles)[number];\n\nexport const directions = ['columns', 'rows', 'grid'] as const;\nexport const Direction = freezeEnum(directions);\nexport type Direction = (typeof directions)[number];\n\nexport const discountSources = ['price', 'compare_at_price'] as const;\nexport const DiscountSource = freezeEnum(discountSources);\nexport type DiscountSource = (typeof discountSources)[number];\n\nexport const discountTypes = ['none', 'percentage', 'fixed', 'fixed_amount'] as const;\nexport const DiscountType = freezeEnum(discountTypes);\nexport type DiscountType = (typeof discountTypes)[number];\n\nexport const editorModes = [\n 'checkoutExtension',\n 'postPurchaseOffer',\n 'thankYouPage',\n 'orderStatusPage',\n 'ordersIndexPage',\n 'customerProfilePage',\n] as const;\n\nexport const EditorMode = freezeEnum(editorModes);\nexport type EditorMode = (typeof editorModes)[number];\n\nexport const horizontalAlignments = ['start', 'center', 'end'] as const;\nexport const HorizontalAlignment = freezeEnum(horizontalAlignments);\nexport type HorizontalAlignment = (typeof horizontalAlignments)[number];\n\nexport const languageKeys = [\n 'ar',\n 'cs',\n 'da',\n 'de',\n 'en',\n 'es',\n 'fi',\n 'fr',\n 'ga',\n 'he',\n 'hi',\n 'id',\n 'it',\n 'ja',\n 'ko',\n 'nl',\n 'no',\n 'pl',\n 'pt',\n 'ru',\n 'sv',\n 'th',\n 'tr',\n 'uk',\n 'vi',\n 'zh',\n] as const;\n\nexport const LanguageKey = freezeEnum(languageKeys);\nexport type LanguageKey = (typeof languageKeys)[number];\n\nexport const objectFits = ['cover', 'contain'] as const;\nexport const ObjectFit = freezeEnum(objectFits);\nexport type ObjectFit = (typeof objectFits)[number];\n\nexport const popoverPositions = ['inlineStart', 'inlineEnd', 'blockStart', 'blockEnd'] as const;\nexport const PopoverPosition = freezeEnum(popoverPositions);\nexport type PopoverPosition = (typeof popoverPositions)[number];\n\nexport const popoverPositionMap = {\n bottom: 'blockEnd',\n left: 'inlineStart',\n right: 'inlineEnd',\n top: 'blockStart',\n} as const;\n\nexport const productTypes = ['one-time', 'subscription', 'both'] as const;\nexport const ProductType = freezeEnum(productTypes);\nexport type ProductType = (typeof productTypes)[number];\n\nexport const progressTierTypes = ['decorative', 'discount', 'product', 'shipping'] as const;\nexport const ProgressTierType = freezeEnum(progressTierTypes);\nexport type ProgressTierType = (typeof progressTierTypes)[number];\n\nexport const progressTierUnits = ['currency', 'item'] as const;\nexport const ProgressTierUnit = freezeEnum(progressTierUnits);\nexport type ProgressTierUnit = (typeof progressTierUnits)[number];\n\nexport const quantityInputs = ['select', 'number'] as const;\nexport const QuantityInput = freezeEnum(quantityInputs);\nexport type QuantityInput = (typeof quantityInputs)[number];\n\nexport const reviewsSizes = ['small', 'default', 'large'] as const;\nexport const ReviewsSize = freezeEnum(reviewsSizes);\nexport type ReviewsSize = (typeof reviewsSizes)[number];\n\nexport const sectionTypes = [\n 'banner',\n 'button',\n 'carousel',\n 'cartLine',\n 'dataSource',\n 'discount',\n 'image',\n 'layout',\n 'monetize',\n 'offers',\n 'product',\n 'products',\n 'progressBar',\n 'quantity',\n 'reviews',\n 'text',\n 'variants',\n] as const;\n\nexport const SectionType = freezeEnum(sectionTypes);\nexport type SectionType = (typeof sectionTypes)[number];\n\nexport const spacings = ['none', 'extraTight', 'tight', 'base', 'loose', 'extraLoose'] as const;\nexport const Spacing = freezeEnum(spacings);\nexport type Spacing = (typeof spacings)[number];\n\nexport const textAlignments = ['start', 'center', 'end'] as const;\nexport const TextAlignment = freezeEnum(textAlignments);\nexport type TextAlignment = (typeof textAlignments)[number];\n\nexport const textColorNames = ['base', 'subdued', 'accent', 'decorative', 'success', 'warning', 'critical'] as const;\nexport const TextColorName = freezeEnum(textColorNames);\nexport type TextColorName = (typeof textColorNames)[number];\n\nexport const textSizeNames = ['extraSmall', 'small', 'base', 'medium', 'large', 'extraLarge'] as const;\nexport const TextSizeName = freezeEnum(textSizeNames);\nexport type TextSizeName = (typeof textSizeNames)[number];\n\nexport const variantModes = ['multiple', 'single'] as const;\nexport const VariantMode = freezeEnum(variantModes);\nexport type VariantMode = (typeof variantModes)[number];\n\nexport const variantSelectors = ['menu', 'radio', 'button'] as const;\nexport const VariantSelector = freezeEnum(variantSelectors);\nexport type VariantSelector = (typeof variantSelectors)[number];\n\nexport const verticalAlignments = ['top', 'middle', 'bottom'] as const;\nexport const VerticalAlignment = freezeEnum(verticalAlignments);\nexport type VerticalAlignment = (typeof verticalAlignments)[number];\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const CheckoutExtension = z.looseObject({\n type: z.literal(WidgetType.shopify_checkout_extension).default(WidgetType.shopify_checkout_extension),\n});\n\nexport type CheckoutExtension = z.infer<typeof CheckoutExtension>;\n", "import { z } from 'zod';\n\nimport { spacings, textSizeNames } from './checkout-and-beyond/common';\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\nexport const ContentBlockV1 = z.object({\n blockSpacing: z.enum(spacings).optional(),\n imageBlocks: z\n .union([\n z.array(\n z.object({\n altText: z.string().nullable(),\n description: z.string().nullable(),\n id: z.uuid(),\n imagePlacement: z.enum(['top', 'right', 'bottom', 'left']),\n imageSize: z.number(),\n imageUrl: z.url(),\n textAlignment: z.enum(['left', 'center', 'right']),\n textSize: z.enum(textSizeNames),\n })\n ),\n z.strictObject({}).transform(() => []),\n ])\n .optional(),\n imageLayout: z.enum(['row', 'column']).optional(),\n language: z.object({\n description: z.string(),\n superTitle: z.string(),\n title: z.string(),\n }),\n previewMode: z.boolean(),\n type: z.literal(WidgetType.ui_extension_content_block).default(WidgetType.ui_extension_content_block),\n version: z.literal(1),\n});\n\nexport const ContentBlock = z.discriminatedUnion('version', [\n ContentBlockV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_content_block).default(WidgetType.ui_extension_content_block),\n }),\n]);\n\nexport type ContentBlock = z.infer<typeof ContentBlock>;\n", "import { z } from 'zod';\n\nimport { EditorMode, editorModes } from './common';\nimport { targetAreas, WidgetType, widgetTypes } from './constants';\nimport { CABLayoutSection } from './layout';\nimport { UI_LABELS } from './uiLabels';\n\n/**\n * A per-slot `Record<locale, string>` defaulted from {@link UI_LABELS}: a missing slot gets the fallback,\n * and a present-but-empty slot (`{}`) is guarded back to the fallback too \u2014 otherwise the per-slot default\n * (which only fires for `undefined`) is bypassed and the client renders a blank aria label.\n */\nconst localized = (fallback: Record<string, string>) =>\n z\n .record(z.string(), z.string())\n .default(() => ({ ...fallback }))\n .transform((labels) => (Object.keys(labels).length > 0 ? labels : { ...fallback }));\n\n/**\n * Localized UI-chrome labels for the tree, defaulted from {@link UI_LABELS} at parse so every widget\n * carries them without converter or merchant work. Per-slot `Record<locale, string>`; the client indexes\n * the buyer language with `selectLanguage`. Lives on the root (not per section) because these strings \u2014\n * spinner/carousel/select-label/variant-state chrome \u2014 are shared across the whole tree.\n */\nexport const CABUILabels = z\n .object({\n currentPage: localized(UI_LABELS.currentPage),\n loadingOptions: localized(UI_LABELS.loadingOptions),\n nextPage: localized(UI_LABELS.nextPage),\n offerDialog: localized(UI_LABELS.offerDialog),\n page: localized(UI_LABELS.page),\n previousPage: localized(UI_LABELS.previousPage),\n selected: localized(UI_LABELS.selected),\n subscriptionOptions: localized(UI_LABELS.subscriptionOptions),\n updating: localized(UI_LABELS.updating),\n })\n .default(() => ({\n currentPage: { ...UI_LABELS.currentPage },\n loadingOptions: { ...UI_LABELS.loadingOptions },\n nextPage: { ...UI_LABELS.nextPage },\n offerDialog: { ...UI_LABELS.offerDialog },\n page: { ...UI_LABELS.page },\n previousPage: { ...UI_LABELS.previousPage },\n selected: { ...UI_LABELS.selected },\n subscriptionOptions: { ...UI_LABELS.subscriptionOptions },\n updating: { ...UI_LABELS.updating },\n }));\n\nexport type CABUILabels = Record<keyof typeof UI_LABELS, Record<string, string>>;\n\nconst TargetArea = z\n .object({\n fill: z.boolean().optional(),\n flip: z.enum(['both', 'horizontal', 'vertical']).optional(),\n icon: z.string(),\n label: z.string(),\n width: z.string(),\n })\n .default(targetAreas[EditorMode.checkoutExtension][1]);\n\nexport type TargetArea = {\n fill?: boolean;\n flip?: 'horizontal' | 'vertical' | 'both';\n icon: string;\n label: string;\n width: string;\n};\n\nexport const CABTracking = z\n .object({\n enableAttribution: z.boolean().default(true),\n enableSource: z.boolean().default(true),\n enableWidget: z.boolean().default(true),\n })\n .default({ enableAttribution: true, enableSource: true, enableWidget: true });\n\nexport type CABTracking = z.infer<typeof CABTracking>;\n\n/**\n * The A/B experiment this tree was selected for, attached server-side when the placeholder widget is an\n * experiment target (else absent). The client renders the chosen variant's tree as usual and emits the\n * `ab-test-viewed` / `ABN.TEST` analytics from these fields \u2014 replicating React's `useAnalyticsEvent`.\n */\nexport const CABExperiment = z.object({\n elementId: z.number(),\n experimentId: z.number(),\n experimentType: z.string(),\n selectedId: z.number(),\n});\n\nexport type CABExperiment = z.infer<typeof CABExperiment>;\n\nexport const CABRootSection = CABLayoutSection.extend({\n editorMode: z.enum(editorModes).default(EditorMode.checkoutExtension),\n experiment: CABExperiment.optional(),\n previewMode: z.boolean().default(false),\n storeId: z.number().nullable().default(null),\n targetArea: TargetArea.nullable(),\n tracking: CABTracking,\n type: z.enum(widgetTypes).default(WidgetType.ui_extension_content_block),\n uiLabels: CABUILabels,\n version: z.literal(2).default(2),\n widgetId: z.number().nullable().default(null),\n});\n\nexport type CABRootSection = CABLayoutSection & {\n editorMode: EditorMode;\n experiment?: CABExperiment;\n previewMode: boolean;\n storeId: number | null;\n targetArea: TargetArea | null;\n tracking: CABTracking;\n type: WidgetType;\n uiLabels: CABUILabels;\n version: number;\n widgetId: number | null;\n};\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport {\n buttonFields,\n Direction,\n directions,\n HorizontalAlignment,\n horizontalAlignments,\n SectionType,\n Spacing,\n spacings,\n VerticalAlignment,\n verticalAlignments,\n type ButtonField,\n} from './common';\nimport { CABRule } from './rule';\nimport { CABBorder, CABSection, type SectionDetails } from './shared';\n\nexport const GridItem = z.union([z.literal('auto'), z.literal('fill'), z.string().regex(/^\\d+%$/), z.number()]);\nexport type GridItem = z.infer<typeof GridItem>;\n\nexport const CABLayoutSection = z.object({\n alignment: z\n .object({\n horizontal: z.enum(horizontalAlignments).default(HorizontalAlignment.start),\n vertical: z.enum(verticalAlignments).default(VerticalAlignment.top),\n })\n .default({\n horizontal: HorizontalAlignment.start,\n vertical: VerticalAlignment.top,\n }),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n direction: z.enum(directions).default(Direction.rows),\n grid: z\n .object({\n columns: z.union([z.array(GridItem), z.undefined()]).default(() => ['auto']),\n rows: z.union([z.array(GridItem), z.undefined()]).default(() => ['auto']),\n })\n .default({ columns: ['auto'], rows: ['auto'] })\n .optional(),\n name: z.string().optional(),\n padding: z.enum(spacings).default(Spacing.none),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.layout).default(SectionType.layout),\n spacing: z.enum(spacings).default(Spacing.base),\n /** Fire-and-forget impression pixel POSTed once when the section is shown (e.g. a Monetize offer view). */\n viewUrl: z.string().optional(),\n width: z.number().default(100),\n});\n\nexport type CABLayoutSection = {\n alignment: {\n horizontal: HorizontalAlignment;\n vertical: VerticalAlignment;\n };\n border: CABBorder;\n buttonField?: ButtonField;\n direction: Direction;\n grid?: {\n columns: GridItem[];\n rows: GridItem[];\n };\n name?: string;\n padding: Spacing;\n rule?: CABRule;\n sectionId: string;\n sections: CABSection[];\n sectionType: 'layout';\n spacing: Spacing;\n viewUrl?: string;\n width: number;\n};\n\nexport type CABLayoutSectionProps = CABLayoutSection & SectionDetails;\n", "import { z } from 'zod';\n\nexport const ruleTypes = [\n 'cart',\n 'cart_count',\n 'cart_item_count',\n 'cart_line_count',\n 'cart_subtotal',\n 'collection',\n 'customer',\n 'customer_order_count',\n 'customer_tag',\n 'customer_total_spent',\n 'date',\n 'product',\n 'product_tag',\n 'product_title',\n 'product_type',\n 'product_vendor',\n] as const;\n\nconst ruleType = z.enum(ruleTypes);\n\nexport const RuleType = ruleType.enum;\nexport type RuleType = z.infer<typeof ruleType>;\n\nexport const ruleOperators = [\n 'after',\n 'anything',\n 'before',\n 'contains',\n 'contains_any',\n 'does_not_contain',\n 'does_not_contain_any',\n 'equals',\n 'does_not_equal',\n 'greater_than',\n 'less_than',\n] as const;\n\nconst ruleOperator = z.enum(ruleOperators);\n\nexport const RuleOperator = ruleOperator.enum;\nexport type RuleOperator = z.infer<typeof ruleOperator>;\n\nexport const RuleCondition = z.object({\n operator: z.enum(ruleOperators).default(RuleOperator.anything),\n products: z.union([z.array(z.unknown()), z.strictObject({}).transform(() => [])]).default(() => []),\n type: z.enum(ruleTypes).default(RuleType.cart_subtotal),\n value: z.coerce.string().default(''),\n});\n\nexport type RuleCondition = z.infer<typeof RuleCondition>;\n\nexport const RuleLogicBlock = z.object({\n rules: z.array(RuleCondition).default(() => []),\n});\n\nexport type RuleLogicBlock = z.infer<typeof RuleLogicBlock>;\n\nexport const CABRule = z.object({\n dataSourceId: z.number().nullable().default(null),\n enabled: z.boolean().default(false),\n ruleset: z\n .union([\n z.array(\n z.object({\n exitIfMatched: z.boolean().default(true),\n logic: z.array(RuleLogicBlock).default(() => []),\n output: z\n .array(\n z.object({\n key: z.string().default('should_show'),\n type: z.literal('data_json').default('data_json'),\n value: z.string().default('true'),\n })\n )\n .default(() => [{ key: 'should_show', type: 'data_json' as const, value: 'true' }]),\n })\n ),\n z.strictObject({}).transform(() => []),\n ])\n .default(() => []),\n});\n\nexport type CABRule = z.infer<typeof CABRule>;\n", "import { type FieldArrayPath } from 'react-hook-form';\nimport { z, type ZodType } from 'zod';\n\nimport { CABBannerSection } from './banner';\nimport { CABButtonSection } from './button';\nimport { CABCarouselSection } from './carousel';\nimport { CABCartLineSection } from './cartLine';\nimport { borderRadii, BorderRadius, BorderStyle, borderStyles, BorderWidth, borderWidths } from './common';\nimport { CABDataSourceSection } from './dataSource';\nimport { CABDiscountSection } from './discount';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { CABMonetizeSection } from './monetize';\nimport { CABOffersSection } from './offers';\nimport { CABProductSection } from './product';\nimport { CABProductsSection } from './products';\nimport { CABProgressBarSection } from './progressBar';\nimport { CABQuantitySection } from './quantity';\nimport { CABReviewsSection } from './reviews';\nimport { type CABRootSection } from './root';\nimport { CABTextSection } from './text';\nimport { CABVariantsSection } from './variants';\n\nexport const CABBorder = z\n .object({\n radius: z.enum(borderRadii).default(BorderRadius.base),\n style: z.enum(borderStyles).default(BorderStyle.none),\n width: z.enum(borderWidths).default(BorderWidth.base),\n })\n .default({\n radius: BorderRadius.base,\n style: BorderStyle.none,\n width: BorderWidth.base,\n });\n\nexport type CABBorder = z.infer<typeof CABBorder>;\n\nexport const CABSection: ZodType<CABSection> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [\n CABBannerSection,\n CABButtonSection,\n CABCarouselSection,\n CABCartLineSection,\n CABDataSourceSection,\n CABDiscountSection,\n CABImageSection,\n CABLayoutSection,\n CABMonetizeSection,\n CABOffersSection,\n CABProductSection,\n CABProductsSection,\n CABProgressBarSection,\n CABQuantitySection,\n CABReviewsSection,\n CABTextSection,\n CABVariantsSection,\n ])\n);\n\nexport type CABSection =\n | CABBannerSection\n | CABButtonSection\n | CABCarouselSection\n | CABCartLineSection\n | CABDataSourceSection\n | CABDiscountSection\n | CABImageSection\n | CABLayoutSection\n | CABMonetizeSection\n | CABOffersSection\n | CABProductSection\n | CABProductsSection\n | CABProgressBarSection\n | CABQuantitySection\n | CABReviewsSection\n | CABTextSection\n | CABVariantsSection;\n\nexport type SectionId = CABSection['sectionId'];\n\n/* @ts-expect-error: TS2589: Type instantiation _is_ excessively deep and infinite. */\nexport type SectionArrayPath = FieldArrayPath<CABRootSection>;\n\nexport type SectionPrefixPath = `${SectionArrayPath}.${number}` | null;\n\nexport type SectionDetails = {\n /**\n * The full React Hook Form dot-notation path to the section object itself,\n * for use with `register` or `control`, e.g. `sections.0.sections.1`.\n *\n * Returns `null` for the root section.\n */\n fieldArrayPath: SectionArrayPath | null;\n /**\n * The index of the found section within its parent `sections` array.\n *\n * Returns `null` for the root section.\n */\n index: number | null;\n /**\n * The parent `sections` object.\n *\n * Returns `null` for the root section.\n */\n parent: CABSection[] | null;\n /**\n * The parent `sectionId`.\n *\n * Returns `undefined` for the root section.\n */\n parentId: SectionId | undefined;\n /**\n * The full React Hook Form dot-notation path to the section object itself,\n * for use with `register` or `control`, e.g. `sections.0.sections.1`.\n *\n * Returns `null` for the root section.\n */\n prefixPath: SectionPrefixPath | null;\n};\n\nexport type CABSectionProps = CABSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { bannerColors, buttonFields, SectionType, type BannerColor } from './common';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABBannerSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n buttonField: z.enum(buttonFields).optional(),\n color: z.enum(bannerColors).default('info'),\n dismissible: z.boolean().default(true),\n sectionType: z.literal(SectionType.banner).default(SectionType.banner),\n })\n);\n\nexport type CABBannerSection = Omit<CABLayoutSection, 'sectionType'> & {\n color: BannerColor;\n dismissible: boolean;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod';\n\nimport {\n buttonActions,\n ButtonStyle,\n buttonStyles,\n PopoverPosition,\n popoverPositions,\n SectionType,\n TextAlignment,\n textAlignments,\n} from './common';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { HEX_COLOR_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABButtonContent = CABImageSection | CABLayoutSection | CABTextSection;\n\nexport const CABButtonContent: ZodType<CABButtonContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABImageSection, CABLayoutSection, CABTextSection])\n);\n\nexport const CABButtonSection = z.object({\n action: z.union([z.literal(''), z.enum(buttonActions)]).default(''),\n buttonStyle: z.enum(buttonStyles).default(ButtonStyle.primary),\n custom: z\n .object({\n color: z.string().regex(HEX_COLOR_REGEX).default('#005bd3'),\n height: z.number().default(52),\n width: z.number().default(300),\n })\n .default({\n color: '#005bd3',\n height: 52,\n width: 300,\n }),\n disableDowngrade: z.boolean().default(false),\n name: z.string().optional(),\n optionId: z.number().optional(),\n popover: z\n .object({\n alignment: z.enum(textAlignments).default(TextAlignment.center),\n position: z.enum(popoverPositions).default(PopoverPosition.blockStart),\n })\n .optional()\n .default(() => ({\n alignment: TextAlignment.center,\n position: PopoverPosition.blockStart,\n })),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABButtonContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.button).default(SectionType.button),\n /** Fire-and-forget pixel POSTed when the button is clicked (e.g. a Monetize decline). */\n trackingUrl: z.string().optional(),\n});\n\nexport type CABButtonSection = z.infer<typeof CABButtonSection>;\n\nexport type CABButtonSectionProps = CABButtonSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { buttonFields, ObjectFit, objectFits, SectionType } from './common';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nexport const CABImageSection = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n aspectRatio: z.literal(1).nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n category: z.enum(['gallery', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n name: z.string().optional(),\n naturalHeight: z.number().default(0),\n naturalWidth: z.number().default(0),\n /**\n * `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and\n * `cover` would crop non-square art (payment badges lost their edges \u2014 15993); `contain` letterboxes.\n */\n objectFit: z.enum(objectFits).default(ObjectFit.contain),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.image).default(SectionType.image),\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(''),\n width: z.number().default(100),\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "/** Matches a valid array index string (e.g., \"0\", \"1\", \"42\"). */\nexport const ARRAY_INDEX_STRING = /^(0|[1-9]\\d*)$/;\n\n/** Matches a dynamic token. */\nexport const DYNAMIC_TOKEN_REGEX = /^\\{\\{\\s*[A-Za-z]+\\s*\\}\\}$/;\n\n/** Matches a valid hex color code. */\nexport const HEX_COLOR_REGEX = /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/;\n\n/**\n * Matches a root-relative, same-origin path (single leading slash, e.g. Shopify's\n * `/policies/privacy-policy`). A protocol-relative `//host` is excluded \u2014 it points off-origin.\n */\nexport const ROOT_RELATIVE_PATH_REGEX = /^\\/(?!\\/)/;\n\n/**\n * Matches an HTML-shaped tag: `<` (or `</`) immediately followed by a tag-name letter. This mirrors\n * both the browser `DOMParser` branch of `isHTML` and `stripContentBlockHtml`'s tag regex, so the\n * server-side check agrees with the client and with whatever the sanitizer removes. It deliberately\n * leaves bare comparison brackets alone (`5 < 10 and 10 > 5`) \u2014 those are text, not markup, and the\n * looser `/<\\/?[^>]+>/` it replaced wrongly rejected them and 500'd otherwise-valid content.\n *\n * Keeps the `g` flag because downstream consumers strip ALL tags with `.replace(HTML_TAGS_REGEX, '')`\n * (rebuy-shopify-extensions, admin-nextjs); without it `.replace` would drop only the first tag. The\n * one in-package consumer, `isHTML`, must therefore NOT use `.test()` on it \u2014 a global regex carries a\n * sticky `lastIndex` that makes repeated `.test()` calls flaky. `isHTML` uses `.search()` instead,\n * which ignores and never mutates `lastIndex`.\n */\nexport const HTML_TAGS_REGEX = /<\\/?[a-zA-Z][^>]*>/g;\n", "import { isPlainObject, mapValues } from 'es-toolkit';\nimport { every, get, isArray, isString, map, size, toPairs } from 'es-toolkit/compat';\n\nimport { type CABBannerSection } from './banner';\nimport { type CABButtonSection } from './button';\nimport { type CABCarouselSection } from './carousel';\nimport { type CABCartLineSection } from './cartLine';\nimport { ButtonField, SectionType } from './common';\nimport { type CABDataSourceSection } from './dataSource';\nimport { type CABDiscountSection } from './discount';\nimport { type CABImageSection } from './image';\nimport { type CABLayoutSection } from './layout';\nimport { type CABMonetizeSection } from './monetize';\nimport { type CABOffersSection } from './offers';\nimport { type CABProductSection } from './product';\nimport { type CABProductsSection } from './products';\nimport { type CABProgressBarSection } from './progressBar';\nimport { type CABQuantitySection } from './quantity';\nimport { ARRAY_INDEX_STRING, HTML_TAGS_REGEX } from './regex';\nimport { type CABReviewsSection } from './reviews';\nimport { type CABTextSection, type TiptapDocument } from './text';\nimport { type CABVariantsSection } from './variants';\n\nexport const isHTML = (html: string | undefined = ''): boolean => {\n if (typeof window !== 'undefined') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n\n const hasHTML = (nodeList: NodeList) => Array.from(nodeList).some((node) => node.nodeType === 1);\n\n return hasHTML(doc.body.childNodes) || hasHTML(doc.head.childNodes);\n }\n\n // `.search()` (not `.test()`) because HTML_TAGS_REGEX is global for downstream `.replace` callers;\n // `.search()` ignores and never advances `lastIndex`, so repeated calls stay deterministic.\n return html.search(HTML_TAGS_REGEX) !== -1;\n};\n\nexport const hasHTMLInDoc = (doc: TiptapDocument): boolean =>\n doc.content.some(({ content = [] }) => content.some(({ text }) => isHTML(text)));\n\nexport const checkForHTML = (input: string | TiptapDocument): boolean =>\n !((isString(input) && isHTML(input)) || (isPlainObject(input) && hasHTMLInDoc(input as TiptapDocument)));\n\nexport const NO_HTML = { message: 'HTML is not supported' };\n\nexport const isBannerType = (section: unknown): section is CABBannerSection =>\n get(section, 'sectionType') === SectionType.banner;\n\nexport const isButtonType = (section: unknown): section is CABButtonSection =>\n get(section, 'sectionType') === SectionType.button;\n\nexport const isCarouselType = (section: unknown): section is CABCarouselSection =>\n get(section, 'sectionType') === SectionType.carousel;\n\nexport const isCartLineType = (section: unknown): section is CABCartLineSection =>\n get(section, 'sectionType') === SectionType.cartLine;\n\nexport const isDataSourceType = (section: unknown): section is CABDataSourceSection =>\n get(section, 'sectionType') === SectionType.dataSource;\n\nexport const isDiscountType = (section: unknown): section is CABDiscountSection =>\n get(section, 'sectionType') === SectionType.discount;\n\nexport const isImageType = (section: unknown): section is CABImageSection =>\n get(section, 'sectionType') === SectionType.image;\n\nexport const isLayoutType = (section: unknown): section is CABLayoutSection =>\n get(section, 'sectionType') === SectionType.layout;\n\nexport const isMonetizeType = (section: unknown): section is CABMonetizeSection =>\n get(section, 'sectionType') === SectionType.monetize;\n\nexport const isOffersType = (section: unknown): section is CABOffersSection =>\n get(section, 'sectionType') === SectionType.offers;\n\nexport const isOverlayType = (section: unknown): section is CABLayoutSection =>\n isLayoutType(section) && get(section, 'buttonField') === ButtonField.overlayContent;\n\nexport const isProductType = (section: unknown): section is CABProductSection =>\n get(section, 'sectionType') === SectionType.product;\n\nexport const isProductsType = (section: unknown): section is CABProductsSection =>\n get(section, 'sectionType') === SectionType.products;\n\nexport const isProgressBarType = (section: unknown): section is CABProgressBarSection =>\n get(section, 'sectionType') === SectionType.progressBar;\n\nexport const isQuantityType = (section: unknown): section is CABQuantitySection =>\n get(section, 'sectionType') === SectionType.quantity;\n\nexport const isReviewsType = (section: unknown): section is CABReviewsSection =>\n get(section, 'sectionType') === SectionType.reviews;\n\nexport const isTextType = (section: unknown): section is CABTextSection =>\n get(section, 'sectionType') === SectionType.text;\n\nexport const isVariantsType = (section: unknown): section is CABVariantsSection =>\n get(section, 'sectionType') === SectionType.variants;\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>) =>\n !!size(input) && every(input, (_, key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)));\n\nconst numericObjectToArray = (input: Record<string, unknown>) =>\n toPairs(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([_, value]) => value);\n\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (isArray(input)) return map(input, convertNumericObjects);\n\n if (isPlainObject(input)) {\n const obj = input as Record<string, unknown>;\n\n return hasOnlyNumericKeys(obj)\n ? map(numericObjectToArray(obj), convertNumericObjects)\n : mapValues(obj, convertNumericObjects);\n }\n\n return input;\n};\n", "import { forEach, isString } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport {\n ButtonField,\n buttonFields,\n progressTierTypes,\n ProgressTierType,\n SectionType,\n Spacing,\n spacings,\n TextAlignment,\n textAlignments,\n TextColorName,\n textColorNames,\n TextSizeName,\n textSizeNames,\n} from './common';\nimport { DYNAMIC_TOKEN_REGEX, ROOT_RELATIVE_PATH_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nconst enumOrOmit = <T extends readonly [string, ...string[]]>(...vals: T) =>\n z\n .string()\n .transform((val) => (vals.includes(val as T[number]) ? (val as T[number]) : undefined))\n .optional();\n\nexport const TiptapText = z.object({\n marks: z\n .union([\n z.array(\n z.discriminatedUnion('type', [\n z.object({ type: z.literal('bold') }),\n z.object({ type: z.literal('italic') }),\n z.object({\n attrs: z.object({\n class: z.string().nullable(),\n href: z.union([\n z.url(),\n z.literal('#'),\n z.string().regex(DYNAMIC_TOKEN_REGEX),\n z.string().regex(ROOT_RELATIVE_PATH_REGEX),\n ]),\n rel: z.string().default('noopener noreferrer nofollow'),\n target: z.string().default('_blank'),\n }),\n type: z.literal('link'),\n }),\n z.object({ type: z.literal('strike') }),\n z.object({\n attrs: z.object({\n color: enumOrOmit(...textColorNames).default(TextColorName.base),\n fontSize: enumOrOmit(...textSizeNames).default(TextSizeName.base),\n }),\n type: z.literal('textStyle'),\n }),\n ])\n ),\n z.strictObject({}).transform(() => []),\n ])\n .optional(),\n text: z.string().default(''),\n type: z.literal('text').default('text'),\n});\n\nexport type TiptapText = z.infer<typeof TiptapText>;\n\nexport const TiptapParagraph = z.object({\n attrs: z\n .object({\n textAlign: enumOrOmit(...textAlignments),\n })\n .default({ textAlign: TextAlignment.start }),\n content: z.union([z.array(TiptapText), z.strictObject({}).transform(() => [])]).default(() => []),\n type: z.literal('paragraph').default('paragraph'),\n});\n\nexport type TiptapParagraph = z.infer<typeof TiptapParagraph>;\n\nexport const TiptapDocument = z.object({\n attrs: z\n .object({\n blockSpacing: enumOrOmit(...spacings),\n })\n .default({ blockSpacing: Spacing.base }),\n content: z\n .union([z.array(TiptapParagraph), z.strictObject({}).transform(() => [])])\n .default(() => [TiptapParagraph.parse({})]),\n type: z.literal('doc').default('doc'),\n});\n\nexport type TiptapDocument = z.infer<typeof TiptapDocument>;\n\n/**\n * A text section's tier reference. On the smart-cart per-tier feedback copy it carries the `tierId`, so\n * the renderer shows this section only while its tier is the active (current/last-reached) one \u2014 the\n * full tier (gift/threshold) lives on progressBar.\n */\nexport const CABTextTier = z.object({\n threshold: z.number().int().nonnegative(),\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n tierId: z.string().optional(),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n});\n\nexport type CABTextTier = z.infer<typeof CABTextTier>;\n\nexport const CABTextSection = z\n .object({\n buttonField: z.enum(buttonFields).optional(),\n content: z\n .record(z.string(), z.union([z.string(), TiptapDocument]).refine(checkForHTML, NO_HTML).optional())\n .default({ en: TiptapDocument.parse({}) })\n .optional(),\n name: z.string().optional(),\n optionId: z.number().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.text).default(SectionType.text),\n tier: CABTextTier.optional(),\n })\n .superRefine(({ buttonField, content }, ctx) => {\n if (buttonField === ButtonField.destinationUrl && content) {\n forEach(content, (value, lang) => {\n if (value && isString(value)) {\n if (DYNAMIC_TOKEN_REGEX.test(value)) return;\n\n try {\n new URL(value);\n } catch {\n ctx.addIssue({\n code: 'custom',\n message: 'Invalid URL',\n path: ['content', lang],\n });\n }\n }\n });\n }\n });\n\nexport type CABTextSection = z.infer<typeof CABTextSection>;\n\nexport type CABTextSectionProps = CABTextSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABLayoutSection } from './layout';\nimport { CABOffersSection } from './offers';\nimport { CABSection, type SectionDetails } from './shared';\n\nexport const CABCarouselSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n autoAdvanceInterval: z.number().default(0),\n itemsAtOnce: z.number().min(1).default(1),\n sections: z\n .union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])])\n .default(() => [CABOffersSection.parse({})]),\n sectionType: z.literal(SectionType.carousel).default(SectionType.carousel),\n })\n);\n\nexport type CABCarouselSection = Omit<CABLayoutSection, 'sectionType'> & {\n autoAdvanceInterval: number;\n itemsAtOnce: number;\n sectionType: 'carousel';\n};\n\nexport type CABCarouselSectionProps = CABCarouselSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { CABBannerSection } from './banner';\nimport { CABButtonSection } from './button';\nimport { ButtonStyle, SectionType } from './common';\nimport { CABDataSourceSection } from './dataSource';\nimport { CABLayoutSection } from './layout';\nimport { CABProductsSection } from './products';\nimport { CABSection, type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport const CABOffersSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n sections: z.union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])]).default(() => [\n CABBannerSection.parse({\n buttonField: 'undoAddToOrder',\n color: 'success',\n dismissible: true,\n name: 'Success Banner',\n sections: [\n CABTextSection.parse({ content: { en: '{{quantity}} {{productTitle}} added to cart.' } }),\n CABButtonSection.parse({ action: 'undoAddToOrder', buttonStyle: ButtonStyle.plain }),\n ],\n }),\n CABDataSourceSection.parse({}),\n CABProductsSection.parse({}),\n ]),\n sectionType: z.literal(SectionType.offers).default(SectionType.offers),\n })\n);\n\nexport type CABOffersSection = Omit<CABLayoutSection, 'sectionType'> & {\n sectionType: 'offers';\n};\n\nexport type CABOffersSectionProps = CABOffersSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { discountSources, discountTypes, productTypes, SectionType } from './common';\nimport { DEFAULT_ENDPOINTS } from './constants';\nimport { type SectionDetails } from './shared';\n\nexport const CABDiscount = z.object({\n amount: z.union([z.number(), z.string()]).catch(0),\n discountedBy: z.string().optional(),\n discountedFrom: z.enum(discountSources).optional().catch(undefined),\n type: z.enum(discountTypes).catch('none'),\n});\n\nexport type CABDiscount = z.infer<typeof CABDiscount>;\n\nexport const CABIntegrations = z.object({\n judgeme: z.boolean().default(false),\n junip: z.boolean().default(false),\n klaviyo: z.boolean().default(false),\n loox: z.boolean().default(false),\n okendo: z.boolean().default(false),\n opinew: z.boolean().default(false),\n reviewsio: z.boolean().default(false),\n stamped: z.boolean().default(false),\n yotpo: z.boolean().default(false),\n});\n\nexport type CABIntegrations = z.infer<typeof CABIntegrations>;\n\nexport const CABDataSourceSection = z.object({\n dataSourceId: z.number().nullable().default(null),\n dataSourcePath: z.string().default(DEFAULT_ENDPOINTS[0].value),\n discount: CABDiscount.optional(),\n integrations: CABIntegrations.optional(),\n limit: z.number().default(1),\n matchVariant: z.boolean().default(false),\n matchVariantOutOfStock: z.boolean().default(false),\n name: z.string().default(DEFAULT_ENDPOINTS[0].label),\n productType: z.enum(productTypes).optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.dataSource).default(SectionType.dataSource),\n /** Default subscribe-vs-one-time for `productType: both` (legacy `subscription_is_default`). */\n subscriptionIsDefault: z.boolean().default(false),\n treatAsGwp: z.boolean().default(false),\n});\n\nexport type CABDataSourceSection = z.infer<typeof CABDataSourceSection>;\n\nexport type CABDataSourceSectionProps = CABDataSourceSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABProductSection } from './product';\nimport { type SectionDetails } from './shared';\n\nexport const CABProductsSection = z.object({\n name: z.string().optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z\n .union([z.array(z.lazy(() => CABProductSection)), z.strictObject({}).transform(() => [])])\n .default(() => []),\n sectionType: z.literal(SectionType.products).default(SectionType.products),\n});\n\nexport type CABProductsSection = z.infer<typeof CABProductsSection>;\n\nexport type CABProductsSectionProps = CABProductsSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod';\n\nimport { CABButtonSection } from './button';\nimport { SectionType, VariantMode, variantModes, VariantSelector, variantSelectors } from './common';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABVariantContent = CABButtonSection | CABTextSection;\n\nexport const CABVariantContent: ZodType<CABVariantContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABButtonSection, CABTextSection])\n);\n\nexport const CABProductSection = z.object({\n name: z.string().optional(),\n productId: z.number().nullable().default(null),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABVariantContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.product).default(SectionType.product),\n selectors: z.record(z.string(), z.enum(variantSelectors).default(VariantSelector.menu)).default(() => ({})),\n variantMode: z.enum(variantModes).default(VariantMode.multiple),\n});\n\nexport type CABProductSection = z.infer<typeof CABProductSection>;\n\nexport type CABProductSectionProps = CABProductSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { CABButtonSection } from './button';\nimport { ButtonAction, SectionType } from './common';\nimport { CABLayoutSection } from './layout';\nimport { CABSection, type SectionDetails } from './shared';\n\nexport const CABCartLineSection = z.lazy(() =>\n CABLayoutSection.omit({ sections: true, sectionType: true }).extend({\n sections: z\n .union([z.array(z.lazy(() => CABSection)), z.strictObject({}).transform(() => [])])\n .default(() => [CABButtonSection.parse({ action: ButtonAction.switchToSubscription })]),\n sectionType: z.literal(SectionType.cartLine).default(SectionType.cartLine),\n })\n);\n\nexport type CABCartLineSection = Omit<CABLayoutSection, 'sectionType'> & {\n sectionType: 'cartLine';\n};\n\nexport type CABCartLineSectionProps = CABCartLineSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { discountSources, discountTypes, SectionType } from './common';\nimport { type SectionDetails } from './shared';\n\n/**\n * The widget discount, modeled as its own offers child section (toggled on/off in the editor and\n * rendered nowhere \u2014 it's config-only). Discounting is Shopify Functions-only (Scripts is sunset), so a\n * configured discount always applies via Functions and the amount is in Functions (minor-unit) form for\n * fixed types. `discountedFrom` is the compare-from source; `message` is the Functions discount title.\n */\nexport const CABDiscountSection = z.object({\n amount: z.union([z.number(), z.string()]).catch(0),\n discountedBy: z.string().optional(),\n discountedFrom: z.enum(discountSources).optional().catch(undefined),\n message: z.string().optional(),\n name: z.string().optional(),\n quantity: z.number().default(1),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.discount).default(SectionType.discount),\n type: z.enum(discountTypes).catch('none'),\n});\n\nexport type CABDiscountSection = z.infer<typeof CABDiscountSection>;\n\nexport type CABDiscountSectionProps = CABDiscountSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABMonetizeSection = z.object({\n name: z.string().optional(),\n /** Privacy Policy footer href (the widget's `privacy_policy_url` setting); the client relays it to `/cab/monetize`. */\n privacyPolicyUrl: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.monetize).default(SectionType.monetize),\n});\n\nexport type CABMonetizeSection = z.infer<typeof CABMonetizeSection>;\n\nexport type CABMonetizeSectionProps = CABMonetizeSection & SectionDetails;\n", "import { z } from 'zod';\n\nimport { ProgressTierType, progressTierTypes, ProgressTierUnit, progressTierUnits, SectionType } from './common';\nimport { GIFT_LABELS } from './giftLabels';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABProgressTier = z.object({\n /**\n * Order-discount tiers only (onsite `discount`): the reward the order-discount Function applies at\n * cart time, carried so the client can resolve the `{{discountAmount}}` token in this tier's copy.\n * `fixedAmount`: shop-currency CENTS (FX-scaled by the client, like {@link CABProgressTier.threshold});\n * `percentage`: the whole-percent number rendered raw (`{n}%`). Absent on non-discount tiers.\n */\n discount: z.object({ amount: z.number().nonnegative(), type: z.enum(['fixedAmount', 'percentage']) }).optional(),\n /**\n * Smart-cart product (gift) tiers only: the reward unlocked at this tier. The client enriches\n * `productId`/`variantIds` to live variants (availability, price) and adds the chosen one to the cart\n * when the tier is reached (attribution `_tier` = {@link CABProgressTier.tierId}). Absent on shipping\n * tiers and on tiers with no configured product. Cart add/remove is a later stage; carried here so the\n * tree is complete.\n */\n gift: z\n .object({\n productId: z.number().int().positive(),\n title: z.string().optional(),\n variantIds: z.array(z.number().int().positive()).default(() => []),\n })\n .optional(),\n /**\n * The step-row label at this tier's slot (onsite `getTierLabel`): the merchant custom label, else the\n * type default ('Free Shipping' / product title / '{n}% Discount'). Localized content; blank \u21D2 no\n * label under the tier's icon. Plain text \u2014 the step row is a compact icon+label, not rich copy.\n */\n label: z.record(z.string(), z.string()).optional(),\n /**\n * The tier's goal, measured per `unit`. `currency` (default): SHOP-currency cents \u2014 the canonical\n * fallback: when the buyer's presentment currency has no entry in `thresholds`, the client\n * multiplies this by the live FX rate (converter maps the v1 `unlock_price`, e.g. `75` \u2192 `7500`).\n * `item`: a raw item count \u2014 no cents, no FX, no `thresholds` overrides.\n */\n threshold: z.number().int().nonnegative(),\n /**\n * Per-presentment-currency goal overrides \u2014 lowercased ISO currency code \u2192 cents (e.g. `{ cad: 9900 }`).\n * When the buyer's currency has an entry, the client uses it verbatim INSTEAD of FX-converting\n * `threshold`, so merchants show intentional, clean per-market amounts (Shopify Markets) rather than a\n * converted base. Defaults to `{}` \u2014 no overrides means always fall back to `threshold`.\n */\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n /**\n * Smart-cart tier identifier, mirrored onto the gift cart line's `_tier` attribute so the client can\n * match an in-cart gift back to its tier (add on reach, remove on downgrade/decline). Absent on the\n * shipping bar (single unlabeled tier, no gift).\n */\n tierId: z.string().optional(),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n /**\n * What this tier's progress is measured in \u2014 PER TIER (onsite's `unlock_condition_type` model, NOT\n * the React port's bar-level `tiers[0]` shortcut). `currency` compares money cents against the\n * adjusted subtotal; `item` compares the raw quantity sum of non-excluded lines (the SAME exclusion\n * set as the money path). A mixed-unit bar stays coherent tier by tier: reach, fill share, and\n * `{{remainingAmount}}` (count-formatted + item/items-pluralized for `item` tiers) each resolve in\n * their own tier's unit \u2014 cross-tier arithmetic never mixes counts with cents.\n */\n unit: z.enum(progressTierUnits).default(ProgressTierUnit.currency),\n});\n\nexport type CABProgressTier = z.infer<typeof CABProgressTier>;\n\n/**\n * A self-contained progress-bar container. Extends `layout` (alignment/border/spacing/`sections`/\u2026), so it\n * holds ALL its pieces as composable children \u2014 the tier display (a `columns \u2192 rows \u2192 text/image` layout)\n * and the reached/remaining message `text`s \u2014 while the renderer adds the bar fill from `tiers` and shows\n * the active message. Everything is encapsulated under this one named section (and one country/FX gate).\n */\nexport const CABProgressBarSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n /** Empty = shown everywhere; otherwise uppercase ISO country codes. */\n countryCodes: z.array(z.string().transform((code) => code.trim().toUpperCase())).default(() => []),\n /**\n * Uppercase ISO codes where a higher-precedence geo bar applies, so this (default, non-geo) bar is\n * hidden there \u2014 replicates React `getbar`'s geo-match-over-default precedence. Empty = never excluded.\n */\n excludeCountryCodes: z.array(z.string().transform((code) => code.trim().toUpperCase())).default(() => []),\n /**\n * Measure progress against the PRE-discount subtotal (onsite `exclude_discount_in_subtotal`, and\n * forced on for bars with a discount tier so its own reward can't un-reach the tier). The client\n * adds the cart's discount allocations back to the live subtotal.\n */\n excludeDiscountInSubtotal: z.boolean().default(false),\n /** Variant ids the client subtracts from the adjusted subtotal (React `bar.excluded_products`). */\n excludedVariantIds: z.array(z.number().int().positive()).default(() => []),\n /**\n * When the cart holds a subscription item, treat the bar as reached regardless of subtotal (React\n * `free_shipping_on_subscription(s)`). `freeShippingOnAll` is already a zero-threshold tier instead.\n */\n freeShippingOnSubscription: z.boolean().default(false),\n /** Localized heading over the gift controls (onsite `gift_area_title`, default 'FREE GIFTS'). */\n giftAreaTitle: z.record(z.string(), z.string()).default(() => ({ en: 'FREE GIFTS' })),\n /** Localized gift-control labels (add/remove/heading); a tier's gift `title` beats `yourGift`. */\n giftLabels: z\n .object({\n addGift: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.addGift })),\n remove: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.remove })),\n selectOptions: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.selectOptions })),\n yourGift: z.record(z.string(), z.string()).default(() => ({ ...GIFT_LABELS.yourGift })),\n })\n .default(() => ({\n addGift: { ...GIFT_LABELS.addGift },\n remove: { ...GIFT_LABELS.remove },\n selectOptions: { ...GIFT_LABELS.selectOptions },\n yourGift: { ...GIFT_LABELS.yourGift },\n })),\n /** The bar's a11y label; the merchant names it in the editor, else this default (React parity). */\n name: z.string().default('Order progress'),\n /**\n * Bar fill color. An explicit (widget-authored) value is used verbatim; when absent the server\n * fills it with the live shop theme's `buttonBackground` (React `useRebuyTheme` parity). Still\n * absent after that \u21D2 the theme fetch failed and the client renders its platform-default bar \u2014\n * optional, not defaulted, so \"merchant chose no color\" stays distinguishable from any real value.\n */\n progressColor: z.string().optional(),\n sectionType: z.literal(SectionType.progressBar).default(SectionType.progressBar),\n /**\n * The bar's milestones, in any order \u2014 the renderer sorts by resolved threshold. Drives the fill\n * (even slot per tier) and, for smart-cart product tiers, the gift add/remove. The visual tier\n * display lives in `sections` (composable), NOT here.\n */\n tiers: z.union([z.array(CABProgressTier), z.strictObject({}).transform(() => [])]).default(() => []),\n })\n);\n\nexport type CABProgressBarSection = Omit<CABLayoutSection, 'name' | 'sectionType'> & {\n countryCodes: string[];\n excludeCountryCodes: string[];\n excludeDiscountInSubtotal: boolean;\n excludedVariantIds: number[];\n freeShippingOnSubscription: boolean;\n giftAreaTitle: Record<string, string>;\n giftLabels: Record<'addGift' | 'remove' | 'selectOptions' | 'yourGift', Record<string, string>>;\n name: string;\n progressColor?: string;\n sectionType: 'progressBar';\n tiers: CABProgressTier[];\n};\n\nexport type CABProgressBarSectionProps = CABProgressBarSection & SectionDetails;\n", "/**\n * Default localized labels for the smart-cart gift controls, keyed by slot then locale (same 26 locales\n * as `SWITCH_LABELS`). Schema-default content, never a client dictionary (Peter, 2026-07-06: visible\n * customer strings must be localized). `yourGift` is the generic heading \u2014 a tier's configured gift\n * `title` beats it when present.\n */\nexport const GIFT_LABELS = {\n addGift: {\n ar: '\u0623\u0636\u0641 \u0627\u0644\u0647\u062F\u064A\u0629',\n cs: 'P\u0159idat d\u00E1rek',\n da: 'Tilf\u00F8j gave',\n de: 'Geschenk hinzuf\u00FCgen',\n en: 'Add gift',\n es: 'A\u00F1adir regalo',\n fi: 'Lis\u00E4\u00E4 lahja',\n fr: 'Ajouter le cadeau',\n ga: 'Cuir bronntanas leis',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DE\u05EA\u05E0\u05D4',\n hi: '\u0909\u092A\u0939\u093E\u0930 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambahkan hadiah',\n it: 'Aggiungi regalo',\n ja: '\u30AE\u30D5\u30C8\u3092\u8FFD\u52A0',\n ko: '\uC0AC\uC740\uD488 \uCD94\uAC00',\n nl: 'Cadeau toevoegen',\n no: 'Legg til gave',\n pl: 'Dodaj prezent',\n pt: 'Adicionar presente',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u043F\u043E\u0434\u0430\u0440\u043E\u043A',\n sv: 'L\u00E4gg till g\u00E5va',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E02\u0E2D\u0E07\u0E02\u0E27\u0E31\u0E0D',\n tr: 'Hediye ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u043F\u043E\u0434\u0430\u0440\u0443\u043D\u043E\u043A',\n vi: 'Th\u00EAm qu\u00E0 t\u1EB7ng',\n zh: '\u6DFB\u52A0\u8D60\u54C1',\n },\n remove: {\n ar: '\u0625\u0632\u0627\u0644\u0629',\n cs: 'Odebrat',\n da: 'Fjern',\n de: 'Entfernen',\n en: 'Remove',\n es: 'Eliminar',\n fi: 'Poista',\n fr: 'Retirer',\n ga: 'Bain',\n he: '\u05D4\u05E1\u05E8',\n hi: '\u0939\u091F\u093E\u090F\u0901',\n id: 'Hapus',\n it: 'Rimuovi',\n ja: '\u524A\u9664',\n ko: '\uC81C\uAC70',\n nl: 'Verwijderen',\n no: 'Fjern',\n pl: 'Usu\u0144',\n pt: 'Remover',\n ru: '\u0423\u0434\u0430\u043B\u0438\u0442\u044C',\n sv: 'Ta bort',\n th: '\u0E19\u0E33\u0E2D\u0E2D\u0E01',\n tr: 'Kald\u0131r',\n uk: '\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438',\n vi: 'X\u00F3a',\n zh: '\u79FB\u9664',\n },\n selectOptions: {\n ar: '\u0627\u062E\u062A\u0631 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A',\n cs: 'Vyberte mo\u017Enosti',\n da: 'V\u00E6lg muligheder',\n de: 'Optionen w\u00E4hlen',\n en: 'Select Options',\n es: 'Seleccionar opciones',\n fi: 'Valitse vaihtoehdot',\n fr: 'Choisir les options',\n ga: 'Roghnaigh roghanna',\n he: '\u05D1\u05D7\u05E8 \u05D0\u05E4\u05E9\u05E8\u05D5\u05D9\u05D5\u05EA',\n hi: '\u0935\u093F\u0915\u0932\u094D\u092A \u091A\u0941\u0928\u0947\u0902',\n id: 'Pilih opsi',\n it: 'Seleziona le opzioni',\n ja: '\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E',\n ko: '\uC635\uC158 \uC120\uD0DD',\n nl: 'Opties kiezen',\n no: 'Velg alternativer',\n pl: 'Wybierz opcje',\n pt: 'Selecionar op\u00E7\u00F5es',\n ru: '\u0412\u044B\u0431\u0440\u0430\u0442\u044C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B',\n sv: 'V\u00E4lj alternativ',\n th: '\u0E40\u0E25\u0E37\u0E2D\u0E01\u0E15\u0E31\u0E27\u0E40\u0E25\u0E37\u0E2D\u0E01',\n tr: 'Se\u00E7enekleri se\u00E7',\n uk: '\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438',\n vi: 'Ch\u1ECDn t\u00F9y ch\u1ECDn',\n zh: '\u9009\u62E9\u9009\u9879',\n },\n yourGift: {\n ar: '\u0647\u062F\u064A\u062A\u0643',\n cs: 'V\u00E1\u0161 d\u00E1rek',\n da: 'Din gave',\n de: 'Ihr Geschenk',\n en: 'Your gift',\n es: 'Tu regalo',\n fi: 'Lahjasi',\n fr: 'Votre cadeau',\n ga: 'Do bhronntanas',\n he: '\u05D4\u05DE\u05EA\u05E0\u05D4 \u05E9\u05DC\u05DA',\n hi: '\u0906\u092A\u0915\u093E \u0909\u092A\u0939\u093E\u0930',\n id: 'Hadiah Anda',\n it: 'Il tuo regalo',\n ja: '\u3042\u306A\u305F\u306E\u30AE\u30D5\u30C8',\n ko: '\uACE0\uAC1D\uB2D8\uC758 \uC0AC\uC740\uD488',\n nl: 'Uw cadeau',\n no: 'Din gave',\n pl: 'Tw\u00F3j prezent',\n pt: 'Seu presente',\n ru: '\u0412\u0430\u0448 \u043F\u043E\u0434\u0430\u0440\u043E\u043A',\n sv: 'Din g\u00E5va',\n th: '\u0E02\u0E2D\u0E07\u0E02\u0E27\u0E31\u0E0D\u0E02\u0E2D\u0E07\u0E04\u0E38\u0E13',\n tr: 'Hediyeniz',\n uk: '\u0412\u0430\u0448 \u043F\u043E\u0434\u0430\u0440\u0443\u043D\u043E\u043A',\n vi: 'Qu\u00E0 c\u1EE7a b\u1EA1n',\n zh: '\u60A8\u7684\u8D60\u54C1',\n },\n} satisfies Record<string, Record<string, string>>;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { QuantityInput, quantityInputs, SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABQuantitySection = z.object({\n errorMessages: z\n .record(\n z.string(),\n z.object({\n /** `{{step}}` is interpolated at render \u2014 the off-increment message React never gave a merchant key. */\n increment: z.string().optional(),\n max: z.string().optional(),\n min: z.string().optional(),\n neg: z.string().optional(),\n })\n )\n .default({\n en: {\n increment: 'Quantity must be in increments of {{step}}',\n max: 'Maximum quantity allowed is {{max}}',\n min: 'Minimum quantity required is {{min}}',\n neg: 'Quantity cannot be negative',\n },\n }),\n inputType: z.enum(quantityInputs).default(QuantityInput.select),\n max: z.number().min(1).max(100).default(10),\n min: z.number().min(1).default(1),\n /** The a11y label for the quantity control; the merchant names it in the editor, else this default. */\n name: z.string().default('Quantity'),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.quantity).default(SectionType.quantity),\n});\n\nexport type CABQuantitySection = z.infer<typeof CABQuantitySection>;\n\nexport type CABQuantitySectionProps = CABQuantitySection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { ReviewsSize, reviewsSizes, SectionType } from './common';\nimport { REVIEW_LABELS } from './reviewLabels';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABReviewsSection = z.object({\n color: z.string().default('#fadb14'),\n /**\n * Localized review-count templates (`{{reviewCount}}`), one/other plural forms; the client picks the\n * form via `Intl.PluralRules`. Defaults here (schema-first) so every tree localizes without converter\n * or merchant work.\n */\n countLabels: z\n .object({\n one: z.record(z.string(), z.string()).default(() => ({ ...REVIEW_LABELS.one })),\n other: z.record(z.string(), z.string()).default(() => ({ ...REVIEW_LABELS.other })),\n })\n .default(() => ({ one: { ...REVIEW_LABELS.one }, other: { ...REVIEW_LABELS.other } })),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.reviews).default(SectionType.reviews),\n size: z.enum(reviewsSizes).default(ReviewsSize.default),\n});\n\nexport type CABReviewsSection = z.infer<typeof CABReviewsSection>;\n\nexport type CABReviewsSectionProps = CABReviewsSection & SectionDetails;\n", "/**\n * Default localized review-count templates for the reviews section, keyed by CLDR-ish plural form then\n * locale (same 26 locales as `SWITCH_LABELS`). The client picks `one` vs `other` via `Intl.PluralRules`\n * and interpolates `{{reviewCount}}` \u2014 the two-form simplification maps every non-`one` category\n * (few/many/other) to `other`. Schema-default content, never a client dictionary (Peter, 2026-07-06:\n * visible customer strings must be localized).\n */\nexport const REVIEW_LABELS = {\n one: {\n ar: '({{reviewCount}} \u062A\u0642\u064A\u064A\u0645)',\n cs: '({{reviewCount}} recenze)',\n da: '({{reviewCount}} anmeldelse)',\n de: '({{reviewCount}} Bewertung)',\n en: '({{reviewCount}} review)',\n es: '({{reviewCount}} rese\u00F1a)',\n fi: '({{reviewCount}} arvostelu)',\n fr: '({{reviewCount}} avis)',\n ga: '({{reviewCount}} l\u00E9irmheas)',\n he: '({{reviewCount}} \u05D1\u05D9\u05E7\u05D5\u05E8\u05EA)',\n hi: '({{reviewCount}} \u0938\u092E\u0940\u0915\u094D\u0937\u093E)',\n id: '({{reviewCount}} ulasan)',\n it: '({{reviewCount}} recensione)',\n ja: '({{reviewCount}}\u4EF6\u306E\u30EC\u30D3\u30E5\u30FC)',\n ko: '({{reviewCount}}\uAC1C \uB9AC\uBDF0)',\n nl: '({{reviewCount}} beoordeling)',\n no: '({{reviewCount}} anmeldelse)',\n pl: '({{reviewCount}} opinia)',\n pt: '({{reviewCount}} avalia\u00E7\u00E3o)',\n ru: '({{reviewCount}} \u043E\u0442\u0437\u044B\u0432)',\n sv: '({{reviewCount}} recension)',\n th: '({{reviewCount}} \u0E23\u0E35\u0E27\u0E34\u0E27)',\n tr: '({{reviewCount}} de\u011Ferlendirme)',\n uk: '({{reviewCount}} \u0432\u0456\u0434\u0433\u0443\u043A)',\n vi: '({{reviewCount}} \u0111\u00E1nh gi\u00E1)',\n zh: '({{reviewCount}} \u6761\u8BC4\u4EF7)',\n },\n other: {\n ar: '({{reviewCount}} \u062A\u0642\u064A\u064A\u0645\u0627\u062A)',\n cs: '({{reviewCount}} recenz\u00ED)',\n da: '({{reviewCount}} anmeldelser)',\n de: '({{reviewCount}} Bewertungen)',\n en: '({{reviewCount}} reviews)',\n es: '({{reviewCount}} rese\u00F1as)',\n fi: '({{reviewCount}} arvostelua)',\n fr: '({{reviewCount}} avis)',\n ga: '({{reviewCount}} l\u00E9irmheasanna)',\n he: '({{reviewCount}} \u05D1\u05D9\u05E7\u05D5\u05E8\u05D5\u05EA)',\n hi: '({{reviewCount}} \u0938\u092E\u0940\u0915\u094D\u0937\u093E\u090F\u0901)',\n id: '({{reviewCount}} ulasan)',\n it: '({{reviewCount}} recensioni)',\n ja: '({{reviewCount}}\u4EF6\u306E\u30EC\u30D3\u30E5\u30FC)',\n ko: '({{reviewCount}}\uAC1C \uB9AC\uBDF0)',\n nl: '({{reviewCount}} beoordelingen)',\n no: '({{reviewCount}} anmeldelser)',\n pl: '({{reviewCount}} opinii)',\n pt: '({{reviewCount}} avalia\u00E7\u00F5es)',\n ru: '({{reviewCount}} \u043E\u0442\u0437\u044B\u0432\u043E\u0432)',\n sv: '({{reviewCount}} recensioner)',\n th: '({{reviewCount}} \u0E23\u0E35\u0E27\u0E34\u0E27)',\n tr: '({{reviewCount}} de\u011Ferlendirme)',\n uk: '({{reviewCount}} \u0432\u0456\u0434\u0433\u0443\u043A\u0456\u0432)',\n vi: '({{reviewCount}} \u0111\u00E1nh gi\u00E1)',\n zh: '({{reviewCount}} \u6761\u8BC4\u4EF7)',\n },\n} satisfies Record<'one' | 'other', Record<string, string>>;\n", "import { slice } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod';\n\nimport { SectionType, VariantMode, variantModes, VariantSelector, variantSelectors } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABVariantsSection = z.object({\n hideOutOfStockVariants: z.boolean().default(false),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.variants).default(SectionType.variants),\n selector: z.enum(slice(variantSelectors, 0, 3)).default(VariantSelector.menu),\n variantMode: z.enum(variantModes).default(VariantMode.multiple),\n});\n\nexport type CABVariantsSection = z.infer<typeof CABVariantsSection>;\n\nexport type CABVariantsSectionProps = CABVariantsSection & SectionDetails;\n", "/**\n * Default UI-chrome labels \u2014 the buyer-visible and screen-reader strings that have no per-section\n * merchant slot: the subscription-frequency select's group label, spinner busy text, carousel control\n * names + current-page semantics, the variant selected-state suffix, and the Monetize offer dialog\n * name. Keyed by slot then locale, shipped in the payload so the client never bundles a dictionary\n * (Peter, 2026-07-06: visible customer strings must be localized). English defaults only \u2014 unlike the\n * merchant-authored `SWITCH_LABELS`/`GIFT_LABELS`, these mirror strings legacy hardcoded in English, so\n * the fix is making them payload-sourced (localizable, zero bundle) rather than inventing 25 unreviewed\n * translations; a merchant or a later localization pass can populate other locales. `{{page}}` in the\n * pagination slots is interpolated per control at render.\n */\nexport const UI_LABELS = {\n currentPage: { en: 'Page {{page}}, current' },\n loadingOptions: { en: 'Loading subscription options' },\n nextPage: { en: 'Next' },\n offerDialog: { en: 'Offer' },\n page: { en: 'Page {{page}}' },\n previousPage: { en: 'Previous' },\n selected: { en: 'selected' },\n subscriptionOptions: { en: 'Subscription Options' },\n updating: { en: 'Updating' },\n} satisfies Record<string, Record<string, string>>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const GiftWithPurchase = z.looseObject({\n type: z.literal(WidgetType.gift_with_purchase).default(WidgetType.gift_with_purchase),\n});\n\nexport type GiftWithPurchase = z.infer<typeof GiftWithPurchase>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\n/** v1 English label overrides (React `switchToSubscription.language`); each falls back to a shared `SWITCH_LABELS` default. */\nexport const LineItemEditorSwitchLanguageV1 = z.object({\n downgradeToOneTimeLabel: z.string().optional(),\n /** Frequency-option template (`{{frequency}}`/`{{interval}}`) for the plan select. */\n subscriptionOptionLabel: z.string().optional(),\n upgradeToSubscriptionLabel: z.string().optional(),\n upgradeToSubscriptionWithoutDiscountLabel: z.string().optional(),\n});\n\nexport const LineItemEditorV1 = z.object({\n /** Legacy `getStyles` button style; the converter carries a valid kind, defaulting to `plain`. */\n button: z.object({ kind: z.enum(['plain', 'primary', 'secondary']).optional() }).optional(),\n previewMode: z.boolean().optional(),\n switchToSubscription: z\n .object({\n disableDowngrade: z.boolean().optional(),\n language: LineItemEditorSwitchLanguageV1.optional(),\n })\n .optional(),\n switchToSubscriptionEnabled: z.boolean().optional(),\n tracking: z\n .object({\n enableAttribution: z.boolean().optional(),\n enableSource: z.boolean().optional(),\n enableWidget: z.boolean().optional(),\n })\n .optional(),\n type: z.literal(WidgetType.ui_extension_line_item_editor).default(WidgetType.ui_extension_line_item_editor),\n version: z.literal(1),\n});\n\nexport const LineItemEditor = z.discriminatedUnion('version', [\n LineItemEditorV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_line_item_editor).default(WidgetType.ui_extension_line_item_editor),\n }),\n]);\n\nexport type LineItemEditor = z.infer<typeof LineItemEditor>;\nexport type LineItemEditorSwitchLanguageV1 = z.infer<typeof LineItemEditorSwitchLanguageV1>;\nexport type LineItemEditorV1 = z.infer<typeof LineItemEditorV1>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const ProgressBar = z.looseObject({\n type: z.literal(WidgetType.ui_extension_progress_bar).default(WidgetType.ui_extension_progress_bar),\n});\n\nexport type ProgressBar = z.infer<typeof ProgressBar>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\nimport { CABRootSection } from './checkout-and-beyond/root';\n\nexport const RebuyButtonV1 = z.looseObject({\n type: z.literal(WidgetType.ui_extension_button).default(WidgetType.ui_extension_button),\n version: z.literal(1),\n});\n\nexport const RebuyButton = z.discriminatedUnion('version', [\n RebuyButtonV1,\n CABRootSection.extend({\n type: z.literal(WidgetType.ui_extension_button).default(WidgetType.ui_extension_button),\n }),\n]);\n\nexport type RebuyButton = z.infer<typeof RebuyButton>;\n", "import { z } from 'zod';\n\nimport { WidgetType } from './checkout-and-beyond/constants';\n\nexport const RebuyMonetize = z.looseObject({\n type: z.literal(WidgetType.ui_extension_ad).default(WidgetType.ui_extension_ad),\n});\n\nexport type RebuyMonetize = z.infer<typeof RebuyMonetize>;\n", "/**\n * Default localized labels for the offer card's add-to-order button states and the opt-in undo banner,\n * keyed by slot then locale (same 26 locales as `SWITCH_LABELS`). The converter overlays a defined v1\n * merchant value as the `en` entry (verbatim) and falls back to these for blank/absent values, so a\n * migrated widget keeps its copy while new/unset widgets localize. `addedToCartMessage` tokens are\n * camelCase (CAB default); legacy snake_case tokens in merchant overrides still resolve client-side.\n */\nexport const OFFER_LABELS = {\n addedToCart: {\n ar: '\u062A\u0645\u062A \u0627\u0644\u0625\u0636\u0627\u0641\u0629!',\n cs: 'P\u0159id\u00E1no!',\n da: 'Tilf\u00F8jet!',\n de: 'Hinzugef\u00FCgt!',\n en: 'Added!',\n es: '\u00A1A\u00F1adido!',\n fi: 'Lis\u00E4tty!',\n fr: 'Ajout\u00E9 !',\n ga: 'Curtha leis!',\n he: '\u05E0\u05D5\u05E1\u05E3!',\n hi: '\u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E!',\n id: 'Ditambahkan!',\n it: 'Aggiunto!',\n ja: '\u8FFD\u52A0\u3057\u307E\u3057\u305F\uFF01',\n ko: '\uCD94\uAC00\uB428!',\n nl: 'Toegevoegd!',\n no: 'Lagt til!',\n pl: 'Dodano!',\n pt: 'Adicionado!',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E!',\n sv: 'Tillagd!',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E41\u0E25\u0E49\u0E27!',\n tr: 'Eklendi!',\n uk: '\u0414\u043E\u0434\u0430\u043D\u043E!',\n vi: '\u0110\u00E3 th\u00EAm!',\n zh: '\u5DF2\u6DFB\u52A0\uFF01',\n },\n addedToCartMessage: {\n ar: '\u062A\u0645\u062A \u0625\u0636\u0627\u0641\u0629 {{quantity}} {{productTitle}} \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629.',\n cs: '{{quantity}} {{productTitle}} p\u0159id\u00E1no do ko\u0161\u00EDku.',\n da: '{{quantity}} {{productTitle}} lagt i kurven.',\n de: '{{quantity}} {{productTitle}} zum Warenkorb hinzugef\u00FCgt.',\n en: '{{quantity}} {{productTitle}} successfully added to cart.',\n es: '{{quantity}} {{productTitle}} a\u00F1adido al carrito.',\n fi: '{{quantity}} {{productTitle}} lis\u00E4tty ostoskoriin.',\n fr: '{{quantity}} {{productTitle}} ajout\u00E9 au panier.',\n ga: 'Cuireadh {{quantity}} {{productTitle}} sa chairt.',\n he: '{{quantity}} {{productTitle}} \u05E0\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4.',\n hi: '{{quantity}} {{productTitle}} \u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u093E \u0917\u092F\u093E\u0964',\n id: '{{quantity}} {{productTitle}} ditambahkan ke keranjang.',\n it: '{{quantity}} {{productTitle}} aggiunto al carrello.',\n ja: '{{quantity}} {{productTitle}}\u3092\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0\u3057\u307E\u3057\u305F\u3002',\n ko: '{{quantity}} {{productTitle}}\uC774(\uAC00) \uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00\uB418\uC5C8\uC2B5\uB2C8\uB2E4.',\n nl: '{{quantity}} {{productTitle}} toegevoegd aan winkelwagen.',\n no: '{{quantity}} {{productTitle}} lagt i handlekurven.',\n pl: '{{quantity}} {{productTitle}} dodano do koszyka.',\n pt: '{{quantity}} {{productTitle}} adicionado ao carrinho.',\n ru: '{{quantity}} {{productTitle}} \u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u043E \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443.',\n sv: '{{quantity}} {{productTitle}} har lagts i varukorgen.',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21 {{quantity}} {{productTitle}} \u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32\u0E41\u0E25\u0E49\u0E27',\n tr: '{{quantity}} {{productTitle}} sepete eklendi.',\n uk: '{{quantity}} {{productTitle}} \u0434\u043E\u0434\u0430\u043D\u043E \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430.',\n vi: '\u0110\u00E3 th\u00EAm {{quantity}} {{productTitle}} v\u00E0o gi\u1ECF h\u00E0ng.',\n zh: '{{quantity}} {{productTitle}} \u5DF2\u52A0\u5165\u8D2D\u7269\u8F66\u3002',\n },\n addingToCart: {\n ar: '\u062C\u0627\u0631\u064D \u0627\u0644\u0625\u0636\u0627\u0641\u0629...',\n cs: 'P\u0159id\u00E1v\u00E1n\u00ED...',\n da: 'Tilf\u00F8jer...',\n de: 'Wird hinzugef\u00FCgt...',\n en: 'Adding...',\n es: 'A\u00F1adiendo...',\n fi: 'Lis\u00E4t\u00E4\u00E4n...',\n fr: 'Ajout en cours...',\n ga: '\u00C1 chur leis...',\n he: '\u05DE\u05D5\u05E1\u05D9\u05E3...',\n hi: '\u091C\u094B\u0921\u093C\u093E \u091C\u093E \u0930\u0939\u093E \u0939\u0948...',\n id: 'Menambahkan...',\n it: 'Aggiunta in corso...',\n ja: '\u8FFD\u52A0\u4E2D...',\n ko: '\uCD94\uAC00 \uC911...',\n nl: 'Toevoegen...',\n no: 'Legger til...',\n pl: 'Dodawanie...',\n pt: 'Adicionando...',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435...',\n sv: 'L\u00E4gger till...',\n th: '\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21...',\n tr: 'Ekleniyor...',\n uk: '\u0414\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F...',\n vi: '\u0110ang th\u00EAm...',\n zh: '\u6B63\u5728\u6DFB\u52A0...',\n },\n addToCart: {\n ar: '\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159idat do ko\u0161\u00EDku',\n da: 'L\u00E6g i kurv',\n de: 'In den Warenkorb',\n en: 'Add to cart',\n es: 'A\u00F1adir al carrito',\n fi: 'Lis\u00E4\u00E4 ostoskoriin',\n fr: 'Ajouter au panier',\n ga: 'Cuir sa chairt',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambahkan ke keranjang',\n it: 'Aggiungi al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00',\n nl: 'In winkelwagen',\n no: 'Legg i handlekurven',\n pl: 'Dodaj do koszyka',\n pt: 'Adicionar ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gg i varukorgen',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E15\u0E30\u0E01\u0E23\u0E49\u0E32',\n tr: 'Sepete ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u0432 \u043A\u043E\u0448\u0438\u043A',\n vi: 'Th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n redirectToCheckout: {\n ar: '\u0627\u0644\u062F\u0641\u0639',\n cs: 'Pokladna',\n da: 'Til kassen',\n de: 'Zur Kasse',\n en: 'Checkout',\n es: 'Finalizar compra',\n fi: 'Kassalle',\n fr: 'Paiement',\n ga: 'Seice\u00E1il amach',\n he: '\u05DC\u05EA\u05E9\u05DC\u05D5\u05DD',\n hi: '\u091A\u0947\u0915\u0906\u0909\u091F',\n id: 'Checkout',\n it: 'Cassa',\n ja: '\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8',\n ko: '\uACB0\uC81C\uD558\uAE30',\n nl: 'Afrekenen',\n no: 'Til kassen',\n pl: 'Do kasy',\n pt: 'Finalizar compra',\n ru: '\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u044C \u0437\u0430\u043A\u0430\u0437',\n sv: 'Till kassan',\n th: '\u0E0A\u0E33\u0E23\u0E30\u0E40\u0E07\u0E34\u0E19',\n tr: '\u00D6deme',\n uk: '\u041E\u0444\u043E\u0440\u043C\u0438\u0442\u0438 \u0437\u0430\u043C\u043E\u0432\u043B\u0435\u043D\u043D\u044F',\n vi: 'Thanh to\u00E1n',\n zh: '\u7ED3\u8D26',\n },\n soldOut: {\n ar: '\u0646\u0641\u062F\u062A \u0627\u0644\u0643\u0645\u064A\u0629',\n cs: 'Vyprod\u00E1no',\n da: 'Udsolgt',\n de: 'Ausverkauft',\n en: 'Sold out',\n es: 'Agotado',\n fi: 'Loppuunmyyty',\n fr: '\u00C9puis\u00E9',\n ga: 'D\u00EDolta amach',\n he: '\u05D0\u05D6\u05DC \u05DE\u05D4\u05DE\u05DC\u05D0\u05D9',\n hi: '\u0938\u094D\u091F\u0949\u0915 \u0916\u093C\u0924\u094D\u092E',\n id: 'Habis terjual',\n it: 'Esaurito',\n ja: '\u58F2\u308A\u5207\u308C',\n ko: '\uD488\uC808',\n nl: 'Uitverkocht',\n no: 'Utsolgt',\n pl: 'Wyprzedane',\n pt: 'Esgotado',\n ru: '\u0420\u0430\u0441\u043F\u0440\u043E\u0434\u0430\u043D\u043E',\n sv: 'Sluts\u00E5ld',\n th: '\u0E2A\u0E34\u0E19\u0E04\u0E49\u0E32\u0E2B\u0E21\u0E14',\n tr: 'T\u00FCkendi',\n uk: '\u0420\u043E\u0437\u043F\u0440\u043E\u0434\u0430\u043D\u043E',\n vi: 'H\u1EBFt h\u00E0ng',\n zh: '\u5DF2\u552E\u7F44',\n },\n undo: {\n ar: '\u062A\u0631\u0627\u062C\u0639',\n cs: 'Zp\u011Bt',\n da: 'Fortryd',\n de: 'R\u00FCckg\u00E4ngig',\n en: 'Undo',\n es: 'Deshacer',\n fi: 'Kumoa',\n fr: 'Annuler',\n ga: 'Cealaigh',\n he: '\u05D1\u05D8\u05DC',\n hi: '\u092A\u0942\u0930\u094D\u0935\u0935\u0924 \u0915\u0930\u0947\u0902',\n id: 'Urungkan',\n it: 'Annulla',\n ja: '\u5143\u306B\u623B\u3059',\n ko: '\uC2E4\uD589 \uCDE8\uC18C',\n nl: 'Ongedaan maken',\n no: 'Angre',\n pl: 'Cofnij',\n pt: 'Desfazer',\n ru: '\u041E\u0442\u043C\u0435\u043D\u0438\u0442\u044C',\n sv: '\u00C5ngra',\n th: '\u0E40\u0E25\u0E34\u0E01\u0E17\u0E33',\n tr: 'Geri al',\n uk: '\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438',\n vi: 'Ho\u00E0n t\u00E1c',\n zh: '\u64A4\u9500',\n },\n} as const satisfies Record<string, Record<string, string>>;\n", "/**\n * Default localized labels for the switch-to-subscription button content, keyed by `buttonField` then locale.\n * The single source of truth shared by the admin editor and the read-time `convertLineItemEditorToV2` transform\n * so a widget renders identically whether migrated in admin or converted on the fly. `{{subscriptionDiscount}}`\n * is substituted per-plan at render \u2014 CAB tokens are camelCase by default; a legacy snake_case token in a v1\n * merchant override still resolves (the client camelCases unknown token keys against its camelCase variables).\n * `subscriptionOption` is the frequency-select option template (legacy\n * `SwitchToSubscriptionLanguageDefaults.subscription_option_label`); the client resolves `{{interval}}`\n * through `Intl.NumberFormat` unit style, so the noun arrives in the buyer's language, pluralized per count\n * from the runtime's CLDR data (English CLDR nouns are lowercase \u2014 an accepted divergence from legacy).\n */\nexport const SWITCH_LABELS = {\n subscriptionOption: {\n ar: '\u064A\u062A\u0645 \u0627\u0644\u062A\u0648\u0635\u064A\u0644 \u0643\u0644 {{frequency}} {{interval}}',\n cs: 'Doru\u010Den\u00ED ka\u017Ed\u00FDch {{frequency}} {{interval}}',\n da: 'Leveres hver {{frequency}} {{interval}}',\n de: 'Lieferung alle {{frequency}} {{interval}}',\n en: 'Delivers every {{frequency}} {{interval}}',\n es: 'Entrega cada {{frequency}} {{interval}}',\n fi: 'Toimitus {{frequency}} {{interval}} v\u00E4lein',\n fr: 'Livraison tous les {{frequency}} {{interval}}',\n ga: 'Seachadtar gach {{frequency}} {{interval}}',\n he: '\u05DE\u05E9\u05DC\u05D5\u05D7 \u05DB\u05DC {{frequency}} {{interval}}',\n hi: '\u0939\u0930 {{frequency}} {{interval}} \u092E\u0947\u0902 \u0921\u093F\u0932\u0940\u0935\u0930\u0940',\n id: 'Dikirim setiap {{frequency}} {{interval}}',\n it: 'Consegna ogni {{frequency}} {{interval}}',\n ja: '{{frequency}} {{interval}}\u3054\u3068\u306B\u304A\u5C4A\u3051',\n ko: '{{frequency}} {{interval}}\uB9C8\uB2E4 \uBC30\uC1A1',\n nl: 'Wordt elke {{frequency}} {{interval}} geleverd',\n no: 'Leveres hver {{frequency}} {{interval}}',\n pl: 'Dostawa co {{frequency}} {{interval}}',\n pt: 'Entrega a cada {{frequency}} {{interval}}',\n ru: '\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u0430\u0436\u0434\u044B\u0435 {{frequency}} {{interval}}',\n sv: 'Levereras var {{frequency}} {{interval}}',\n th: '\u0E08\u0E31\u0E14\u0E2A\u0E48\u0E07\u0E17\u0E38\u0E01 {{frequency}} {{interval}}',\n tr: 'Her {{frequency}} {{interval}} aral\u0131\u011F\u0131nda teslimat',\n uk: '\u0414\u043E\u0441\u0442\u0430\u0432\u043A\u0430 \u043A\u043E\u0436\u043D\u0456 {{frequency}} {{interval}}',\n vi: 'Giao h\u00E0ng m\u1ED7i {{frequency}} {{interval}}',\n zh: '\u6BCF {{frequency}} {{interval}} \u914D\u9001\u4E00\u6B21',\n },\n switchToOneTimePurchase: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0634\u0631\u0627\u0621 \u0644\u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629',\n cs: 'P\u0159epnout na jednor\u00E1zov\u00FD n\u00E1kup',\n da: 'Skift til engangsk\u00F8b',\n de: 'Zu einmaligem Kauf wechseln',\n en: 'Switch to One-time Purchase',\n es: 'Cambiar a compra \u00FAnica',\n fi: 'Vaihda kertaluonteiseen ostoon',\n fr: 'Passer \u00E0 un achat unique',\n ga: 'Athraigh go ceannach aonuaire',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05E8\u05DB\u05D9\u05E9\u05D4 \u05D7\u05D3-\u05E4\u05E2\u05DE\u05D9\u05EA',\n hi: '\u090F\u0915 \u092C\u093E\u0930 \u0915\u0940 \u0916\u0930\u0940\u0926 \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902',\n id: 'Beralih ke pembelian satu kali',\n it: 'Passa all\u2019acquisto una tantum',\n ja: '1\u56DE\u9650\u308A\u306E\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B',\n ko: '\uC77C\uD68C\uC131 \uAD6C\uB9E4\uB85C \uC804\uD658',\n nl: 'Overschakelen naar eenmalige aankoop',\n no: 'Bytt til engangskj\u00F8p',\n pl: 'Prze\u0142\u0105cz na jednorazowy zakup',\n pt: 'Mudar para compra \u00FAnica',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u0440\u0430\u0437\u043E\u0432\u0443\u044E \u043F\u043E\u043A\u0443\u043F\u043A\u0443',\n sv: 'Byt till eng\u00E5ngsk\u00F6p',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E0B\u0E37\u0E49\u0E2D\u0E04\u0E23\u0E31\u0E49\u0E07\u0E40\u0E14\u0E35\u0E22\u0E27',\n tr: 'Tek seferlik sat\u0131n almaya ge\u00E7',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043E\u0434\u043D\u043E\u0440\u0430\u0437\u043E\u0432\u0443 \u043F\u043E\u043A\u0443\u043F\u043A\u0443',\n vi: 'Chuy\u1EC3n sang mua m\u1ED9t l\u1EA7n',\n zh: '\u5207\u6362\u4E3A\u4E00\u6B21\u6027\u8D2D\u4E70',\n },\n switchToSubscriptionNoDiscount: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643',\n cs: 'P\u0159epnout na p\u0159edplatn\u00E9',\n da: 'Skift til abonnement',\n de: 'Zu einem Abonnement wechseln',\n en: 'Switch to Subscription',\n es: 'Cambiar a suscripci\u00F3n',\n fi: 'Vaihda tilaukseen',\n fr: 'Passer \u00E0 un abonnement',\n ga: 'Athraigh go s\u00EDnti\u00FAs',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9',\n hi: '\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902',\n id: 'Beralih ke langganan',\n it: 'Passa all\u2019abbonamento',\n ja: '\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u308B',\n ko: '\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658',\n nl: 'Overschakelen naar abonnement',\n no: 'Bytt til abonnement',\n pl: 'Prze\u0142\u0105cz na subskrypcj\u0119',\n pt: 'Mudar para assinatura',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443',\n sv: 'Byt till prenumeration',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01',\n tr: 'Aboneli\u011Fe ge\u00E7',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443',\n vi: 'Chuy\u1EC3n sang \u0111\u0103ng k\u00FD',\n zh: '\u5207\u6362\u4E3A\u8BA2\u9605',\n },\n switchToSubscriptionWithDiscount: {\n ar: '\u0627\u0644\u062A\u0628\u062F\u064A\u0644 \u0625\u0644\u0649 \u0627\u0634\u062A\u0631\u0627\u0643 \u0648\u062A\u0648\u0641\u064A\u0631 {{subscriptionDiscount}}%',\n cs: 'P\u0159epnout na p\u0159edplatn\u00E9 a u\u0161et\u0159it {{subscriptionDiscount}} %',\n da: 'Skift til abonnement og spar {{subscriptionDiscount}}%',\n de: 'Zu einem Abonnement wechseln und {{subscriptionDiscount}} % sparen',\n en: 'Switch to Subscription & Save {{subscriptionDiscount}}%',\n es: 'Cambiar a suscripci\u00F3n y ahorrar {{subscriptionDiscount}}%',\n fi: 'Vaihda tilaukseen ja s\u00E4\u00E4st\u00E4 {{subscriptionDiscount}} %',\n fr: 'Passer \u00E0 un abonnement et \u00E9conomiser {{subscriptionDiscount}} %',\n ga: 'Athraigh go s\u00EDnti\u00FAs agus s\u00E1bh\u00E1il {{subscriptionDiscount}}%',\n he: '\u05E2\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E0\u05D5\u05D9 \u05D5\u05D7\u05E1\u05D5\u05DA {{subscriptionDiscount}}%',\n hi: '\u0938\u0926\u0938\u094D\u092F\u0924\u093E \u092A\u0930 \u0938\u094D\u0935\u093F\u091A \u0915\u0930\u0947\u0902 \u0914\u0930 {{subscriptionDiscount}}% \u092C\u091A\u093E\u090F\u0902',\n id: 'Beralih ke langganan dan hemat {{subscriptionDiscount}}%',\n it: 'Passa all\u2019abbonamento e risparmia {{subscriptionDiscount}}%',\n ja: '\u5B9A\u671F\u8CFC\u5165\u306B\u5207\u308A\u66FF\u3048\u3066{{subscriptionDiscount}}%\u304A\u5F97',\n ko: '\uAD6C\uB3C5\uC73C\uB85C \uC804\uD658\uD558\uACE0 {{subscriptionDiscount}}% \uC808\uC57D',\n nl: 'Overschakelen naar abonnement en {{subscriptionDiscount}}% besparen',\n no: 'Bytt til abonnement og spar {{subscriptionDiscount}}%',\n pl: 'Prze\u0142\u0105cz na subskrypcj\u0119 i oszcz\u0119d\u017A {{subscriptionDiscount}}%',\n pt: 'Mudar para assinatura e economizar {{subscriptionDiscount}}%',\n ru: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0441\u044F \u043D\u0430 \u043F\u043E\u0434\u043F\u0438\u0441\u043A\u0443 \u0438 \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u0438\u0442\u044C {{subscriptionDiscount}}%',\n sv: 'Byt till prenumeration och spara {{subscriptionDiscount}}%',\n th: '\u0E40\u0E1B\u0E25\u0E35\u0E48\u0E22\u0E19\u0E40\u0E1B\u0E47\u0E19\u0E01\u0E32\u0E23\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E2A\u0E21\u0E32\u0E0A\u0E34\u0E01\u0E41\u0E25\u0E30\u0E1B\u0E23\u0E30\u0E2B\u0E22\u0E31\u0E14 {{subscriptionDiscount}}%',\n tr: 'Aboneli\u011Fe ge\u00E7 ve {{subscriptionDiscount}}% tasarruf et',\n uk: '\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438\u0441\u044F \u043D\u0430 \u043F\u0456\u0434\u043F\u0438\u0441\u043A\u0443 \u0442\u0430 \u0437\u0430\u043E\u0449\u0430\u0434\u0438\u0442\u0438 {{subscriptionDiscount}}%',\n vi: 'Chuy\u1EC3n sang \u0111\u0103ng k\u00FD v\u00E0 ti\u1EBFt ki\u1EC7m {{subscriptionDiscount}}%',\n zh: '\u5207\u6362\u4E3A\u8BA2\u9605\u5E76\u8282\u7701 {{subscriptionDiscount}}%',\n },\n} as const satisfies Record<string, Record<string, string>>;\n", "import { replace, toNumber, toString } from 'es-toolkit/compat';\nimport { z } from 'zod';\n\nexport const strictNumber = z.union([\n z.number(),\n z.string().transform((value) => toNumber(replace(toString(value), /[^0-9.]/g, '')) || 0),\n z.unknown().transform(() => 0),\n]);\n", "import { z } from 'zod';\n\nexport const blockTypes = [\n 'callout_banner',\n 'image',\n 'image_content',\n 'pay_button',\n 'product_information',\n 'separator',\n 'text',\n 'timer',\n] as const;\n\nconst blockType = z.enum(blockTypes);\n\nexport const BlockType = blockType.enum;\nexport type BlockType = z.infer<typeof blockType>;\n", "import { get, isEqual } from 'es-toolkit/compat';\nimport { v4 as uuidv4 } from 'uuid';\nimport { z } from 'zod';\n\nimport { BlockType } from './constants';\nimport { TiptapDocument } from '../checkout-and-beyond/text';\n\nconst TextAlignment = z.union([z.enum(['leading', 'center', 'trailing']), z.unknown().transform(() => 'leading')]);\n\nconst TextSize = z.union([\n z.enum(['xsmall', 'small', 'base', 'default', 'medium', 'large', 'xlarge']),\n z.unknown().transform(() => 'medium'),\n]);\n\nexport const CalloutBannerBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n superTitle: z.union([z.string(), TiptapDocument]).default(() => 'Limited-time Offer'),\n title: z.union([z.string(), TiptapDocument]).default(() => 'Add this customer favorite to your order'),\n }),\n styles: z.object({\n superTitleEmphasized: z.boolean().default(false),\n superTitleSize: TextSize.default('large'),\n textAlignment: TextAlignment.default('center'),\n titleEmphasized: z.boolean().default(true),\n titleSize: TextSize.default('large'),\n }),\n type: z.literal(BlockType.callout_banner).default(BlockType.callout_banner),\n});\n\nexport type CalloutBannerBlock = z.infer<typeof CalloutBannerBlock>;\n\nexport const ImageBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.union([\n z.object({\n /** This isn't used in the post-purchase offer widget */\n alt: z.string().optional().default(''),\n image: z.union([z.literal(''), z.url()]).default(''),\n imageSize: z.number().default(20),\n imageType: z.enum(['URL', 'UPLOAD']).default('URL'),\n }),\n z.array(z.never()).transform(() => ({})),\n ]),\n type: z.literal(BlockType.image).default(BlockType.image),\n});\n\nexport type ImageBlock = z.infer<typeof ImageBlock>;\n\nexport const ImageContentBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n alt: z.string().optional().default(''),\n description: z\n .union([z.string(), TiptapDocument, z.null()])\n .default(\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'\n ),\n descriptionSize: TextSize.default('medium'),\n horizontalAlignment: TextAlignment.default('leading'),\n image: z.union([z.literal(''), z.url()]).default(''),\n imagePlacement: z.enum(['bottom', 'left', 'right', 'top']).optional().default('left'),\n imageSize: z.number().default(20),\n superTitle: z.union([z.string(), TiptapDocument]).default('Lorem Ipsum!'),\n superTitleSize: TextSize.default('medium'),\n /** This isn't configurable in the admin-nextjs editor */\n swapContent: z.boolean().optional().default(false),\n title: z.union([z.string(), TiptapDocument]).nullable().default('Lorem ipsum dolor sit amet'),\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.image_content).default(BlockType.image_content),\n});\n\nexport type ImageContentBlock = z.infer<typeof ImageContentBlock>;\n\nexport const PayButtonBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.union([\n z.object({\n label: z.string().default('Pay Now'),\n }),\n z.array(z.never()).transform(() => ({\n label: 'Pay Now',\n })),\n ]),\n styles: z.union([\n z.object({\n buttonWidth: z.number().min(10).max(100).default(50),\n }),\n z.array(z.never()).transform(() => ({\n buttonWidth: 50,\n })),\n ]),\n type: z.literal(BlockType.pay_button).default(BlockType.pay_button),\n});\n\nexport type PayButtonBlock = z.infer<typeof PayButtonBlock>;\n\nexport const ProductInformationBlock = z.object({\n /** This isn't configurable in the admin-nextjs editor */\n hideProductImage: z.boolean().optional().default(false),\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n type: z.literal(BlockType.product_information).default(BlockType.product_information),\n});\n\nexport type ProductInformationBlock = z.infer<typeof ProductInformationBlock>;\n\nexport const SeparatorBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n type: z.literal(BlockType.separator).default(BlockType.separator),\n});\n\nexport type SeparatorBlock = z.infer<typeof SeparatorBlock>;\n\nexport const TextBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n description: z\n .union([z.string(), TiptapDocument])\n .optional()\n .default(\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'\n ),\n /** This isn't used in the post-purchase offer widget */\n descriptionSize: TextSize.default('medium'),\n horizontalAlignment: TextAlignment.default('leading'),\n superTitle: z.union([z.string(), TiptapDocument]).default('Super Title'),\n /** This isn't used in the post-purchase offer widget */\n superTitleSize: TextSize.default('medium'),\n title: z.union([z.string(), TiptapDocument]).nullable().default('Lorem ipsum dolor sit amet.'),\n /** This isn't used in the post-purchase offer widget */\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.text).default(BlockType.text),\n});\n\nexport type TextBlock = z.infer<typeof TextBlock>;\n\nexport const TimerBlock = z.object({\n id: z\n .string()\n .optional()\n .default(() => uuidv4()),\n name: z.string().optional(),\n settings: z.object({\n durationMinutes: z.number().min(0).default(10),\n durationSeconds: z.union([z.number().min(0), z.unknown().transform(() => 0)]).default(0),\n endOffer: z.boolean().default(true),\n title: z.union([z.string(), TiptapDocument]).default('Hurry \u2014 your special offer ends in:'),\n }),\n styles: z.object({\n textAlignment: TextAlignment.default('center'),\n timerBackgroundColor: z.enum(['info', 'warning', 'success', 'critical']).default('warning'),\n timerEmphasized: z.union([z.boolean(), z.unknown().transform(() => true)]).default(true),\n timerSize: TextSize.default('medium'),\n timerWidth: z.number().min(10).max(100).optional().default(100),\n titleEmphasized: z.union([z.boolean(), z.unknown().transform(() => true)]).default(false),\n titleSize: TextSize.default('medium'),\n }),\n type: z.literal(BlockType.timer).default(BlockType.timer),\n});\n\nexport type TimerBlock = z.infer<typeof TimerBlock>;\n\nexport const PostPurchaseBlock = z.discriminatedUnion('type', [\n CalloutBannerBlock,\n ImageBlock,\n ImageContentBlock,\n PayButtonBlock,\n ProductInformationBlock,\n SeparatorBlock,\n TextBlock,\n TimerBlock,\n]);\n\nexport type PostPurchaseBlock = z.infer<typeof PostPurchaseBlock>;\n\nexport const isCalloutBannerBlock = (block: unknown): block is CalloutBannerBlock =>\n isEqual(get(block, 'type'), BlockType.callout_banner);\n\nexport const isImageBlock = (block: unknown): block is ImageBlock => isEqual(get(block, 'type'), BlockType.image);\n\nexport const isImageContentBlock = (block: unknown): block is ImageContentBlock =>\n isEqual(get(block, 'type'), BlockType.image_content);\n\nexport const isPayButtonBlock = (block: unknown): block is PayButtonBlock =>\n isEqual(get(block, 'type'), BlockType.pay_button);\n\nexport const isProductInformationBlock = (block: unknown): block is ProductInformationBlock =>\n isEqual(get(block, 'type'), BlockType.product_information);\n\nexport const isSeparatorBlock = (block: unknown): block is SeparatorBlock =>\n isEqual(get(block, 'type'), BlockType.separator);\n\nexport const isTextBlock = (block: unknown): block is TextBlock => isEqual(get(block, 'type'), BlockType.text);\n\nexport const isTimerBlock = (block: unknown): block is TimerBlock => isEqual(get(block, 'type'), BlockType.timer);\n", "import { z } from 'zod';\n\nimport { PostPurchaseWidget } from './postPurchaseWidget';\n\nexport const PostPurchaseOffer = z.discriminatedUnion('successful', [\n z.strictObject({\n errors: z.array(z.object({ message: z.string() })),\n message: z.string(),\n successful: z.literal(false),\n }),\n z.strictObject({\n successful: z.literal(true),\n widget: PostPurchaseWidget,\n }),\n]);\n\nexport type PostPurchaseOffer = z.infer<typeof PostPurchaseOffer>;\n", "import { z } from 'zod';\n\nimport { PostPurchaseSettings } from './postPurchaseSettings';\n\nexport const PostPurchaseWidgetLinkedFlow = z.object({\n id: z.number(),\n name: z.string(),\n});\n\nexport type PostPurchaseWidgetLinkedFlow = z.infer<typeof PostPurchaseWidgetLinkedFlow>;\n\nexport const PostPurchaseWidget = z.object({\n classification: z.literal('post_purchase_offer_page').default('post_purchase_offer_page'),\n createdAtTime: z.iso.datetime({ offset: true }).optional(),\n customEndpointName: z.string().nullish(),\n id: z.number().default(0),\n lastViewed: z.iso.datetime({ offset: true }).nullish(),\n linkedCustomEndpointId: z.number().nullish(),\n linkedFlows: z.array(PostPurchaseWidgetLinkedFlow).optional(),\n name: z.string().default(''),\n owner: z.number().nullish(),\n settings: PostPurchaseSettings,\n});\n\nexport type PostPurchaseWidget = z.infer<typeof PostPurchaseWidget>;\n", "import { z } from 'zod';\n\nimport { strictNumber } from './common';\nimport { BlockType } from './constants';\nimport { PostPurchaseBlock } from './postPurchaseBlocks';\n\nexport const PostPurchaseSettings = z.object({\n advance: z\n .object({ removePartialOrder: z.boolean().default(true) })\n .optional()\n .default(() => ({ removePartialOrder: true })),\n blocks: z\n .union([z.array(PostPurchaseBlock), z.unknown().transform(() => [])])\n .default(() => [\n PostPurchaseBlock.parse({ settings: {}, styles: {}, type: BlockType.timer }),\n PostPurchaseBlock.parse({ settings: {}, styles: {}, type: BlockType.callout_banner }),\n PostPurchaseBlock.parse({ type: BlockType.product_information }),\n ]),\n columnLayout: z.boolean().optional(),\n discount: z.object({\n amount: strictNumber.default(30),\n shouldShowSavingText: z.boolean().optional().default(true),\n type: z.enum(['none', 'fixed_amount', 'percentage']).default('none'),\n }),\n discountedFrom: z.enum(['price', 'compare_at_price']).optional().default('price'),\n endpoint: z.string().optional(),\n integrations: z.object({\n judgeme: z.boolean().default(false),\n junip: z.boolean().optional().default(false),\n klaviyo: z.boolean().default(false),\n loox: z.boolean().default(false),\n okendo: z.boolean().default(false),\n opinew: z.boolean().optional().default(false),\n reviewsio: z.boolean().optional().default(false),\n stamped: z.boolean().default(false),\n yotpo: z.boolean().default(false),\n }),\n key: z.string().optional(),\n language: z.object({\n description: z.union([z.string(), z.unknown().transform(() => '')]).default(''),\n descriptionEnabled: z.boolean().optional().default(false),\n descriptionRte: z\n .object({\n content: z.array(z.unknown()),\n type: z.string(),\n })\n .optional(),\n descriptionSpacing: z.enum(['none', 'xtight', 'tight', 'default', 'loose', 'xloose']).optional(),\n displayCtaPrice: z.boolean().default(true),\n global: z\n .object({\n declineAll: z.string().optional().default('Decline All'),\n declineThisOffer: z.string().default('Decline this offer'),\n free: z.string().optional().default('Free'),\n notAvailable: z.string().optional().default('Not available'),\n payNow: z.string().default('Pay Now'),\n payNowUpgradeToSubscription: z.string().optional().default('Upgrade to Subscription'),\n quantity: z.string().default('Quantity'),\n /** This isn't configurable in the admin-nextjs editor */\n recurringShipping: z.string().optional().default('Recurring shipping'),\n recurringSubtotal: z.string().default('Recurring subtotal'),\n reviewsPlural: z.string().optional().default('Reviews'),\n reviewsSingular: z.string().optional().default('Review'),\n save: z\n .union([z.string(), z.unknown().transform(() => 'Save')])\n .optional()\n .default('Save'),\n shipping: z.string().default('Shipping'),\n subscriptionOption: z.string().optional().default('Subscribe and Save'),\n subtotal: z.string().default('Subtotal'),\n taxes: z.string().default('Taxes'),\n total: z.string().default('Total'),\n })\n .optional()\n .default(() => ({\n declineAll: 'Decline All',\n declineThisOffer: 'Decline this offer',\n free: 'Free',\n notAvailable: 'Not available',\n payNow: 'Pay Now',\n payNowUpgradeToSubscription: 'Upgrade to Subscription',\n quantity: 'Quantity',\n /** This isn't configurable in the admin-nextjs editor */\n recurringShipping: 'Recurring shipping',\n recurringSubtotal: 'Recurring subtotal',\n reviewsPlural: 'Reviews',\n reviewsSingular: 'Review',\n save: 'Save',\n shipping: 'Shipping',\n subscriptionOption: 'Subscribe and Save',\n subtotal: 'Subtotal',\n taxes: 'Taxes',\n total: 'Total',\n })),\n globalTranslation: z.string().optional().default('english'),\n }),\n metafields: z.boolean().default(false),\n /** This isn't configurable in the admin-nextjs editor */\n offer: z.object({\n count: z.number().default(1),\n }),\n offersLayout: z\n .object({\n itemsPerPage: z.number().optional(),\n type: z.enum(['list', 'grid', 'carousel']).default('list'),\n })\n .optional()\n .default({\n type: 'list',\n }),\n /** This isn't configurable in the admin-nextjs editor */\n previewMode: z.boolean().default(false),\n productLimit: z.number().optional().default(1),\n productOptions: z.object({\n /** This isn't configurable in the admin-nextjs editor */\n hideOutOfStockVariants: z.boolean().optional().default(false),\n matchVariant: z.boolean().optional().default(true),\n showDeclineAll: z.enum(['above', 'below', 'both', 'none']).optional(),\n showShipping: z.boolean().optional().default(true),\n showSubtotal: z.boolean().optional().default(true),\n showTaxes: z.boolean().optional().default(true),\n showTotal: z.boolean().optional().default(true),\n showVariantSelectors: z.boolean().optional().default(true),\n variantSelectorDisplayMode: z.enum(['separate', 'single']).optional().default('separate'),\n }),\n productType: z\n .union([z.enum(['one-time', 'subscription', 'both']), z.literal('').transform(() => 'one-time')])\n .default('one-time'),\n productTypeSelector: z.enum(['dropdown', 'radio']).optional().default('radio'),\n quantityInputs: z.object({\n defaultQuantity: z.union([z.number(), z.null().transform(() => 1)]).default(1),\n enabled: z.boolean().default(true),\n maxValue: z.union([z.number(), z.null().transform(() => 15)]).default(15),\n minValue: z.union([z.number().min(0), z.unknown().transform(() => 0)]).default(1),\n }),\n shipping: z.object({\n amount: strictNumber.default(10),\n /** This isn't configurable in the admin-nextjs editor */\n enabled: z.boolean().default(true),\n title: z.string().optional().default('Shipping Fees'),\n type: z.enum(['free', 'fixed_amount']).default('free'),\n }),\n styles: z\n .object({\n starColor: z.string().optional().default('#fadb14'),\n starSize: z\n .union([z.enum(['small', 'medium', 'large']), z.unknown().transform(() => 'large')])\n .optional()\n .default('large'),\n starStrokeColor: z.string().optional().default('#fadb14'),\n strokeWidth: z.string().optional().default('1'),\n })\n .optional(),\n subImages: z.number().nullish().default(8),\n subscription: z\n .object({\n discount: z.object({\n amount: strictNumber.default(30),\n shouldShowSavingText: z.boolean().optional().default(true),\n type: z.enum(['none', 'fixed_amount', 'percentage']).default('none'),\n }),\n shipping: z.object({\n amount: strictNumber.default(1),\n /** This isn't configurable in the admin-nextjs editor */\n enabled: z.boolean().default(true),\n /** This isn't configurable in the admin-nextjs editor */\n recurringAmount: strictNumber.default(2),\n shippingTitle: z.string().default('Shipping Fees'),\n type: z.enum(['free', 'fixed_amount']).default('free'),\n }),\n })\n .optional()\n .default({\n discount: {\n amount: 30,\n shouldShowSavingText: true,\n type: 'none',\n },\n shipping: {\n amount: 1,\n /** This isn't configurable in the admin-nextjs editor */\n enabled: true,\n /** This isn't configurable in the admin-nextjs editor */\n recurringAmount: 2,\n shippingTitle: 'Shipping Fees',\n type: 'free',\n },\n }),\n subscriptionIsDefault: z.boolean().optional(),\n /** This isn't configurable in the admin-nextjs editor */\n template: z.string().optional().default(''),\n type: z.literal('shopify_post_purchase_extension').default('shopify_post_purchase_extension'),\n upgradeToSubscription: z\n .object({\n acceptButtonText: z.string().optional().default('Upgrade'),\n allow: z.boolean().optional().default(false),\n emailRefundNotice: z.boolean().optional().default(false),\n errorBannerText: z.string().optional().default('This subscription cannot be added - limit one per order'),\n })\n .optional()\n .default(() => ({\n acceptButtonText: 'Upgrade',\n allow: false,\n emailRefundNotice: false,\n errorBannerText: 'This subscription cannot be added - limit one per order',\n })),\n});\n\nexport type PostPurchaseSettings = z.infer<typeof PostPurchaseSettings>;\n", "const HTML_COMMENT_RE = /<!--[\\s\\S]*?-->/g;\nconst STRIPPED_ELEMENT_RE = /<(script|style|iframe|object|embed|noscript|template)\\b[^>]*>[\\s\\S]*?(?:<\\/\\1\\s*>|$)/gi;\nconst HTML_TAG_RE = /<\\/?[a-zA-Z][^>]*>/g;\n\nexport const stripContentBlockHtml = (text: string): string =>\n text.replace(HTML_COMMENT_RE, '').replace(STRIPPED_ELEMENT_RE, '').replace(HTML_TAG_RE, '');\n", "import { TiptapParagraph, type TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\n\ntype ConvertTextToTiptapArgs = {\n color: string;\n fontSize: string;\n marks?: NonNullable<TiptapText['marks']>;\n text: string;\n textAlign: 'start' | 'center' | 'end';\n};\n\nexport const convertTextToTiptapParagraph = ({\n color,\n fontSize,\n marks = [],\n text,\n textAlign,\n}: ConvertTextToTiptapArgs): TiptapParagraph => {\n const sanitizedText = stripContentBlockHtml(text);\n\n return TiptapParagraph.parse({\n attrs: { textAlign },\n content: sanitizedText\n ? [\n {\n marks: [{ attrs: { color, fontSize }, type: 'textStyle' }, ...marks],\n text: sanitizedText,\n type: 'text',\n },\n ]\n : [],\n type: 'paragraph',\n });\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\n\nexport const convertContentBlockTextToV2 = (language: V1Language | undefined): TiptapDocument => {\n const description = language?.description;\n const superTitle = language?.superTitle;\n const title = language?.title;\n\n return TiptapDocument.parse({\n attrs: { blockSpacing: 'tight' },\n content: [\n superTitle\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'extraLarge',\n marks: [{ type: 'bold' }],\n text: superTitle,\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: title,\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: description,\n textAlign: 'center',\n })\n : null,\n ].filter((p): p is NonNullable<typeof p> => p !== null),\n type: 'doc',\n });\n};\n", "import { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\n\n/**\n * The v1 label-override policy shared by the offer-card and line-item-editor converters: a defined v1\n * label ALWAYS passes through verbatim as the `en` entry over the localized defaults \u2014 existing widget\n * language is never rewritten (product owner, 2026-07-02); blank/whitespace falls back to the full\n * default locale set (legacy `getLabelWithFallback` parity). HTML the merchant typed into a label is\n * stripped first \u2014 `CABTextSection.content` rejects tag-shaped strings at parse, so a raw `<b>`-style\n * label would otherwise 500 the whole widget.\n */\nexport const localizedContent = (defaults: Record<string, string>, override: string | undefined) => {\n const trimmed = stripContentBlockHtml(override ?? '').trim();\n\n return trimmed ? { ...defaults, en: trimmed } : defaults;\n};\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\n\n/**\n * The canonical base \"Checkout Offers\" CAB layout \u2014 designed in the editor by Jeff (REB-23182) and\n * exported. It was authored inside the content-block editor (the only surface that can lay out an\n * offers section), so the export originally carried that widget type + the test store's data source;\n * those have been cleaned here to read as a real offer template. `buildOfferTemplate` still strips any\n * residual section ids (so each created widget gets fresh ones) and injects the per-widget name +\n * editor mode at runtime. Regenerate by re-exporting + the generator script, not by hand \u2014 with ONE\n * hand-completed exception a re-export must preserve: the add button's `addedToCart`/`soldOut`/\n * `redirectToCheckout` slots (`OFFER_LABELS` defaults). The editor export carried only\n * `addingToCart`/`addToCart`, which left the sold-out/added/Buy-Now states falling back to the add\n * label at runtime (guarded by a `buildOfferTemplate` test).\n */\nexport const OFFER_TEMPLATE_SEED = {\n alignment: {\n horizontal: 'center',\n vertical: 'top',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'thick',\n },\n direction: 'rows',\n editorMode: 'checkoutExtension',\n grid: {\n columns: ['auto'],\n rows: ['auto'],\n },\n padding: 'tight',\n previewMode: false,\n sections: [\n {\n alignment: {\n horizontal: 'end',\n vertical: 'top',\n },\n autoAdvanceInterval: 0,\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['auto'],\n rows: ['auto', 'auto'],\n },\n itemsAtOnce: 2,\n padding: 'none',\n sections: [\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'columns',\n grid: {\n columns: ['auto', 'auto'],\n rows: ['auto'],\n },\n name: 'pagination',\n padding: 'none',\n sections: [\n {\n action: 'goToPrevPage',\n buttonStyle: 'plain',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'buttonLabel',\n content: {\n ar: '\u2039',\n cs: '\u2039',\n da: '\u2039',\n de: '\u2039',\n en: '\u2039',\n es: '\u2039',\n fi: '\u2039',\n fr: '\u2039',\n ga: '\u2039',\n he: '\u2039',\n hi: '\u2039',\n id: '\u2039',\n it: '\u2039',\n ja: '\u2039',\n ko: '\u2039',\n nl: '\u2039',\n no: '\u2039',\n pl: '\u2039',\n pt: '\u2039',\n ru: '\u2039',\n sv: '\u2039',\n th: '\u2039',\n tr: '\u2039',\n uk: '\u2039',\n vi: '\u2039',\n zh: '\u2039',\n },\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n {\n action: 'goToNextPage',\n buttonStyle: 'plain',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'buttonLabel',\n content: {\n ar: '\u203A',\n cs: '\u203A',\n da: '\u203A',\n de: '\u203A',\n en: '\u203A',\n es: '\u203A',\n fi: '\u203A',\n fr: '\u203A',\n ga: '\u203A',\n he: '\u203A',\n hi: '\u203A',\n id: '\u203A',\n it: '\u203A',\n ja: '\u203A',\n ko: '\u203A',\n nl: '\u203A',\n no: '\u203A',\n pl: '\u203A',\n pt: '\u203A',\n ru: '\u203A',\n sv: '\u203A',\n th: '\u203A',\n tr: '\u203A',\n uk: '\u203A',\n vi: '\u203A',\n zh: '\u203A',\n },\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'base',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['15%'],\n rows: ['auto', 'auto'],\n },\n padding: 'base',\n sections: [\n {\n alignment: {\n horizontal: 'start',\n vertical: 'middle',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'grid',\n grid: {\n columns: ['15%', 'fill', 'auto'],\n rows: ['auto'],\n },\n padding: 'none',\n sections: [\n {\n altText: '',\n aspectRatio: null,\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n category: null,\n name: 'Product Image',\n naturalHeight: 0,\n naturalWidth: 0,\n objectFit: 'cover',\n sectionType: 'image',\n source: '{{productImage}}',\n width: 100,\n },\n {\n content: {\n en: {\n attrs: {\n blockSpacing: 'none',\n },\n content: [\n {\n attrs: {\n textAlign: 'start',\n },\n content: [\n {\n marks: [\n {\n attrs: {\n color: 'base',\n fontSize: 'medium',\n },\n type: 'textStyle',\n },\n {\n type: 'bold',\n },\n ],\n text: '{{productAndVariantTitle}}',\n type: 'text',\n },\n ],\n type: 'paragraph',\n },\n {\n attrs: {\n textAlign: 'start',\n },\n content: [\n {\n marks: [\n {\n attrs: {\n color: 'accent',\n fontSize: 'medium',\n },\n type: 'textStyle',\n },\n ],\n text: '{{variantPrice}}',\n type: 'text',\n },\n ],\n type: 'paragraph',\n },\n ],\n type: 'doc',\n },\n },\n name: 'Product Info',\n sectionType: 'text',\n },\n {\n action: 'addToOrder',\n buttonStyle: 'primary',\n disableDowngrade: false,\n popover: {\n alignment: 'center',\n position: 'blockStart',\n },\n sections: [\n {\n buttonField: 'addingToCart',\n content: {\n ar: '\u064A\u062A\u0645 \u0627\u0644\u0625\u0636\u0627\u0641\u0629 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159id\u00E1v\u00E1m do ko\u0161\u00EDku',\n da: 'Tilf\u00F8jer til kurv',\n de: 'Wird zum Warenkorb hinzugef\u00FCgt',\n en: 'Adding...',\n es: 'Agregando al carrito',\n fi: 'Lis\u00E4t\u00E4\u00E4n ostoskoriin',\n fr: 'Ajout au panier',\n ga: '\u00C1 Chur le Cairt',\n he: '\u05DE\u05D5\u05E1\u05D9\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C \u0930\u0939\u0947 \u0939\u0948\u0902',\n id: 'Menambahkan ke Keranjang',\n it: 'Aggiungendo al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0\u4E2D',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00 \uC911',\n nl: 'Toevoegen aan winkelwagen',\n no: 'Legger i handlekurv',\n pl: 'Dodaj\u0119 do koszyka',\n pt: 'Adicionando ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gger till i varukorg',\n th: '\u0E01\u0E33\u0E25\u0E31\u0E07\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E43\u0E19\u0E23\u0E16\u0E40\u0E02\u0E47\u0E19',\n tr: 'Sepete Ekleniyor',\n uk: '\u0414\u043E\u0434\u0430\u0454\u043C\u043E \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430',\n vi: '\u0110ang th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u6B63\u5728\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n sectionType: 'text',\n },\n {\n buttonField: 'addToCart',\n content: {\n ar: '\u0623\u0636\u0641 \u0625\u0644\u0649 \u0627\u0644\u0633\u0644\u0629',\n cs: 'P\u0159idat do ko\u0161\u00EDku',\n da: 'F\u00F8j til kurv',\n de: 'In den Warenkorb',\n en: 'Add',\n es: 'Agregar al carrito',\n fi: 'Lis\u00E4\u00E4 ostoskoriin',\n fr: 'Ajouter au panier',\n ga: 'Cuir le Cairt',\n he: '\u05D4\u05D5\u05E1\u05E3 \u05DC\u05E2\u05D2\u05DC\u05D4',\n hi: '\u0915\u093E\u0930\u094D\u091F \u092E\u0947\u0902 \u091C\u094B\u0921\u093C\u0947\u0902',\n id: 'Tambah ke Keranjang',\n it: 'Aggiungi al carrello',\n ja: '\u30AB\u30FC\u30C8\u306B\u8FFD\u52A0',\n ko: '\uC7A5\uBC14\uAD6C\uB2C8\uC5D0 \uCD94\uAC00',\n nl: 'Toevoegen aan winkelwagen',\n no: 'Legg i handlekurv',\n pl: 'Dodaj do koszyka',\n pt: 'Adicionar ao carrinho',\n ru: '\u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0432 \u043A\u043E\u0440\u0437\u0438\u043D\u0443',\n sv: 'L\u00E4gg i varukorg',\n th: '\u0E40\u0E1E\u0E34\u0E48\u0E21\u0E25\u0E07\u0E43\u0E19\u0E23\u0E16\u0E40\u0E02\u0E47\u0E19',\n tr: 'Sepete Ekle',\n uk: '\u0414\u043E\u0434\u0430\u0442\u0438 \u0434\u043E \u043A\u043E\u0448\u0438\u043A\u0430',\n vi: 'Th\u00EAm v\u00E0o gi\u1ECF h\u00E0ng',\n zh: '\u52A0\u5165\u8D2D\u7269\u8F66',\n },\n sectionType: 'text',\n },\n {\n buttonField: 'addedToCart',\n content: OFFER_LABELS.addedToCart,\n sectionType: 'text',\n },\n {\n buttonField: 'soldOut',\n content: OFFER_LABELS.soldOut,\n sectionType: 'text',\n },\n {\n buttonField: 'redirectToCheckout',\n content: OFFER_LABELS.redirectToCheckout,\n sectionType: 'text',\n },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n alignment: {\n horizontal: 'start',\n vertical: 'top',\n },\n border: {\n radius: 'base',\n style: 'none',\n width: 'base',\n },\n direction: 'rows',\n grid: {\n columns: ['auto'],\n rows: ['auto'],\n },\n padding: 'none',\n sections: [\n {\n errorMessages: {\n en: {\n max: 'Maximum quantity allowed is {{max}}',\n min: 'Minimum quantity required is {{min}}',\n neg: 'Quantity cannot be negative',\n },\n },\n inputType: 'select',\n max: 10,\n min: 1,\n sectionType: 'quantity',\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n width: 100,\n },\n {\n limit: 3,\n sectionType: 'dataSource',\n },\n {\n sectionType: 'products',\n },\n ],\n sectionType: 'offers',\n spacing: 'base',\n width: 100,\n },\n ],\n sectionType: 'carousel',\n spacing: 'base',\n width: 100,\n },\n ],\n sectionType: 'layout',\n spacing: 'base',\n targetArea: {\n icon: 'splitscreen_left',\n label: 'Main Column',\n width: '503px',\n },\n type: 'shopify_checkout_extension',\n version: 2,\n width: 100,\n};\n", "/**\n * Minimal v1 Offer (Checkout Offers / product recommendations) input types.\n * The legacy widget's settings `type` is the generic `shopify_checkout_extension`\n * (the offer is the \"base\" checkout-extension type; other widgets carry\n * `ui_extension_*`), which uniquely identifies it at the settings level.\n */\nimport { type TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const SHOPIFY_CHECKOUT_EXTENSION = 'shopify_checkout_extension' as const;\n\nexport type V1OfferLanguage = {\n addedToCart?: string;\n addingToCart?: string;\n addToCart?: string;\n /** Subscribe \u2192 one-time label for the offers `switchToSubscription` button. */\n cartSwitchToOnetime?: string;\n /** One-time \u2192 subscribe label (carries `{{subscription_discount}}`) for the `switchToSubscription` button. */\n cartSwitchToSubscription?: string;\n description?: string;\n /** Buy Now link label on off-checkout surfaces (thank-you / order-status), real key `redirect_to_checkout`. */\n redirectToCheckout?: string;\n /** Real payload key is `sold_out_label` \u2192 `soldOutLabel` (NOT `soldOut`). */\n soldOutLabel?: string;\n /** Opt-in undo banner shown after a buyer adds a recommended product. */\n successBannerEnabled?: boolean;\n successBannerMessageRte?: TiptapDocument | string;\n superTitle?: string;\n title?: string;\n /** Legacy \"Upgrade to Subscription and Save {{subscription_discount}}%\" upsell label. */\n upgradeToSubscription?: string;\n};\n\n/** v1 per-product text styling; `textSize` is the CAB `textSizeNames` enum verbatim. */\nexport type V1TextStyle = {\n textEmphasis?: 'base' | 'bold' | 'italic';\n textSize?: 'extraSmall' | 'small' | 'base' | 'medium' | 'large' | 'extraLarge';\n};\n\n/** v1 `displaySettings` \u2014 the controls behind product/variant/image/review presentation. */\nexport type V1OfferDisplaySettings = {\n image?: { imageFit?: 'contain' | 'cover' };\n product?: V1TextStyle;\n reviews?: { color?: string; size?: 'small' | 'default' | 'large' };\n variant?: V1TextStyle;\n};\n\n/**\n * v1 layout is per-breakpoint; CAB has no breakpoints, so the converter collapses them.\n * `style` drives orientation: list \u2192 rows, line \u2192 columns, grid \u2192 grid (none \u2192 rows).\n */\nexport type V1OfferBreakpointLayout = {\n carousel?: boolean;\n columns?: number;\n showPaginations?: boolean;\n style?: 'grid' | 'line' | 'list' | 'none';\n};\n\nexport type V1OfferSettings = {\n /** Free-form in real payloads; the converter safelists to the CAB enum (junk \u2192 'primary'). */\n button?: { kind?: string };\n /** `showSavingAmount` false hides the compare-at (sale) price; `amount`/`type`/`discountedFrom`/`discountedBy` drive the discount-setting price computation (emitted onto the offers section for the client's pricing pass). */\n discount?: {\n amount?: number | string;\n discountedBy?: string;\n discountedFrom?: string;\n /** Merchant-facing promo label (e.g. \"Enjoy 10% off!\") \u2192 carried onto the data-source discount. */\n message?: string;\n /** How many items the discount applies to (defaults to 1) \u2192 carried onto the discount section. */\n quantity?: number;\n showSavingAmount?: boolean;\n type?: string;\n };\n /** Per-product/variant/image/review presentation controls. */\n displaySettings?: V1OfferDisplaySettings;\n /** Engine path appended to `/api/v1` (e.g. '/products/recommended'). */\n endpoint?: string | null;\n images?: { source?: 'product' | 'variant' };\n /**\n * Nominally boolean, but legacy data carries \"yes\"/\"no\" strings (reviewsio, in prod) and numeric\n * 1/0 (PHP serialization) \u2014 the converter coerces both so neither throws at the schema boolean.\n */\n integrations?: Record<string, boolean | number | string>;\n language?: V1OfferLanguage;\n layout?: { large?: V1OfferBreakpointLayout; medium?: V1OfferBreakpointLayout; small?: V1OfferBreakpointLayout };\n limit?: number;\n location?: 'checkout' | 'order-status' | 'thank-you';\n /** The legacy widget's name, present in the settings payload; carried to the converted root. */\n name?: string;\n previewMode?: boolean;\n productOptions?: {\n hideOutOfStockVariants?: boolean;\n matchVariant?: boolean;\n matchVariantOutOfStock?: boolean;\n /** 'hide' (or absent) hides the per-card product description; any other value shows it. */\n showProductDescription?: string;\n showVariantOptions?: 'always' | 'default' | 'never';\n showVariantsAsProducts?: boolean;\n /** 'hide' (or absent) hides the selected-variant title line; any other value shows it. */\n showVariantTitle?: string;\n };\n productType?: 'both' | 'one-time' | 'subscription';\n quantityInputs?: {\n enabled?: boolean;\n /** Custom over-max error copy \u2192 CAB `errorMessages.en.max`. */\n maxError?: string;\n maxValue?: number;\n /** Custom under-min error copy \u2192 CAB `errorMessages.en.min`. */\n minError?: string;\n minValue?: number;\n /** Custom negative-value error copy \u2192 CAB `errorMessages.en.neg`. */\n negativeError?: string;\n /** Stepper kind ('dropdown-select' | 'buttons-manual-input') \u2192 CAB `inputType` (select | number). */\n type?: string;\n };\n /** Default subscribe-vs-one-time when `productType` is `both`. */\n subscriptionIsDefault?: boolean;\n tracking?: { enableAttribution?: boolean; enableSource?: boolean; enableWidget?: boolean };\n treatAsGwp?: boolean;\n type: typeof SHOPIFY_CHECKOUT_EXTENSION;\n /** Absent on real checkout-offers payloads; only `type` is the reliable discriminator. */\n version?: 1;\n /** v1 `viewOptions`: `displayActions === false` hides the variant selector (legacy `getVariantSelect`). */\n viewOptions?: { displayActions?: boolean; variantSelector?: 'select' | 'radio' | 'button' };\n};\n\nexport type V1OfferConvertInput = {\n id: number;\n /** The legacy widget's name; set on the converted root (the admin save schema requires it). */\n name?: string;\n settings: V1OfferSettings;\n};\n\n/**\n * The offer's settings `type` uniquely identifies it. Unlike the `ui_extension_*` widgets, the legacy\n * checkout-offers payload carries NO top-level `version` \u2014 so we must NOT gate on it (doing so silently\n * dropped real offers to the passthrough branch). `version: 2` payloads are already claimed upstream by\n * `isCABRootSection`, so they never reach here.\n */\nexport const isOfferV1 = (data: unknown): data is V1OfferSettings => {\n if (!data || typeof data !== 'object') return false;\n\n return (data as Record<string, unknown>).type === SHOPIFY_CHECKOUT_EXTENSION;\n};\n", "import { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { OFFER_TEMPLATE_SEED } from '~/transforms/offerV1/offerTemplateSeed';\nimport { SHOPIFY_CHECKOUT_EXTENSION } from '~/transforms/offerV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\nexport type BuildOfferTemplateInput = {\n location?: 'checkout' | 'order-status' | 'thank-you';\n name?: string;\n};\n\n/**\n * Build a brand-new \"Checkout Offers\" widget as a `CABRootSection` from the designed base layout.\n * Pure and synchronous (admin-side, network-free): overlays the per-widget `name` + editor mode and\n * the offer widget type, then parses. The seed carries NO section ids (enforced by a test), so `parse`\n * mints fresh `uuidv7`s on every call \u2014 two created widgets never share section ids.\n */\nexport const buildOfferTemplate = ({ location, name }: BuildOfferTemplateInput = {}): CABRootSection =>\n CABRootSection.parse({\n ...OFFER_TEMPLATE_SEED,\n editorMode: LOCATION_TO_EDITOR_MODE[location ?? 'checkout'],\n ...(name && { name }),\n previewMode: false,\n type: SHOPIFY_CHECKOUT_EXTENSION,\n });\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\nimport { SWITCH_LABELS } from '~/schema/widgets/checkout-and-beyond/switchLabels';\nimport { localizedContent } from '~/transforms/localizedContent';\nimport { type V1OfferSettings, type V1TextStyle } from '~/transforms/offerV1/types';\n\n/** v1 `viewOptions.variantSelector` \u2192 CAB `variants.selector` ('select' is the v1 name for a dropdown menu). */\nconst VARIANT_SELECTOR = { button: 'button', radio: 'radio', select: 'menu' } as const;\n\n/**\n * A single-token Tiptap doc carrying a v1 text style: `textSize` is the CAB `fontSize`\n * verbatim (identical enums); `textEmphasis` adds a bold/italic mark ('base' adds none).\n */\nconst buildStyledText = (token: string, style: V1TextStyle | undefined, color = 'base') => {\n const marks: Record<string, unknown>[] = [\n { attrs: { color, fontSize: style?.textSize ?? 'base' }, type: 'textStyle' },\n ];\n\n if (style?.textEmphasis === 'bold') marks.push({ type: 'bold' });\n\n if (style?.textEmphasis === 'italic') marks.push({ type: 'italic' });\n\n return { content: [{ content: [{ marks, text: token, type: 'text' }], type: 'paragraph' }], type: 'doc' };\n};\n\n/**\n * The price line: the variant price, optionally followed by a strikethrough,\n * subdued compare-at price. The extension resolves `{{variantCompareAtPrice}}`\n * to '' off-sale, so the strikethrough disappears unless the variant is genuinely\n * discounted. `discount.showSavingAmount` false drops the compare-at node entirely.\n */\nconst buildPriceContent = (settings: V1OfferSettings) => {\n const content: Record<string, unknown>[] = [{ text: '{{variantPrice}}', type: 'text' }];\n\n if (settings.discount?.showSavingAmount !== false) {\n content.push(\n { text: ' ', type: 'text' },\n {\n marks: [{ type: 'strike' }, { attrs: { color: 'subdued' }, type: 'textStyle' }],\n text: '{{variantCompareAtPrice}}',\n type: 'text',\n }\n );\n }\n\n return { content: [{ content, type: 'paragraph' }], type: 'doc' };\n};\n\n/** A `reviews` star section, emitted only when the merchant has a review integration enabled. */\nconst buildReviews = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (!settings.integrations || !Object.values(settings.integrations).some(Boolean)) return [];\n\n const reviews = settings.displaySettings?.reviews;\n\n return [\n {\n ...(reviews?.color && { color: reviews.color }),\n sectionType: 'reviews',\n ...(reviews?.size && { size: reviews.size }),\n },\n ];\n};\n\n/** The recommended product's image; objectFit comes from v1 `displaySettings.image.imageFit`. */\nconst buildImage = (settings: V1OfferSettings): Record<string, unknown> => ({\n ...(settings.displaySettings?.image?.imageFit && {\n objectFit: settings.displaySettings.image.imageFit,\n }),\n /** Accessible name for the product image (legacy `OfferImage` used `accessibilityDescription={variantTitle}`); the renderer interpolates it, so an empty default would announce the image as decorative. */\n altText: '{{variantTitle}}',\n sectionType: 'image',\n source: settings.images?.source === 'product' ? '{{productImage}}' : '{{variantImage}}',\n width: 100,\n});\n\n/** The product title text, styled from v1 `displaySettings.product`. */\nconst buildTitle = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildStyledText('{{productTitle}}', settings.displaySettings?.product) },\n sectionType: 'text',\n});\n\n/** The price line (variant price + on-sale compare-at strikethrough). */\nconst buildPrice = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildPriceContent(settings) },\n sectionType: 'text',\n});\n\n/** The selected-variant title line, gated by `productOptions.showVariantTitle` ('hide'/absent = off). */\nconst buildVariantTitle = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showVariantTitle;\n\n if (!show || show === 'hide') return [];\n\n return [\n {\n content: { en: buildStyledText('{{variantTitle}}', settings.displaySettings?.variant) },\n sectionType: 'text',\n },\n ];\n};\n\n/** The per-card product description, gated by `productOptions.showProductDescription` ('hide'/absent = off). */\nconst buildDescription = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showProductDescription;\n\n if (!show || show === 'hide') return [];\n\n return [{ content: { en: buildStyledText('{{productDescription}}', undefined) }, sectionType: 'text' }];\n};\n\n/** The variant selector, unless the merchant hid variant options or turned actions off entirely. */\nconst buildVariants = (settings: V1OfferSettings): Record<string, unknown>[] => {\n /** Legacy `getVariantSelect`: `view_options.display_actions === false` suppresses the selector. */\n if (settings.viewOptions?.displayActions === false) return [];\n\n if (settings.productOptions?.showVariantOptions === 'never') return [];\n\n const selector = settings.viewOptions?.variantSelector;\n\n return [\n {\n hideOutOfStockVariants: !!settings.productOptions?.hideOutOfStockVariants,\n ...(selector && { selector: VARIANT_SELECTOR[selector] }),\n sectionType: 'variants',\n },\n ];\n};\n\n/** v1 stepper kind \u2192 CAB `inputType`. Unknown/absent \u2192 omitted so the schema default ('select') applies. */\nconst QUANTITY_INPUT_TYPE: Record<string, 'number' | 'select'> = {\n 'buttons-manual-input': 'number',\n 'dropdown-select': 'select',\n};\n\n/** Custom quantity error copy \u2192 CAB `errorMessages.en.{min,max,neg}`; omitted entirely when none is set. */\nconst buildQuantityErrors = (quantity: NonNullable<V1OfferSettings['quantityInputs']>) => {\n const en = {\n ...(quantity.maxError && { max: quantity.maxError }),\n ...(quantity.minError && { min: quantity.minError }),\n ...(quantity.negativeError && { neg: quantity.negativeError }),\n };\n\n return Object.keys(en).length ? { errorMessages: { en } } : {};\n};\n\n/** The quantity stepper, when the merchant enabled quantity input. */\nconst buildQuantity = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const quantity = settings.quantityInputs;\n\n if (!quantity?.enabled) return [];\n\n const inputType = quantity.type ? QUANTITY_INPUT_TYPE[quantity.type] : undefined;\n\n // Legacy quantity had no upper bound (DefaultQuantityRule.MAX = null) and allowed 0; the CAB\n // schema pins `max` to [1, 100] and `min` to >= 1. Clamp instead of passing through so a legacy\n // `maxValue: 250` (or a 0) degrades to a valid widget rather than throwing at parse.\n const max = Math.min(Math.max(quantity.maxValue ?? 10, 1), 100);\n // Also cap `min` at `max` \u2014 the schema has no cross-field refine, so a legacy `min > max` (e.g.\n // {maxValue: 5, minValue: 8}) would parse but render a degenerate stepper (REB #766).\n const min = Math.min(Math.max(quantity.minValue ?? 1, 1), max);\n\n return [\n {\n ...buildQuantityErrors(quantity),\n ...(inputType && { inputType }),\n max,\n min,\n sectionType: 'quantity',\n },\n ];\n};\n\n/**\n * The in-card subscribe / one-time toggle: a `switchToSubscription` button with its four label slots\n * (the same `SWITCH_LABELS` slot set as the line-item editor, including the `subscriptionOption`\n * frequency template, so the frequency select localizes). Emitted when the merchant offers\n * subscriptions (`productType` both/subscription); the extension shows it per-product by selling-plan\n * availability. v1 carries the with-discount upsell (`upgradeToSubscription`) plus the cart switch\n * labels; anything blank/absent falls back to the shared localized defaults.\n */\nconst buildSubscriptionButton = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (settings.productType !== 'both' && settings.productType !== 'subscription') return [];\n\n const language = settings.language;\n\n const slot = (buttonField: keyof typeof SWITCH_LABELS, override: string | undefined) => ({\n buttonField,\n content: localizedContent(SWITCH_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return [\n {\n action: 'switchToSubscription',\n buttonStyle: 'plain',\n /** A `subscription` widget offers no one-time purchase (legacy's offers checkbox renders only when `isProductTypeBoth`); suppress the downgrade so the buyer can't switch to one-time on a subscription-only offer. */\n ...(settings.productType === 'subscription' && { disableDowngrade: true }),\n sections: [\n slot('subscriptionOption', undefined),\n slot('switchToOneTimePurchase', language?.cartSwitchToOnetime),\n slot('switchToSubscriptionNoDiscount', language?.cartSwitchToSubscription),\n slot('switchToSubscriptionWithDiscount', language?.upgradeToSubscription),\n ],\n sectionType: 'button',\n },\n ];\n};\n\n/** v1 stores free-form `button.kind`; anything outside the CAB enum falls back to the legacy 'primary'. */\nconst BUTTON_KINDS = ['plain', 'primary', 'secondary'] as const;\n\n/** The add-to-order button with its four label slots (add / adding / added / sold-out). */\nconst buildAddButton = (settings: V1OfferSettings): Record<string, unknown> => {\n const kind = settings.button?.kind;\n\n const slot = (\n buttonField: 'addedToCart' | 'addingToCart' | 'addToCart' | 'redirectToCheckout' | 'soldOut',\n override?: string\n ) => ({\n buttonField,\n content: localizedContent(OFFER_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return {\n action: 'addToOrder',\n buttonStyle: BUTTON_KINDS.includes(kind as (typeof BUTTON_KINDS)[number]) ? kind : 'primary',\n sections: [\n slot('addToCart', settings.language?.addToCart),\n slot('addingToCart', settings.language?.addingToCart),\n slot('addedToCart', settings.language?.addedToCart),\n slot('soldOut', settings.language?.soldOutLabel),\n // Off-checkout Buy Now: the label the button shows once it links to the created checkout.\n slot('redirectToCheckout', settings.language?.redirectToCheckout),\n ],\n sectionType: 'button',\n };\n};\n\n/** A `rows` layout wrapping sections into one grid cell (so they stack within a column of the card). */\nconst rowsLayout = (sections: Record<string, unknown>[]): Record<string, unknown> => ({\n direction: 'rows',\n sections,\n sectionType: 'layout',\n});\n\n/**\n * The per-offer product card: the sections rendered once per recommended product (the\n * offers renderer mounts a product context, so the `{{...}}` tokens resolve per product).\n *\n * `horizontal` mirrors the v1 layout orientation (see `convertOfferToV2`):\n * - horizontal (v1 `list`/default, vertical-stacked products): a 3-column grid card \u2014\n * image | title/price/reviews/variants | actions \u2014 matching the compact V1 row.\n * - vertical (v1 `grid`/`line`, side-by-side products): a flat top-to-bottom stack\n * (image \u2192 title \u2192 price \u2192 \u2026 \u2192 button), the narrow column card.\n *\n * Quantity is a full-width row beneath the card in the horizontal layout; in the vertical\n * layout it sits inline in the stack. NOT carried: the savings-amount badge (no live v1\n * control) and variant text styling (no CAB field).\n */\nexport const buildOfferCard = (settings: V1OfferSettings, horizontal: boolean): Record<string, unknown>[] => {\n const image = buildImage(settings);\n const title = buildTitle(settings);\n const variantTitle = buildVariantTitle(settings);\n const price = buildPrice(settings);\n const description = buildDescription(settings);\n const reviews = buildReviews(settings);\n const variants = buildVariants(settings);\n const quantity = buildQuantity(settings);\n const subscription = buildSubscriptionButton(settings);\n const addButton = buildAddButton(settings);\n\n if (!horizontal) {\n return [\n image,\n title,\n ...variantTitle,\n price,\n ...description,\n ...reviews,\n ...variants,\n ...quantity,\n ...subscription,\n addButton,\n ];\n }\n\n const info = rowsLayout([title, ...variantTitle, price, ...description, ...reviews, ...variants]);\n const actions = [...subscription, addButton];\n const actionsCell = actions.length === 1 ? actions[0] : rowsLayout(actions);\n\n const card = {\n direction: 'grid',\n grid: { columns: ['15%', 'fill', 'auto'], rows: ['auto'] },\n sections: [image, info, actionsCell],\n sectionType: 'layout',\n };\n\n return [card, ...quantity];\n};\n", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\nimport { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\nimport { buildOfferCard } from '~/transforms/offerV1/offerCard';\nimport {\n SHOPIFY_CHECKOUT_EXTENSION,\n type V1OfferBreakpointLayout,\n type V1OfferConvertInput,\n type V1OfferSettings,\n} from '~/transforms/offerV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\n/**\n * v1 per-breakpoint `layout.style` \u2192 CAB product-list `direction`. This is the product-TO-product\n * orientation and the card orientation flips with it (see `convertOfferToV2`):\n * - `grid`/`line` \u2192 products sit side-by-side (`grid`/`columns`); each card is a vertical stack.\n * - `list`/`none`/absent \u2192 products stack vertically (`rows`); each card is a horizontal row.\n * The v1 carousel toggle writes exactly these two: VERTICAL \u2192 `list`, HORIZONTAL \u2192 `grid`.\n */\nconst STYLE_TO_DIRECTION = {\n grid: 'grid',\n line: 'columns',\n list: 'rows',\n none: 'rows',\n} as const;\n\nconst directionForStyle = (style: V1OfferBreakpointLayout['style']) => (style ? STYLE_TO_DIRECTION[style] : 'rows');\n\n/**\n * The product-to-product layout \u2014 it belongs on the CONTAINER that holds the offers (the carousel\n * wrapper), NOT on the offers section. The renderer repeats the offers layout per product into its\n * parent's stack/grid, so a `grid` direction with N `'fill'` columns lays the products out N-across;\n * `list`/`none` stay a vertical stack.\n *\n * `'fill'` (equal share) \u2014 NOT `'auto'` (sizes to content), which yields unequal columns and so\n * unequal `objectFit: contain` image heights across products.\n */\nconst buildProductListLayout = (direction: string, columns: number) =>\n direction === 'grid'\n ? { direction, grid: { columns: Array.from({ length: Math.max(columns, 1) }, () => 'fill'), rows: ['auto'] } }\n : { direction };\n\nconst hasHeaderText = (language: V1OfferSettings['language']): boolean =>\n !!(language?.title || language?.superTitle || language?.description);\n\n/**\n * v1 `discountedFrom` \u2192 CAB `discountSources`. v1's \"Discounted From\" / \"Compare Price With\" select\n * stores `price` / `compare_at_price` directly; the legacy `original_price` (written in Shopify-Functions\n * mode) is the regular price, i.e. `price`. Unknown values are omitted (the CAB enum would reject them).\n */\nconst DISCOUNTED_FROM: Record<string, 'compare_at_price' | 'price'> = {\n compare_at_price: 'compare_at_price',\n original_price: 'price',\n price: 'price',\n};\n\n/**\n * The active widget-level discount as the `CABDiscount` carried on the DATA-SOURCE section \u2014 the field\n * the extension's price forecast actually reads (`dataSource.discount` \u2192 `priceVariant`); a discount\n * emitted anywhere else never reaches the card price. Undefined when there's no active discount;\n * `showSavingAmount` is a card-display concern handled in `buildOfferCard`.\n */\nconst dataSourceDiscount = (discount: V1OfferSettings['discount']): Record<string, unknown> | undefined => {\n if (!discount?.type || discount.type === 'none') return undefined;\n\n const discountedFrom = discount.discountedFrom ? DISCOUNTED_FROM[discount.discountedFrom] : undefined;\n\n return {\n amount: discount.amount ?? 0,\n ...(discount.discountedBy && { discountedBy: discount.discountedBy }),\n ...(discountedFrom && { discountedFrom }),\n type: discount.type,\n };\n};\n\n/**\n * The same discount as the config-only `discount` section just above the undo banner \u2014 the editor-facing\n * home of the FULL v1 shape (`message`/`quantity` have no `CABDiscount` counterpart). Both projections\n * come from the one v1 input in the same pass, so they cannot drift apart.\n */\nconst buildDiscountSection = (discount: V1OfferSettings['discount']): Record<string, unknown>[] => {\n const base = dataSourceDiscount(discount);\n\n if (!base) return [];\n\n return [\n {\n ...base,\n ...(discount?.message && { message: discount.message }),\n ...(discount?.quantity != null && { quantity: discount.quantity }),\n sectionType: 'discount',\n },\n ];\n};\n\n/**\n * The banner's success message content: a defined v1 message overrides `en`, absent falls back to the\n * localized defaults (P4 language policy). A string message is sanitized (a raw-HTML label would fail\n * `CABTextSection.content` and 500 the widget); an RTE doc passes through as authored. A string that\n * sanitizes to empty falls back to the defaults, same as absent.\n */\nconst bannerMessageContent = (message: NonNullable<V1OfferSettings['language']>['successBannerMessageRte']) => {\n const sanitized = typeof message === 'string' ? stripContentBlockHtml(message) : message;\n\n return sanitized ? { ...OFFER_LABELS.addedToCartMessage, en: sanitized } : OFFER_LABELS.addedToCartMessage;\n};\n\n/**\n * Legacy integrations values are nominally boolean but prod data carries \"yes\"/\"no\" strings\n * (React special-cased exactly this for reviewsio: only 'true'/'yes' count as enabled) and numeric\n * 1/0 (legacy PHP serialization). Coerce every value so neither a string nor a number can throw at\n * the schema's `z.boolean()` and kill the widget: only 'true'/'yes' and 1 count as enabled.\n */\nconst coerceIntegrations = (integrations: Record<string, boolean | number | string>): Record<string, boolean> =>\n Object.fromEntries(\n Object.entries(integrations).map(([key, value]) => {\n if (typeof value === 'string') return [key, ['true', 'yes'].includes(value.toLowerCase())];\n\n if (typeof value === 'number') return [key, value === 1];\n\n return [key, value];\n })\n );\n\n/** The opt-in undo banner: a success `banner` of the message + a plain undo button. */\nconst buildBanner = (language: V1OfferSettings['language']): Record<string, unknown>[] =>\n language?.successBannerEnabled\n ? [\n {\n /**\n * The banner-level tag is the extraction/routing key on BOTH renderers (React CAB's\n * `isBannerType` + marker check; the Preact extension's `isUndoBanner`) \u2014 without it\n * the banner renders per card as an always-visible plain success banner and the\n * cart-scoped undo rail never runs. The schema's default offers tree carries it too.\n */\n buttonField: 'undoAddToOrder',\n color: 'success',\n dismissible: true,\n sections: [\n {\n content: bannerMessageContent(language.successBannerMessageRte),\n sectionType: 'text',\n },\n {\n action: 'undoAddToOrder',\n buttonStyle: 'plain',\n /**\n * Tagged `undoAddToOrder`, never `buttonLabel` \u2014 the renderers (React CAB and\n * the Preact extension) and the schema's default offers tree resolve that slot.\n */\n sections: [\n { buttonField: 'undoAddToOrder', content: OFFER_LABELS.undo, sectionType: 'text' },\n ],\n sectionType: 'button',\n },\n ],\n sectionType: 'banner',\n },\n ]\n : [];\n\n/**\n * Translates a v1 Offer (Checkout Offers / product recommendations) widget into\n * a `CABRootSection`: an optional header (title/superTitle/description, reusing\n * the content-block text converter) over a `carousel` wrapper that ALWAYS contains\n * the `offers` section (the carousel is the required structural parent; it only\n * paginates when the v1 layout has carousel on). The offers section's `dataSource`\n * child carries the engine fetch config; its remaining children are the\n * per-offer card (see `buildOfferCard`).\n *\n * v1 `layout` is per-breakpoint; CAB has none, so the converter collapses to\n * the largest provided breakpoint. A widget-level discount lands on the data\n * source's `discount` field (what the extension prices cards from) plus a\n * config-only `discount` section, and an opt-in undo `banner` is appended after\n * the data source (discount above, banner pinned last) when each is configured.\n */\nexport const convertOfferToV2 = ({ id, name, settings }: V1OfferConvertInput): CABRootSection => {\n const layout = settings.layout?.large ?? settings.layout?.medium ?? settings.layout?.small;\n const columns = layout?.columns ?? 1;\n const direction = directionForStyle(layout?.style);\n const listLayout = buildProductListLayout(direction, columns);\n\n // The card orientation is the inverse of the product-list orientation: vertically-stacked\n // products (`rows`) carry a compact horizontal card (image | info | add); side-by-side products\n // (`grid`/`columns`) carry a narrow vertical card (image \u2192 info \u2192 add).\n const horizontalCard = direction === 'rows';\n\n const discount = dataSourceDiscount(settings.discount);\n\n const dataSource = {\n ...(settings.endpoint && { dataSourcePath: settings.endpoint }),\n ...(discount && { discount }),\n ...(settings.integrations && { integrations: coerceIntegrations(settings.integrations) }),\n ...(settings.limit !== undefined && { limit: settings.limit }),\n matchVariant: !!settings.productOptions?.matchVariant,\n matchVariantOutOfStock: !!settings.productOptions?.matchVariantOutOfStock,\n ...(settings.productType && { productType: settings.productType }),\n sectionType: 'dataSource',\n ...(settings.subscriptionIsDefault && { subscriptionIsDefault: true }),\n ...(settings.treatAsGwp && { treatAsGwp: true }),\n };\n\n // The visible card sections come first so their indices stay contiguous from\n // the top (the admin UI prepends newly-added visible sections). The trailing\n // config-only sections are never rendered per-card: data source (engine fetch\n // config), then the optional discount, then the undo banner pinned to the very\n // bottom. `offers` keeps the default `rows` direction; the card's own\n // orientation is baked into the sections `buildOfferCard` returns.\n const offers = {\n sections: [\n ...buildOfferCard(settings, horizontalCard),\n dataSource,\n ...buildDiscountSection(settings.discount),\n ...buildBanner(settings.language),\n ],\n sectionType: 'offers',\n };\n\n // Offers ALWAYS live inside a `carousel` section \u2014 it's the structural wrapper the CAB offers\n // architecture requires, regardless of whether the widget actually paginates (the name is\n // historical). It only shows pagination when there are more products than `itemsAtOnce`, so a\n // non-carousel v1 widget sets `itemsAtOnce` to the full limit and shows everything at once. The\n // product-list layout (direction/grid from the v1 style + columns) rides on this wrapper.\n const display = {\n autoAdvanceInterval: 0,\n // `itemsAtOnce` feeds the carousel schema's `.min(1)`; a legacy `columns`/`limit` of 0 would\n // otherwise throw at parse, so floor it at 1 (the carousel still shows a product per page).\n itemsAtOnce: Math.max(layout?.carousel ? columns : (settings.limit ?? columns), 1),\n ...listLayout,\n sections: [offers],\n sectionType: 'carousel',\n };\n\n return CABRootSection.parse({\n direction: 'rows',\n editorMode: LOCATION_TO_EDITOR_MODE[settings.location ?? 'checkout'],\n // The widget name is required by the admin save schema; carry the legacy widget's name through.\n ...(name && { name }),\n previewMode: settings.previewMode,\n sections: [\n ...(hasHeaderText(settings.language)\n ? [{ content: { en: convertContentBlockTextToV2(settings.language) }, sectionType: 'text' }]\n : []),\n display,\n ],\n tracking: {\n enableAttribution: settings.tracking?.enableAttribution ?? true,\n enableSource: settings.tracking?.enableSource ?? true,\n enableWidget: settings.tracking?.enableWidget ?? true,\n },\n type: SHOPIFY_CHECKOUT_EXTENSION,\n version: 2,\n widgetId: id,\n });\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["config", "sessionId", "obj", "config", "enabled", "config", "makeCall", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_uuid", "import_zod", "import_zod", "import_zod", "import_zod", "import_uuid", "import_zod", "import_zod", "import_es_toolkit", "uuidv7", "import_compat", "import_uuid", "import_zod", "uuidv7", "uuidv7", "import_zod", "import_zod", "import_uuid", "import_zod", "uuidv7", "import_uuid", "import_zod", "import_uuid", "import_zod", "uuidv7", "uuidv7", "import_zod", "import_uuid", "import_zod", "uuidv7", "import_uuid", "import_zod", "uuidv7", "import_zod", "import_uuid", "import_zod", "uuidv7", "import_uuid", "import_zod", "uuidv7", "import_compat", "import_uuid", "import_zod", "uuidv7", "uuidv7", "import_zod", "import_zod", "import_zod", "import_zod", "import_zod", "import_compat", "import_zod", "import_zod", "import_compat", "import_uuid", "import_zod", "TextAlignment", "uuidv4", "import_zod", "import_zod", "import_zod", "location", "LOCATION_TO_EDITOR_MODE"]
7
7
  }