@rebuy/rebuy 2.35.1 → 2.36.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.
Files changed (39) hide show
  1. package/dist/index.js +20 -0
  2. package/dist/index.js.map +2 -2
  3. package/dist/index.mjs +20 -0
  4. package/dist/index.mjs.map +2 -2
  5. package/dist/schema/cabShopConfig.d.ts +1 -0
  6. package/dist/schema/cabShopConfig.d.ts.map +1 -1
  7. package/dist/schema/checkout-and-beyond/index.js +7 -0
  8. package/dist/schema/checkout-and-beyond/index.js.map +2 -2
  9. package/dist/schema/checkout-and-beyond/index.mjs +7 -0
  10. package/dist/schema/checkout-and-beyond/index.mjs.map +2 -2
  11. package/dist/schema/smartCart.d.ts +4 -0
  12. package/dist/schema/smartCart.d.ts.map +1 -1
  13. package/dist/schema/user-config.js +13 -0
  14. package/dist/schema/user-config.js.map +2 -2
  15. package/dist/schema/user-config.mjs +13 -0
  16. package/dist/schema/user-config.mjs.map +2 -2
  17. package/dist/schema/userConfig.d.ts +1 -0
  18. package/dist/schema/userConfig.d.ts.map +1 -1
  19. package/dist/schema/widget-data.js +7 -0
  20. package/dist/schema/widget-data.js.map +2 -2
  21. package/dist/schema/widget-data.mjs +7 -0
  22. package/dist/schema/widget-data.mjs.map +2 -2
  23. package/dist/schema/widgets/checkout-and-beyond/progressBar.d.ts +2 -0
  24. package/dist/schema/widgets/checkout-and-beyond/progressBar.d.ts.map +1 -1
  25. package/dist/server/index.js +62 -17
  26. package/dist/server/index.js.map +3 -3
  27. package/dist/server/index.mjs +62 -17
  28. package/dist/server/index.mjs.map +3 -3
  29. package/dist/transforms/index.js +49 -17
  30. package/dist/transforms/index.js.map +3 -3
  31. package/dist/transforms/index.mjs +49 -17
  32. package/dist/transforms/index.mjs.map +3 -3
  33. package/dist/transforms/normalizeTokens.d.ts +1 -0
  34. package/dist/transforms/normalizeTokens.d.ts.map +1 -1
  35. package/dist/transforms/progressBarV1/convertProgressBarToV2.d.ts.map +1 -1
  36. package/dist/transforms/reactBarChrome.d.ts +18 -0
  37. package/dist/transforms/reactBarChrome.d.ts.map +1 -0
  38. package/dist/transforms/smartCart/convertSmartCartProgressBarToV2.d.ts.map +1 -1
  39. package/package.json +1 -1
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/utils.ts", "../src/schema/widgets/checkout-and-beyond/regex.ts", "../src/schema/widgets/checkout-and-beyond/button.ts", "../src/schema/widgets/checkout-and-beyond/image.ts", "../src/schema/widgets/checkout-and-beyond/icons.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/normalizeTokens.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 /**\n * Only the two fields the smart-cart entitlement gate reads (`shortName`/`isActive`). Per-element\n * resilient like `activeExperiments`: a drifted package entry degrades to an inert `''`/false one that\n * matches nothing, so a real active `cart-merchandising` package still gates correctly and a sibling\n * drift never fails the shared config parse. Note the salvage is fail-CLOSED, not fail-open, for an\n * entitled v6 shop: a malformed whole array (\u21D2 `[]`) or an inerted `cart-merchandising` entry (e.g.\n * `is_active: 1` \u21D2 inactive) makes the gate find no active package and drop every bar. That matches\n * React's \"no proof of entitlement \u21D2 render null\", but it silently removes bars \u2014 so the server gate\n * ({@link file://../server/widgetSettings.ts} `fetchProgressBarContext`) emits a `shopConfig` drift\n * when it sees the inert-entry sentinel (`shortName === ''`). The whole-array `[]` case leaves no\n * sentinel and is not separately signalable here.\n */\n activePackages: z\n .array(z.object({ isActive: z.boolean(), shortName: z.string() }).catch({ isActive: false, shortName: '' }))\n .catch([])\n .default([]),\n apiKey: z.string(),\n /** The shop's billing generation; the smart-cart entitlement gate only fires for `'v6'`. Missing/drift \u21D2 `null` (fail open, ungated). */\n billingVersion: z.string().nullable().catch(null).default(null),\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 /**\n * A `null`/absent minimum stays `undefined` (NOT coerced to `0`): a threshold-0 tier is always reached\n * and would auto-add its gift to every cart. onsite's `isTierDataValid` drops a non-numeric minimum for\n * exactly this reason; the converter's `renderableTiers` mirrors that (`Number.isFinite`). A literal `0`\n * is kept \u2014 onsite keeps it too. DELIBERATE DIVERGENCE from onsite for string minimums: onsite's\n * `isTierDataValid` is a strict `typeof === 'number'`, so it drops `'50'`; the converter instead coerces\n * `'50' \u2192 50` and keeps the tier (a numeric-string minimum is a valid threshold, not a data defect).\n */\n minimum: z.preprocess((value) => (value == null ? undefined : value), 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 /** At least one variant \u2014 a zero-variant product renders an offer card with no addable merchandise (no Add CTA). `keepValidProduct` drops it with a `variants` drift signal rather than shipping a dead card. */\n variants: z.array(OfferProductVariant).min(1),\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 'addGift',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromOrder',\n 'removeGift',\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';\nimport { checkForHTML, NO_HTML } from './utils';\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 /**\n * The `s-banner` heading \u2014 localized content (a buyer can see a merchant-composed banner). Absent OR\n * blank \u21D2 no heading; the renderer emits no heading slot for `''` rather than an empty one.\n *\n * Merchant-composed buyer-facing plain text, so it rejects HTML at the boundary the same way\n * `CABImageSection.altText` and `CABTextSection.content` do (the unchecked localized records elsewhere \u2014\n * `progressBar`'s gift labels, `reviews`' plurals \u2014 are converter/constant-sourced, not merchant input).\n *\n * The refinement is a last-resort ASSERTION, not the normalization boundary: `normalizeTextContent` only\n * rewrites `sectionType: 'text'` nodes' `content`, so nothing strips markup or canonicalizes `{token}`\n * here. A producer must strip upstream the way `composeOffer` does for `altText`. Get it wrong and\n * `salvageSections` stubs the whole banner (children included) with a drift report \u2014 degraded, reported,\n * not a 500. Nothing emits `heading` yet; the first converter that maps merchant banner copy into it\n * either strips first or teaches `normalizeTextContent` to strip this field.\n */\n heading: z.record(z.string(), z.string().refine(checkForHTML, NO_HTML)).optional(),\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 heading?: Record<string, string>;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\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", "/** 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 { 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 /**\n * The smart-cart tier this button acts on (`addGift`/`removeGift`): scopes the click to one tier's gift. The\n * client resolves the tier's gift (productId) from the progress-bar context by this `tierId` \u2014 the button node\n * stays data, no bespoke per-tier wiring. Absent on non-gift buttons (offer add/remove, navigation, links).\n *\n * Deliberately NOT `CABTextTier` (the shape `CABTextSection.tier` uses): a gift button acts on a tier the bar\n * already resolved, so it needs the id and nothing else. Reusing the text tier would make `threshold`\n * required, leave `tierId` optional, and DEFAULT `tierType` to `'shipping'` \u2014 a schema-supplied wrong answer\n * on a gift button. Unknown keys are stripped, so a client spreading a whole tier in still parses.\n *\n * `.min(1)` because an empty id IS the silently-id-less state this shape exists to prevent: the client's\n * lookup finds no tier and the click resolves to nothing. Safe to bound \u2014 the field is new, so there are no\n * stored payloads to grandfather, and the producer is client code, not a merchant form.\n */\n tier: z.object({ tierId: z.string().min(1) }).optional(),\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 { iconNames, iconSizes, iconTones, type IconName } from './icons';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\n/**\n * The image section's fields WITHOUT the `category`/`source` refinement \u2014 the derivable base. Consumers and\n * future phases that need `.omit()`/`.pick()`/`.partial()` (an editor form schema, say) build from this and lose\n * the cross-field gate deliberately; everything that parses widget data uses {@link CABImageSection}.\n */\nexport const CABImageSectionFields = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n /**\n * Image width\u00F7height (e.g. `46` for the progress-bar fill); `null` renders at natural size. Any POSITIVE\n * ratio \u2014 never limited to 1, but never `0`/negative either: a renderer dividing by it would get `Infinity`,\n * and CSS `aspect-ratio` drops a negative value and silently reverts to natural size.\n */\n aspectRatio: z.number().positive().nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n /**\n * `icon` renders `source` as a single `s-icon` by name (the uber-image path covers icons too), reading\n * `iconSize`/`iconTone`. The other values are a harmless informational holdover from the previous\n * implementation \u2014 they were never significant to rendering (`icons`, plural, is NOT deprecated, just one of\n * those inert legacy tags); `icon` is the first value that means anything.\n *\n * INVARIANT, encoded by the `.superRefine` below (a refined object IS a valid `z.discriminatedUnion` member\n * in zod 4 \u2014 see `CABTextSection`): `category: 'icon'` \u21D2 `source` is an icon name or `''` (icon not yet\n * chosen); any other category \u21D2 `source` is NOT a bare icon name, so it stays a URL/token/`''`.\n *\n * Encoded rather than left to the renderer because `source` is ONE union with no category gate, so widening\n * it with `iconNames` also widened what a STORED payload may contain: 14 of the names are plain English\n * words (`image`, `x`, `search`, `note`, `order`, `globe`, \u2026), and a legacy `source: 'image'` used to fail\n * parse \u2014 which `salvageSections` turns into a null-rendering stub PLUS a drift report. Ungated it would\n * instead parse and reach the renderer as `<img src=\"image\">`: a broken image, silently, where the old\n * behavior degraded gracefully and told us about it. The client-assembled half of the invariant was never\n * the risky half.\n */\n category: z.enum(['gallery', 'icon', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n /** `icon`-mode only: the `s-icon` `size`; `null` \u21D2 the component default (`base`). Ignored by image treatments. */\n iconSize: z.enum(iconSizes).nullable().default(null),\n /** `icon`-mode only: the `s-icon` `tone`; `null` \u21D2 the component default (`auto`). Ignored by image treatments. */\n iconTone: z.enum(iconTones).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 /**\n * An image URL or dynamic token, an empty default, or \u2014 when `category: 'icon'` \u2014 an icon NAME. Icon mode\n * takes a name or `''` only, NOT a token: no renderer resolves a token to an icon today, so accepting one\n * would promise a capability that doesn't exist. Widen the refine's carve-out to `DYNAMIC_TOKEN_REGEX` when a\n * server-chosen tier icon actually needs it.\n */\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX), z.enum(iconNames)]).default(''),\n width: z.number().default(100),\n});\n\nconst iconNameSet = new Set<string>(iconNames);\n\nconst isIconName = (source: string): source is IconName => iconNameSet.has(source);\n\n/**\n * The `category`/`source` pairing documented on `category`: icon mode takes icon names, everything else can't.\n *\n * Carrying a refinement costs the derivation methods: zod 4 rejects `.omit()` / `.pick()` / `.partial()` on an\n * object schema with checks (an explicit `cannot be used on object schemas containing refinements` throw, not a\n * silent drop), while `.extend()` / `.safeExtend()` work and PRESERVE the check. Concretely:\n * `CABImageSectionFields.omit({ sectionId: true })` works, `CABImageSection.omit({ sectionId: true })` throws \u2014\n * so derive from {@link CABImageSectionFields} when you need the unavailable three.\n */\nexport const CABImageSection = CABImageSectionFields.superRefine(({ category, source }, ctx) => {\n if (category === 'icon' && source !== '' && !isIconName(source))\n ctx.addIssue({\n code: 'custom',\n message: 'icon-mode source must be an icon name',\n path: ['source'],\n });\n\n if (category !== 'icon' && isIconName(source))\n ctx.addIssue({\n code: 'custom',\n message: 'source must be a URL or dynamic token unless category is `icon`',\n path: ['source'],\n });\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "import { freezeEnum } from './common';\n\n/**\n * The checkout `s-icon` web-component `type` set, hand-mirrored from shopify.dev (checkout-ui-extensions \u2192\n * web-components \u2192 media-and-visuals \u2192 icon; api_version 2026-07). This is the Polaris `s-icon` surface \u2014\n * distinct from the legacy React `Icon` component's `CHECKOUT_AVAILABLE_ICONS`. The `image` section renders\n * one of these when `category: 'icon'` with `source` set to the name.\n *\n * Hand-maintained because `@shopify/ui-extensions` is not a dependency of this package. Safe against\n * staleness by USAGE, not a guard: icon-mode `source` values are CLIENT-ASSEMBLED from known constants, never\n * merchant/server data that gets strict-parsed \u2014 so an icon Shopify adds that this list lacks can't fail a\n * widget parse; it simply isn't a name we emit. If icon mode ever accepts external sources, add\n * `@shopify/ui-extensions` as a devDependency and replace this with a compile-time drift guard against its\n * icon type (in the spirit of the recursive-twins guard).\n */\nexport const iconNames = [\n 'alert-circle',\n 'alert-triangle',\n 'alert-triangle-filled',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'arrow-up-right',\n 'bag',\n 'bullet',\n 'calendar',\n 'camera',\n 'caret-down',\n 'cart',\n 'cash-dollar',\n 'categories',\n 'check',\n 'check-circle',\n 'check-circle-filled',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'circle',\n 'clipboard',\n 'clock',\n 'credit-card',\n 'delete',\n 'delivered',\n 'delivery',\n 'disabled',\n 'discount',\n 'edit',\n 'email',\n 'empty',\n 'external',\n 'filter',\n 'geolocation',\n 'gift-card',\n 'globe',\n 'grid',\n 'image',\n 'info',\n 'info-filled',\n 'list-bulleted',\n 'location',\n 'lock',\n 'map',\n 'menu',\n 'menu-horizontal',\n 'menu-vertical',\n 'minus',\n 'mobile',\n 'note',\n 'order',\n 'organization',\n 'plus',\n 'profile',\n 'question-circle',\n 'question-circle-filled',\n 'reorder',\n 'reset',\n 'return',\n 'savings',\n 'search',\n 'settings',\n 'star',\n 'star-filled',\n 'star-half',\n 'store',\n 'truck',\n 'upload',\n 'x',\n 'x-circle',\n 'x-circle-filled',\n] as const;\nexport const IconName = freezeEnum(iconNames);\nexport type IconName = (typeof iconNames)[number];\n\n/**\n * The `s-icon` `size` scale (same shopify.dev source as {@link iconNames}); component default is `base`.\n * Applies only to `image` sections in `icon` mode \u2014 an icon needs its own size knob (an image uses `width`,\n * a %, which is meaningless for a self-sizing icon). Absent \u21D2 the component's `base`.\n */\nexport const iconSizes = ['base', 'large', 'large-100', 'small', 'small-100', 'small-200'] as const;\nexport const IconSize = freezeEnum(iconSizes);\nexport type IconSize = (typeof iconSizes)[number];\n\n/**\n * The `s-icon` `tone` set (same shopify.dev source as {@link iconNames}); component default is `auto`. The\n * semantic color treatment of an `icon`-mode `image` \u2014 `custom` inherits the parent's CSS color. Absent \u21D2\n * the component's `auto`.\n */\nexport const iconTones = ['auto', 'critical', 'custom', 'info', 'neutral', 'success', 'warning'] as const;\nexport const IconTone = freezeEnum(iconTones);\nexport type IconTone = (typeof iconTones)[number];\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 /** Ads-taxonomy sub-vertical id (the widget's `sub_vertical` setting); paired with `vertical`. */\n subVertical: z.string().optional(),\n /** Ads-taxonomy vertical id (the widget's `vertical` setting) \u2014 with `subVertical`, the admin Monetize editor's two configurables. */\n vertical: z.string().optional(),\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 (onsite `filter_oos_variants`): when set, the client drops this\n * tier entirely once its gift has NO in-stock eligible variant \u2014 the milestone, fill slot and gift\n * controls all disappear, mirroring onsite removing the tier from `bar.tiers` before it renders. Absent\n * on shipping/discount/decorative tiers and left off by default (the tier renders regardless of stock).\n */\n filterOosVariants: z.boolean().default(false),\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 \u2014 'Free Shipping' or '{n}% Discount'. A PRODUCT tier gets NO converter label: its name is\n * the gift PRODUCT title, which the converter can't supply (config carries only product IDs), so the\n * client resolves it (authoritative Shopify title, React parity) with its own localized generic fallback.\n * Localized content; absent OR blank \u21D2 no label under the tier's icon (the converter's `toTierMeta` already\n * turns a blank label into an absent key, and a client-authored blank means the same thing \u2014 the renderer\n * emits no caption slot rather than an empty one). Plain text \u2014 a compact icon+label.\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}}` (a raw `Intl`-localized count for `item` tiers, money for `currency` tiers)\n * each resolve in their own tier's unit \u2014 cross-tier arithmetic never mixes counts with cents. The\n * count carries no injected noun (no English `item`/`items` inflection on localized copy); merchant\n * template text supplies grammatically-neutral wording around the token.\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 /**\n * The onsite bar id (smart-cart TPB bars only). The client mirrors it to the cart's `_barId` attribute\n * so the product-discount / order-discount Functions can locate this bar's tier config (they key the\n * TPB metafield by bar id). Onsite writes `_barId` in the storefront drawer; a Buy-Now / headless\n * checkout reaches the extension without it, so the client writes it or the tier gift's 100% discount\n * (and any tier order discount) never applies. Absent on the v1 shipping bar (no gift tiers, no id).\n */\n barId: z.string().optional(),\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 the merchant's CONFIGURED order \u2014 the renderer does NOT sort them (022\n * O-B2: sorting by resolved threshold reversed configured milestones on out-of-order or mixed-unit\n * count-vs-cents bars). Drives the fill (even slot per tier) and, for smart-cart product tiers, the\n * gift add/remove. The visual tier 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 barId?: string;\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\n/**\n * The v1 Monetize (standalone `ui_extension_ad`) widget settings the CAB converter reads \u2014 the marker\n * fields only. The legacy payload carries the full onsite settings bag; everything the stub tree doesn't\n * need is left undeclared and ignored. Engine nulls are declared (`name: null` is the stored shape for an\n * unnamed widget), so the converter can fold them to the schema's optional-absent.\n */\nexport const RebuyMonetizeV1 = z.object({\n name: z.string().nullable().optional(),\n previewMode: z.boolean().optional(),\n /** Privacy Policy footer href \u2192 the marker section's `privacyPolicyUrl`. */\n privacyPolicyUrl: z.string().nullable().optional(),\n /** Ads-taxonomy sub-vertical id \u2014 one of the admin Monetize editor's two configurables. */\n subVertical: z.string().nullable().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_ad).default(WidgetType.ui_extension_ad),\n version: z.literal(1),\n /** Ads-taxonomy vertical id \u2014 one of the admin Monetize editor's two configurables. */\n vertical: z.string().nullable().optional(),\n});\n\nexport type RebuyMonetize = z.infer<typeof RebuyMonetize>;\nexport type RebuyMonetizeV1 = z.infer<typeof RebuyMonetizeV1>;\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", "const DEFAULT_KNOWN_TOKENS = ['firstName', 'lastName', 'email'] as const;\n\nconst escapeForRegex = (literal: string): string => literal.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * Rewrites legacy personalization tokens into the CAB-canonical `{{tokenName}}`\n * form expected by the client's `replaceVariables`. Specifically:\n *\n * - `{firstName}` (single brace) \u2192 `{{firstName}}`\n * - `{FirstName}` / `{FIRSTNAME}` (case variants) \u2192 `{{firstName}}`\n * - `{ firstName }` (internal whitespace) \u2192 `{{firstName}}`\n * - `{{firstName}}` (already canonical) \u2192 unchanged\n *\n * Pass `knownTokens` to control which names are normalized; anything not in the\n * list (e.g., an unrelated `{{foo}}` token) passes through untouched.\n */\nexport const normalizeTokens = (text: string, knownTokens: readonly string[] = DEFAULT_KNOWN_TOKENS): string => {\n if (typeof text !== 'string') return text;\n\n return knownTokens.reduce((acc, token) => {\n /**\n * Tokens standardize on camelCase; `_?` before each capital also matches the legacy snake_case\n * spelling ({remaining_amount} \u2192 {{remainingAmount}}).\n */\n const snakeTolerant = escapeForRegex(token).replace(/([A-Z])/g, '_?$1');\n const pattern = new RegExp(`\\\\{{1,2}\\\\s*${snakeTolerant}\\\\s*\\\\}{1,2}`, 'gi');\n\n return acc.replace(pattern, `{{${token}}}`);\n }, text);\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\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 /**\n * `normalizeTokens` canonicalizes legacy personalization tokens (`{FirstName}`/`{first_name}` \u2192\n * `{{firstName}}`) so the client resolves them \u2014 the header builds Tiptap directly, bypassing the\n * string-content normalization pass. Applied per truthy field (no extra branch); idempotent for\n * already-canonical callers.\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: normalizeTokens(superTitle),\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: normalizeTokens(title),\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: normalizeTokens(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';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\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 *\n * `knownTokens` canonicalizes legacy token GRAMMAR in the stored label (single-brace `{price}`,\n * case `{{Total}}`, snake `{subscription_discount}`, internal spaces \u2192 `{{camelCase}}`) so the strict\n * client interpolator resolves it \u2014 legacy's label regexes were 1-or-2-brace and case-insensitive.\n * Empty (the default) \u21D2 no-op, so callers that pass no list keep the pure verbatim passthrough.\n * This preserves the merchant's WORDING (only the token spelling is normalized), distinct from the\n * verbatim-label policy above.\n */\nexport const localizedContent = (\n defaults: Record<string, string>,\n override: string | undefined,\n knownTokens: readonly string[] = []\n) => {\n const trimmed = normalizeTokens(stripContentBlockHtml(override ?? '').trim(), knownTokens);\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 { normalizeTokens } from '~/transforms/normalizeTokens';\nimport { type V1OfferSettings, type V1TextStyle } from '~/transforms/offerV1/types';\n\n/** Legacy add-to-cart label tokens (`checkout-offers/useLanguage`): resolved in 1-or-2-brace, case-insensitive form. */\nconst ADD_LABEL_TOKENS = ['quantity', 'price', 'total'] as const;\n/** Switch/frequency label tokens (`line-item-editor/getStsButtonLabels` + the `subscriptionOption` template). */\nconst SWITCH_LABEL_TOKENS = ['subscriptionDiscount', 'frequency', 'interval'] as const;\n/** Quantity-error message tokens. */\nconst QUANTITY_ERROR_TOKENS = ['max', 'min', 'step'] as const;\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: normalizeTokens(quantity.maxError, QUANTITY_ERROR_TOKENS) }),\n ...(quantity.minError && { min: normalizeTokens(quantity.minError, QUANTITY_ERROR_TOKENS) }),\n ...(quantity.negativeError && { neg: normalizeTokens(quantity.negativeError, QUANTITY_ERROR_TOKENS) }),\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, SWITCH_LABEL_TOKENS),\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, ADD_LABEL_TOKENS),\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;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASxB,SAAS,aAAE,WAAW,CAAC,UAAW,SAAS,OAAO,SAAY,OAAQ,aAAE,OAAO,OAAO,EAAE,SAAS,CAAC;AAAA,EAClG,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;;;ADvGM,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaJ,gBAAgB,cACX,MAAM,cAAE,OAAO,EAAE,UAAU,cAAE,QAAQ,GAAG,WAAW,cAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,OAAO,WAAW,GAAG,CAAC,CAAC,EAC1G,MAAM,CAAC,CAAC,EACR,QAAQ,CAAC,CAAC;AAAA,EACf,QAAQ,cAAE,OAAO;AAAA;AAAA,EAEjB,gBAAgB,cAAE,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO9D,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;;;AExFD,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;AAAA,EAEhB,UAAU,cAAE,MAAM,mBAAmB,EAAE,IAAI,CAAC;AAChD,CAAC;;;AC1DD,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;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;;;ADpNvD,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;;;ACAlB,IAAAC,qBAAyC;AACzC,oBAAkE;;;ACA3D,IAAM,qBAAqB;AAG3B,IAAM,sBAAsB;AAG5B,IAAM,kBAAkB;AAMxB,IAAM,2BAA2B;AAejC,IAAM,kBAAkB;;;ADLxB,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;;;ADjHO,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBrC,SAAS,eAAE,OAAO,eAAE,OAAO,GAAG,eAAE,OAAO,EAAE,OAAO,cAAc,OAAO,CAAC,EAAE,SAAS;AAAA,IACjF,aAAa,eAAE,QAAQ,YAAY,MAAM,EAAE,QAAQ,YAAY,MAAM;AAAA,EACzE,CAAC;AACL;;;AG9BA,IAAAC,eAA6B;AAC7B,IAAAC,eAAgC;;;ACDhC,kBAA6B;AAC7B,IAAAC,eAAkB;;;ACcX,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;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;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;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACO,IAAM,WAAW,WAAW,SAAS;AAQrC,IAAM,YAAY,CAAC,QAAQ,SAAS,aAAa,SAAS,aAAa,WAAW;AAClF,IAAM,WAAW,WAAW,SAAS;AAQrC,IAAM,YAAY,CAAC,QAAQ,YAAY,UAAU,QAAQ,WAAW,WAAW,SAAS;AACxF,IAAM,WAAW,WAAW,SAAS;;;AD/FrC,IAAM,wBAAwB,eAAE,OAAO;AAAA,EAC1C,SAAS,eAAE,OAAO,EAAE,OAAO,cAAc,OAAO,EAAE,QAAQ,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5D,aAAa,eAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EAC1D,QAAQ,eAAE,KAAK,MAAM,SAAS;AAAA,EAC9B,aAAa,eAAE,KAAK,YAAY,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmB3C,UAAU,eAAE,KAAK,CAAC,WAAW,QAAQ,SAAS,mBAAmB,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA;AAAA,EAE5G,UAAU,eAAE,KAAK,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA;AAAA,EAEnD,UAAU,eAAE,KAAK,SAAS,EAAE,SAAS,EAAE,QAAQ,IAAI;AAAA,EACnD,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnE,QAAQ,eAAE,MAAM,CAAC,eAAE,IAAI,GAAG,eAAE,QAAQ,EAAE,GAAG,eAAE,OAAO,EAAE,MAAM,mBAAmB,GAAG,eAAE,KAAK,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE;AAAA,EAC9G,OAAO,eAAE,OAAO,EAAE,QAAQ,GAAG;AACjC,CAAC;AAED,IAAM,cAAc,IAAI,IAAY,SAAS;AAE7C,IAAM,aAAa,CAAC,WAAuC,YAAY,IAAI,MAAM;AAW1E,IAAM,kBAAkB,sBAAsB,YAAY,CAAC,EAAE,UAAU,OAAO,GAAG,QAAQ;AAC5F,MAAI,aAAa,UAAU,WAAW,MAAM,CAAC,WAAW,MAAM;AAC1D,QAAI,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ;AAAA,IACnB,CAAC;AAEL,MAAI,aAAa,UAAU,WAAW,MAAM;AACxC,QAAI,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM,CAAC,QAAQ;AAAA,IACnB,CAAC;AACT,CAAC;;;AEhGD,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;;;AHxHE,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAerE,MAAM,eAAE,OAAO,EAAE,QAAQ,eAAE,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS;AAAA;AAAA,EAEvD,aAAa,eAAE,OAAO,EAAE,SAAS;AACrC,CAAC;;;AI1ED,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;AAAA;AAAA,EAEzE,aAAa,eAAE,OAAO,EAAE,SAAS;AAAA;AAAA,EAEjC,UAAU,eAAE,OAAO,EAAE,SAAS;AAClC,CAAC;;;AClBD,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,EAO/G,mBAAmB,eAAE,QAAQ,EAAE,QAAQ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ5C,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;AAAA;AAAA;AAAA;AAAA,EAUd,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;AAAA;AAAA,EAWrE,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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQhD,OAAO,eAAE,OAAO,EAAE,SAAS;AAAA;AAAA,IAE3B,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;AAAA,IAO/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;;;AExJA,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;;;ArBOM,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;;;AwBzCM,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;;;AzBTA,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;;;A2BzCD,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;AAQM,IAAM,kBAAkB,eAAE,OAAO;AAAA,EACpC,MAAM,eAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACrC,aAAa,eAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAElC,kBAAkB,eAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA;AAAA,EAEjD,aAAa,eAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,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,eAAe,EAAE,QAAQ,WAAW,eAAe;AAAA,EAC9E,SAAS,eAAE,QAAQ,CAAC;AAAA;AAAA,EAEpB,UAAU,eAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC7C,CAAC;;;ApCpBM,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;;;AqCzBM,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;;;ACjCA,IAAM,uBAAuB,CAAC,aAAa,YAAY,OAAO;AAE9D,IAAM,iBAAiB,CAAC,YAA4B,QAAQ,QAAQ,uBAAuB,MAAM;AAc1F,IAAM,kBAAkB,CAAC,MAAc,cAAiC,yBAAiC;AAC5G,MAAI,OAAO,SAAS,SAAU,QAAO;AAErC,SAAO,YAAY,OAAO,CAAC,KAAK,UAAU;AAKtC,UAAM,gBAAgB,eAAe,KAAK,EAAE,QAAQ,YAAY,MAAM;AACtE,UAAM,UAAU,IAAI,OAAO,eAAe,aAAa,gBAAgB,IAAI;AAE3E,WAAO,IAAI,QAAQ,SAAS,KAAK,KAAK,IAAI;AAAA,EAC9C,GAAG,IAAI;AACX;;;ACxBO,IAAM,8BAA8B,CAAC,aAAqD;AAC7F,QAAM,cAAc,UAAU;AAC9B,QAAM,aAAa,UAAU;AAC7B,QAAM,QAAQ,UAAU;AAQxB,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,gBAAgB,UAAU;AAAA,QAChC,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,gBAAgB,KAAK;AAAA,QAC3B,WAAW;AAAA,MACf,CAAC,IACD;AAAA,MACN,cACM,6BAA6B;AAAA,QACzB,OAAO;AAAA,QACP,UAAU;AAAA,QACV,MAAM,gBAAgB,WAAW;AAAA,QACjC,WAAW;AAAA,MACf,CAAC,IACD;AAAA,IACV,EAAE,OAAO,CAAC,MAAkC,MAAM,IAAI;AAAA,IACtD,MAAM;AAAA,EACV,CAAC;AACL;;;AC9BO,IAAM,mBAAmB,CAC5B,UACA,UACA,cAAiC,CAAC,MACjC;AACD,QAAM,UAAU,gBAAgB,sBAAsB,YAAY,EAAE,EAAE,KAAK,GAAG,WAAW;AAEzF,SAAO,UAAU,EAAE,GAAG,UAAU,IAAI,QAAQ,IAAI;AACpD;;;ACZO,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;;;ACrBL,IAAM,mBAAmB,CAAC,YAAY,SAAS,OAAO;AAEtD,IAAM,sBAAsB,CAAC,wBAAwB,aAAa,UAAU;AAE5E,IAAM,wBAAwB,CAAC,OAAO,OAAO,MAAM;AAGnD,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;AAAA,EAEA,SAAS;AAAA,EACT,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,gBAAgB,SAAS,UAAU,qBAAqB,EAAE;AAAA,IAC1F,GAAI,SAAS,YAAY,EAAE,KAAK,gBAAgB,SAAS,UAAU,qBAAqB,EAAE;AAAA,IAC1F,GAAI,SAAS,iBAAiB,EAAE,KAAK,gBAAgB,SAAS,eAAe,qBAAqB,EAAE;AAAA,EACxG;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,UAAU,mBAAmB;AAAA,IACnF,aAAa;AAAA,EACjB;AAEA,SAAO;AAAA,IACH;AAAA,MACI,QAAQ;AAAA,MACR,aAAa;AAAA;AAAA,MAEb,GAAI,SAAS,gBAAgB,kBAAkB,EAAE,kBAAkB,KAAK;AAAA,MACxE,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,UAAU,gBAAgB;AAAA,IAC/E,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;;;ACtSA,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 /**\n * Only the two fields the smart-cart entitlement gate reads (`shortName`/`isActive`). Per-element\n * resilient like `activeExperiments`: a drifted package entry degrades to an inert `''`/false one that\n * matches nothing, so a real active `cart-merchandising` package still gates correctly and a sibling\n * drift never fails the shared config parse. Note the salvage is fail-CLOSED, not fail-open, for an\n * entitled v6 shop: a malformed whole array (\u21D2 `[]`) or an inerted `cart-merchandising` entry (e.g.\n * `is_active: 1` \u21D2 inactive) makes the gate find no active package and drop every bar. That matches\n * React's \"no proof of entitlement \u21D2 render null\", but it silently removes bars \u2014 so the server gate\n * ({@link file://../server/widgetSettings.ts} `fetchProgressBarContext`) emits a `shopConfig` drift\n * when it sees the inert-entry sentinel (`shortName === ''`). The whole-array `[]` case leaves no\n * sentinel and is not separately signalable here.\n */\n activePackages: z\n .array(z.object({ isActive: z.boolean(), shortName: z.string() }).catch({ isActive: false, shortName: '' }))\n .catch([])\n .default([]),\n apiKey: z.string(),\n /** The shop's billing generation; the smart-cart entitlement gate only fires for `'v6'`. Missing/drift \u21D2 `null` (fail open, ungated). */\n billingVersion: z.string().nullable().catch(null).default(null),\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 /**\n * A `null`/absent minimum stays `undefined` (NOT coerced to `0`): a threshold-0 tier is always reached\n * and would auto-add its gift to every cart. onsite's `isTierDataValid` drops a non-numeric minimum for\n * exactly this reason; the converter's `renderableTiers` mirrors that (`Number.isFinite`). A literal `0`\n * is kept \u2014 onsite keeps it too. DELIBERATE DIVERGENCE from onsite for string minimums: onsite's\n * `isTierDataValid` is a strict `typeof === 'number'`, so it drops `'50'`; the converter instead coerces\n * `'50' \u2192 50` and keeps the tier (a numeric-string minimum is a valid threshold, not a data defect).\n */\n minimum: z.preprocess((value) => (value == null ? undefined : value), 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 /**\n * onsite `product_tier_image`: on a product (gift) tier, show the gift's product image in the step-row\n * slot instead of the generic bag icon (React `TierProgressIcon` swaps in the image when this is set and\n * an image resolves). Per-tier; the client resolves the image (config carries only product IDs).\n *\n * `.catch(undefined)` is load-bearing. This key was previously unknown-and-ignored by the `looseObject`;\n * declaring it as a real boolean means a stored non-boolean (`1` / `\"1\"` / `\"true\"`) would now FAIL the\n * tier \u2014 and since `SmartCartConfig` is parsed `.nullish().catch(undefined)` (userConfig/cabShopConfig)\n * with no intermediate catch, one drifted flag would drop EVERY progress bar for the shop, not just the\n * flag. The converter only reads it for truthiness (`gift && tier.productTierImage`), so failing open to\n * `undefined` (bag-icon fallback, the documented default) is strictly safer than that blast radius.\n */\n productTierImage: z.boolean().optional().catch(undefined),\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 /** At least one variant \u2014 a zero-variant product renders an offer card with no addable merchandise (no Add CTA). `keepValidProduct` drops it with a `variants` drift signal rather than shipping a dead card. */\n variants: z.array(OfferProductVariant).min(1),\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 'addGift',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromOrder',\n 'removeGift',\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';\nimport { checkForHTML, NO_HTML } from './utils';\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 /**\n * The `s-banner` heading \u2014 localized content (a buyer can see a merchant-composed banner). Absent OR\n * blank \u21D2 no heading; the renderer emits no heading slot for `''` rather than an empty one.\n *\n * Merchant-composed buyer-facing plain text, so it rejects HTML at the boundary the same way\n * `CABImageSection.altText` and `CABTextSection.content` do (the unchecked localized records elsewhere \u2014\n * `progressBar`'s gift labels, `reviews`' plurals \u2014 are converter/constant-sourced, not merchant input).\n *\n * The refinement is a last-resort ASSERTION, not the normalization boundary: `normalizeTextContent` only\n * rewrites `sectionType: 'text'` nodes' `content`, so nothing strips markup or canonicalizes `{token}`\n * here. A producer must strip upstream the way `composeOffer` does for `altText`. Get it wrong and\n * `salvageSections` stubs the whole banner (children included) with a drift report \u2014 degraded, reported,\n * not a 500. Nothing emits `heading` yet; the first converter that maps merchant banner copy into it\n * either strips first or teaches `normalizeTextContent` to strip this field.\n */\n heading: z.record(z.string(), z.string().refine(checkForHTML, NO_HTML)).optional(),\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 heading?: Record<string, string>;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\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", "/** 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 { 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 /**\n * The smart-cart tier this button acts on (`addGift`/`removeGift`): scopes the click to one tier's gift. The\n * client resolves the tier's gift (productId) from the progress-bar context by this `tierId` \u2014 the button node\n * stays data, no bespoke per-tier wiring. Absent on non-gift buttons (offer add/remove, navigation, links).\n *\n * Deliberately NOT `CABTextTier` (the shape `CABTextSection.tier` uses): a gift button acts on a tier the bar\n * already resolved, so it needs the id and nothing else. Reusing the text tier would make `threshold`\n * required, leave `tierId` optional, and DEFAULT `tierType` to `'shipping'` \u2014 a schema-supplied wrong answer\n * on a gift button. Unknown keys are stripped, so a client spreading a whole tier in still parses.\n *\n * `.min(1)` because an empty id IS the silently-id-less state this shape exists to prevent: the client's\n * lookup finds no tier and the click resolves to nothing. Safe to bound \u2014 the field is new, so there are no\n * stored payloads to grandfather, and the producer is client code, not a merchant form.\n */\n tier: z.object({ tierId: z.string().min(1) }).optional(),\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 { iconNames, iconSizes, iconTones, type IconName } from './icons';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\n/**\n * The image section's fields WITHOUT the `category`/`source` refinement \u2014 the derivable base. Consumers and\n * future phases that need `.omit()`/`.pick()`/`.partial()` (an editor form schema, say) build from this and lose\n * the cross-field gate deliberately; everything that parses widget data uses {@link CABImageSection}.\n */\nexport const CABImageSectionFields = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n /**\n * Image width\u00F7height (e.g. `46` for the progress-bar fill); `null` renders at natural size. Any POSITIVE\n * ratio \u2014 never limited to 1, but never `0`/negative either: a renderer dividing by it would get `Infinity`,\n * and CSS `aspect-ratio` drops a negative value and silently reverts to natural size.\n */\n aspectRatio: z.number().positive().nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n /**\n * `icon` renders `source` as a single `s-icon` by name (the uber-image path covers icons too), reading\n * `iconSize`/`iconTone`. The other values are a harmless informational holdover from the previous\n * implementation \u2014 they were never significant to rendering (`icons`, plural, is NOT deprecated, just one of\n * those inert legacy tags); `icon` is the first value that means anything.\n *\n * INVARIANT, encoded by the `.superRefine` below (a refined object IS a valid `z.discriminatedUnion` member\n * in zod 4 \u2014 see `CABTextSection`): `category: 'icon'` \u21D2 `source` is an icon name or `''` (icon not yet\n * chosen); any other category \u21D2 `source` is NOT a bare icon name, so it stays a URL/token/`''`.\n *\n * Encoded rather than left to the renderer because `source` is ONE union with no category gate, so widening\n * it with `iconNames` also widened what a STORED payload may contain: 14 of the names are plain English\n * words (`image`, `x`, `search`, `note`, `order`, `globe`, \u2026), and a legacy `source: 'image'` used to fail\n * parse \u2014 which `salvageSections` turns into a null-rendering stub PLUS a drift report. Ungated it would\n * instead parse and reach the renderer as `<img src=\"image\">`: a broken image, silently, where the old\n * behavior degraded gracefully and told us about it. The client-assembled half of the invariant was never\n * the risky half.\n */\n category: z.enum(['gallery', 'icon', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n /** `icon`-mode only: the `s-icon` `size`; `null` \u21D2 the component default (`base`). Ignored by image treatments. */\n iconSize: z.enum(iconSizes).nullable().default(null),\n /** `icon`-mode only: the `s-icon` `tone`; `null` \u21D2 the component default (`auto`). Ignored by image treatments. */\n iconTone: z.enum(iconTones).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 /**\n * An image URL or dynamic token, an empty default, or \u2014 when `category: 'icon'` \u2014 an icon NAME. Icon mode\n * takes a name or `''` only, NOT a token: no renderer resolves a token to an icon today, so accepting one\n * would promise a capability that doesn't exist. Widen the refine's carve-out to `DYNAMIC_TOKEN_REGEX` when a\n * server-chosen tier icon actually needs it.\n */\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX), z.enum(iconNames)]).default(''),\n width: z.number().default(100),\n});\n\nconst iconNameSet = new Set<string>(iconNames);\n\nconst isIconName = (source: string): source is IconName => iconNameSet.has(source);\n\n/**\n * The `category`/`source` pairing documented on `category`: icon mode takes icon names, everything else can't.\n *\n * Carrying a refinement costs the derivation methods: zod 4 rejects `.omit()` / `.pick()` / `.partial()` on an\n * object schema with checks (an explicit `cannot be used on object schemas containing refinements` throw, not a\n * silent drop), while `.extend()` / `.safeExtend()` work and PRESERVE the check. Concretely:\n * `CABImageSectionFields.omit({ sectionId: true })` works, `CABImageSection.omit({ sectionId: true })` throws \u2014\n * so derive from {@link CABImageSectionFields} when you need the unavailable three.\n */\nexport const CABImageSection = CABImageSectionFields.superRefine(({ category, source }, ctx) => {\n if (category === 'icon' && source !== '' && !isIconName(source))\n ctx.addIssue({\n code: 'custom',\n message: 'icon-mode source must be an icon name',\n path: ['source'],\n });\n\n if (category !== 'icon' && isIconName(source))\n ctx.addIssue({\n code: 'custom',\n message: 'source must be a URL or dynamic token unless category is `icon`',\n path: ['source'],\n });\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "import { freezeEnum } from './common';\n\n/**\n * The checkout `s-icon` web-component `type` set, hand-mirrored from shopify.dev (checkout-ui-extensions \u2192\n * web-components \u2192 media-and-visuals \u2192 icon; api_version 2026-07). This is the Polaris `s-icon` surface \u2014\n * distinct from the legacy React `Icon` component's `CHECKOUT_AVAILABLE_ICONS`. The `image` section renders\n * one of these when `category: 'icon'` with `source` set to the name.\n *\n * Hand-maintained because `@shopify/ui-extensions` is not a dependency of this package. Safe against\n * staleness by USAGE, not a guard: icon-mode `source` values are CLIENT-ASSEMBLED from known constants, never\n * merchant/server data that gets strict-parsed \u2014 so an icon Shopify adds that this list lacks can't fail a\n * widget parse; it simply isn't a name we emit. If icon mode ever accepts external sources, add\n * `@shopify/ui-extensions` as a devDependency and replace this with a compile-time drift guard against its\n * icon type (in the spirit of the recursive-twins guard).\n */\nexport const iconNames = [\n 'alert-circle',\n 'alert-triangle',\n 'alert-triangle-filled',\n 'arrow-down',\n 'arrow-left',\n 'arrow-right',\n 'arrow-up',\n 'arrow-up-right',\n 'bag',\n 'bullet',\n 'calendar',\n 'camera',\n 'caret-down',\n 'cart',\n 'cash-dollar',\n 'categories',\n 'check',\n 'check-circle',\n 'check-circle-filled',\n 'chevron-down',\n 'chevron-left',\n 'chevron-right',\n 'chevron-up',\n 'circle',\n 'clipboard',\n 'clock',\n 'credit-card',\n 'delete',\n 'delivered',\n 'delivery',\n 'disabled',\n 'discount',\n 'edit',\n 'email',\n 'empty',\n 'external',\n 'filter',\n 'geolocation',\n 'gift-card',\n 'globe',\n 'grid',\n 'image',\n 'info',\n 'info-filled',\n 'list-bulleted',\n 'location',\n 'lock',\n 'map',\n 'menu',\n 'menu-horizontal',\n 'menu-vertical',\n 'minus',\n 'mobile',\n 'note',\n 'order',\n 'organization',\n 'plus',\n 'profile',\n 'question-circle',\n 'question-circle-filled',\n 'reorder',\n 'reset',\n 'return',\n 'savings',\n 'search',\n 'settings',\n 'star',\n 'star-filled',\n 'star-half',\n 'store',\n 'truck',\n 'upload',\n 'x',\n 'x-circle',\n 'x-circle-filled',\n] as const;\nexport const IconName = freezeEnum(iconNames);\nexport type IconName = (typeof iconNames)[number];\n\n/**\n * The `s-icon` `size` scale (same shopify.dev source as {@link iconNames}); component default is `base`.\n * Applies only to `image` sections in `icon` mode \u2014 an icon needs its own size knob (an image uses `width`,\n * a %, which is meaningless for a self-sizing icon). Absent \u21D2 the component's `base`.\n */\nexport const iconSizes = ['base', 'large', 'large-100', 'small', 'small-100', 'small-200'] as const;\nexport const IconSize = freezeEnum(iconSizes);\nexport type IconSize = (typeof iconSizes)[number];\n\n/**\n * The `s-icon` `tone` set (same shopify.dev source as {@link iconNames}); component default is `auto`. The\n * semantic color treatment of an `icon`-mode `image` \u2014 `custom` inherits the parent's CSS color. Absent \u21D2\n * the component's `auto`.\n */\nexport const iconTones = ['auto', 'critical', 'custom', 'info', 'neutral', 'success', 'warning'] as const;\nexport const IconTone = freezeEnum(iconTones);\nexport type IconTone = (typeof iconTones)[number];\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 /** Ads-taxonomy sub-vertical id (the widget's `sub_vertical` setting); paired with `vertical`. */\n subVertical: z.string().optional(),\n /** Ads-taxonomy vertical id (the widget's `vertical` setting) \u2014 with `subVertical`, the admin Monetize editor's two configurables. */\n vertical: z.string().optional(),\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 (onsite `filter_oos_variants`): when set, the client drops this\n * tier entirely once its gift has NO in-stock eligible variant \u2014 the milestone, fill slot and gift\n * controls all disappear, mirroring onsite removing the tier from `bar.tiers` before it renders. Absent\n * on shipping/discount/decorative tiers and left off by default (the tier renders regardless of stock).\n */\n filterOosVariants: z.boolean().default(false),\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 \u2014 'Free Shipping' or '{n}% Discount'. A PRODUCT tier gets NO converter label: its name is\n * the gift PRODUCT title, which the converter can't supply (config carries only product IDs), so the\n * client resolves it (authoritative Shopify title, React parity) with its own localized generic fallback.\n * Localized content; absent OR blank \u21D2 no label under the tier's icon (the converter's `toTierMeta` already\n * turns a blank label into an absent key, and a client-authored blank means the same thing \u2014 the renderer\n * emits no caption slot rather than an empty one). Plain text \u2014 a compact icon+label.\n */\n label: z.record(z.string(), z.string()).optional(),\n /**\n * Smart-cart product (gift) tiers only (onsite `product_tier_image`): show the gift's product image in\n * the step-row slot instead of the generic bag icon. The converter can't supply the image URL (config\n * carries only product IDs), so the client resolves it (authoritative Shopify featured image, React\n * parity) and falls back to the bag icon when the flag is off or no image resolves. Default false.\n */\n productTierImage: z.boolean().default(false),\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}}` (a raw `Intl`-localized count for `item` tiers, money for `currency` tiers)\n * each resolve in their own tier's unit \u2014 cross-tier arithmetic never mixes counts with cents. The\n * count carries no injected noun (no English `item`/`items` inflection on localized copy); merchant\n * template text supplies grammatically-neutral wording around the token.\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 /**\n * The onsite bar id (smart-cart TPB bars only). The client mirrors it to the cart's `_barId` attribute\n * so the product-discount / order-discount Functions can locate this bar's tier config (they key the\n * TPB metafield by bar id). Onsite writes `_barId` in the storefront drawer; a Buy-Now / headless\n * checkout reaches the extension without it, so the client writes it or the tier gift's 100% discount\n * (and any tier order discount) never applies. Absent on the v1 shipping bar (no gift tiers, no id).\n */\n barId: z.string().optional(),\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 the merchant's CONFIGURED order \u2014 the renderer does NOT sort them (022\n * O-B2: sorting by resolved threshold reversed configured milestones on out-of-order or mixed-unit\n * count-vs-cents bars). Drives the fill (even slot per tier) and, for smart-cart product tiers, the\n * gift add/remove. The visual tier 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 barId?: string;\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\n/**\n * The v1 Monetize (standalone `ui_extension_ad`) widget settings the CAB converter reads \u2014 the marker\n * fields only. The legacy payload carries the full onsite settings bag; everything the stub tree doesn't\n * need is left undeclared and ignored. Engine nulls are declared (`name: null` is the stored shape for an\n * unnamed widget), so the converter can fold them to the schema's optional-absent.\n */\nexport const RebuyMonetizeV1 = z.object({\n name: z.string().nullable().optional(),\n previewMode: z.boolean().optional(),\n /** Privacy Policy footer href \u2192 the marker section's `privacyPolicyUrl`. */\n privacyPolicyUrl: z.string().nullable().optional(),\n /** Ads-taxonomy sub-vertical id \u2014 one of the admin Monetize editor's two configurables. */\n subVertical: z.string().nullable().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_ad).default(WidgetType.ui_extension_ad),\n version: z.literal(1),\n /** Ads-taxonomy vertical id \u2014 one of the admin Monetize editor's two configurables. */\n vertical: z.string().nullable().optional(),\n});\n\nexport type RebuyMonetize = z.infer<typeof RebuyMonetize>;\nexport type RebuyMonetizeV1 = z.infer<typeof RebuyMonetizeV1>;\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", "export const DEFAULT_KNOWN_TOKENS = ['firstName', 'lastName', 'email'] as const;\n\nconst escapeForRegex = (literal: string): string => literal.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * Rewrites legacy personalization tokens into the CAB-canonical `{{tokenName}}`\n * form expected by the client's `replaceVariables`. Specifically:\n *\n * - `{firstName}` (single brace) \u2192 `{{firstName}}`\n * - `{FirstName}` / `{FIRSTNAME}` (case variants) \u2192 `{{firstName}}`\n * - `{ firstName }` (internal whitespace) \u2192 `{{firstName}}`\n * - `{{firstName}}` (already canonical) \u2192 unchanged\n *\n * Pass `knownTokens` to control which names are normalized; anything not in the\n * list (e.g., an unrelated `{{foo}}` token) passes through untouched.\n */\nexport const normalizeTokens = (text: string, knownTokens: readonly string[] = DEFAULT_KNOWN_TOKENS): string => {\n if (typeof text !== 'string') return text;\n\n return knownTokens.reduce((acc, token) => {\n /**\n * Tokens standardize on camelCase; `_?` before each capital also matches the legacy snake_case\n * spelling ({remaining_amount} \u2192 {{remainingAmount}}).\n */\n const snakeTolerant = escapeForRegex(token).replace(/([A-Z])/g, '_?$1');\n const pattern = new RegExp(`\\\\{{1,2}\\\\s*${snakeTolerant}\\\\s*\\\\}{1,2}`, 'gi');\n\n return acc.replace(pattern, `{{${token}}}`);\n }, text);\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\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 /**\n * `normalizeTokens` canonicalizes legacy personalization tokens (`{FirstName}`/`{first_name}` \u2192\n * `{{firstName}}`) so the client resolves them \u2014 the header builds Tiptap directly, bypassing the\n * string-content normalization pass. Applied per truthy field (no extra branch); idempotent for\n * already-canonical callers.\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: normalizeTokens(superTitle),\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: normalizeTokens(title),\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: normalizeTokens(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';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\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 *\n * `knownTokens` canonicalizes legacy token GRAMMAR in the stored label (single-brace `{price}`,\n * case `{{Total}}`, snake `{subscription_discount}`, internal spaces \u2192 `{{camelCase}}`) so the strict\n * client interpolator resolves it \u2014 legacy's label regexes were 1-or-2-brace and case-insensitive.\n * Empty (the default) \u21D2 no-op, so callers that pass no list keep the pure verbatim passthrough.\n * This preserves the merchant's WORDING (only the token spelling is normalized), distinct from the\n * verbatim-label policy above.\n */\nexport const localizedContent = (\n defaults: Record<string, string>,\n override: string | undefined,\n knownTokens: readonly string[] = []\n) => {\n const trimmed = normalizeTokens(stripContentBlockHtml(override ?? '').trim(), knownTokens);\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 { normalizeTokens } from '~/transforms/normalizeTokens';\nimport { type V1OfferSettings, type V1TextStyle } from '~/transforms/offerV1/types';\n\n/** Legacy add-to-cart label tokens (`checkout-offers/useLanguage`): resolved in 1-or-2-brace, case-insensitive form. */\nconst ADD_LABEL_TOKENS = ['quantity', 'price', 'total'] as const;\n/** Switch/frequency label tokens (`line-item-editor/getStsButtonLabels` + the `subscriptionOption` template). */\nconst SWITCH_LABEL_TOKENS = ['subscriptionDiscount', 'frequency', 'interval'] as const;\n/** Quantity-error message tokens. */\nconst QUANTITY_ERROR_TOKENS = ['max', 'min', 'step'] as const;\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: normalizeTokens(quantity.maxError, QUANTITY_ERROR_TOKENS) }),\n ...(quantity.minError && { min: normalizeTokens(quantity.minError, QUANTITY_ERROR_TOKENS) }),\n ...(quantity.negativeError && { neg: normalizeTokens(quantity.negativeError, QUANTITY_ERROR_TOKENS) }),\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, SWITCH_LABEL_TOKENS),\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, ADD_LABEL_TOKENS),\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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACSO,SAAS,gBAAgB,K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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_es_toolkit", "import_uuid", "import_zod", "import_zod", "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
  }