@rebuy/rebuy 2.27.0 → 2.28.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 (58) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1352 -366
  4. package/dist/index.js.map +4 -4
  5. package/dist/index.mjs +1351 -365
  6. package/dist/index.mjs.map +4 -4
  7. package/dist/schema/checkout-and-beyond/constants.js +1 -0
  8. package/dist/schema/checkout-and-beyond/constants.js.map +2 -2
  9. package/dist/schema/checkout-and-beyond/constants.mjs +1 -0
  10. package/dist/schema/checkout-and-beyond/constants.mjs.map +2 -2
  11. package/dist/schema/checkout-and-beyond/index.js +285 -92
  12. package/dist/schema/checkout-and-beyond/index.js.map +4 -4
  13. package/dist/schema/checkout-and-beyond/index.mjs +285 -92
  14. package/dist/schema/checkout-and-beyond/index.mjs.map +4 -4
  15. package/dist/schema/widget-data.js +165 -148
  16. package/dist/schema/widget-data.js.map +4 -4
  17. package/dist/schema/widget-data.mjs +165 -148
  18. package/dist/schema/widget-data.mjs.map +4 -4
  19. package/dist/schema/widgets/checkout-and-beyond/common.d.ts +2 -1
  20. package/dist/schema/widgets/checkout-and-beyond/common.d.ts.map +1 -1
  21. package/dist/schema/widgets/checkout-and-beyond/discount.d.ts +30 -0
  22. package/dist/schema/widgets/checkout-and-beyond/discount.d.ts.map +1 -0
  23. package/dist/schema/widgets/checkout-and-beyond/index.d.ts +2 -0
  24. package/dist/schema/widgets/checkout-and-beyond/index.d.ts.map +1 -1
  25. package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts +178 -0
  26. package/dist/schema/widgets/checkout-and-beyond/offerLabels.d.ts.map +1 -0
  27. package/dist/schema/widgets/checkout-and-beyond/shared.d.ts +2 -1
  28. package/dist/schema/widgets/checkout-and-beyond/shared.d.ts.map +1 -1
  29. package/dist/schema/widgets/checkout-and-beyond/utils.d.ts +2 -0
  30. package/dist/schema/widgets/checkout-and-beyond/utils.d.ts.map +1 -1
  31. package/dist/server/dataSourceResults.d.ts +18 -0
  32. package/dist/server/dataSourceResults.d.ts.map +1 -0
  33. package/dist/server/index.d.ts +6 -2
  34. package/dist/server/index.d.ts.map +1 -1
  35. package/dist/server/index.js +1162 -435
  36. package/dist/server/index.js.map +4 -4
  37. package/dist/server/index.mjs +1161 -434
  38. package/dist/server/index.mjs.map +4 -4
  39. package/dist/server/userConfig.d.ts +8 -0
  40. package/dist/server/userConfig.d.ts.map +1 -0
  41. package/dist/server/widgetSettings.d.ts.map +1 -1
  42. package/dist/transforms/index.d.ts +4 -0
  43. package/dist/transforms/index.d.ts.map +1 -1
  44. package/dist/transforms/index.js +1004 -81
  45. package/dist/transforms/index.js.map +4 -4
  46. package/dist/transforms/index.mjs +1004 -81
  47. package/dist/transforms/index.mjs.map +4 -4
  48. package/dist/transforms/offerV1/buildOfferTemplate.d.ts +13 -0
  49. package/dist/transforms/offerV1/buildOfferTemplate.d.ts.map +1 -0
  50. package/dist/transforms/offerV1/convertOfferToV2.d.ts +18 -0
  51. package/dist/transforms/offerV1/convertOfferToV2.d.ts.map +1 -0
  52. package/dist/transforms/offerV1/offerCard.d.ts +17 -0
  53. package/dist/transforms/offerV1/offerCard.d.ts.map +1 -0
  54. package/dist/transforms/offerV1/offerTemplateSeed.d.ts +339 -0
  55. package/dist/transforms/offerV1/offerTemplateSeed.d.ts.map +1 -0
  56. package/dist/transforms/offerV1/types.d.ts +145 -0
  57. package/dist/transforms/offerV1/types.d.ts.map +1 -0
  58. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../src/transforms/index.ts", "../../src/schema/widgets/checkout-and-beyond/image.ts", "../../src/schema/widgets/checkout-and-beyond/common.ts", "../../src/schema/widgets/checkout-and-beyond/regex.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/layout.ts", "../../src/schema/widgets/checkout-and-beyond/button.ts", "../../src/schema/widgets/checkout-and-beyond/text.ts", "../../src/schema/widgets/checkout-and-beyond/utils.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/constants.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/monetize.ts", "../../src/schema/widgets/checkout-and-beyond/progressBar.ts", "../../src/schema/widgets/checkout-and-beyond/quantity.ts", "../../src/schema/widgets/checkout-and-beyond/reviews.ts", "../../src/schema/widgets/checkout-and-beyond/variants.ts", "../../src/transforms/contentBlockV1/stripContentBlockHtml.ts", "../../src/transforms/contentBlockV1/convertTextToTiptapParagraph.ts", "../../src/transforms/contentBlockV1/types.ts", "../../src/transforms/contentBlockV1/convertContentBlockImageToV2.ts", "../../src/transforms/contentBlockV1/convertContentBlockTextToV2.ts", "../../src/schema/widgets/checkout-and-beyond/root.ts", "../../src/transforms/contentBlockV1/convertContentBlockToV2.ts", "../../src/transforms/convertNumericObjects.ts", "../../src/transforms/deepCamelCase.ts", "../../src/transforms/htmlToTiptap/buildDefaultTextStyleMark.ts", "../../src/transforms/htmlToTiptap/closeTag.ts", "../../src/transforms/htmlToTiptap/constants.ts", "../../src/transforms/htmlToTiptap/makeParagraph.ts", "../../src/transforms/htmlToTiptap/flushParagraph.ts", "../../src/transforms/htmlToTiptap/isSkipping.ts", "../../src/transforms/htmlToTiptap/makeDoc.ts", "../../src/transforms/htmlToTiptap/isValidHref.ts", "../../src/transforms/htmlToTiptap/buildLinkMark.ts", "../../src/transforms/htmlToTiptap/decodeEntities.ts", "../../src/transforms/htmlToTiptap/parseAttribs.ts", "../../src/transforms/htmlToTiptap/openTag.ts", "../../src/transforms/htmlToTiptap/pushText.ts", "../../src/transforms/htmlToTiptap/stripHtmlComments.ts", "../../src/transforms/htmlToTiptap/htmlToTiptap.ts", "../../src/transforms/isCABRootSection.ts", "../../src/schema/widgets/checkout-and-beyond/switchLabels.ts", "../../src/transforms/lineItemEditorV1/convertLineItemEditorToV2.ts", "../../src/transforms/lineItemEditorV1/types.ts", "../../src/transforms/normalizeTokens.ts", "../../src/transforms/normalizeTextContent.ts", "../../src/transforms/parseShielded.ts"],
4
- "sourcesContent": ["export { convertContentBlockImageToV2 } from '~/transforms/contentBlockV1/convertContentBlockImageToV2';\nexport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nexport { convertContentBlockToV2 } from '~/transforms/contentBlockV1/convertContentBlockToV2';\nexport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\n\nexport {\n CONTENT_BLOCK_MAX_IMAGE_WIDTH,\n isContentBlockV1,\n SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n type V1ConvertInput,\n type V1ImageBlock,\n type V1ImagePlacement,\n type V1Language,\n type V1Settings,\n} from '~/transforms/contentBlockV1/types';\n\nexport { convertNumericObjects } from '~/transforms/convertNumericObjects';\nexport { deepCamelCase, type DeepCamelCase, type ToCamelCase } from '~/transforms/deepCamelCase';\nexport { htmlToTiptap, type HtmlToTiptapOptions } from '~/transforms/htmlToTiptap/htmlToTiptap';\nexport { isCABRootSection } from '~/transforms/isCABRootSection';\nexport { convertLineItemEditorToV2 } from '~/transforms/lineItemEditorV1/convertLineItemEditorToV2';\nexport { isLineItemEditorV1, type V1LineItemEditorConvertInput } from '~/transforms/lineItemEditorV1/types';\nexport { normalizeTextContent } from '~/transforms/normalizeTextContent';\nexport { normalizeTokens } from '~/transforms/normalizeTokens';\nexport { parseShielded } from '~/transforms/parseShielded';\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\n\nimport { buttonFields, ObjectFit, objectFits, SectionType } from './common';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nexport const CABImageSection = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n aspectRatio: z.literal(1).nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n category: z.enum(['gallery', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n name: z.string().optional(),\n naturalHeight: z.number().default(0),\n naturalWidth: z.number().default(0),\n /**\n * `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and\n * `cover` would crop non-square art (payment badges lost their edges \u2014 15993); `contain` letterboxes.\n */\n objectFit: z.enum(objectFits).default(ObjectFit.contain),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.image).default(SectionType.image),\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(''),\n width: z.number().default(100),\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "export const freezeEnum = <T extends readonly string[]>(values: T) =>\n Object.freeze(Object.fromEntries(values.map((v) => [v, v]))) as { readonly [K in T[number]]: K };\n\nexport const bannerColors = ['info', 'success', 'warning', 'critical'] as const;\nexport const BannerColor = freezeEnum(bannerColors);\nexport type BannerColor = (typeof bannerColors)[number];\n\nexport const borderRadii = ['none', 'small', 'base', 'large', 'fullyRounded'] as const;\nexport const BorderRadius = freezeEnum(borderRadii);\nexport type BorderRadius = (typeof borderRadii)[number];\n\nexport const borderStyles = ['none', 'base', 'dotted', 'dashed'] as const;\nexport const BorderStyle = freezeEnum(borderStyles);\nexport type BorderStyle = (typeof borderStyles)[number];\n\nexport const borderWidths = ['base', 'medium', 'thick'] as const;\nexport const BorderWidth = freezeEnum(borderWidths);\nexport type BorderWidth = (typeof borderWidths)[number];\n\nexport const buttonActions = [\n 'acceptOffer',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromCart',\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 'removeFromCart',\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 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 '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", "/** 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/** Matches any HTML tags. */\nexport const HTML_TAGS_REGEX = /<\\/?[^>]+>/g;\n", "import { z } from 'zod/v4';\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/v4';\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 { 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 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 | 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/v4';\n\nimport { bannerColors, buttonFields, SectionType, type BannerColor } from './common';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABBannerSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n buttonField: z.enum(buttonFields).optional(),\n color: z.enum(bannerColors).default('info'),\n dismissible: z.boolean().default(true),\n sectionType: z.literal(SectionType.banner).default(SectionType.banner),\n })\n);\n\nexport type CABBannerSection = Omit<CABLayoutSection, 'sectionType'> & {\n color: BannerColor;\n dismissible: boolean;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod/v4';\n\nimport {\n buttonActions,\n ButtonStyle,\n buttonStyles,\n PopoverPosition,\n popoverPositions,\n SectionType,\n TextAlignment,\n textAlignments,\n} from './common';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { HEX_COLOR_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABButtonContent = CABImageSection | CABLayoutSection | CABTextSection;\n\nexport const CABButtonContent: ZodType<CABButtonContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABImageSection, CABLayoutSection, CABTextSection])\n);\n\nexport const CABButtonSection = z.object({\n action: z.union([z.literal(''), z.enum(buttonActions)]).default(''),\n buttonStyle: z.enum(buttonStyles).default(ButtonStyle.primary),\n custom: z\n .object({\n color: z.string().regex(HEX_COLOR_REGEX).default('#005bd3'),\n height: z.number().default(52),\n width: z.number().default(300),\n })\n .default({\n color: '#005bd3',\n height: 52,\n width: 300,\n }),\n disableDowngrade: z.boolean().default(false),\n name: z.string().optional(),\n optionId: z.number().optional(),\n popover: z\n .object({\n alignment: z.enum(textAlignments).default(TextAlignment.center),\n position: z.enum(popoverPositions).default(PopoverPosition.blockStart),\n })\n .optional()\n .default(() => ({\n alignment: TextAlignment.center,\n position: PopoverPosition.blockStart,\n })),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABButtonContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.button).default(SectionType.button),\n /** Fire-and-forget pixel POSTed when the button is clicked (e.g. a Monetize decline). */\n trackingUrl: z.string().optional(),\n});\n\nexport type CABButtonSection = z.infer<typeof CABButtonSection>;\n\nexport type CABButtonSectionProps = CABButtonSection & SectionDetails;\n", "import { forEach, isString } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 } 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([z.url(), z.literal('#'), z.string().regex(DYNAMIC_TOKEN_REGEX)]),\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\nexport const CABProgressTier = z.object({\n threshold: z.number().int().nonnegative(),\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n});\n\nexport type CABProgressTier = z.infer<typeof CABProgressTier>;\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: CABProgressTier.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 { 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 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 return HTML_TAGS_REGEX.test(html);\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 isImageType = (section: unknown): section is CABImageSection =>\n get(section, 'sectionType') === SectionType.image;\n\nexport const isLayoutType = (section: unknown): section is CABLayoutSection =>\n get(section, 'sectionType') === SectionType.layout;\n\nexport const isMonetizeType = (section: unknown): section is CABMonetizeSection =>\n get(section, 'sectionType') === SectionType.monetize;\n\nexport const isOffersType = (section: unknown): section is CABOffersSection =>\n get(section, 'sectionType') === SectionType.offers;\n\nexport const isOverlayType = (section: unknown): section is CABLayoutSection =>\n isLayoutType(section) && get(section, 'buttonField') === ButtonField.overlayContent;\n\nexport const isProductType = (section: unknown): section is CABProductSection =>\n get(section, 'sectionType') === SectionType.product;\n\nexport const isProductsType = (section: unknown): section is CABProductsSection =>\n get(section, 'sectionType') === SectionType.products;\n\nexport const isProgressBarType = (section: unknown): section is CABProgressBarSection =>\n get(section, 'sectionType') === SectionType.progressBar;\n\nexport const isQuantityType = (section: unknown): section is CABQuantitySection =>\n get(section, 'sectionType') === SectionType.quantity;\n\nexport const isReviewsType = (section: unknown): section is CABReviewsSection =>\n get(section, 'sectionType') === SectionType.reviews;\n\nexport const isTextType = (section: unknown): section is CABTextSection =>\n get(section, 'sectionType') === SectionType.text;\n\nexport const isVariantsType = (section: unknown): section is CABVariantsSection =>\n get(section, 'sectionType') === SectionType.variants;\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>) =>\n !!size(input) && every(input, (_, key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)));\n\nconst numericObjectToArray = (input: Record<string, unknown>) =>\n toPairs(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([_, value]) => value);\n\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (isArray(input)) return map(input, convertNumericObjects);\n\n if (isPlainObject(input)) {\n const obj = input as Record<string, unknown>;\n\n return hasOnlyNumericKeys(obj)\n ? map(numericObjectToArray(obj), convertNumericObjects)\n : mapValues(obj, convertNumericObjects);\n }\n\n return input;\n};\n", "import { z } from 'zod/v4';\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/v4';\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/v4';\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 treatAsGwp: z.boolean().default(false),\n});\n\nexport type CABDataSourceSection = z.infer<typeof CABDataSourceSection>;\n\nexport type CABDataSourceSectionProps = CABDataSourceSection & SectionDetails;\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", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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/v4';\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/v4';\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/v4';\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 rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.monetize).default(SectionType.monetize),\n});\n\nexport type CABMonetizeSection = z.infer<typeof CABMonetizeSection>;\n\nexport type CABMonetizeSectionProps = CABMonetizeSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\n\nimport { SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport const CABProgressBarSection = z.object({\n /** Empty = shown everywhere; otherwise uppercase ISO country codes. */\n countryCodes: z.array(z.string()).default(() => []),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABTextSection), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.progressBar).default(SectionType.progressBar),\n});\n\nexport type CABProgressBarSection = z.infer<typeof CABProgressBarSection>;\n\nexport type CABProgressBarSectionProps = CABProgressBarSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 max: z.string().optional(),\n min: z.string().optional(),\n neg: z.string().optional(),\n })\n )\n .default({\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: 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 name: z.string().optional(),\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/v4';\n\nimport { ReviewsSize, reviewsSizes, SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABReviewsSection = z.object({\n color: z.string().default('#fadb14'),\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", "import { slice } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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", "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", "/**\n * Minimal v1 content-block input types. The legacy `/widgets/settings` endpoint\n * returns the widget's settings object directly (no envelope), so the converter\n * input is just `{ id, settings }` \u2014 `name` / `owner` aren't in the upstream\n * response and would be set to schema defaults in the produced `CABRootSection`.\n */\n\nexport const SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK = 'ui_extension_content_block' as const;\n\n/** Pixel threshold above which an aside-placed image is forced to top placement. */\nexport const CONTENT_BLOCK_MAX_IMAGE_WIDTH = 560;\n\nexport type V1ImagePlacement = 'top' | 'right' | 'bottom' | 'left';\n\nexport type V1ImageBlock = {\n altText?: string | null;\n category?: string;\n description?: string | null;\n filename?: string;\n id: string;\n imagePlacement: V1ImagePlacement;\n imageSize: number;\n imageUrl: string;\n index?: number;\n textAlignment?: 'left' | 'center' | 'right';\n textSize?: string;\n};\n\nexport type V1Language = {\n description?: string;\n superTitle?: string;\n title?: string;\n};\n\nexport type V1Settings = {\n blockSpacing?: string;\n imageBlocks?: V1ImageBlock[];\n imageLayout?: 'row' | 'column';\n language?: V1Language;\n location?: 'checkout' | 'order-status' | 'thank-you';\n previewMode?: boolean;\n type: typeof SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK;\n version: 1;\n};\n\nexport type V1ConvertInput = {\n id: number;\n settings: V1Settings;\n};\n\nexport const isContentBlockV1 = (data: unknown): data is V1Settings => {\n if (!data || typeof data !== 'object') return false;\n\n const obj = data as Record<string, unknown>;\n\n return obj.version === 1 && obj.type === SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK;\n};\n", "import { CABImageSection } from '~/schema/widgets/checkout-and-beyond/image';\nimport { CABLayoutSection } from '~/schema/widgets/checkout-and-beyond/layout';\nimport { CABTextSection } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\nimport {\n CONTENT_BLOCK_MAX_IMAGE_WIDTH,\n type V1ImageBlock,\n type V1ImagePlacement,\n} from '~/transforms/contentBlockV1/types';\n\nconst V1_TO_CAB_ALIGN = { center: 'center', left: 'start', right: 'end' } as const;\n\n/**\n * When an aside-placed image hits the max width, the legacy renderer forces\n * placement to `top` so the description doesn't get squeezed into a zero-width\n * column. Replicate here so the v2 layout matches what the legacy React widget\n * actually displayed.\n */\nconst resolveEffectivePlacement = (placement: V1ImagePlacement, imageSize: number): V1ImagePlacement => {\n const isAside = placement === 'left' || placement === 'right';\n\n return imageSize >= CONTENT_BLOCK_MAX_IMAGE_WIDTH && isAside ? 'top' : placement;\n};\n\n/**\n * The divisor is the same constant the legacy renderer clamps at (560), so an\n * `imageSize = 560` block renders at 100% \u2014 matching the legacy behavior\n * where 560 was the full layout width.\n */\nconst widthPercentForImageSize = (imageSize: number): number =>\n Math.min(Math.round((imageSize / CONTENT_BLOCK_MAX_IMAGE_WIDTH) * 100), 100);\n\nexport const convertContentBlockImageToV2 = (block: V1ImageBlock): CABImageSection | CABLayoutSection => {\n const { altText, category, description, id, imagePlacement, imageSize, imageUrl, textAlignment, textSize } = block;\n const placement = resolveEffectivePlacement(imagePlacement, imageSize);\n\n const imageSection = CABImageSection.parse({\n altText: stripContentBlockHtml(altText ?? ''),\n category,\n sectionId: id,\n sectionType: 'image',\n source: imageUrl,\n width: widthPercentForImageSize(imageSize),\n });\n\n if (!description) return imageSection;\n\n const textSection = CABTextSection.parse({\n content: {\n en: {\n attrs: { blockSpacing: 'base' },\n content: [\n convertTextToTiptapParagraph({\n color: 'base',\n fontSize: textSize ?? 'base',\n text: description,\n textAlign: textAlignment ? V1_TO_CAB_ALIGN[textAlignment] : 'start',\n }),\n ],\n type: 'doc',\n },\n },\n sectionType: 'text',\n });\n\n return CABLayoutSection.parse({\n alignment: { horizontal: 'center', vertical: 'middle' },\n direction: placement === 'left' || placement === 'right' ? 'columns' : 'rows',\n sections:\n placement === 'left' || placement === 'top' ? [imageSection, textSection] : [textSection, imageSection],\n sectionType: 'layout',\n spacing: 'tight',\n });\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\n\nexport const convertContentBlockTextToV2 = (language: V1Language | undefined): TiptapDocument => {\n const description = language?.description;\n const superTitle = language?.superTitle;\n const title = language?.title;\n\n return TiptapDocument.parse({\n attrs: { blockSpacing: 'tight' },\n content: [\n superTitle\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'extraLarge',\n marks: [{ type: 'bold' }],\n text: superTitle,\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: title,\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: description,\n textAlign: 'center',\n })\n : null,\n ].filter((p): p is NonNullable<typeof p> => p !== null),\n type: 'doc',\n });\n};\n", "import { z } from 'zod/v4';\n\nimport { EditorMode, editorModes } from './common';\nimport { targetAreas, WidgetType, widgetTypes } from './constants';\nimport { CABLayoutSection } from './layout';\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\nexport const CABRootSection = CABLayoutSection.extend({\n editorMode: z.enum(editorModes).default(EditorMode.checkoutExtension),\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 version: z.literal(2).default(2),\n widgetId: z.number().nullable().default(null),\n});\n\nexport type CABRootSection = CABLayoutSection & {\n editorMode: EditorMode;\n previewMode: boolean;\n storeId: number | null;\n targetArea: TargetArea | null;\n tracking: CABTracking;\n type: WidgetType;\n version: number;\n widgetId: number | null;\n};\n", "import { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { convertContentBlockImageToV2 } from '~/transforms/contentBlockV1/convertContentBlockImageToV2';\nimport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nimport {\n SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n type V1ConvertInput,\n type V1Language,\n} from '~/transforms/contentBlockV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\nconst hasText = (language: V1Language | undefined): boolean =>\n !!language && !!(language.description || language.superTitle || language.title);\n\n/** Translates a v1 content-block widget into a fully-formed `CABRootSection`. */\nexport const convertContentBlockToV2 = ({ id, settings }: V1ConvertInput): CABRootSection => {\n const imageBlocks = settings.imageBlocks ?? [];\n\n return CABRootSection.parse({\n alignment: { horizontal: 'center', vertical: 'top' },\n direction: 'rows',\n editorMode: LOCATION_TO_EDITOR_MODE[settings.location ?? 'checkout'],\n previewMode: settings.previewMode,\n sections: [\n hasText(settings.language)\n ? {\n content: { en: convertContentBlockTextToV2(settings.language) },\n sectionType: 'text',\n }\n : null,\n imageBlocks.length > 0\n ? {\n // Legacy centers every image block (`InlineLayout inlineAlignment=\"center\"`).\n alignment: { horizontal: 'center', vertical: 'middle' },\n // Legacy: `image_layout === 'row' ? BlockStack : InlineStack` \u2014 an UNSET layout is\n // horizontal (columns), so only an explicit 'row' may stack vertically.\n direction: settings.imageLayout === 'row' ? 'rows' : 'columns',\n sections: imageBlocks.map(convertContentBlockImageToV2),\n sectionType: 'layout',\n spacing: settings.blockSpacing ?? 'extraTight',\n }\n : null,\n ].filter((section): section is NonNullable<typeof section> => section !== null),\n sectionType: 'layout',\n type: SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n version: 2,\n widgetId: id,\n });\n};\n", "const ARRAY_INDEX_STRING = /^(?:0|[1-9]\\d*)$/;\n\nconst isPlainObject = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object') return false;\n\n const proto = Object.getPrototypeOf(input) as object | null;\n\n return proto === Object.prototype || proto === null;\n};\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>): boolean => {\n const keys = Object.keys(input);\n\n if (keys.length === 0) return false;\n\n if (!keys.every((key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)))) return false;\n\n // Require the indices to form a complete `0..n-1` sequence \u2014 `{ \"10\": \"a\", \"20\": \"b\" }`\n // would otherwise silently collapse into `[\"a\", \"b\"]` and lose its original positions.\n const sorted = keys.map(Number).sort((a, b) => a - b);\n\n return sorted.every((n, i) => n === i);\n};\n\nconst numericObjectToArray = (input: Record<string, unknown>): unknown[] =>\n Object.entries(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([, value]) => value);\n\n/**\n * Recursively converts objects whose keys are a complete `0..n-1` sequence\n * (PHP-serialized \"sparse\" arrays) into real arrays. Everything else passes\n * through unchanged.\n */\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (Array.isArray(input)) return input.map(convertNumericObjects);\n\n if (isPlainObject(input)) {\n if (hasOnlyNumericKeys(input)) return numericObjectToArray(input).map(convertNumericObjects);\n\n const out: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(input)) out[key] = convertNumericObjects(value);\n\n return out;\n }\n\n return input;\n};\n", "const isPlainObject = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object') return false;\n\n const proto = Object.getPrototypeOf(input) as object | null;\n\n return proto === Object.prototype || proto === null;\n};\n\nconst camelCase = (key: string): string =>\n key.replace(/[-_\\s]+(.)?/g, (_, char: string | undefined) => (char ? char.toUpperCase() : ''));\n\nexport type ToCamelCase<S extends string> = S extends `${infer Head}_${infer Tail}` | `${infer Head}-${infer Tail}`\n ? `${Head}${Capitalize<ToCamelCase<Tail>>}`\n : S;\n\nexport type DeepCamelCase<T> = T extends (infer U)[]\n ? DeepCamelCase<U>[]\n : T extends object\n ? { [K in keyof T as ToCamelCase<K & string>]: DeepCamelCase<T[K]> }\n : T;\n\n/**\n * Recursively converts object keys to camelCase. Snake_case and kebab-case\n * are both handled; numeric array indices and primitives pass through\n * unchanged.\n *\n * Language keys used by the CAB schema (`text.content[<lang>]`, etc.) are\n * authored as plain lowercase tags (`en`, `de`, `fr`) by us \u2014 they have no\n * `_` or `-` to convert and survive camelCase as-is.\n */\nexport const deepCamelCase = <T>(input: T): DeepCamelCase<T> => {\n if (Array.isArray(input)) return input.map((item) => deepCamelCase(item)) as DeepCamelCase<T>;\n\n if (isPlainObject(input)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(input)) {\n out[camelCase(key)] = deepCamelCase(value);\n }\n\n return out as DeepCamelCase<T>;\n }\n\n return input as DeepCamelCase<T>;\n};\n", "import { type TextColorName, type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { type Mark } from '~/transforms/htmlToTiptap/types';\n\nexport const buildDefaultTextStyleMark = (\n style: { color?: TextColorName; fontSize?: TextSizeName } | undefined\n): Mark | null => {\n if (!style || (style.color === undefined && style.fontSize === undefined)) return null;\n\n return {\n attrs: {\n color: style.color ?? 'base',\n fontSize: style.fontSize ?? 'base',\n },\n type: 'textStyle',\n };\n};\n", "import { type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nexport const closeTag = (stack: StackEntry[], name: string): void => {\n for (let index = stack.length - 1; index >= 0; index--) {\n if (stack[index].tag === name) {\n stack.length = index;\n break;\n }\n }\n};\n", "export const TAG_RE = /<(\\/)?([a-zA-Z][a-zA-Z0-9]*)((?:\\s+[^>]*?)?)\\s*(\\/)?>/g;\n\n/**\n * Tags that introduce a paragraph break on both open and close. Container tags\n * like `ul`/`ol`/`dl` are intentionally NOT here \u2014 their child `li`/`dt`/`dd`\n * elements already break, and including the containers would double-flush.\n */\nexport const BLOCK_TAGS = new Set([\n 'article',\n 'aside',\n 'blockquote',\n 'dd',\n 'div',\n 'dt',\n 'figcaption',\n 'figure',\n 'footer',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'p',\n 'pre',\n 'section',\n]);\n", "import { TiptapParagraph, type TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const makeParagraph = (content: TiptapText[]): TiptapParagraph => TiptapParagraph.parse({ content });\n", "import { makeParagraph } from '~/transforms/htmlToTiptap/makeParagraph';\nimport { type State } from '~/transforms/htmlToTiptap/types';\n\nexport const flushParagraph = (state: State): void => {\n state.paragraphs.push(makeParagraph(state.currentRuns));\n state.currentRuns = [];\n};\n", "import { type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nexport const isSkipping = (stack: StackEntry[] = []): boolean => stack.some(({ skip }) => skip);\n", "import { type Spacing } from '~/schema/widgets/checkout-and-beyond/common';\nimport { TiptapDocument, type TiptapParagraph } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const makeDoc = (content: TiptapParagraph[], blockSpacing: Spacing): TiptapDocument =>\n TiptapDocument.parse({ attrs: { blockSpacing }, content });\n", "const DYNAMIC_TOKEN_REGEX = /^\\{\\{\\s*[A-Za-z]+\\s*\\}\\}$/;\n\n/**\n * Protocols we'll preserve on `<a href>` when converting HTML to Tiptap. Any URL\n * whose `URL.protocol` falls outside this set (e.g. `javascript:`, `data:`,\n * `file:`, `vbscript:`) is dropped from the link mark \u2014 the text content is\n * kept but the click target is not. Renderers downstream still get to do their\n * own validation, but the package shouldn't be the one preserving an XSS\n * payload through the conversion.\n */\nconst ALLOWED_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\n/**\n * Decides whether an `<a href>` value should survive HTML \u2192 Tiptap conversion\n * as a link mark. Allows `#`, dynamic `{{token}}` placeholders, and a fixed\n * allowlist of URL schemes; everything else (including `javascript:`, `data:`,\n * relative paths, and malformed URLs) drops the link mark while keeping the\n * surrounding text.\n *\n * @param href - Raw `href` attribute from the source HTML.\n *\n * @returns `true` if the URL should be preserved as a link mark.\n */\nexport const isValidHref = (href: string): boolean => {\n if (!href) return false;\n\n if (href === '#') return true;\n\n if (DYNAMIC_TOKEN_REGEX.test(href)) return true;\n\n try {\n const url = new URL(href);\n\n return ALLOWED_PROTOCOLS.has(url.protocol);\n } catch {\n return false;\n }\n};\n", "import { isValidHref } from '~/transforms/htmlToTiptap/isValidHref';\nimport { type Mark } from '~/transforms/htmlToTiptap/types';\n\n/**\n * The schema defaults for an `<a>` mark when the source HTML omits them. Match\n * `TiptapText` in `~/schema/widgets/checkout-and-beyond/text` so the sanitizer\n * resolves the same effective values the downstream parse would have used.\n */\nconst DEFAULT_TARGET = '_blank';\nconst DEFAULT_REL = 'noopener noreferrer nofollow';\n\n/**\n * Forces `noopener noreferrer` on every `_blank` link to defend against\n * reverse-tabnabbing (window.opener attacks). When the source omits `rel`\n * entirely, fall back to the schema default (`noopener noreferrer nofollow`).\n * When source `rel` is non-empty, preserve the existing tokens, drop `opener`,\n * and ensure the safe pair is present.\n *\n * Non-`_blank` targets pass through unchanged \u2014 they can't be tabnabbed.\n */\nconst ensureSafeRel = (rel: string, target: string): string => {\n if (target !== '_blank') return rel;\n\n const sourceTokens = (rel ?? '').split(/\\s+/).filter(Boolean);\n\n if (sourceTokens.length === 0) return DEFAULT_REL;\n\n const tokens = new Set(sourceTokens.filter((token) => token.toLowerCase() !== 'opener'));\n\n tokens.add('noopener');\n tokens.add('noreferrer');\n\n return Array.from(tokens).join(' ');\n};\n\nexport const buildLinkMark = (attrs: Record<string, string> = {}): Mark | null => {\n const { href } = attrs;\n\n if (!href || !isValidHref(href)) return null;\n\n // Resolve target BEFORE sanitizing rel so the safety guard sees the same\n // value the downstream schema parse will use.\n const target = attrs.target ?? DEFAULT_TARGET;\n\n return {\n attrs: {\n class: null,\n href,\n rel: ensureSafeRel(attrs.rel, target),\n target,\n },\n type: 'link',\n };\n};\n", "const NAMED_ENTITIES: Record<string, string> = {\n amp: '&',\n apos: \"'\",\n copy: '\u00A9',\n gt: '>',\n hellip: '\u2026',\n ldquo: '\u201C',\n lsquo: '\u2018',\n lt: '<',\n mdash: '\u2014',\n nbsp: ' ',\n ndash: '\u2013',\n quot: '\"',\n rdquo: '\u201D',\n reg: '\u00AE',\n rsquo: '\u2019',\n trade: '\u2122',\n} as const;\n\nexport const decodeEntities = (input: string = ''): string =>\n input.replace(/&(#x[\\da-f]+|#\\d+|[a-z][a-z\\d]*);/gi, (match, code: string) => {\n if (code[0] !== '#') return NAMED_ENTITIES[code.toLowerCase()] ?? match;\n\n const isHex = /^#x/i.test(code);\n const cp = parseInt(code.slice(isHex ? 2 : 1), isHex ? 16 : 10);\n\n return Number.isInteger(cp) && cp >= 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : match;\n });\n", "import { decodeEntities } from '~/transforms/htmlToTiptap/decodeEntities';\n\nconst ATTRIB_RE = /([a-zA-Z_:][\\w:.-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'`=<>]+)))?/g;\n\nexport const parseAttribs = (attrString: string): Record<string, string> => {\n const result: Record<string, string> = {};\n let match: RegExpExecArray | null;\n\n ATTRIB_RE.lastIndex = 0;\n\n while ((match = ATTRIB_RE.exec(attrString)) !== null) {\n result[match[1].toLowerCase()] = decodeEntities(match[2] ?? match[3] ?? match[4] ?? '');\n }\n\n return result;\n};\n", "import { type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { buildLinkMark } from '~/transforms/htmlToTiptap/buildLinkMark';\nimport { parseAttribs } from '~/transforms/htmlToTiptap/parseAttribs';\nimport { type Mark, type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nconst INLINE_MARK_TAGS: Record<string, 'bold' | 'italic' | 'strike'> = {\n b: 'bold',\n del: 'strike',\n em: 'italic',\n i: 'italic',\n s: 'strike',\n strike: 'strike',\n strong: 'bold',\n};\n\nconst HEADING_FONT_SIZE: Record<string, TextSizeName> = {\n h1: 'extraLarge',\n h2: 'large',\n h3: 'medium',\n h4: 'base',\n h5: 'small',\n h6: 'small',\n};\n\nconst STRIPPED_TAGS = ['embed', 'iframe', 'noscript', 'object', 'script', 'style', 'template'];\n\nconst marksForTag = (name: string, attrs: string): Mark[] => {\n if (INLINE_MARK_TAGS[name]) return [{ type: INLINE_MARK_TAGS[name] }];\n\n if (HEADING_FONT_SIZE[name]) {\n return [{ type: 'bold' }, { attrs: { color: 'base', fontSize: HEADING_FONT_SIZE[name] }, type: 'textStyle' }];\n }\n\n if (name === 'a') {\n const link = buildLinkMark(parseAttribs(attrs));\n\n return link ? [link] : [];\n }\n\n return [];\n};\n\nexport const openTag = (stack: StackEntry[], name: string, attrs: string): void => {\n stack.push({\n marks: marksForTag(name, attrs),\n skip: STRIPPED_TAGS.includes(name),\n tag: name,\n });\n};\n", "import { TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\n\nimport { decodeEntities } from '~/transforms/htmlToTiptap/decodeEntities';\nimport { flushParagraph } from '~/transforms/htmlToTiptap/flushParagraph';\nimport { isSkipping } from '~/transforms/htmlToTiptap/isSkipping';\nimport { type Mark, type State } from '~/transforms/htmlToTiptap/types';\n\nexport const pushText = (state: State, rawText: string): void => {\n if (!rawText || isSkipping(state.stack)) return;\n\n decodeEntities(rawText)\n .split('\\n')\n .forEach((segment, index) => {\n if (index > 0) flushParagraph(state);\n\n if (!segment) return;\n\n const marks: Mark[] = state.stack.flatMap((entry) => entry.marks);\n\n if (state.defaultTextStyleMark && !marks.some((mark) => mark.type === 'textStyle')) {\n marks.push(state.defaultTextStyleMark);\n }\n\n state.currentRuns.push(TiptapText.parse(marks.length > 0 ? { marks, text: segment } : { text: segment }));\n });\n};\n", "const HTML_COMMENT_RE = /<!--[\\s\\S]*?-->/g;\n\nexport const stripHtmlComments = (html: string = ''): string => html.replace(HTML_COMMENT_RE, '');\n", "import { type Spacing, type TextColorName, type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { type TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { buildDefaultTextStyleMark } from '~/transforms/htmlToTiptap/buildDefaultTextStyleMark';\nimport { closeTag } from '~/transforms/htmlToTiptap/closeTag';\nimport { BLOCK_TAGS, TAG_RE } from '~/transforms/htmlToTiptap/constants';\nimport { flushParagraph } from '~/transforms/htmlToTiptap/flushParagraph';\nimport { isSkipping } from '~/transforms/htmlToTiptap/isSkipping';\nimport { makeDoc } from '~/transforms/htmlToTiptap/makeDoc';\nimport { makeParagraph } from '~/transforms/htmlToTiptap/makeParagraph';\nimport { openTag } from '~/transforms/htmlToTiptap/openTag';\nimport { pushText } from '~/transforms/htmlToTiptap/pushText';\nimport { stripHtmlComments } from '~/transforms/htmlToTiptap/stripHtmlComments';\nimport { type State } from '~/transforms/htmlToTiptap/types';\n\nexport type HtmlToTiptapOptions = {\n blockSpacing?: Spacing;\n defaultTextStyle?: { color?: TextColorName; fontSize?: TextSizeName };\n};\n\nconst maybeFlushParagraph = (state: State): void => {\n if (state.currentRuns.length > 0) flushParagraph(state);\n};\n\nexport const htmlToTiptap = (html: string, options: HtmlToTiptapOptions = {}): TiptapDocument => {\n const state: State = {\n currentRuns: [],\n defaultTextStyleMark: buildDefaultTextStyleMark(options.defaultTextStyle),\n listStack: [],\n paragraphs: [],\n stack: [],\n };\n const blockSpacing = options.blockSpacing ?? 'base';\n\n if (typeof html !== 'string' || !html) return makeDoc([makeParagraph([])], blockSpacing);\n\n const htmlWithoutComments = stripHtmlComments(html);\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n TAG_RE.lastIndex = 0;\n\n while ((match = TAG_RE.exec(htmlWithoutComments)) !== null) {\n const [full, slash, rawName, attrs, selfClose] = match;\n\n if (match.index > lastIndex) pushText(state, htmlWithoutComments.slice(lastIndex, match.index));\n\n lastIndex = match.index + full.length;\n\n const name = rawName.toLowerCase();\n\n if (slash) {\n closeTag(state.stack, name);\n\n if (name === 'ul' || name === 'ol') state.listStack.pop();\n\n if (BLOCK_TAGS.has(name) && !isSkipping(state.stack)) maybeFlushParagraph(state);\n } else if (name === 'br') {\n if (!isSkipping(state.stack)) flushParagraph(state);\n } else if (name === 'hr') {\n if (!isSkipping(state.stack)) {\n maybeFlushParagraph(state);\n pushText(state, '\u2014\u2014\u2014');\n flushParagraph(state);\n }\n } else if (!selfClose) {\n if (BLOCK_TAGS.has(name) && !isSkipping(state.stack)) maybeFlushParagraph(state);\n\n if (name === 'ul' || name === 'ol') state.listStack.push({ counter: 0, ordered: name === 'ol' });\n\n openTag(state.stack, name, attrs);\n\n if (name === 'li' && state.listStack.length > 0) {\n const top = state.listStack[state.listStack.length - 1]!;\n\n if (top.ordered) top.counter += 1;\n\n pushText(state, top.ordered ? `${top.counter}. ` : '\u2022 ');\n }\n }\n }\n\n if (lastIndex < htmlWithoutComments.length) pushText(state, htmlWithoutComments.slice(lastIndex));\n\n maybeFlushParagraph(state);\n\n if (state.paragraphs.length === 0) flushParagraph(state);\n\n return makeDoc(state.paragraphs, blockSpacing);\n};\n", "/**\n * True when the input has `version === 2` \u2014 the marker for a current-generation\n * Checkout-and-Beyond root section. The transformer for CAB (`CABRootSection.parse`)\n * should ONLY run on values that pass this check; v1 widget shapes either get\n * converted (e.g. via `convertContentBlockToV2`) or pass through unchanged.\n *\n * @param input - The post-camelCase, post-numeric-fix upstream payload.\n *\n * @returns `true` if `input.version === 2`, otherwise `false`.\n */\nexport const isCABRootSection = (input: unknown): boolean => {\n if (!input || typeof input !== 'object') return false;\n\n return (input as { version?: unknown }).version === 2;\n};\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 { WidgetType } from '~/schema/widgets/checkout-and-beyond/constants';\nimport { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { SWITCH_LABELS } from '~/schema/widgets/checkout-and-beyond/switchLabels';\nimport { type LineItemEditorSwitchLanguageV1 } from '~/schema/widgets/lineItemEditor';\nimport { type V1LineItemEditorConvertInput } from '~/transforms/lineItemEditorV1/types';\n\n/** The v1 `switchToSubscription.language` key that overrides each `buttonField`'s English label. */\nconst OVERRIDE_KEY = {\n subscriptionOption: 'subscriptionOptionLabel',\n switchToOneTimePurchase: 'downgradeToOneTimeLabel',\n switchToSubscriptionNoDiscount: 'upgradeToSubscriptionWithoutDiscountLabel',\n switchToSubscriptionWithDiscount: 'upgradeToSubscriptionLabel',\n} as const satisfies Record<keyof typeof SWITCH_LABELS, keyof LineItemEditorSwitchLanguageV1>;\n\n/**\n * Translate a v1 line-item-editor widget into a `CABRootSection`: a `cartLine` section holding a\n * switch-to-subscription button, whose `buttonField`-tagged text labels use the shared localized\n * `SWITCH_LABELS` defaults with the v1 `switchToSubscription.language` value overriding `en` (same output the\n * admin editor produces, so runtime-converted and admin-migrated widgets render identically). The button is\n * omitted when the widget's switch is disabled.\n */\nconst BUTTON_KINDS = ['plain', 'primary', 'secondary'] as const;\n\nexport const convertLineItemEditorToV2 = ({ id, settings }: V1LineItemEditorConvertInput): CABRootSection => {\n const { switchToSubscription, switchToSubscriptionEnabled, tracking } = settings;\n const kind = settings.button?.kind;\n const buttonStyle = BUTTON_KINDS.includes(kind as (typeof BUTTON_KINDS)[number]) ? kind : 'plain';\n\n const labelSections = (Object.keys(SWITCH_LABELS) as (keyof typeof SWITCH_LABELS)[]).map((buttonField) => {\n // A defined v1 value ALWAYS passes through verbatim \u2014 even legacy's \"Upgrade/Downgrade\" defaults\n // saved into settings (product owner, 2026-07-02: existing widget language is never rewritten; the\n // neutral \"Switch to\u2026\" copy applies only as the default for blank values and new widgets). Blank /\n // whitespace falls back to the shared defaults (legacy `getLabelWithFallback` parity).\n const override = switchToSubscription?.language?.[OVERRIDE_KEY[buttonField]]?.trim();\n\n return {\n buttonField,\n content: override ? { ...SWITCH_LABELS[buttonField], en: override } : SWITCH_LABELS[buttonField],\n sectionType: 'text',\n };\n });\n\n return CABRootSection.parse({\n previewMode: settings.previewMode,\n sections: [\n {\n sections: switchToSubscriptionEnabled\n ? [\n {\n action: 'switchToSubscription',\n buttonStyle,\n disableDowngrade: switchToSubscription?.disableDowngrade ?? false,\n sections: labelSections,\n sectionType: 'button',\n },\n ]\n : [],\n sectionType: 'cartLine',\n },\n ],\n sectionType: 'layout',\n tracking: {\n enableAttribution: tracking?.enableAttribution ?? true,\n enableSource: tracking?.enableSource ?? true,\n enableWidget: tracking?.enableWidget ?? true,\n },\n type: WidgetType.ui_extension_line_item_editor,\n version: 2,\n widgetId: id,\n });\n};\n", "import { WidgetType } from '~/schema/widgets/checkout-and-beyond/constants';\nimport { type LineItemEditorV1 } from '~/schema/widgets/lineItemEditor';\n\n/**\n * The legacy `/widgets/settings` endpoint returns the widget's settings object directly (no envelope), so\n * the converter input is just `{ id, settings }` \u2014 the settings shape lives in the schema\n * (`LineItemEditorV1`) and is derived here, never re-declared.\n */\nexport type V1LineItemEditorConvertInput = {\n id: number;\n settings: LineItemEditorV1;\n};\n\n/** Identifies a v1 line-item-editor payload by version + type (mirrors `isContentBlockV1`). */\nexport const isLineItemEditorV1 = (data: unknown): data is LineItemEditorV1 => {\n if (!data || typeof data !== 'object') return false;\n\n const obj = data as Record<string, unknown>;\n\n return obj.version === 1 && obj.type === WidgetType.ui_extension_line_item_editor;\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 const pattern = new RegExp(`\\\\{{1,2}\\\\s*${escapeForRegex(token)}\\\\s*\\\\}{1,2}`, 'gi');\n\n return acc.replace(pattern, `{{${token}}}`);\n }, text);\n};\n", "import { htmlToTiptap } from '~/transforms/htmlToTiptap/htmlToTiptap';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\n\nconst HTML_TAG_RE = /<[a-zA-Z]/;\n\nconst containsHtml = (text: string): boolean => HTML_TAG_RE.test(text);\n\nconst isObject = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x);\n\nconst normalizeLangValue = (value: unknown): unknown => {\n if (typeof value !== 'string') return value;\n\n const tokenized = normalizeTokens(value);\n\n return containsHtml(tokenized) ? htmlToTiptap(tokenized) : tokenized;\n};\n\n/**\n * Walks an untyped CABRootSection-shaped object (post deepCamelCase, pre schema\n * parse) and rewrites `text` sections' `content[lang]` strings so that:\n *\n * - `{firstName}` (single brace) becomes `{{firstName}}` (canonical), and\n * - HTML-laden strings become a fully-formed `TiptapDocument`.\n *\n * Plain strings pass through unchanged. Non-text sections only recurse into\n * their `sections` array; Tiptap docs and other nested objects are not walked.\n */\nexport const normalizeTextContent = (node: unknown): unknown => {\n if (Array.isArray(node)) return node.map(normalizeTextContent);\n\n if (!isObject(node)) return node;\n\n if (node.sectionType === 'text' && isObject(node.content)) {\n const nextContent: Record<string, unknown> = {};\n\n for (const [lang, value] of Object.entries(node.content)) {\n nextContent[lang] = normalizeLangValue(value);\n }\n\n return { ...node, content: nextContent };\n }\n\n if (Array.isArray(node.sections)) {\n return { ...node, sections: node.sections.map(normalizeTextContent) };\n }\n\n return node;\n};\n", "import { type z } from 'zod/v4';\n\nimport { convertNumericObjects } from '~/transforms/convertNumericObjects';\nimport { deepCamelCase } from '~/transforms/deepCamelCase';\n\n/**\n * Runs the shielded-CDN response through the canonical pipeline:\n *\n * raw \u2192 deepCamelCase \u2192 convertNumericObjects \u2192 transform? \u2192 schema.parse\n *\n * `schema.parse` hydrates `.default(...)` values and surfaces any drift as a\n * ZodError. The optional `transform` step is for normalization that must run\n * before* validation \u2014 e.g. converting HTML-laden text content into Tiptap\n * documents (since the canonical CAB schema rejects HTML strings outright).\n *\n * @param schema - The canonical Zod schema to validate against.\n * @param raw - Untrusted upstream JSON.\n * @param transform - Optional pre-parse transform (defaults to identity).\n *\n * @returns The parsed-and-default-hydrated `z.infer<S>`.\n */\nexport const parseShielded = <S extends z.ZodType>(\n schema: S,\n raw: unknown,\n transform: (input: unknown) => unknown = (input) => input\n): z.infer<S> => schema.parse(transform(convertNumericObjects(deepCamelCase(raw))));\n"],
5
- "mappings": "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",
6
- "names": ["import_uuid", "import_v4", "import_v4", "import_v4", "import_v4", "uuidv7", "import_uuid", "import_v4", "import_compat", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "import_v4", "import_uuid", "import_v4", "import_es_toolkit", "uuidv7", "import_uuid", "import_v4", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_compat", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "ARRAY_INDEX_STRING", "isPlainObject", "isPlainObject", "DYNAMIC_TOKEN_REGEX", "HTML_COMMENT_RE", "HTML_TAG_RE"]
3
+ "sources": ["../../src/transforms/index.ts", "../../src/schema/widgets/checkout-and-beyond/image.ts", "../../src/schema/widgets/checkout-and-beyond/common.ts", "../../src/schema/widgets/checkout-and-beyond/regex.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/layout.ts", "../../src/schema/widgets/checkout-and-beyond/button.ts", "../../src/schema/widgets/checkout-and-beyond/text.ts", "../../src/schema/widgets/checkout-and-beyond/utils.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/constants.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/quantity.ts", "../../src/schema/widgets/checkout-and-beyond/reviews.ts", "../../src/schema/widgets/checkout-and-beyond/variants.ts", "../../src/transforms/contentBlockV1/stripContentBlockHtml.ts", "../../src/transforms/contentBlockV1/convertTextToTiptapParagraph.ts", "../../src/transforms/contentBlockV1/types.ts", "../../src/transforms/contentBlockV1/convertContentBlockImageToV2.ts", "../../src/transforms/contentBlockV1/convertContentBlockTextToV2.ts", "../../src/schema/widgets/checkout-and-beyond/root.ts", "../../src/transforms/contentBlockV1/convertContentBlockToV2.ts", "../../src/transforms/convertNumericObjects.ts", "../../src/transforms/deepCamelCase.ts", "../../src/transforms/htmlToTiptap/buildDefaultTextStyleMark.ts", "../../src/transforms/htmlToTiptap/closeTag.ts", "../../src/transforms/htmlToTiptap/constants.ts", "../../src/transforms/htmlToTiptap/makeParagraph.ts", "../../src/transforms/htmlToTiptap/flushParagraph.ts", "../../src/transforms/htmlToTiptap/isSkipping.ts", "../../src/transforms/htmlToTiptap/makeDoc.ts", "../../src/transforms/htmlToTiptap/isValidHref.ts", "../../src/transforms/htmlToTiptap/buildLinkMark.ts", "../../src/transforms/htmlToTiptap/decodeEntities.ts", "../../src/transforms/htmlToTiptap/parseAttribs.ts", "../../src/transforms/htmlToTiptap/openTag.ts", "../../src/transforms/htmlToTiptap/pushText.ts", "../../src/transforms/htmlToTiptap/stripHtmlComments.ts", "../../src/transforms/htmlToTiptap/htmlToTiptap.ts", "../../src/transforms/isCABRootSection.ts", "../../src/schema/widgets/checkout-and-beyond/switchLabels.ts", "../../src/transforms/lineItemEditorV1/convertLineItemEditorToV2.ts", "../../src/transforms/lineItemEditorV1/types.ts", "../../src/transforms/normalizeTokens.ts", "../../src/transforms/normalizeTextContent.ts", "../../src/transforms/offerV1/offerTemplateSeed.ts", "../../src/transforms/offerV1/types.ts", "../../src/transforms/offerV1/buildOfferTemplate.ts", "../../src/schema/widgets/checkout-and-beyond/offerLabels.ts", "../../src/transforms/offerV1/offerCard.ts", "../../src/transforms/offerV1/convertOfferToV2.ts", "../../src/transforms/parseShielded.ts"],
4
+ "sourcesContent": ["export { convertContentBlockImageToV2 } from '~/transforms/contentBlockV1/convertContentBlockImageToV2';\nexport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nexport { convertContentBlockToV2 } from '~/transforms/contentBlockV1/convertContentBlockToV2';\nexport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\n\nexport {\n CONTENT_BLOCK_MAX_IMAGE_WIDTH,\n isContentBlockV1,\n SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n type V1ConvertInput,\n type V1ImageBlock,\n type V1ImagePlacement,\n type V1Language,\n type V1Settings,\n} from '~/transforms/contentBlockV1/types';\n\nexport { convertNumericObjects } from '~/transforms/convertNumericObjects';\nexport { deepCamelCase, type DeepCamelCase, type ToCamelCase } from '~/transforms/deepCamelCase';\nexport { htmlToTiptap, type HtmlToTiptapOptions } from '~/transforms/htmlToTiptap/htmlToTiptap';\nexport { isCABRootSection } from '~/transforms/isCABRootSection';\nexport { convertLineItemEditorToV2 } from '~/transforms/lineItemEditorV1/convertLineItemEditorToV2';\nexport { isLineItemEditorV1, type V1LineItemEditorConvertInput } from '~/transforms/lineItemEditorV1/types';\nexport { normalizeTextContent } from '~/transforms/normalizeTextContent';\nexport { normalizeTokens } from '~/transforms/normalizeTokens';\nexport { buildOfferTemplate, type BuildOfferTemplateInput } from '~/transforms/offerV1/buildOfferTemplate';\nexport { convertOfferToV2 } from '~/transforms/offerV1/convertOfferToV2';\nexport { buildOfferCard } from '~/transforms/offerV1/offerCard';\n\nexport {\n isOfferV1,\n SHOPIFY_CHECKOUT_EXTENSION,\n type V1OfferConvertInput,\n type V1OfferSettings,\n} from '~/transforms/offerV1/types';\n\nexport { parseShielded } from '~/transforms/parseShielded';\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\n\nimport { buttonFields, ObjectFit, objectFits, SectionType } from './common';\nimport { DYNAMIC_TOKEN_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { CABBorder, type SectionDetails } from './shared';\nimport { checkForHTML, NO_HTML } from './utils';\n\nexport const CABImageSection = z.object({\n altText: z.string().refine(checkForHTML, NO_HTML).default(''),\n aspectRatio: z.literal(1).nullable().default(null),\n border: z.lazy(() => CABBorder),\n buttonField: z.enum(buttonFields).optional(),\n category: z.enum(['gallery', 'icons', 'payment-methods', 'secure-checkout']).nullable().default(null),\n name: z.string().optional(),\n naturalHeight: z.number().default(0),\n naturalWidth: z.number().default(0),\n /**\n * `contain` (the component default): dimensionless images render in s-image's 1/1 default frame, and\n * `cover` would crop non-square art (payment badges lost their edges \u2014 15993); `contain` letterboxes.\n */\n objectFit: z.enum(objectFits).default(ObjectFit.contain),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.image).default(SectionType.image),\n source: z.union([z.url(), z.literal(''), z.string().regex(DYNAMIC_TOKEN_REGEX)]).default(''),\n width: z.number().default(100),\n});\n\nexport type CABImageSection = z.infer<typeof CABImageSection>;\n\nexport type CABImageSectionProps = CABImageSection & SectionDetails;\n", "export const freezeEnum = <T extends readonly string[]>(values: T) =>\n Object.freeze(Object.fromEntries(values.map((v) => [v, v]))) as { readonly [K in T[number]]: K };\n\nexport const bannerColors = ['info', 'success', 'warning', 'critical'] as const;\nexport const BannerColor = freezeEnum(bannerColors);\nexport type BannerColor = (typeof bannerColors)[number];\n\nexport const borderRadii = ['none', 'small', 'base', 'large', 'fullyRounded'] as const;\nexport const BorderRadius = freezeEnum(borderRadii);\nexport type BorderRadius = (typeof borderRadii)[number];\n\nexport const borderStyles = ['none', 'base', 'dotted', 'dashed'] as const;\nexport const BorderStyle = freezeEnum(borderStyles);\nexport type BorderStyle = (typeof borderStyles)[number];\n\nexport const borderWidths = ['base', 'medium', 'thick'] as const;\nexport const BorderWidth = freezeEnum(borderWidths);\nexport type BorderWidth = (typeof borderWidths)[number];\n\nexport const buttonActions = [\n 'acceptOffer',\n 'addToOrder',\n 'declineAllOffers',\n 'declineOffer',\n 'displayContentInModal',\n 'displayContentInPopover',\n 'goToNextPage',\n 'goToPrevPage',\n 'goToURL',\n 'removeFromCart',\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 'removeFromCart',\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 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", "/** 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/** Matches any HTML tags. */\nexport const HTML_TAGS_REGEX = /<\\/?[^>]+>/g;\n", "import { z } from 'zod/v4';\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/v4';\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/v4';\n\nimport { bannerColors, buttonFields, SectionType, type BannerColor } from './common';\nimport { CABLayoutSection } from './layout';\nimport { type SectionDetails } from './shared';\n\nexport const CABBannerSection = z.lazy(() =>\n CABLayoutSection.omit({ sectionType: true }).extend({\n buttonField: z.enum(buttonFields).optional(),\n color: z.enum(bannerColors).default('info'),\n dismissible: z.boolean().default(true),\n sectionType: z.literal(SectionType.banner).default(SectionType.banner),\n })\n);\n\nexport type CABBannerSection = Omit<CABLayoutSection, 'sectionType'> & {\n color: BannerColor;\n dismissible: boolean;\n sectionType: 'banner';\n};\n\nexport type CABBannerSectionProps = CABBannerSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 { v7 as uuidv7 } from 'uuid';\nimport { z, type ZodType } from 'zod/v4';\n\nimport {\n buttonActions,\n ButtonStyle,\n buttonStyles,\n PopoverPosition,\n popoverPositions,\n SectionType,\n TextAlignment,\n textAlignments,\n} from './common';\nimport { CABImageSection } from './image';\nimport { CABLayoutSection } from './layout';\nimport { HEX_COLOR_REGEX } from './regex';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport type CABButtonContent = CABImageSection | CABLayoutSection | CABTextSection;\n\nexport const CABButtonContent: ZodType<CABButtonContent> = z.lazy(() =>\n z.discriminatedUnion('sectionType', [CABImageSection, CABLayoutSection, CABTextSection])\n);\n\nexport const CABButtonSection = z.object({\n action: z.union([z.literal(''), z.enum(buttonActions)]).default(''),\n buttonStyle: z.enum(buttonStyles).default(ButtonStyle.primary),\n custom: z\n .object({\n color: z.string().regex(HEX_COLOR_REGEX).default('#005bd3'),\n height: z.number().default(52),\n width: z.number().default(300),\n })\n .default({\n color: '#005bd3',\n height: 52,\n width: 300,\n }),\n disableDowngrade: z.boolean().default(false),\n name: z.string().optional(),\n optionId: z.number().optional(),\n popover: z\n .object({\n alignment: z.enum(textAlignments).default(TextAlignment.center),\n position: z.enum(popoverPositions).default(PopoverPosition.blockStart),\n })\n .optional()\n .default(() => ({\n alignment: TextAlignment.center,\n position: PopoverPosition.blockStart,\n })),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABButtonContent), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.button).default(SectionType.button),\n /** Fire-and-forget pixel POSTed when the button is clicked (e.g. a Monetize decline). */\n trackingUrl: z.string().optional(),\n});\n\nexport type CABButtonSection = z.infer<typeof CABButtonSection>;\n\nexport type CABButtonSectionProps = CABButtonSection & SectionDetails;\n", "import { forEach, isString } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 } 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([z.url(), z.literal('#'), z.string().regex(DYNAMIC_TOKEN_REGEX)]),\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\nexport const CABProgressTier = z.object({\n threshold: z.number().int().nonnegative(),\n thresholds: z.record(z.string(), z.number().int().nonnegative()).default(() => ({})),\n tierType: z.enum(progressTierTypes).default(ProgressTierType.shipping),\n});\n\nexport type CABProgressTier = z.infer<typeof CABProgressTier>;\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: CABProgressTier.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 { 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 return HTML_TAGS_REGEX.test(html);\n};\n\nexport const hasHTMLInDoc = (doc: TiptapDocument): boolean =>\n doc.content.some(({ content = [] }) => content.some(({ text }) => isHTML(text)));\n\nexport const checkForHTML = (input: string | TiptapDocument): boolean =>\n !((isString(input) && isHTML(input)) || (isPlainObject(input) && hasHTMLInDoc(input as TiptapDocument)));\n\nexport const NO_HTML = { message: 'HTML is not supported' };\n\nexport const isBannerType = (section: unknown): section is CABBannerSection =>\n get(section, 'sectionType') === SectionType.banner;\n\nexport const isButtonType = (section: unknown): section is CABButtonSection =>\n get(section, 'sectionType') === SectionType.button;\n\nexport const isCarouselType = (section: unknown): section is CABCarouselSection =>\n get(section, 'sectionType') === SectionType.carousel;\n\nexport const isCartLineType = (section: unknown): section is CABCartLineSection =>\n get(section, 'sectionType') === SectionType.cartLine;\n\nexport const isDataSourceType = (section: unknown): section is CABDataSourceSection =>\n get(section, 'sectionType') === SectionType.dataSource;\n\nexport const isDiscountType = (section: unknown): section is CABDiscountSection =>\n get(section, 'sectionType') === SectionType.discount;\n\nexport const isImageType = (section: unknown): section is CABImageSection =>\n get(section, 'sectionType') === SectionType.image;\n\nexport const isLayoutType = (section: unknown): section is CABLayoutSection =>\n get(section, 'sectionType') === SectionType.layout;\n\nexport const isMonetizeType = (section: unknown): section is CABMonetizeSection =>\n get(section, 'sectionType') === SectionType.monetize;\n\nexport const isOffersType = (section: unknown): section is CABOffersSection =>\n get(section, 'sectionType') === SectionType.offers;\n\nexport const isOverlayType = (section: unknown): section is CABLayoutSection =>\n isLayoutType(section) && get(section, 'buttonField') === ButtonField.overlayContent;\n\nexport const isProductType = (section: unknown): section is CABProductSection =>\n get(section, 'sectionType') === SectionType.product;\n\nexport const isProductsType = (section: unknown): section is CABProductsSection =>\n get(section, 'sectionType') === SectionType.products;\n\nexport const isProgressBarType = (section: unknown): section is CABProgressBarSection =>\n get(section, 'sectionType') === SectionType.progressBar;\n\nexport const isQuantityType = (section: unknown): section is CABQuantitySection =>\n get(section, 'sectionType') === SectionType.quantity;\n\nexport const isReviewsType = (section: unknown): section is CABReviewsSection =>\n get(section, 'sectionType') === SectionType.reviews;\n\nexport const isTextType = (section: unknown): section is CABTextSection =>\n get(section, 'sectionType') === SectionType.text;\n\nexport const isVariantsType = (section: unknown): section is CABVariantsSection =>\n get(section, 'sectionType') === SectionType.variants;\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>) =>\n !!size(input) && every(input, (_, key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)));\n\nconst numericObjectToArray = (input: Record<string, unknown>) =>\n toPairs(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([_, value]) => value);\n\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (isArray(input)) return map(input, convertNumericObjects);\n\n if (isPlainObject(input)) {\n const obj = input as Record<string, unknown>;\n\n return hasOnlyNumericKeys(obj)\n ? map(numericObjectToArray(obj), convertNumericObjects)\n : mapValues(obj, convertNumericObjects);\n }\n\n return input;\n};\n", "import { z } from 'zod/v4';\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/v4';\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/v4';\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 treatAsGwp: z.boolean().default(false),\n});\n\nexport type CABDataSourceSection = z.infer<typeof CABDataSourceSection>;\n\nexport type CABDataSourceSectionProps = CABDataSourceSection & SectionDetails;\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", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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/v4';\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/v4';\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/v4';\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/v4';\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 rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sectionType: z.literal(SectionType.monetize).default(SectionType.monetize),\n});\n\nexport type CABMonetizeSection = z.infer<typeof CABMonetizeSection>;\n\nexport type CABMonetizeSectionProps = CABMonetizeSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\n\nimport { SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\nimport { CABTextSection } from './text';\n\nexport const CABProgressBarSection = z.object({\n /** Empty = shown everywhere; otherwise uppercase ISO country codes. */\n countryCodes: z.array(z.string()).default(() => []),\n name: z.string().optional(),\n rule: CABRule.optional(),\n sectionId: z.uuid().default(() => uuidv7()),\n sections: z.union([z.array(CABTextSection), z.strictObject({}).transform(() => [])]).default(() => []),\n sectionType: z.literal(SectionType.progressBar).default(SectionType.progressBar),\n});\n\nexport type CABProgressBarSection = z.infer<typeof CABProgressBarSection>;\n\nexport type CABProgressBarSectionProps = CABProgressBarSection & SectionDetails;\n", "import { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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 max: z.string().optional(),\n min: z.string().optional(),\n neg: z.string().optional(),\n })\n )\n .default({\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: 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 name: z.string().optional(),\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/v4';\n\nimport { ReviewsSize, reviewsSizes, SectionType } from './common';\nimport { CABRule } from './rule';\nimport { type SectionDetails } from './shared';\n\nexport const CABReviewsSection = z.object({\n color: z.string().default('#fadb14'),\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", "import { slice } from 'es-toolkit/compat';\nimport { v7 as uuidv7 } from 'uuid';\nimport { z } from 'zod/v4';\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", "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", "/**\n * Minimal v1 content-block input types. The legacy `/widgets/settings` endpoint\n * returns the widget's settings object directly (no envelope), so the converter\n * input is just `{ id, settings }` \u2014 `name` / `owner` aren't in the upstream\n * response and would be set to schema defaults in the produced `CABRootSection`.\n */\n\nexport const SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK = 'ui_extension_content_block' as const;\n\n/** Pixel threshold above which an aside-placed image is forced to top placement. */\nexport const CONTENT_BLOCK_MAX_IMAGE_WIDTH = 560;\n\nexport type V1ImagePlacement = 'top' | 'right' | 'bottom' | 'left';\n\nexport type V1ImageBlock = {\n altText?: string | null;\n category?: string;\n description?: string | null;\n filename?: string;\n id: string;\n imagePlacement: V1ImagePlacement;\n imageSize: number;\n imageUrl: string;\n index?: number;\n textAlignment?: 'left' | 'center' | 'right';\n textSize?: string;\n};\n\nexport type V1Language = {\n description?: string;\n superTitle?: string;\n title?: string;\n};\n\nexport type V1Settings = {\n blockSpacing?: string;\n imageBlocks?: V1ImageBlock[];\n imageLayout?: 'row' | 'column';\n language?: V1Language;\n location?: 'checkout' | 'order-status' | 'thank-you';\n previewMode?: boolean;\n type: typeof SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK;\n version: 1;\n};\n\nexport type V1ConvertInput = {\n id: number;\n settings: V1Settings;\n};\n\nexport const isContentBlockV1 = (data: unknown): data is V1Settings => {\n if (!data || typeof data !== 'object') return false;\n\n const obj = data as Record<string, unknown>;\n\n return obj.version === 1 && obj.type === SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK;\n};\n", "import { CABImageSection } from '~/schema/widgets/checkout-and-beyond/image';\nimport { CABLayoutSection } from '~/schema/widgets/checkout-and-beyond/layout';\nimport { CABTextSection } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { stripContentBlockHtml } from '~/transforms/contentBlockV1/stripContentBlockHtml';\nimport {\n CONTENT_BLOCK_MAX_IMAGE_WIDTH,\n type V1ImageBlock,\n type V1ImagePlacement,\n} from '~/transforms/contentBlockV1/types';\n\nconst V1_TO_CAB_ALIGN = { center: 'center', left: 'start', right: 'end' } as const;\n\n/**\n * When an aside-placed image hits the max width, the legacy renderer forces\n * placement to `top` so the description doesn't get squeezed into a zero-width\n * column. Replicate here so the v2 layout matches what the legacy React widget\n * actually displayed.\n */\nconst resolveEffectivePlacement = (placement: V1ImagePlacement, imageSize: number): V1ImagePlacement => {\n const isAside = placement === 'left' || placement === 'right';\n\n return imageSize >= CONTENT_BLOCK_MAX_IMAGE_WIDTH && isAside ? 'top' : placement;\n};\n\n/**\n * The divisor is the same constant the legacy renderer clamps at (560), so an\n * `imageSize = 560` block renders at 100% \u2014 matching the legacy behavior\n * where 560 was the full layout width.\n */\nconst widthPercentForImageSize = (imageSize: number): number =>\n Math.min(Math.round((imageSize / CONTENT_BLOCK_MAX_IMAGE_WIDTH) * 100), 100);\n\nexport const convertContentBlockImageToV2 = (block: V1ImageBlock): CABImageSection | CABLayoutSection => {\n const { altText, category, description, id, imagePlacement, imageSize, imageUrl, textAlignment, textSize } = block;\n const placement = resolveEffectivePlacement(imagePlacement, imageSize);\n\n const imageSection = CABImageSection.parse({\n altText: stripContentBlockHtml(altText ?? ''),\n category,\n sectionId: id,\n sectionType: 'image',\n source: imageUrl,\n width: widthPercentForImageSize(imageSize),\n });\n\n if (!description) return imageSection;\n\n const textSection = CABTextSection.parse({\n content: {\n en: {\n attrs: { blockSpacing: 'base' },\n content: [\n convertTextToTiptapParagraph({\n color: 'base',\n fontSize: textSize ?? 'base',\n text: description,\n textAlign: textAlignment ? V1_TO_CAB_ALIGN[textAlignment] : 'start',\n }),\n ],\n type: 'doc',\n },\n },\n sectionType: 'text',\n });\n\n return CABLayoutSection.parse({\n alignment: { horizontal: 'center', vertical: 'middle' },\n direction: placement === 'left' || placement === 'right' ? 'columns' : 'rows',\n sections:\n placement === 'left' || placement === 'top' ? [imageSection, textSection] : [textSection, imageSection],\n sectionType: 'layout',\n spacing: 'tight',\n });\n};\n", "import { TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { convertTextToTiptapParagraph } from '~/transforms/contentBlockV1/convertTextToTiptapParagraph';\nimport { type V1Language } from '~/transforms/contentBlockV1/types';\n\nexport const convertContentBlockTextToV2 = (language: V1Language | undefined): TiptapDocument => {\n const description = language?.description;\n const superTitle = language?.superTitle;\n const title = language?.title;\n\n return TiptapDocument.parse({\n attrs: { blockSpacing: 'tight' },\n content: [\n superTitle\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'extraLarge',\n marks: [{ type: 'bold' }],\n text: superTitle,\n textAlign: 'center',\n })\n : null,\n title\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'medium',\n marks: [{ type: 'bold' }],\n text: title,\n textAlign: 'center',\n })\n : null,\n description\n ? convertTextToTiptapParagraph({\n color: 'base',\n fontSize: 'base',\n text: description,\n textAlign: 'center',\n })\n : null,\n ].filter((p): p is NonNullable<typeof p> => p !== null),\n type: 'doc',\n });\n};\n", "import { z } from 'zod/v4';\n\nimport { EditorMode, editorModes } from './common';\nimport { targetAreas, WidgetType, widgetTypes } from './constants';\nimport { CABLayoutSection } from './layout';\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\nexport const CABRootSection = CABLayoutSection.extend({\n editorMode: z.enum(editorModes).default(EditorMode.checkoutExtension),\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 version: z.literal(2).default(2),\n widgetId: z.number().nullable().default(null),\n});\n\nexport type CABRootSection = CABLayoutSection & {\n editorMode: EditorMode;\n previewMode: boolean;\n storeId: number | null;\n targetArea: TargetArea | null;\n tracking: CABTracking;\n type: WidgetType;\n version: number;\n widgetId: number | null;\n};\n", "import { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { convertContentBlockImageToV2 } from '~/transforms/contentBlockV1/convertContentBlockImageToV2';\nimport { convertContentBlockTextToV2 } from '~/transforms/contentBlockV1/convertContentBlockTextToV2';\nimport {\n SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n type V1ConvertInput,\n type V1Language,\n} from '~/transforms/contentBlockV1/types';\n\nconst LOCATION_TO_EDITOR_MODE = {\n checkout: 'checkoutExtension',\n 'order-status': 'orderStatusPage',\n 'thank-you': 'thankYouPage',\n} as const;\n\nconst hasText = (language: V1Language | undefined): boolean =>\n !!language && !!(language.description || language.superTitle || language.title);\n\n/** Translates a v1 content-block widget into a fully-formed `CABRootSection`. */\nexport const convertContentBlockToV2 = ({ id, settings }: V1ConvertInput): CABRootSection => {\n const imageBlocks = settings.imageBlocks ?? [];\n\n return CABRootSection.parse({\n alignment: { horizontal: 'center', vertical: 'top' },\n direction: 'rows',\n editorMode: LOCATION_TO_EDITOR_MODE[settings.location ?? 'checkout'],\n previewMode: settings.previewMode,\n sections: [\n hasText(settings.language)\n ? {\n content: { en: convertContentBlockTextToV2(settings.language) },\n sectionType: 'text',\n }\n : null,\n imageBlocks.length > 0\n ? {\n // Legacy centers every image block (`InlineLayout inlineAlignment=\"center\"`).\n alignment: { horizontal: 'center', vertical: 'middle' },\n // Legacy: `image_layout === 'row' ? BlockStack : InlineStack` \u2014 an UNSET layout is\n // horizontal (columns), so only an explicit 'row' may stack vertically.\n direction: settings.imageLayout === 'row' ? 'rows' : 'columns',\n sections: imageBlocks.map(convertContentBlockImageToV2),\n sectionType: 'layout',\n spacing: settings.blockSpacing ?? 'extraTight',\n }\n : null,\n ].filter((section): section is NonNullable<typeof section> => section !== null),\n sectionType: 'layout',\n type: SHOPIFY_CHECKOUT_EXTENSION_CONTENT_BLOCK,\n version: 2,\n widgetId: id,\n });\n};\n", "const ARRAY_INDEX_STRING = /^(?:0|[1-9]\\d*)$/;\n\nconst isPlainObject = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object') return false;\n\n const proto = Object.getPrototypeOf(input) as object | null;\n\n return proto === Object.prototype || proto === null;\n};\n\nconst hasOnlyNumericKeys = (input: Record<string, unknown>): boolean => {\n const keys = Object.keys(input);\n\n if (keys.length === 0) return false;\n\n if (!keys.every((key) => ARRAY_INDEX_STRING.test(key) && Number.isSafeInteger(Number(key)))) return false;\n\n // Require the indices to form a complete `0..n-1` sequence \u2014 `{ \"10\": \"a\", \"20\": \"b\" }`\n // would otherwise silently collapse into `[\"a\", \"b\"]` and lose its original positions.\n const sorted = keys.map(Number).sort((a, b) => a - b);\n\n return sorted.every((n, i) => n === i);\n};\n\nconst numericObjectToArray = (input: Record<string, unknown>): unknown[] =>\n Object.entries(input)\n .sort(([a], [b]) => Number(a) - Number(b))\n .map(([, value]) => value);\n\n/**\n * Recursively converts objects whose keys are a complete `0..n-1` sequence\n * (PHP-serialized \"sparse\" arrays) into real arrays. Everything else passes\n * through unchanged.\n */\nexport const convertNumericObjects = (input: unknown): unknown => {\n if (Array.isArray(input)) return input.map(convertNumericObjects);\n\n if (isPlainObject(input)) {\n if (hasOnlyNumericKeys(input)) return numericObjectToArray(input).map(convertNumericObjects);\n\n const out: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(input)) out[key] = convertNumericObjects(value);\n\n return out;\n }\n\n return input;\n};\n", "const isPlainObject = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object') return false;\n\n const proto = Object.getPrototypeOf(input) as object | null;\n\n return proto === Object.prototype || proto === null;\n};\n\nconst camelCase = (key: string): string =>\n key.replace(/[-_\\s]+(.)?/g, (_, char: string | undefined) => (char ? char.toUpperCase() : ''));\n\nexport type ToCamelCase<S extends string> = S extends `${infer Head}_${infer Tail}` | `${infer Head}-${infer Tail}`\n ? `${Head}${Capitalize<ToCamelCase<Tail>>}`\n : S;\n\nexport type DeepCamelCase<T> = T extends (infer U)[]\n ? DeepCamelCase<U>[]\n : T extends object\n ? { [K in keyof T as ToCamelCase<K & string>]: DeepCamelCase<T[K]> }\n : T;\n\n/**\n * Recursively converts object keys to camelCase. Snake_case and kebab-case\n * are both handled; numeric array indices and primitives pass through\n * unchanged.\n *\n * Language keys used by the CAB schema (`text.content[<lang>]`, etc.) are\n * authored as plain lowercase tags (`en`, `de`, `fr`) by us \u2014 they have no\n * `_` or `-` to convert and survive camelCase as-is.\n */\nexport const deepCamelCase = <T>(input: T): DeepCamelCase<T> => {\n if (Array.isArray(input)) return input.map((item) => deepCamelCase(item)) as DeepCamelCase<T>;\n\n if (isPlainObject(input)) {\n const out: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(input)) {\n out[camelCase(key)] = deepCamelCase(value);\n }\n\n return out as DeepCamelCase<T>;\n }\n\n return input as DeepCamelCase<T>;\n};\n", "import { type TextColorName, type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { type Mark } from '~/transforms/htmlToTiptap/types';\n\nexport const buildDefaultTextStyleMark = (\n style: { color?: TextColorName; fontSize?: TextSizeName } | undefined\n): Mark | null => {\n if (!style || (style.color === undefined && style.fontSize === undefined)) return null;\n\n return {\n attrs: {\n color: style.color ?? 'base',\n fontSize: style.fontSize ?? 'base',\n },\n type: 'textStyle',\n };\n};\n", "import { type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nexport const closeTag = (stack: StackEntry[], name: string): void => {\n for (let index = stack.length - 1; index >= 0; index--) {\n if (stack[index].tag === name) {\n stack.length = index;\n break;\n }\n }\n};\n", "export const TAG_RE = /<(\\/)?([a-zA-Z][a-zA-Z0-9]*)((?:\\s+[^>]*?)?)\\s*(\\/)?>/g;\n\n/**\n * Tags that introduce a paragraph break on both open and close. Container tags\n * like `ul`/`ol`/`dl` are intentionally NOT here \u2014 their child `li`/`dt`/`dd`\n * elements already break, and including the containers would double-flush.\n */\nexport const BLOCK_TAGS = new Set([\n 'article',\n 'aside',\n 'blockquote',\n 'dd',\n 'div',\n 'dt',\n 'figcaption',\n 'figure',\n 'footer',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hr',\n 'li',\n 'main',\n 'nav',\n 'p',\n 'pre',\n 'section',\n]);\n", "import { TiptapParagraph, type TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const makeParagraph = (content: TiptapText[]): TiptapParagraph => TiptapParagraph.parse({ content });\n", "import { makeParagraph } from '~/transforms/htmlToTiptap/makeParagraph';\nimport { type State } from '~/transforms/htmlToTiptap/types';\n\nexport const flushParagraph = (state: State): void => {\n state.paragraphs.push(makeParagraph(state.currentRuns));\n state.currentRuns = [];\n};\n", "import { type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nexport const isSkipping = (stack: StackEntry[] = []): boolean => stack.some(({ skip }) => skip);\n", "import { type Spacing } from '~/schema/widgets/checkout-and-beyond/common';\nimport { TiptapDocument, type TiptapParagraph } from '~/schema/widgets/checkout-and-beyond/text';\n\nexport const makeDoc = (content: TiptapParagraph[], blockSpacing: Spacing): TiptapDocument =>\n TiptapDocument.parse({ attrs: { blockSpacing }, content });\n", "const DYNAMIC_TOKEN_REGEX = /^\\{\\{\\s*[A-Za-z]+\\s*\\}\\}$/;\n\n/**\n * Protocols we'll preserve on `<a href>` when converting HTML to Tiptap. Any URL\n * whose `URL.protocol` falls outside this set (e.g. `javascript:`, `data:`,\n * `file:`, `vbscript:`) is dropped from the link mark \u2014 the text content is\n * kept but the click target is not. Renderers downstream still get to do their\n * own validation, but the package shouldn't be the one preserving an XSS\n * payload through the conversion.\n */\nconst ALLOWED_PROTOCOLS = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\n/**\n * Decides whether an `<a href>` value should survive HTML \u2192 Tiptap conversion\n * as a link mark. Allows `#`, dynamic `{{token}}` placeholders, and a fixed\n * allowlist of URL schemes; everything else (including `javascript:`, `data:`,\n * relative paths, and malformed URLs) drops the link mark while keeping the\n * surrounding text.\n *\n * @param href - Raw `href` attribute from the source HTML.\n *\n * @returns `true` if the URL should be preserved as a link mark.\n */\nexport const isValidHref = (href: string): boolean => {\n if (!href) return false;\n\n if (href === '#') return true;\n\n if (DYNAMIC_TOKEN_REGEX.test(href)) return true;\n\n try {\n const url = new URL(href);\n\n return ALLOWED_PROTOCOLS.has(url.protocol);\n } catch {\n return false;\n }\n};\n", "import { isValidHref } from '~/transforms/htmlToTiptap/isValidHref';\nimport { type Mark } from '~/transforms/htmlToTiptap/types';\n\n/**\n * The schema defaults for an `<a>` mark when the source HTML omits them. Match\n * `TiptapText` in `~/schema/widgets/checkout-and-beyond/text` so the sanitizer\n * resolves the same effective values the downstream parse would have used.\n */\nconst DEFAULT_TARGET = '_blank';\nconst DEFAULT_REL = 'noopener noreferrer nofollow';\n\n/**\n * Forces `noopener noreferrer` on every `_blank` link to defend against\n * reverse-tabnabbing (window.opener attacks). When the source omits `rel`\n * entirely, fall back to the schema default (`noopener noreferrer nofollow`).\n * When source `rel` is non-empty, preserve the existing tokens, drop `opener`,\n * and ensure the safe pair is present.\n *\n * Non-`_blank` targets pass through unchanged \u2014 they can't be tabnabbed.\n */\nconst ensureSafeRel = (rel: string, target: string): string => {\n if (target !== '_blank') return rel;\n\n const sourceTokens = (rel ?? '').split(/\\s+/).filter(Boolean);\n\n if (sourceTokens.length === 0) return DEFAULT_REL;\n\n const tokens = new Set(sourceTokens.filter((token) => token.toLowerCase() !== 'opener'));\n\n tokens.add('noopener');\n tokens.add('noreferrer');\n\n return Array.from(tokens).join(' ');\n};\n\nexport const buildLinkMark = (attrs: Record<string, string> = {}): Mark | null => {\n const { href } = attrs;\n\n if (!href || !isValidHref(href)) return null;\n\n // Resolve target BEFORE sanitizing rel so the safety guard sees the same\n // value the downstream schema parse will use.\n const target = attrs.target ?? DEFAULT_TARGET;\n\n return {\n attrs: {\n class: null,\n href,\n rel: ensureSafeRel(attrs.rel, target),\n target,\n },\n type: 'link',\n };\n};\n", "const NAMED_ENTITIES: Record<string, string> = {\n amp: '&',\n apos: \"'\",\n copy: '\u00A9',\n gt: '>',\n hellip: '\u2026',\n ldquo: '\u201C',\n lsquo: '\u2018',\n lt: '<',\n mdash: '\u2014',\n nbsp: ' ',\n ndash: '\u2013',\n quot: '\"',\n rdquo: '\u201D',\n reg: '\u00AE',\n rsquo: '\u2019',\n trade: '\u2122',\n} as const;\n\nexport const decodeEntities = (input: string = ''): string =>\n input.replace(/&(#x[\\da-f]+|#\\d+|[a-z][a-z\\d]*);/gi, (match, code: string) => {\n if (code[0] !== '#') return NAMED_ENTITIES[code.toLowerCase()] ?? match;\n\n const isHex = /^#x/i.test(code);\n const cp = parseInt(code.slice(isHex ? 2 : 1), isHex ? 16 : 10);\n\n return Number.isInteger(cp) && cp >= 0 && cp <= 0x10ffff ? String.fromCodePoint(cp) : match;\n });\n", "import { decodeEntities } from '~/transforms/htmlToTiptap/decodeEntities';\n\nconst ATTRIB_RE = /([a-zA-Z_:][\\w:.-]*)(?:\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s\"'`=<>]+)))?/g;\n\nexport const parseAttribs = (attrString: string): Record<string, string> => {\n const result: Record<string, string> = {};\n let match: RegExpExecArray | null;\n\n ATTRIB_RE.lastIndex = 0;\n\n while ((match = ATTRIB_RE.exec(attrString)) !== null) {\n result[match[1].toLowerCase()] = decodeEntities(match[2] ?? match[3] ?? match[4] ?? '');\n }\n\n return result;\n};\n", "import { type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { buildLinkMark } from '~/transforms/htmlToTiptap/buildLinkMark';\nimport { parseAttribs } from '~/transforms/htmlToTiptap/parseAttribs';\nimport { type Mark, type StackEntry } from '~/transforms/htmlToTiptap/types';\n\nconst INLINE_MARK_TAGS: Record<string, 'bold' | 'italic' | 'strike'> = {\n b: 'bold',\n del: 'strike',\n em: 'italic',\n i: 'italic',\n s: 'strike',\n strike: 'strike',\n strong: 'bold',\n};\n\nconst HEADING_FONT_SIZE: Record<string, TextSizeName> = {\n h1: 'extraLarge',\n h2: 'large',\n h3: 'medium',\n h4: 'base',\n h5: 'small',\n h6: 'small',\n};\n\nconst STRIPPED_TAGS = ['embed', 'iframe', 'noscript', 'object', 'script', 'style', 'template'];\n\nconst marksForTag = (name: string, attrs: string): Mark[] => {\n if (INLINE_MARK_TAGS[name]) return [{ type: INLINE_MARK_TAGS[name] }];\n\n if (HEADING_FONT_SIZE[name]) {\n return [{ type: 'bold' }, { attrs: { color: 'base', fontSize: HEADING_FONT_SIZE[name] }, type: 'textStyle' }];\n }\n\n if (name === 'a') {\n const link = buildLinkMark(parseAttribs(attrs));\n\n return link ? [link] : [];\n }\n\n return [];\n};\n\nexport const openTag = (stack: StackEntry[], name: string, attrs: string): void => {\n stack.push({\n marks: marksForTag(name, attrs),\n skip: STRIPPED_TAGS.includes(name),\n tag: name,\n });\n};\n", "import { TiptapText } from '~/schema/widgets/checkout-and-beyond/text';\n\nimport { decodeEntities } from '~/transforms/htmlToTiptap/decodeEntities';\nimport { flushParagraph } from '~/transforms/htmlToTiptap/flushParagraph';\nimport { isSkipping } from '~/transforms/htmlToTiptap/isSkipping';\nimport { type Mark, type State } from '~/transforms/htmlToTiptap/types';\n\nexport const pushText = (state: State, rawText: string): void => {\n if (!rawText || isSkipping(state.stack)) return;\n\n decodeEntities(rawText)\n .split('\\n')\n .forEach((segment, index) => {\n if (index > 0) flushParagraph(state);\n\n if (!segment) return;\n\n const marks: Mark[] = state.stack.flatMap((entry) => entry.marks);\n\n if (state.defaultTextStyleMark && !marks.some((mark) => mark.type === 'textStyle')) {\n marks.push(state.defaultTextStyleMark);\n }\n\n state.currentRuns.push(TiptapText.parse(marks.length > 0 ? { marks, text: segment } : { text: segment }));\n });\n};\n", "const HTML_COMMENT_RE = /<!--[\\s\\S]*?-->/g;\n\nexport const stripHtmlComments = (html: string = ''): string => html.replace(HTML_COMMENT_RE, '');\n", "import { type Spacing, type TextColorName, type TextSizeName } from '~/schema/widgets/checkout-and-beyond/common';\nimport { type TiptapDocument } from '~/schema/widgets/checkout-and-beyond/text';\nimport { buildDefaultTextStyleMark } from '~/transforms/htmlToTiptap/buildDefaultTextStyleMark';\nimport { closeTag } from '~/transforms/htmlToTiptap/closeTag';\nimport { BLOCK_TAGS, TAG_RE } from '~/transforms/htmlToTiptap/constants';\nimport { flushParagraph } from '~/transforms/htmlToTiptap/flushParagraph';\nimport { isSkipping } from '~/transforms/htmlToTiptap/isSkipping';\nimport { makeDoc } from '~/transforms/htmlToTiptap/makeDoc';\nimport { makeParagraph } from '~/transforms/htmlToTiptap/makeParagraph';\nimport { openTag } from '~/transforms/htmlToTiptap/openTag';\nimport { pushText } from '~/transforms/htmlToTiptap/pushText';\nimport { stripHtmlComments } from '~/transforms/htmlToTiptap/stripHtmlComments';\nimport { type State } from '~/transforms/htmlToTiptap/types';\n\nexport type HtmlToTiptapOptions = {\n blockSpacing?: Spacing;\n defaultTextStyle?: { color?: TextColorName; fontSize?: TextSizeName };\n};\n\nconst maybeFlushParagraph = (state: State): void => {\n if (state.currentRuns.length > 0) flushParagraph(state);\n};\n\nexport const htmlToTiptap = (html: string, options: HtmlToTiptapOptions = {}): TiptapDocument => {\n const state: State = {\n currentRuns: [],\n defaultTextStyleMark: buildDefaultTextStyleMark(options.defaultTextStyle),\n listStack: [],\n paragraphs: [],\n stack: [],\n };\n const blockSpacing = options.blockSpacing ?? 'base';\n\n if (typeof html !== 'string' || !html) return makeDoc([makeParagraph([])], blockSpacing);\n\n const htmlWithoutComments = stripHtmlComments(html);\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n\n TAG_RE.lastIndex = 0;\n\n while ((match = TAG_RE.exec(htmlWithoutComments)) !== null) {\n const [full, slash, rawName, attrs, selfClose] = match;\n\n if (match.index > lastIndex) pushText(state, htmlWithoutComments.slice(lastIndex, match.index));\n\n lastIndex = match.index + full.length;\n\n const name = rawName.toLowerCase();\n\n if (slash) {\n closeTag(state.stack, name);\n\n if (name === 'ul' || name === 'ol') state.listStack.pop();\n\n if (BLOCK_TAGS.has(name) && !isSkipping(state.stack)) maybeFlushParagraph(state);\n } else if (name === 'br') {\n if (!isSkipping(state.stack)) flushParagraph(state);\n } else if (name === 'hr') {\n if (!isSkipping(state.stack)) {\n maybeFlushParagraph(state);\n pushText(state, '\u2014\u2014\u2014');\n flushParagraph(state);\n }\n } else if (!selfClose) {\n if (BLOCK_TAGS.has(name) && !isSkipping(state.stack)) maybeFlushParagraph(state);\n\n if (name === 'ul' || name === 'ol') state.listStack.push({ counter: 0, ordered: name === 'ol' });\n\n openTag(state.stack, name, attrs);\n\n if (name === 'li' && state.listStack.length > 0) {\n const top = state.listStack[state.listStack.length - 1]!;\n\n if (top.ordered) top.counter += 1;\n\n pushText(state, top.ordered ? `${top.counter}. ` : '\u2022 ');\n }\n }\n }\n\n if (lastIndex < htmlWithoutComments.length) pushText(state, htmlWithoutComments.slice(lastIndex));\n\n maybeFlushParagraph(state);\n\n if (state.paragraphs.length === 0) flushParagraph(state);\n\n return makeDoc(state.paragraphs, blockSpacing);\n};\n", "/**\n * True when the input has `version === 2` \u2014 the marker for a current-generation\n * Checkout-and-Beyond root section. The transformer for CAB (`CABRootSection.parse`)\n * should ONLY run on values that pass this check; v1 widget shapes either get\n * converted (e.g. via `convertContentBlockToV2`) or pass through unchanged.\n *\n * @param input - The post-camelCase, post-numeric-fix upstream payload.\n *\n * @returns `true` if `input.version === 2`, otherwise `false`.\n */\nexport const isCABRootSection = (input: unknown): boolean => {\n if (!input || typeof input !== 'object') return false;\n\n return (input as { version?: unknown }).version === 2;\n};\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 { WidgetType } from '~/schema/widgets/checkout-and-beyond/constants';\nimport { CABRootSection } from '~/schema/widgets/checkout-and-beyond/root';\nimport { SWITCH_LABELS } from '~/schema/widgets/checkout-and-beyond/switchLabels';\nimport { type LineItemEditorSwitchLanguageV1 } from '~/schema/widgets/lineItemEditor';\nimport { type V1LineItemEditorConvertInput } from '~/transforms/lineItemEditorV1/types';\n\n/** The v1 `switchToSubscription.language` key that overrides each `buttonField`'s English label. */\nconst OVERRIDE_KEY = {\n subscriptionOption: 'subscriptionOptionLabel',\n switchToOneTimePurchase: 'downgradeToOneTimeLabel',\n switchToSubscriptionNoDiscount: 'upgradeToSubscriptionWithoutDiscountLabel',\n switchToSubscriptionWithDiscount: 'upgradeToSubscriptionLabel',\n} as const satisfies Record<keyof typeof SWITCH_LABELS, keyof LineItemEditorSwitchLanguageV1>;\n\n/**\n * Translate a v1 line-item-editor widget into a `CABRootSection`: a `cartLine` section holding a\n * switch-to-subscription button, whose `buttonField`-tagged text labels use the shared localized\n * `SWITCH_LABELS` defaults with the v1 `switchToSubscription.language` value overriding `en` (same output the\n * admin editor produces, so runtime-converted and admin-migrated widgets render identically). The button is\n * omitted when the widget's switch is disabled.\n */\nconst BUTTON_KINDS = ['plain', 'primary', 'secondary'] as const;\n\nexport const convertLineItemEditorToV2 = ({ id, settings }: V1LineItemEditorConvertInput): CABRootSection => {\n const { switchToSubscription, switchToSubscriptionEnabled, tracking } = settings;\n const kind = settings.button?.kind;\n const buttonStyle = BUTTON_KINDS.includes(kind as (typeof BUTTON_KINDS)[number]) ? kind : 'plain';\n\n const labelSections = (Object.keys(SWITCH_LABELS) as (keyof typeof SWITCH_LABELS)[]).map((buttonField) => {\n // A defined v1 value ALWAYS passes through verbatim \u2014 even legacy's \"Upgrade/Downgrade\" defaults\n // saved into settings (product owner, 2026-07-02: existing widget language is never rewritten; the\n // neutral \"Switch to\u2026\" copy applies only as the default for blank values and new widgets). Blank /\n // whitespace falls back to the shared defaults (legacy `getLabelWithFallback` parity).\n const override = switchToSubscription?.language?.[OVERRIDE_KEY[buttonField]]?.trim();\n\n return {\n buttonField,\n content: override ? { ...SWITCH_LABELS[buttonField], en: override } : SWITCH_LABELS[buttonField],\n sectionType: 'text',\n };\n });\n\n return CABRootSection.parse({\n previewMode: settings.previewMode,\n sections: [\n {\n sections: switchToSubscriptionEnabled\n ? [\n {\n action: 'switchToSubscription',\n buttonStyle,\n disableDowngrade: switchToSubscription?.disableDowngrade ?? false,\n sections: labelSections,\n sectionType: 'button',\n },\n ]\n : [],\n sectionType: 'cartLine',\n },\n ],\n sectionType: 'layout',\n tracking: {\n enableAttribution: tracking?.enableAttribution ?? true,\n enableSource: tracking?.enableSource ?? true,\n enableWidget: tracking?.enableWidget ?? true,\n },\n type: WidgetType.ui_extension_line_item_editor,\n version: 2,\n widgetId: id,\n });\n};\n", "import { WidgetType } from '~/schema/widgets/checkout-and-beyond/constants';\nimport { type LineItemEditorV1 } from '~/schema/widgets/lineItemEditor';\n\n/**\n * The legacy `/widgets/settings` endpoint returns the widget's settings object directly (no envelope), so\n * the converter input is just `{ id, settings }` \u2014 the settings shape lives in the schema\n * (`LineItemEditorV1`) and is derived here, never re-declared.\n */\nexport type V1LineItemEditorConvertInput = {\n id: number;\n settings: LineItemEditorV1;\n};\n\n/** Identifies a v1 line-item-editor payload by version + type (mirrors `isContentBlockV1`). */\nexport const isLineItemEditorV1 = (data: unknown): data is LineItemEditorV1 => {\n if (!data || typeof data !== 'object') return false;\n\n const obj = data as Record<string, unknown>;\n\n return obj.version === 1 && obj.type === WidgetType.ui_extension_line_item_editor;\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 const pattern = new RegExp(`\\\\{{1,2}\\\\s*${escapeForRegex(token)}\\\\s*\\\\}{1,2}`, 'gi');\n\n return acc.replace(pattern, `{{${token}}}`);\n }, text);\n};\n", "import { htmlToTiptap } from '~/transforms/htmlToTiptap/htmlToTiptap';\nimport { normalizeTokens } from '~/transforms/normalizeTokens';\n\nconst HTML_TAG_RE = /<[a-zA-Z]/;\n\nconst containsHtml = (text: string): boolean => HTML_TAG_RE.test(text);\n\nconst isObject = (x: unknown): x is Record<string, unknown> => x !== null && typeof x === 'object' && !Array.isArray(x);\n\nconst normalizeLangValue = (value: unknown): unknown => {\n if (typeof value !== 'string') return value;\n\n const tokenized = normalizeTokens(value);\n\n return containsHtml(tokenized) ? htmlToTiptap(tokenized) : tokenized;\n};\n\n/**\n * Walks an untyped CABRootSection-shaped object (post deepCamelCase, pre schema\n * parse) and rewrites `text` sections' `content[lang]` strings so that:\n *\n * - `{firstName}` (single brace) becomes `{{firstName}}` (canonical), and\n * - HTML-laden strings become a fully-formed `TiptapDocument`.\n *\n * Plain strings pass through unchanged. Non-text sections only recurse into\n * their `sections` array; Tiptap docs and other nested objects are not walked.\n */\nexport const normalizeTextContent = (node: unknown): unknown => {\n if (Array.isArray(node)) return node.map(normalizeTextContent);\n\n if (!isObject(node)) return node;\n\n if (node.sectionType === 'text' && isObject(node.content)) {\n const nextContent: Record<string, unknown> = {};\n\n for (const [lang, value] of Object.entries(node.content)) {\n nextContent[lang] = normalizeLangValue(value);\n }\n\n return { ...node, content: nextContent };\n }\n\n if (Array.isArray(node.sections)) {\n return { ...node, sections: node.sections.map(normalizeTextContent) };\n }\n\n return node;\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.\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 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 /** 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 integrations?: Record<string, boolean>;\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.variantSelector` ('select' \u2192 CAB 'menu'). */\n viewOptions?: { 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", "/**\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 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 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}} 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 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", "import { OFFER_LABELS } from '~/schema/widgets/checkout-and-beyond/offerLabels';\nimport { SWITCH_LABELS } from '~/schema/widgets/checkout-and-beyond/switchLabels';\nimport { type V1OfferSettings, type V1TextStyle } from '~/transforms/offerV1/types';\n\n/** v1 `viewOptions.variantSelector` \u2192 CAB `variants.selector` ('select' is the v1 name for a dropdown menu). */\nconst VARIANT_SELECTOR = { button: 'button', radio: 'radio', select: 'menu' } as const;\n\n/**\n * A defined v1 label ALWAYS passes through verbatim as the `en` entry over the localized defaults \u2014\n * existing widget language is never rewritten (product owner, 2026-07-02); blank/whitespace falls back\n * to the full default locale set (legacy `getLabelWithFallback` parity, same policy as\n * `convertLineItemEditorToV2`).\n */\nconst localizedContent = (defaults: Record<string, string>, override: string | undefined) => {\n const trimmed = override?.trim();\n\n return trimmed ? { ...defaults, en: trimmed } : defaults;\n};\n\n/**\n * A single-token Tiptap doc carrying a v1 text style: `textSize` is the CAB `fontSize`\n * verbatim (identical enums); `textEmphasis` adds a bold/italic mark ('base' adds none).\n */\nconst buildStyledText = (token: string, style: V1TextStyle | undefined, color = 'base') => {\n const marks: Record<string, unknown>[] = [\n { attrs: { color, fontSize: style?.textSize ?? 'base' }, type: 'textStyle' },\n ];\n\n if (style?.textEmphasis === 'bold') marks.push({ type: 'bold' });\n\n if (style?.textEmphasis === 'italic') marks.push({ type: 'italic' });\n\n return { content: [{ content: [{ marks, text: token, type: 'text' }], type: 'paragraph' }], type: 'doc' };\n};\n\n/**\n * The price line: the variant price, optionally followed by a strikethrough,\n * subdued compare-at price. The extension resolves `{{variantCompareAtPrice}}`\n * to '' off-sale, so the strikethrough disappears unless the variant is genuinely\n * discounted. `discount.showSavingAmount` false drops the compare-at node entirely.\n */\nconst buildPriceContent = (settings: V1OfferSettings) => {\n const content: Record<string, unknown>[] = [{ text: '{{variantPrice}}', type: 'text' }];\n\n if (settings.discount?.showSavingAmount !== false) {\n content.push(\n { text: ' ', type: 'text' },\n {\n marks: [{ type: 'strike' }, { attrs: { color: 'subdued' }, type: 'textStyle' }],\n text: '{{variantCompareAtPrice}}',\n type: 'text',\n }\n );\n }\n\n return { content: [{ content, type: 'paragraph' }], type: 'doc' };\n};\n\n/** A `reviews` star section, emitted only when the merchant has a review integration enabled. */\nconst buildReviews = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (!settings.integrations || !Object.values(settings.integrations).some(Boolean)) return [];\n\n const reviews = settings.displaySettings?.reviews;\n\n return [\n {\n ...(reviews?.color && { color: reviews.color }),\n sectionType: 'reviews',\n ...(reviews?.size && { size: reviews.size }),\n },\n ];\n};\n\n/** The recommended product's image; objectFit comes from v1 `displaySettings.image.imageFit`. */\nconst buildImage = (settings: V1OfferSettings): Record<string, unknown> => ({\n ...(settings.displaySettings?.image?.imageFit && {\n objectFit: settings.displaySettings.image.imageFit,\n }),\n sectionType: 'image',\n source: settings.images?.source === 'product' ? '{{productImage}}' : '{{variantImage}}',\n width: 100,\n});\n\n/** The product title text, styled from v1 `displaySettings.product`. */\nconst buildTitle = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildStyledText('{{productTitle}}', settings.displaySettings?.product) },\n sectionType: 'text',\n});\n\n/** The price line (variant price + on-sale compare-at strikethrough). */\nconst buildPrice = (settings: V1OfferSettings): Record<string, unknown> => ({\n content: { en: buildPriceContent(settings) },\n sectionType: 'text',\n});\n\n/** The selected-variant title line, gated by `productOptions.showVariantTitle` ('hide'/absent = off). */\nconst buildVariantTitle = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showVariantTitle;\n\n if (!show || show === 'hide') return [];\n\n return [\n {\n content: { en: buildStyledText('{{variantTitle}}', settings.displaySettings?.variant) },\n sectionType: 'text',\n },\n ];\n};\n\n/** The per-card product description, gated by `productOptions.showProductDescription` ('hide'/absent = off). */\nconst buildDescription = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const show = settings.productOptions?.showProductDescription;\n\n if (!show || show === 'hide') return [];\n\n return [{ content: { en: buildStyledText('{{productDescription}}', undefined) }, sectionType: 'text' }];\n};\n\n/** The variant selector, unless the merchant hid variant options. */\nconst buildVariants = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (settings.productOptions?.showVariantOptions === 'never') return [];\n\n const selector = settings.viewOptions?.variantSelector;\n\n return [\n {\n hideOutOfStockVariants: !!settings.productOptions?.hideOutOfStockVariants,\n ...(selector && { selector: VARIANT_SELECTOR[selector] }),\n sectionType: 'variants',\n },\n ];\n};\n\n/** v1 stepper kind \u2192 CAB `inputType`. Unknown/absent \u2192 omitted so the schema default ('select') applies. */\nconst QUANTITY_INPUT_TYPE: Record<string, 'number' | 'select'> = {\n 'buttons-manual-input': 'number',\n 'dropdown-select': 'select',\n};\n\n/** Custom quantity error copy \u2192 CAB `errorMessages.en.{min,max,neg}`; omitted entirely when none is set. */\nconst buildQuantityErrors = (quantity: NonNullable<V1OfferSettings['quantityInputs']>) => {\n const en = {\n ...(quantity.maxError && { max: quantity.maxError }),\n ...(quantity.minError && { min: quantity.minError }),\n ...(quantity.negativeError && { neg: quantity.negativeError }),\n };\n\n return Object.keys(en).length ? { errorMessages: { en } } : {};\n};\n\n/** The quantity stepper, when the merchant enabled quantity input. */\nconst buildQuantity = (settings: V1OfferSettings): Record<string, unknown>[] => {\n const quantity = settings.quantityInputs;\n\n if (!quantity?.enabled) return [];\n\n const inputType = quantity.type ? QUANTITY_INPUT_TYPE[quantity.type] : undefined;\n\n return [\n {\n ...buildQuantityErrors(quantity),\n ...(inputType && { inputType }),\n max: quantity.maxValue ?? 10,\n min: quantity.minValue ?? 1,\n sectionType: 'quantity',\n },\n ];\n};\n\n/**\n * The in-card subscribe / one-time toggle: a `switchToSubscription` button with its four label slots\n * (the same `SWITCH_LABELS` slot set as the line-item editor, including the `subscriptionOption`\n * frequency template, so the frequency select localizes). Emitted when the merchant offers\n * subscriptions (`productType` both/subscription); the extension shows it per-product by selling-plan\n * availability. v1 carries the with-discount upsell (`upgradeToSubscription`) plus the cart switch\n * labels; anything blank/absent falls back to the shared localized defaults.\n */\nconst buildSubscriptionButton = (settings: V1OfferSettings): Record<string, unknown>[] => {\n if (settings.productType !== 'both' && settings.productType !== 'subscription') return [];\n\n const language = settings.language;\n\n const slot = (buttonField: keyof typeof SWITCH_LABELS, override: string | undefined) => ({\n buttonField,\n content: localizedContent(SWITCH_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return [\n {\n action: 'switchToSubscription',\n buttonStyle: 'plain',\n sections: [\n slot('subscriptionOption', undefined),\n slot('switchToOneTimePurchase', language?.cartSwitchToOnetime),\n slot('switchToSubscriptionNoDiscount', language?.cartSwitchToSubscription),\n slot('switchToSubscriptionWithDiscount', language?.upgradeToSubscription),\n ],\n sectionType: 'button',\n },\n ];\n};\n\n/** v1 stores free-form `button.kind`; anything outside the CAB enum falls back to the legacy 'primary'. */\nconst BUTTON_KINDS = ['plain', 'primary', 'secondary'] as const;\n\n/** The add-to-order button with its four label slots (add / adding / added / sold-out). */\nconst buildAddButton = (settings: V1OfferSettings): Record<string, unknown> => {\n const kind = settings.button?.kind;\n\n const slot = (buttonField: 'addedToCart' | 'addingToCart' | 'addToCart' | 'soldOut', override?: string) => ({\n buttonField,\n content: localizedContent(OFFER_LABELS[buttonField], override),\n sectionType: 'text',\n });\n\n return {\n action: 'addToOrder',\n buttonStyle: BUTTON_KINDS.includes(kind as (typeof BUTTON_KINDS)[number]) ? kind : 'primary',\n sections: [\n slot('addToCart', settings.language?.addToCart),\n slot('addingToCart', settings.language?.addingToCart),\n slot('addedToCart', settings.language?.addedToCart),\n slot('soldOut', settings.language?.soldOutLabel),\n ],\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 { 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 widget-level discount, emitted as a config-only `discount` section that sits\n * just above the undo banner in the offers section. Empty when there's no active\n * discount; `showSavingAmount` is a card-display concern handled in `buildOfferCard`.\n */\nconst buildDiscountSection = (discount: V1OfferSettings['discount']): Record<string, unknown>[] => {\n if (!discount?.type || discount.type === 'none') return [];\n\n const discountedFrom = discount.discountedFrom ? DISCOUNTED_FROM[discount.discountedFrom] : undefined;\n\n return [\n {\n amount: discount.amount ?? 0,\n ...(discount.discountedBy && { discountedBy: discount.discountedBy }),\n ...(discountedFrom && { discountedFrom }),\n ...(discount.message && { message: discount.message }),\n ...(discount.quantity != null && { quantity: discount.quantity }),\n sectionType: 'discount',\n type: discount.type,\n },\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 color: 'success',\n dismissible: true,\n sections: [\n {\n /**\n * A defined v1 message (RTE doc or string) passes through verbatim as `en`;\n * absent falls back to the localized defaults (P4 language policy).\n */\n content: language.successBannerMessageRte\n ? { ...OFFER_LABELS.addedToCartMessage, en: language.successBannerMessageRte }\n : OFFER_LABELS.addedToCartMessage,\n sectionType: 'text',\n },\n {\n action: 'undoAddToOrder',\n buttonStyle: 'plain',\n sections: [{ buttonField: 'buttonLabel', content: OFFER_LABELS.undo, sectionType: 'text' }],\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 becomes a config-only\n * `discount` section and an opt-in undo `banner` is appended after the data\n * 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 dataSource = {\n ...(settings.endpoint && { dataSourcePath: settings.endpoint }),\n ...(settings.integrations && { integrations: 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.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: layout?.carousel ? columns : (settings.limit ?? columns),\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", "import { type z } from 'zod/v4';\n\nimport { convertNumericObjects } from '~/transforms/convertNumericObjects';\nimport { deepCamelCase } from '~/transforms/deepCamelCase';\n\n/**\n * Runs the shielded-CDN response through the canonical pipeline:\n *\n * raw \u2192 deepCamelCase \u2192 convertNumericObjects \u2192 transform? \u2192 schema.parse\n *\n * `schema.parse` hydrates `.default(...)` values and surfaces any drift as a\n * ZodError. The optional `transform` step is for normalization that must run\n * before* validation \u2014 e.g. converting HTML-laden text content into Tiptap\n * documents (since the canonical CAB schema rejects HTML strings outright).\n *\n * @param schema - The canonical Zod schema to validate against.\n * @param raw - Untrusted upstream JSON.\n * @param transform - Optional pre-parse transform (defaults to identity).\n *\n * @returns The parsed-and-default-hydrated `z.infer<S>`.\n */\nexport const parseShielded = <S extends z.ZodType>(\n schema: S,\n raw: unknown,\n transform: (input: unknown) => unknown = (input) => input\n): z.infer<S> => schema.parse(transform(convertNumericObjects(deepCamelCase(raw))));\n"],
5
+ "mappings": "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",
6
+ "names": ["import_uuid", "import_v4", "import_v4", "import_v4", "import_v4", "uuidv7", "import_uuid", "import_v4", "import_compat", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "import_v4", "import_uuid", "import_v4", "import_es_toolkit", "uuidv7", "import_uuid", "import_v4", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_uuid", "import_v4", "uuidv7", "import_compat", "import_uuid", "import_v4", "uuidv7", "uuidv7", "import_v4", "ARRAY_INDEX_STRING", "isPlainObject", "isPlainObject", "DYNAMIC_TOKEN_REGEX", "HTML_COMMENT_RE", "HTML_TAG_RE", "LOCATION_TO_EDITOR_MODE", "BUTTON_KINDS", "LOCATION_TO_EDITOR_MODE"]
7
7
  }