{
  "version": 3,
  "sources": ["../../src/document/utils/RenderId.ts", "../../src/document/models/controlProps/CollectionControlProp.ts", "../../src/document/models/richText/richTextPmAdapter.ts", "../../src/document/models/richText/richTextHtmlParser.ts", "../../src/document/models/richText/richTextDocumentTraversal.ts", "../../src/document/models/richText/richTextStorageDocument.ts", "../../src/renderer/updateStackAndGridChildCache.ts", "../../src/document/components/chrome/localization/getCompatibleLocalizedValue.ts", "../../src/document/components/chrome/localization/getLocalizationSourceTextType.ts", "../../src/document/components/chrome/localization/applyStylesToLocalizedRichText.ts", "../../src/document/components/chrome/localization/getStyledLocalizedRichTextHTML.ts", "../../src/code-generation/utils/valueTransformCollector/getQueryForDataRepeater.ts"],
  "sourcesContent": ["import type { NodeID } from \"document/models/CanvasTree/index.ts\"\n\nconst separator = \"--\"\n\n/**\n * Usually a node is rendered on the canvas and editable by the user. But sometimes we also render\n * nodes as children of components, or in repeaters, etc. Then the same node is rendered multiple\n * times on the canvas. We use a unique renderId for such cases. This function can be used to\n * distinguish if the current rendering is the primary one, or a second rendering of the same node.\n */\nexport type RenderId = NodeID | `${NodeID}${typeof separator}${string}`\n\nexport function isPrimaryRenderId(renderId: RenderId) {\n\treturn !renderId.includes(separator)\n}\n\nexport function getChildRenderId(parentRenderId: RenderId, nodeId: NodeID): RenderId {\n\tconst index = parentRenderId.indexOf(separator)\n\tif (index < 0) return nodeId\n\n\tconst keys = parentRenderId.slice(index)\n\treturn `${nodeId}${keys}`\n}\n\nfunction getSecondaryRenderId(renderId: RenderId, renderKey: string): RenderId {\n\treturn `${renderId}${separator}${renderKey}`\n}\n\nexport function getRepeatedChildRenderId(\n\tparentRenderId: RenderId,\n\trepeaterId: NodeID,\n\titemId: string | number,\n\tindex: number,\n): RenderId {\n\tif (isPrimaryRenderId(parentRenderId) && index === 0) return parentRenderId\n\treturn getSecondaryRenderId(parentRenderId, `${repeaterId}-${itemId}`)\n}\n\nexport function getComponentSlotRenderId(\n\tparentRenderId: RenderId,\n\tcomponentInstanceId: NodeID,\n\tslotKey: string,\n\titemKey: string,\n): RenderId {\n\treturn getSecondaryRenderId(parentRenderId, `${componentInstanceId}-${slotKey}-${itemKey}`)\n}\n\nexport function getNodeIdFromRenderId(renderId: RenderId): NodeID\nexport function getNodeIdFromRenderId(renderId: RenderId | undefined): NodeID | undefined\nexport function getNodeIdFromRenderId(renderId: RenderId | undefined): NodeID | undefined {\n\tif (!renderId) return\n\n\tconst index = renderId.indexOf(separator)\n\tif (index < 0) return renderId\n\n\treturn renderId.slice(0, index)\n}\n", "import { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { isObject, isReadonlyArray } from \"utils/typeChecks.ts\"\nimport { type CollectionControlType, isCollectionControlType } from \"./CollectionControlType.ts\"\nimport { withId } from \"./ControlProp.ts\"\nimport type { ArrayControlProp, ControlProp, ObjectControlProp, WithId } from \"./ControlProp.ts\"\n\nexport type CollectionArrayControlPropValue = readonly (CollectionObjectControlProp & WithId)[]\n\nexport interface CollectionArrayControlProp extends Omit<ArrayControlProp, \"value\"> {\n\tvalue: CollectionArrayControlPropValue\n}\n\nexport type CollectionObjectControlPropValue = Record<string, CollectionControlProp> | null\n\nexport interface CollectionObjectControlProp extends Omit<ObjectControlProp, \"value\"> {\n\tvalue: CollectionObjectControlPropValue\n}\n\ntype CollectionPrimitiveControlType = Exclude<CollectionControlType, ControlType.Array | ControlType.Object>\n\n// TODO: Remove dynamic values.\nexport type CollectionControlProp<Type extends CollectionControlType = CollectionControlType> = Extract<\n\t| Extract<ControlProp, { type: CollectionPrimitiveControlType }>\n\t| CollectionArrayControlProp\n\t| CollectionObjectControlProp,\n\t{ type: Type }\n>\n\nexport function isCollectionControlProp(\n\tcontrolProp: ControlProp | null | undefined,\n): controlProp is CollectionControlProp {\n\treturn isObject(controlProp) && isCollectionControlType(controlProp.type)\n}\n\nfunction isCollectionObjectControlProp(\n\tcontrolProp: ControlProp | null | undefined,\n): controlProp is CollectionObjectControlProp {\n\tif (!isObject(controlProp) || controlProp.type !== ControlType.Object) return false\n\tif (controlProp.value === null) return true\n\n\treturn Object.values(controlProp.value).every(isCollectionControlProp)\n}\n\nexport function isCollectionArrayControlPropValue(\n\tvalue: ArrayControlProp[\"value\"],\n): value is CollectionArrayControlPropValue {\n\treturn isReadonlyArray(value) && value.every(item => withId(item) && isCollectionObjectControlProp(item))\n}\n", "import { unhandledError } from \"@framerjs/shared\"\nimport type { Mark as PmMark, Node as PmNode } from \"prosemirror-model\"\nimport { normalizeProseMirrorDoc } from \"prosemirror/editorState.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport {\n\tschemaSupportsBlockquotes,\n\tschemaSupportsEmbeds,\n\tschemaSupportsLinks,\n\tschemaSupportsMedia,\n\tschemaSupportsTables,\n} from \"prosemirror/schema/index.ts\"\nimport type { LinkAttrs } from \"prosemirror/schema/link.ts\"\nimport {\n\tgetDefaultBulletedListAttrs,\n\tgetDefaultListItemAttrs,\n\tgetDefaultNumberedListAttrs,\n} from \"prosemirror/schema/list.ts\"\nimport { parseModuleAlignment, parseModuleWidth } from \"prosemirror/schema/module.ts\"\nimport { MarkName, NodeName } from \"prosemirror/schema/names.ts\"\nimport { getDefaultTextBlockAttrs } from \"prosemirror/schema/textBlock.ts\"\nimport { parseRichText, serializeRichText } from \"prosemirror/serialization/dom.ts\"\nimport type { RichTextBlock, RichTextDocument, RichTextInline, RichTextText } from \"./RichTextDocument.ts\"\nimport { normalizeRichTextDocument } from \"./richTextDocumentNormalization.ts\"\nimport type { RichTextTreeValue } from \"./richTextStorage.ts\"\nimport { isRichTextDocument } from \"./richTextStorage.ts\"\n\nexport function getProseMirrorDocFromRichTextTreeValue(value: unknown, schema: FramerProseMirrorSchema): PmNode {\n\tif (typeof value === \"string\") return parseRichText(value, schema)\n\tif (!isRichTextDocument(value)) return parseRichText(\"\", schema)\n\n\ttry {\n\t\treturn getProseMirrorDocFromRichTextDocument(value, schema)\n\t} catch (error) {\n\t\tunhandledError(error)\n\t\treturn parseRichText(\"\", schema)\n\t}\n}\n\nexport function getHTMLFromRichTextTreeValue(value: RichTextTreeValue, schema: FramerProseMirrorSchema): string {\n\treturn serializeRichText(\n\t\tnormalizeProseMirrorDoc(getProseMirrorDocFromRichTextTreeValue(value, schema), schema),\n\t\tschema,\n\t)\n}\n\nfunction getProseMirrorDocFromRichTextDocument(document: RichTextDocument, schema: FramerProseMirrorSchema): PmNode {\n\tconst normalizedDocument = normalizeRichTextDocument(document)\n\treturn schema.nodes[NodeName.Document].create(\n\t\tundefined,\n\t\tgetProseMirrorNodesFromRichTextBlocks(normalizedDocument.children, schema),\n\t)\n}\n\nfunction getProseMirrorNodesFromRichTextBlocks(blocks: RichTextBlock[], schema: FramerProseMirrorSchema): PmNode[] {\n\treturn blocks.flatMap(block => {\n\t\ttry {\n\t\t\treturn getProseMirrorNodesFromRichTextBlock(block, schema)\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t\treturn []\n\t\t}\n\t})\n}\n\nfunction getProseMirrorNodesFromRichTextBlock(block: RichTextBlock, schema: FramerProseMirrorSchema): PmNode[] {\n\tif (block.type === \"blockquote\" && !schemaSupportsBlockquotes(schema)) {\n\t\treturn []\n\t}\n\n\tif (block.type === \"table\" && !schemaSupportsTables(schema)) {\n\t\treturn []\n\t}\n\n\tif (block.type === \"media\" && !schemaSupportsMedia(schema)) {\n\t\treturn []\n\t}\n\n\tif (block.type === \"module\" && !schemaSupportsEmbeds(schema)) {\n\t\treturn []\n\t}\n\n\treturn [getProseMirrorNodeFromRichTextBlock(block, schema)]\n}\n\nfunction createDefaultProseMirrorTextBlock(schema: FramerProseMirrorSchema): PmNode {\n\treturn schema.nodes[NodeName.TextBlock].create(getDefaultTextBlockAttrs())\n}\n\nfunction getProseMirrorNodeFromRichTextBlock(block: RichTextBlock, schema: FramerProseMirrorSchema): PmNode {\n\tswitch (block.type) {\n\t\tcase \"textBlock\":\n\t\t\treturn schema.nodes[NodeName.TextBlock].create(\n\t\t\t\t{\n\t\t\t\t\t...getDefaultTextBlockAttrs(),\n\t\t\t\t\ttag: block.tag,\n\t\t\t\t\ttextDirection: block.textDirection === \"inherit\" ? \"auto\" : block.textDirection,\n\t\t\t\t},\n\t\t\t\tblock.children.map(child => getProseMirrorNodeFromRichTextInline(child, schema)),\n\t\t\t)\n\t\tcase \"bulletedList\": {\n\t\t\tconst bulletedListItems = block.children.flatMap(item => {\n\t\t\t\tconst children = item.children.flatMap(child => getProseMirrorNodesFromRichTextBlock(child, schema))\n\t\t\t\tif (children.length === 0) return []\n\t\t\t\treturn [schema.nodes[NodeName.ListItem].create(getDefaultListItemAttrs(), children)]\n\t\t\t})\n\n\t\t\tif (bulletedListItems.length === 0) {\n\t\t\t\tthrow new Error(\"Bulleted list does not contain any supported list item content.\")\n\t\t\t}\n\n\t\t\treturn schema.nodes[NodeName.BulletedList].create(\n\t\t\t\t{\n\t\t\t\t\t...getDefaultBulletedListAttrs(),\n\t\t\t\t\ttextDirection: block.textDirection === \"inherit\" ? \"auto\" : block.textDirection,\n\t\t\t\t},\n\t\t\t\tbulletedListItems,\n\t\t\t)\n\t\t}\n\t\tcase \"numberedList\": {\n\t\t\tconst numberedListItems = block.children.flatMap(item => {\n\t\t\t\tconst children = item.children.flatMap(child => getProseMirrorNodesFromRichTextBlock(child, schema))\n\t\t\t\tif (children.length === 0) return []\n\t\t\t\treturn [schema.nodes[NodeName.ListItem].create(getDefaultListItemAttrs(), children)]\n\t\t\t})\n\n\t\t\tif (numberedListItems.length === 0) {\n\t\t\t\tthrow new Error(\"Numbered list does not contain any supported list item content.\")\n\t\t\t}\n\n\t\t\treturn schema.nodes[NodeName.NumberedList].create(\n\t\t\t\t{\n\t\t\t\t\t...getDefaultNumberedListAttrs(),\n\t\t\t\t\ttextDirection: block.textDirection === \"inherit\" ? \"auto\" : block.textDirection,\n\t\t\t\t\tlistStyleType: block.listStyleType,\n\t\t\t\t\tstart: block.start,\n\t\t\t\t},\n\t\t\t\tnumberedListItems,\n\t\t\t)\n\t\t}\n\t\tcase \"blockquote\": {\n\t\t\tif (!schemaSupportsBlockquotes(schema)) throw new Error(\"Schema does not support blockquotes.\")\n\t\t\tconst blockquoteChildren = block.children.flatMap(child => getProseMirrorNodesFromRichTextBlock(child, schema))\n\t\t\tif (blockquoteChildren.length === 0) {\n\t\t\t\tthrow new Error(\"Blockquote does not contain any supported child content.\")\n\t\t\t}\n\t\t\treturn schema.nodes[NodeName.Blockquote].create(undefined, blockquoteChildren)\n\t\t}\n\t\tcase \"media\":\n\t\t\tif (!schemaSupportsMedia(schema)) throw new Error(\"Schema does not support media.\")\n\t\t\treturn schema.nodes[NodeName.Image].create({\n\t\t\t\tsrc: block.src,\n\t\t\t\talt: block.alt,\n\t\t\t\tpixelWidth: block.pixelWidth,\n\t\t\t\tpixelHeight: block.pixelHeight,\n\t\t\t\ttype: block.mediaType,\n\t\t\t\tlink: block.link?.link,\n\t\t\t\topenInNewTab: block.link?.openInNewTab,\n\t\t\t\tsmoothScroll: block.link?.smoothScroll ?? false,\n\t\t\t\tclickTrackingId: block.link?.clickTrackingId,\n\t\t\t\trelValues: block.link?.relValues,\n\t\t\t\tpreserveParams: block.link?.preserveParams,\n\t\t\t})\n\t\tcase \"module\":\n\t\t\tif (!schemaSupportsEmbeds(schema)) throw new Error(\"Schema does not support modules.\")\n\t\t\treturn schema.nodes[NodeName.Module].create({\n\t\t\t\tidentifier: block.identifier,\n\t\t\t\tprops: block.props,\n\t\t\t\twidth: block.width ? parseModuleWidth(block.width) : undefined,\n\t\t\t\talignment: block.alignment ? parseModuleAlignment(block.alignment) : undefined,\n\t\t\t})\n\t\tcase \"table\":\n\t\t\tif (!schemaSupportsTables(schema)) throw new Error(\"Schema does not support tables.\")\n\t\t\treturn schema.nodes[NodeName.Table].create(\n\t\t\t\tundefined,\n\t\t\t\tblock.children.map(row =>\n\t\t\t\t\tschema.nodes[NodeName.TableRow].create(\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\trow.children.map(cell =>\n\t\t\t\t\t\t\tschema.nodes[cell.cellType === \"header\" ? NodeName.TableHeader : NodeName.TableCell].create(\n\t\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\t\tconst children = cell.children.flatMap(child => getProseMirrorNodesFromRichTextBlock(child, schema))\n\t\t\t\t\t\t\t\t\treturn children.length === 0 ? [createDefaultProseMirrorTextBlock(schema)] : children\n\t\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t}\n}\n\nfunction getProseMirrorNodeFromRichTextInline(inline: RichTextInline, schema: FramerProseMirrorSchema): PmNode {\n\tif (inline.type === \"lineBreak\") {\n\t\treturn schema.nodes[NodeName.LineBreak].create()\n\t}\n\n\treturn schema.text(inline.text, getProseMirrorMarksFromRichTextText(inline, schema))\n}\n\nfunction getProseMirrorMarksFromRichTextText(text: RichTextText, schema: FramerProseMirrorSchema) {\n\tconst marks: PmMark[] = []\n\n\tif (text.bold) marks.push(schema.marks[MarkName.Bold].create())\n\tif (text.italic) marks.push(schema.marks[MarkName.Italic].create())\n\tif (text.inlineCode) {\n\t\tmarks.push(schema.marks[MarkName.InlineCode].create({ inlineCodeStylePreset: undefined }))\n\t}\n\tif (text.link) {\n\t\tif (!schemaSupportsLinks(schema)) throw new Error(\"Schema does not support links.\")\n\t\tconst linkAttrs: LinkAttrs = {\n\t\t\tlink: text.link.link,\n\t\t\topenInNewTab: text.link.openInNewTab ?? false,\n\t\t\tsmoothScroll: text.link.smoothScroll ?? false,\n\t\t\tclickTrackingId: text.link.clickTrackingId,\n\t\t\tlinkStylePreset: undefined,\n\t\t\trelValues: text.link.relValues,\n\t\t\tpreserveParams: text.link.preserveParams,\n\t\t}\n\t\tmarks.push(schema.marks[MarkName.Link].create(linkAttrs))\n\t}\n\n\treturn marks\n}\n", "import { isSupportedLinkRelValue } from \"document/models/SupportedRelValue.ts\"\nimport { defaultTreeAdapter, parseFragment } from \"parse5\"\nimport type { DefaultTreeAdapterMap } from \"parse5\"\nimport type {\n\tRichTextBlock,\n\tRichTextBlockquoteBlock,\n\tRichTextBulletedListBlock,\n\tRichTextDocument,\n\tRichTextDocumentVariant,\n\tRichTextInline,\n\tRichTextLineBreak,\n\tRichTextLink,\n\tRichTextListItem,\n\tRichTextMediaBlock,\n\tRichTextModuleBlock,\n\tRichTextNumberedListBlock,\n\tRichTextTableBlock,\n\tRichTextTableCell,\n\tRichTextTableRow,\n\tRichTextText,\n\tRichTextTextBlock,\n\tRichTextTextBlockTag,\n} from \"./RichTextDocument.ts\"\nimport { normalizeRichTextDocument } from \"./richTextDocumentNormalization.ts\"\nimport { randomRichTextId } from \"./richTextId.ts\"\n\n/**\n * This is the canonical rich text HTML converter going forward.\n * It uses parse5 so conversion can run in Node/backend environments without DOM or ProseMirror runtime dependencies.\n */\ntype ParsedNode = DefaultTreeAdapterMap[\"node\"]\ntype ParsedParentNode = DefaultTreeAdapterMap[\"parentNode\"]\ntype ParsedElement = DefaultTreeAdapterMap[\"element\"]\ntype ParsedTextNode = DefaultTreeAdapterMap[\"textNode\"]\ntype ElementAttributes = ReadonlyMap<string, string>\ntype ElementStyle = ReadonlyMap<string, string>\n\nconst LINK_ATTR = \"data-framer-link\"\nconst OPEN_IN_NEW_TAB_ATTR = \"data-framer-open-in-new-tab\"\nconst SMOOTH_SCROLL_ATTR = \"data-framer-smooth-scroll\"\nconst CLICK_TRACKING_ID_ATTR = \"data-framer-click-tracking-id\"\nconst REL_VALUES_VAR_ATTR = \"data-framer-rel\"\nconst PRESERVE_PARAMS_ATTR = \"data-framer-preserve-params\"\n\nconst CMS_MODULE_TAG = \"framer-module\"\nconst CMS_MODULE_IDENTIFIER_ATTR = \"data-module-identifier\"\nconst CMS_MODULE_PROPS_ATTR = \"data-module-props\"\nconst CMS_MODULE_WIDTH_ATTR = \"data-module-width\"\nconst CMS_MODULE_ALIGNMENT_ATTR = \"data-module-alignment\"\n\nconst whitespaceRegex = /\\s+/u\n\nexport function parseRichTextHtmlToDocument(html: string, variant: RichTextDocumentVariant): RichTextDocument {\n\tconst fragment = parseFragment(html)\n\tconst document: RichTextDocument = {\n\t\ttype: \"richText\",\n\t\tvariant,\n\t\tchildren: getChildBlocks(fragment),\n\t}\n\treturn normalizeRichTextDocument(document)\n}\n\nfunction parseBlocks(nodes: readonly ParsedNode[]): RichTextBlock[] {\n\tconst blocks: RichTextBlock[] = []\n\tfor (const node of nodes) {\n\t\tconst parsed = parseBlock(node)\n\t\tif (parsed) blocks.push(parsed)\n\t}\n\treturn blocks\n}\n\nfunction parseBlock(node: ParsedNode): RichTextBlock | undefined {\n\tif (!isElementNode(node)) return\n\n\tconst attributes = getAttributes(node)\n\tconst style = parseInlineStyleMap(attributes.get(\"style\"))\n\tswitch (node.tagName) {\n\t\tcase \"p\":\n\t\tcase \"div\":\n\t\tcase \"h1\":\n\t\tcase \"h2\":\n\t\tcase \"h3\":\n\t\tcase \"h4\":\n\t\tcase \"h5\":\n\t\tcase \"h6\":\n\t\t\treturn parseTextBlock(node, attributes, style)\n\t\tcase \"ul\":\n\t\t\treturn parseBulletedList(node, attributes, style)\n\t\tcase \"ol\":\n\t\t\treturn parseNumberedList(node, attributes, style)\n\t\tcase \"blockquote\":\n\t\t\treturn parseBlockquote(node)\n\t\tcase \"img\":\n\t\t\treturn parseMedia(attributes, \"image\")\n\t\tcase \"video\":\n\t\t\treturn hasClassName(attributes, \"framer-image\") ? parseMedia(attributes, \"video\") : undefined\n\t\tcase CMS_MODULE_TAG:\n\t\tcase \"template\":\n\t\t\treturn parseModule(attributes)\n\t\tcase \"table\":\n\t\t\treturn parseTable(node)\n\t\tcase \"figure\": {\n\t\t\tif (!hasClassName(attributes, \"framer-table-wrapper\")) return\n\t\t\tconst table = getElementChildren(node).find(child => child.tagName === \"table\")\n\t\t\treturn table ? parseTable(table) : undefined\n\t\t}\n\t}\n}\n\nfunction parseTextBlock(node: ParsedElement, attributes: ElementAttributes, style: ElementStyle): RichTextTextBlock {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"textBlock\",\n\t\ttag: node.tagName as RichTextTextBlockTag,\n\t\ttextDirection: getTextDirection(attributes, style),\n\t\tchildren: parseInlines(getChildNodes(node), {}),\n\t}\n}\n\nfunction parseBulletedList(\n\tnode: ParsedElement,\n\tattributes: ElementAttributes,\n\tstyle: ElementStyle,\n): RichTextBulletedListBlock {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"bulletedList\",\n\t\ttextDirection: getTextDirection(attributes, style),\n\t\tchildren: parseListItems(node),\n\t}\n}\n\nfunction parseNumberedList(\n\tnode: ParsedElement,\n\tattributes: ElementAttributes,\n\tstyle: ElementStyle,\n): RichTextNumberedListBlock {\n\tconst start = parseInteger(attributes.get(\"start\")) ?? 1\n\tconst listStyleType = parseListStyleType(node, style)\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"numberedList\",\n\t\ttextDirection: getTextDirection(attributes, style),\n\t\tlistStyleType,\n\t\tstart,\n\t\tchildren: parseListItems(node),\n\t}\n}\n\nfunction parseListItems(node: ParsedElement): RichTextListItem[] {\n\treturn getElementChildren(node)\n\t\t.filter(child => child.tagName === \"li\")\n\t\t.map(item => {\n\t\t\treturn {\n\t\t\t\tid: randomRichTextId(),\n\t\t\t\ttype: \"listItem\",\n\t\t\t\tchildren: getChildBlocks(item),\n\t\t\t}\n\t\t})\n}\n\nfunction parseBlockquote(node: ParsedElement): RichTextBlockquoteBlock {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"blockquote\",\n\t\tchildren: getChildBlocks(node),\n\t}\n}\n\nfunction parseMedia(attributes: ElementAttributes, mediaType: RichTextMediaBlock[\"mediaType\"]): RichTextMediaBlock {\n\tconst block: RichTextMediaBlock = {\n\t\tid: randomRichTextId(),\n\t\ttype: \"media\",\n\t\tsrc: attributes.get(\"src\") ?? \"\",\n\t\tmediaType,\n\t}\n\n\tif (mediaType === \"image\") {\n\t\tconst alt = attributes.get(\"alt\")\n\t\tif (alt !== undefined) block.alt = alt\n\n\t\tconst pixelWidth = parseFiniteNumber(attributes.get(\"data-framer-width\"))\n\t\tif (pixelWidth !== undefined) block.pixelWidth = pixelWidth\n\n\t\tconst pixelHeight = parseFiniteNumber(attributes.get(\"data-framer-height\"))\n\t\tif (pixelHeight !== undefined) block.pixelHeight = pixelHeight\n\t}\n\n\tconst link = parseRichTextLink(attributes)\n\tif (link) block.link = link\n\n\treturn block\n}\n\nfunction parseModule(attributes: ElementAttributes): RichTextModuleBlock | undefined {\n\tconst identifier = attributes.get(CMS_MODULE_IDENTIFIER_ATTR)\n\tif (!identifier) return\n\n\tconst props = parseJSON(attributes.get(CMS_MODULE_PROPS_ATTR))\n\tconst module: RichTextModuleBlock = {\n\t\tid: randomRichTextId(),\n\t\ttype: \"module\",\n\t\tidentifier: identifier as RichTextModuleBlock[\"identifier\"],\n\t\tprops: (props ?? {}) as RichTextModuleBlock[\"props\"],\n\t}\n\n\tconst width = attributes.get(CMS_MODULE_WIDTH_ATTR)\n\tif (width === \"fill\" || width === \"fit\") module.width = width\n\n\tconst alignment = attributes.get(CMS_MODULE_ALIGNMENT_ATTR)\n\tif (alignment === \"left\" || alignment === \"center\" || alignment === \"right\") {\n\t\tmodule.alignment = alignment\n\t}\n\n\treturn module\n}\n\nfunction parseTable(node: ParsedElement): RichTextTableBlock {\n\tconst rows: RichTextTableRow[] = []\n\tfor (const row of getTableRows(node)) {\n\t\trows.push(parseTableRow(row))\n\t}\n\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"table\",\n\t\tchildren: rows,\n\t}\n}\n\nfunction getTableRows(table: ParsedElement): ParsedElement[] {\n\tconst rows: ParsedElement[] = []\n\tfor (const child of getElementChildren(table)) {\n\t\tif (child.tagName === \"tr\") {\n\t\t\trows.push(child)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (child.tagName !== \"tbody\" && child.tagName !== \"thead\" && child.tagName !== \"tfoot\") continue\n\t\tfor (const row of getElementChildren(child)) {\n\t\t\tif (row.tagName === \"tr\") rows.push(row)\n\t\t}\n\t}\n\n\treturn rows\n}\n\nfunction parseTableRow(node: ParsedElement): RichTextTableRow {\n\tconst cells: RichTextTableCell[] = []\n\tfor (const child of getElementChildren(node)) {\n\t\tif (child.tagName !== \"td\" && child.tagName !== \"th\") continue\n\t\tcells.push(parseTableCell(child))\n\t}\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"tableRow\",\n\t\tchildren: cells,\n\t}\n}\n\nfunction parseTableCell(node: ParsedElement): RichTextTableCell {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"tableCell\",\n\t\tcellType: node.tagName === \"th\" ? \"header\" : \"cell\",\n\t\tchildren: getChildBlocks(node),\n\t}\n}\n\ninterface InlineFormatting {\n\tbold?: true\n\titalic?: true\n\tinlineCode?: true\n\tlink?: RichTextLink\n}\n\nfunction parseInlines(nodes: readonly ParsedNode[], blockFormatting: InlineFormatting): RichTextInline[] {\n\tconst inlines: RichTextInline[] = []\n\tappendInlineNodes(nodes, blockFormatting, inlines)\n\treturn inlines\n}\n\nfunction appendInlineNodes(nodes: readonly ParsedNode[], formatting: InlineFormatting, inlines: RichTextInline[]) {\n\tfor (const node of nodes) {\n\t\tif (isTextNode(node)) {\n\t\t\tappendTextInlines(node.value, formatting, inlines)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!isElementNode(node)) continue\n\t\tif (node.tagName === \"br\") {\n\t\t\tif (hasClassName(getAttributes(node), \"trailing-break\")) continue\n\t\t\tinlines.push(createLineBreakInline())\n\t\t\tcontinue\n\t\t}\n\n\t\tconst nextFormatting = applyInlineFormatting(node, formatting)\n\t\tappendInlineNodes(getChildNodes(node), nextFormatting, inlines)\n\t}\n}\n\nfunction applyInlineFormatting(node: ParsedElement, formatting: InlineFormatting): InlineFormatting {\n\tconst nextFormatting: InlineFormatting = { ...formatting }\n\tswitch (node.tagName) {\n\t\tcase \"strong\":\n\t\tcase \"b\":\n\t\t\tnextFormatting.bold = true\n\t\t\tbreak\n\t\tcase \"em\":\n\t\tcase \"i\":\n\t\t\tnextFormatting.italic = true\n\t\t\tbreak\n\t\tcase \"code\":\n\t\t\tnextFormatting.inlineCode = true\n\t\t\tbreak\n\t\tcase \"a\": {\n\t\t\tconst link = parseRichTextLink(getAttributes(node))\n\t\t\tif (link) nextFormatting.link = link\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn nextFormatting\n}\n\nfunction appendTextInlines(text: string, formatting: InlineFormatting, inlines: RichTextInline[]) {\n\tif (text.length > 0) inlines.push(createTextInline(text, formatting))\n}\n\nfunction createTextInline(text: string, formatting: InlineFormatting): RichTextText {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"text\",\n\t\ttext,\n\t\t...formatting,\n\t}\n}\n\nfunction createLineBreakInline(): RichTextLineBreak {\n\treturn {\n\t\tid: randomRichTextId(),\n\t\ttype: \"lineBreak\",\n\t}\n}\n\nfunction parseRichTextLink(attributes: ElementAttributes): RichTextLink | undefined {\n\tconst rawLink = attributes.get(LINK_ATTR)\n\tlet parsedLink: RichTextLink[\"link\"] | undefined\n\n\tif (rawLink?.startsWith(\"Link:\")) {\n\t\tconst parsed = parseJSON(rawLink.slice(\"Link:\".length))\n\t\tif (isLinkValue(parsed)) parsedLink = parsed\n\t}\n\n\tif (parsedLink === undefined) {\n\t\tconst href = attributes.get(\"href\")\n\t\tif (href && href.length > 0) parsedLink = { type: \"url\", url: href }\n\t}\n\n\tif (parsedLink === undefined) return\n\n\tconst relValues = parseRelValues(attributes.get(REL_VALUES_VAR_ATTR)) ?? parseRelValues(attributes.get(\"rel\")) ?? []\n\n\tconst link: RichTextLink = {\n\t\tlink: parsedLink,\n\t\topenInNewTab: parseBoolean(attributes.get(OPEN_IN_NEW_TAB_ATTR)),\n\t\tsmoothScroll: parseBoolean(attributes.get(SMOOTH_SCROLL_ATTR)),\n\t\trelValues,\n\t}\n\n\tconst clickTrackingId = attributes.get(CLICK_TRACKING_ID_ATTR)\n\tif (clickTrackingId) link.clickTrackingId = clickTrackingId\n\n\tconst preserveParams = attributes.get(PRESERVE_PARAMS_ATTR)\n\tif (preserveParams !== undefined) link.preserveParams = preserveParams !== \"false\"\n\n\treturn link\n}\n\nfunction parseRelValues(value: string | undefined): RichTextLink[\"relValues\"] | undefined {\n\tif (!value || value.startsWith(\"var(\")) return\n\treturn value\n\t\t.split(whitespaceRegex)\n\t\t.map(part => part.trim())\n\t\t.filter(isSupportedLinkRelValue)\n}\n\nfunction parseListStyleType(node: ParsedElement, style: ElementStyle): string {\n\tconst fromListStyleVar = style.get(\"--list-style-type\")\n\tif (fromListStyleVar) return fromListStyleVar\n\n\tconst fromListStyle = style.get(\"list-style-type\")\n\tif (fromListStyle) return fromListStyle\n\n\tconst firstListItem = getElementChildren(node).find(child => child.tagName === \"li\")\n\tif (!firstListItem) return \"decimal\"\n\treturn parseInlineStyleMap(getAttributes(firstListItem).get(\"style\")).get(\"list-style-type\") || \"decimal\"\n}\n\nfunction parseTextDirection(value: string | undefined): RichTextTextBlock[\"textDirection\"] {\n\tswitch (value) {\n\t\tcase \"auto\":\n\t\tcase \"ltr\":\n\t\tcase \"rtl\":\n\t\t\treturn value\n\t\tdefault:\n\t\t\treturn \"auto\"\n\t}\n}\n\nfunction getTextDirection(attributes: ElementAttributes, style: ElementStyle): RichTextTextBlock[\"textDirection\"] {\n\tconst fromDirAttribute = attributes.get(\"dir\")\n\tif (fromDirAttribute !== undefined) return parseTextDirection(fromDirAttribute)\n\tconst fromInlineStyle = style.get(\"direction\")\n\treturn parseTextDirection(fromInlineStyle)\n}\n\nfunction parseInlineStyleMap(style: string | undefined): ReadonlyMap<string, string> {\n\tconst map = new Map<string, string>()\n\tif (!style) return map\n\n\tfor (const declaration of style.split(\";\")) {\n\t\tconst colonIndex = declaration.indexOf(\":\")\n\t\tif (colonIndex === -1) continue\n\t\tconst name = declaration.slice(0, colonIndex).trim().toLowerCase()\n\t\tconst value = declaration.slice(colonIndex + 1).trim()\n\t\tif (name.length === 0 || value.length === 0 || map.has(name)) continue\n\t\tmap.set(name, value)\n\t}\n\n\treturn map\n}\n\nfunction getChildNodes(node: ParsedParentNode): ParsedNode[] {\n\treturn Array.isArray(node.childNodes) ? node.childNodes : []\n}\n\nfunction getChildBlocks(node: ParsedParentNode): RichTextBlock[] {\n\treturn parseBlocks(getChildNodes(node))\n}\n\nfunction getElementChildren(node: ParsedParentNode): ParsedElement[] {\n\treturn getChildNodes(node).filter(isElementNode)\n}\n\nfunction isTextNode(node: ParsedNode): node is ParsedTextNode {\n\treturn defaultTreeAdapter.isTextNode(node)\n}\n\nfunction isElementNode(node: ParsedNode): node is ParsedElement {\n\treturn defaultTreeAdapter.isElementNode(node)\n}\n\nfunction getAttributes(node: ParsedElement): ElementAttributes {\n\tconst attributes = new Map<string, string>()\n\tfor (const attribute of defaultTreeAdapter.getAttrList(node)) {\n\t\tattributes.set(attribute.name, attribute.value)\n\t}\n\treturn attributes\n}\n\nfunction hasClassName(attributes: ElementAttributes, className: string): boolean {\n\tconst classes = attributes.get(\"class\")\n\tif (!classes) return false\n\treturn classes.split(\" \").some(token => token.trim() === className)\n}\n\nfunction parseInteger(value: string | undefined): number | undefined {\n\tif (!value) return\n\tconst parsed = Number.parseInt(value, 10)\n\tif (!Number.isFinite(parsed)) return\n\treturn parsed\n}\n\nfunction parseBoolean(value: string | undefined): boolean {\n\treturn value !== undefined && value !== \"false\"\n}\n\nfunction parseFiniteNumber(value: string | undefined): number | undefined {\n\tif (!value) return\n\tconst parsed = Number.parseFloat(value)\n\tif (!Number.isFinite(parsed)) return\n\treturn parsed\n}\n\nfunction parseJSON(value: string | undefined): unknown {\n\tif (!value) return\n\ttry {\n\t\treturn JSON.parse(value)\n\t} catch {\n\t\treturn\n\t}\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value)\n}\n\nfunction isLinkValue(value: unknown): value is RichTextLink[\"link\"] {\n\tif (!isObject(value) || typeof value.type !== \"string\") return false\n\tif (value.type === \"url\") return typeof value.url === \"string\"\n\tif (value.type === \"webPage\") return typeof value.webPageId === \"string\"\n\treturn false\n}\n", "import type {\n\tRichTextBlock,\n\tRichTextBlockquoteBlock,\n\tRichTextBulletedListBlock,\n\tRichTextDocument,\n\tRichTextInline,\n\tRichTextLineBreak,\n\tRichTextListItem,\n\tRichTextMediaBlock,\n\tRichTextModuleBlock,\n\tRichTextNumberedListBlock,\n\tRichTextTableBlock,\n\tRichTextTableCell,\n\tRichTextTableRow,\n\tRichTextText,\n\tRichTextTextBlock,\n} from \"./RichTextDocument.ts\"\nimport { normalizeRichTextDocument } from \"./richTextDocumentNormalization.ts\"\n\n// Public types\n\nexport interface RichTextDocumentWalker {\n\tdocument?(document: RichTextDocument): void\n\ttextBlock?(block: RichTextTextBlock): void\n\tbulletedList?(block: RichTextBulletedListBlock): void\n\tnumberedList?(block: RichTextNumberedListBlock): void\n\tlistItem?(item: RichTextListItem): void\n\tblockquote?(block: RichTextBlockquoteBlock): void\n\tmedia?(block: RichTextMediaBlock): void\n\tmodule?(block: RichTextModuleBlock): void\n\ttable?(block: RichTextTableBlock): void\n\ttableRow?(row: RichTextTableRow): void\n\ttableCell?(cell: RichTextTableCell): void\n\ttext?(inline: RichTextText): void\n\tlineBreak?(inline: RichTextLineBreak): void\n}\n\ntype BaseVisitor<T> = (value: T) => T\n\ntype Visitor<T> = BaseVisitor<T> | EnterExitVisitor<T>\n\ninterface EnterExitVisitor<T> {\n\tenter?(value: T): T\n\texit?(value: T): T\n}\n\nexport interface RichTextDocumentMapper {\n\tdocument?: Visitor<RichTextDocument>\n\ttextBlock?: Visitor<RichTextTextBlock>\n\tbulletedList?: Visitor<RichTextBulletedListBlock>\n\tnumberedList?: Visitor<RichTextNumberedListBlock>\n\tlistItem?: Visitor<RichTextListItem>\n\tblockquote?: Visitor<RichTextBlockquoteBlock>\n\tmedia?: Visitor<RichTextMediaBlock>\n\tmodule?: Visitor<RichTextModuleBlock>\n\ttable?: Visitor<RichTextTableBlock>\n\ttableRow?: Visitor<RichTextTableRow>\n\ttableCell?: Visitor<RichTextTableCell>\n\ttext?: Visitor<RichTextText>\n\tlineBreak?: Visitor<RichTextLineBreak>\n}\n\ninterface MapRichTextDocumentOptions {\n\tnormalize?: boolean\n}\n\nexport type RichTextDocumentNode =\n\t| RichTextDocument\n\t| RichTextBlock\n\t| RichTextListItem\n\t| RichTextTableRow\n\t| RichTextTableCell\n\t| RichTextInline\n\nexport interface RichTextDocumentNodeMatcher {\n\tdocument?(document: RichTextDocument): boolean\n\ttextBlock?(block: RichTextTextBlock): boolean\n\tbulletedList?(block: RichTextBulletedListBlock): boolean\n\tnumberedList?(block: RichTextNumberedListBlock): boolean\n\tlistItem?(item: RichTextListItem): boolean\n\tblockquote?(block: RichTextBlockquoteBlock): boolean\n\tmedia?(block: RichTextMediaBlock): boolean\n\tmodule?(block: RichTextModuleBlock): boolean\n\ttable?(block: RichTextTableBlock): boolean\n\ttableRow?(row: RichTextTableRow): boolean\n\ttableCell?(cell: RichTextTableCell): boolean\n\ttext?(inline: RichTextText): boolean\n\tlineBreak?(inline: RichTextLineBreak): boolean\n}\n\n// Public API\n\nexport function walkRichTextDocument(document: RichTextDocument, walker: RichTextDocumentWalker): void {\n\twalker.document?.(document)\n\tfor (const block of document.children) {\n\t\twalkRichTextBlock(block, walker)\n\t}\n}\n\nexport function findRichTextDocumentNode(\n\tdocument: RichTextDocument,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tif (matcher.document?.(document) === true) return document\n\tfor (const block of document.children) {\n\t\tconst match = findRichTextBlock(block, matcher)\n\t\tif (match) return match\n\t}\n\treturn undefined\n}\n\nexport function mapRichTextDocument(\n\tdocument: RichTextDocument,\n\tmapper: RichTextDocumentMapper,\n\toptions: MapRichTextDocumentOptions = {},\n): RichTextDocument {\n\tconst mappedDocument = mapRichTextNode(document, mapper.document, currentDocument => {\n\t\tconst children = mapChildren(currentDocument.children, child => mapRichTextBlock(child, mapper))\n\t\tif (children === currentDocument.children) return currentDocument\n\t\treturn { ...currentDocument, children }\n\t})\n\n\tif (mappedDocument === document) return document\n\tif (options.normalize === false) return mappedDocument\n\t// Mapping can produce invalid intermediate shapes, so normalize once at the end when the document changed.\n\treturn normalizeRichTextDocument(mappedDocument)\n}\n\n// Walk helpers\n\nfunction walkRichTextBlock(block: RichTextBlock, walker: RichTextDocumentWalker): void {\n\tswitch (block.type) {\n\t\tcase \"textBlock\":\n\t\t\twalker.textBlock?.(block)\n\t\t\tfor (const inline of block.children) {\n\t\t\t\twalkRichTextInline(inline, walker)\n\t\t\t}\n\t\t\treturn\n\t\tcase \"bulletedList\":\n\t\t\twalker.bulletedList?.(block)\n\t\t\tfor (const item of block.children) {\n\t\t\t\twalkRichTextListItem(item, walker)\n\t\t\t}\n\t\t\treturn\n\t\tcase \"numberedList\":\n\t\t\twalker.numberedList?.(block)\n\t\t\tfor (const item of block.children) {\n\t\t\t\twalkRichTextListItem(item, walker)\n\t\t\t}\n\t\t\treturn\n\t\tcase \"blockquote\":\n\t\t\twalker.blockquote?.(block)\n\t\t\tfor (const child of block.children) {\n\t\t\t\twalkRichTextBlock(child, walker)\n\t\t\t}\n\t\t\treturn\n\t\tcase \"media\":\n\t\t\twalker.media?.(block)\n\t\t\treturn\n\t\tcase \"module\":\n\t\t\twalker.module?.(block)\n\t\t\treturn\n\t\tcase \"table\":\n\t\t\twalker.table?.(block)\n\t\t\tfor (const row of block.children) {\n\t\t\t\twalkRichTextTableRow(row, walker)\n\t\t\t}\n\t\t\treturn\n\t}\n}\n\nfunction walkRichTextListItem(item: RichTextListItem, walker: RichTextDocumentWalker): void {\n\twalker.listItem?.(item)\n\tfor (const block of item.children) {\n\t\twalkRichTextBlock(block, walker)\n\t}\n}\n\nfunction walkRichTextTableRow(row: RichTextTableRow, walker: RichTextDocumentWalker): void {\n\twalker.tableRow?.(row)\n\tfor (const cell of row.children) {\n\t\twalkRichTextTableCell(cell, walker)\n\t}\n}\n\nfunction walkRichTextTableCell(cell: RichTextTableCell, walker: RichTextDocumentWalker): void {\n\twalker.tableCell?.(cell)\n\tfor (const block of cell.children) {\n\t\twalkRichTextBlock(block, walker)\n\t}\n}\n\nfunction walkRichTextInline(inline: RichTextInline, walker: RichTextDocumentWalker): void {\n\tswitch (inline.type) {\n\t\tcase \"text\":\n\t\t\twalker.text?.(inline)\n\t\t\treturn\n\t\tcase \"lineBreak\":\n\t\t\twalker.lineBreak?.(inline)\n\t\t\treturn\n\t}\n}\n\n// Find helpers\n\nfunction findRichTextBlock(\n\tblock: RichTextBlock,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tswitch (block.type) {\n\t\tcase \"textBlock\":\n\t\t\tif (matcher.textBlock?.(block) === true) return block\n\t\t\tfor (const inline of block.children) {\n\t\t\t\tconst match = findRichTextInline(inline, matcher)\n\t\t\t\tif (match) return match\n\t\t\t}\n\t\t\treturn undefined\n\t\tcase \"bulletedList\":\n\t\t\tif (matcher.bulletedList?.(block) === true) return block\n\t\t\tfor (const item of block.children) {\n\t\t\t\tconst match = findRichTextListItem(item, matcher)\n\t\t\t\tif (match) return match\n\t\t\t}\n\t\t\treturn undefined\n\t\tcase \"numberedList\":\n\t\t\tif (matcher.numberedList?.(block) === true) return block\n\t\t\tfor (const item of block.children) {\n\t\t\t\tconst match = findRichTextListItem(item, matcher)\n\t\t\t\tif (match) return match\n\t\t\t}\n\t\t\treturn undefined\n\t\tcase \"blockquote\":\n\t\t\tif (matcher.blockquote?.(block) === true) return block\n\t\t\tfor (const child of block.children) {\n\t\t\t\tconst match = findRichTextBlock(child, matcher)\n\t\t\t\tif (match) return match\n\t\t\t}\n\t\t\treturn undefined\n\t\tcase \"media\":\n\t\t\treturn matcher.media?.(block) === true ? block : undefined\n\t\tcase \"module\":\n\t\t\treturn matcher.module?.(block) === true ? block : undefined\n\t\tcase \"table\":\n\t\t\tif (matcher.table?.(block) === true) return block\n\t\t\tfor (const row of block.children) {\n\t\t\t\tconst match = findRichTextTableRow(row, matcher)\n\t\t\t\tif (match) return match\n\t\t\t}\n\t\t\treturn undefined\n\t}\n}\n\nfunction findRichTextListItem(\n\titem: RichTextListItem,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tif (matcher.listItem?.(item) === true) return item\n\tfor (const block of item.children) {\n\t\tconst match = findRichTextBlock(block, matcher)\n\t\tif (match) return match\n\t}\n\treturn undefined\n}\n\nfunction findRichTextTableRow(\n\trow: RichTextTableRow,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tif (matcher.tableRow?.(row) === true) return row\n\tfor (const cell of row.children) {\n\t\tconst match = findRichTextTableCell(cell, matcher)\n\t\tif (match) return match\n\t}\n\treturn undefined\n}\n\nfunction findRichTextTableCell(\n\tcell: RichTextTableCell,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tif (matcher.tableCell?.(cell) === true) return cell\n\tfor (const block of cell.children) {\n\t\tconst match = findRichTextBlock(block, matcher)\n\t\tif (match) return match\n\t}\n\treturn undefined\n}\n\nfunction findRichTextInline(\n\tinline: RichTextInline,\n\tmatcher: RichTextDocumentNodeMatcher,\n): RichTextDocumentNode | undefined {\n\tswitch (inline.type) {\n\t\tcase \"text\":\n\t\t\treturn matcher.text?.(inline) === true ? inline : undefined\n\t\tcase \"lineBreak\":\n\t\t\treturn matcher.lineBreak?.(inline) === true ? inline : undefined\n\t}\n}\n\n// Map helpers\n\nfunction mapRichTextBlock(block: RichTextBlock, mapper: RichTextDocumentMapper): RichTextBlock {\n\tswitch (block.type) {\n\t\tcase \"textBlock\":\n\t\t\treturn mapRichTextNode(block, mapper.textBlock, currentBlock => {\n\t\t\t\tconst children = mapChildren(currentBlock.children, child => mapRichTextInline(child, mapper))\n\t\t\t\tif (children === currentBlock.children) return currentBlock\n\t\t\t\treturn { ...currentBlock, children }\n\t\t\t})\n\t\tcase \"bulletedList\":\n\t\t\treturn mapRichTextNode(block, mapper.bulletedList, currentBlock => {\n\t\t\t\tconst children = mapChildren(currentBlock.children, child => mapRichTextListItem(child, mapper))\n\t\t\t\tif (children === currentBlock.children) return currentBlock\n\t\t\t\treturn { ...currentBlock, children }\n\t\t\t})\n\t\tcase \"numberedList\":\n\t\t\treturn mapRichTextNode(block, mapper.numberedList, currentBlock => {\n\t\t\t\tconst children = mapChildren(currentBlock.children, child => mapRichTextListItem(child, mapper))\n\t\t\t\tif (children === currentBlock.children) return currentBlock\n\t\t\t\treturn { ...currentBlock, children }\n\t\t\t})\n\t\tcase \"blockquote\":\n\t\t\treturn mapRichTextNode(block, mapper.blockquote, currentBlock => {\n\t\t\t\tconst children = mapChildren(currentBlock.children, child => mapRichTextBlock(child, mapper))\n\t\t\t\tif (children === currentBlock.children) return currentBlock\n\t\t\t\treturn { ...currentBlock, children }\n\t\t\t})\n\t\tcase \"media\":\n\t\t\treturn mapRichTextNode(block, mapper.media, currentBlock => currentBlock)\n\t\tcase \"module\":\n\t\t\treturn mapRichTextNode(block, mapper.module, currentBlock => currentBlock)\n\t\tcase \"table\":\n\t\t\treturn mapRichTextNode(block, mapper.table, currentBlock => {\n\t\t\t\tconst children = mapChildren(currentBlock.children, child => mapRichTextTableRow(child, mapper))\n\t\t\t\tif (children === currentBlock.children) return currentBlock\n\t\t\t\treturn { ...currentBlock, children }\n\t\t\t})\n\t}\n}\n\nfunction mapRichTextListItem(item: RichTextListItem, mapper: RichTextDocumentMapper): RichTextListItem {\n\treturn mapRichTextNode(item, mapper.listItem, currentItem => {\n\t\tconst children = mapChildren(currentItem.children, child => mapRichTextBlock(child, mapper))\n\t\tif (children === currentItem.children) return currentItem\n\t\treturn { ...currentItem, children }\n\t})\n}\n\nfunction mapRichTextTableRow(row: RichTextTableRow, mapper: RichTextDocumentMapper): RichTextTableRow {\n\treturn mapRichTextNode(row, mapper.tableRow, currentRow => {\n\t\tconst children = mapChildren(currentRow.children, child => mapRichTextTableCell(child, mapper))\n\t\tif (children === currentRow.children) return currentRow\n\t\treturn { ...currentRow, children }\n\t})\n}\n\nfunction mapRichTextTableCell(cell: RichTextTableCell, mapper: RichTextDocumentMapper): RichTextTableCell {\n\treturn mapRichTextNode(cell, mapper.tableCell, currentCell => {\n\t\tconst children = mapChildren(currentCell.children, child => mapRichTextBlock(child, mapper))\n\t\tif (children === currentCell.children) return currentCell\n\t\treturn { ...currentCell, children }\n\t})\n}\n\nfunction mapRichTextInline(inline: RichTextInline, mapper: RichTextDocumentMapper): RichTextInline {\n\tswitch (inline.type) {\n\t\tcase \"text\":\n\t\t\treturn mapRichTextNode(inline, mapper.text, currentInline => currentInline)\n\t\tcase \"lineBreak\":\n\t\t\treturn mapRichTextNode(inline, mapper.lineBreak, currentInline => currentInline)\n\t}\n}\n\nfunction mapRichTextNode<T>(node: T, visitor: Visitor<T> | undefined, mapChildren: (node: T) => T): T {\n\tconst enteredNode = applyEnterVisitor(node, visitor)\n\tconst nodeWithMappedChildren = mapChildren(enteredNode)\n\treturn applyExitVisitor(nodeWithMappedChildren, visitor)\n}\n\nfunction applyEnterVisitor<T>(value: T, visitor: Visitor<T> | undefined): T {\n\tif (!visitor || typeof visitor === \"function\") return value\n\treturn visitor.enter?.(value) ?? value\n}\n\nfunction applyExitVisitor<T>(value: T, visitor: Visitor<T> | undefined): T {\n\tif (!visitor) return value\n\tif (typeof visitor === \"function\") return visitor(value)\n\treturn visitor.exit?.(value) ?? value\n}\n\nfunction mapChildren<T>(children: T[], mapChild: (child: T) => T): T[] {\n\tlet mappedChildren: T[] | undefined\n\tfor (let index = 0; index < children.length; index++) {\n\t\tconst child = children[index]\n\t\tif (!child) continue\n\n\t\tconst mappedChild = mapChild(child)\n\t\tif (mappedChild === child) continue\n\n\t\tmappedChildren ??= Array.from(children)\n\t\tmappedChildren[index] = mappedChild\n\t}\n\n\treturn mappedChildren ?? children\n}\n", "import { unhandledError } from \"@framerjs/shared\"\nimport { getHTMLTextContentCached } from \"utils/getHTMLTextContent.ts\"\nimport type { RichTextDocument, RichTextDocumentVariant } from \"./RichTextDocument.ts\"\nimport { normalizeRichTextDocument } from \"./richTextDocumentNormalization.ts\"\nimport { findRichTextDocumentNode } from \"./richTextDocumentTraversal.ts\"\nimport { parseRichTextHtmlToDocument } from \"./richTextHtmlParser.ts\"\nimport { getPlainTextFromRichTextDocument } from \"./richTextPlainText.ts\"\nimport { isRichTextDocument } from \"./richTextStorage.ts\"\n\nfunction createEmptyRichTextDocument<V extends RichTextDocumentVariant>(variant: V): RichTextDocument<V> {\n\treturn {\n\t\ttype: \"richText\",\n\t\tvariant,\n\t\tchildren: [],\n\t}\n}\n\nexport function getRichTextDocumentFromRichTextTreeValue<V extends RichTextDocumentVariant>(\n\tvalue: unknown,\n\tvariant: V,\n): RichTextDocument {\n\tif (isRichTextDocument(value)) {\n\t\ttry {\n\t\t\treturn normalizeRichTextDocument(value)\n\t\t} catch (error) {\n\t\t\tunhandledError(error)\n\t\t\treturn createEmptyRichTextDocument(variant)\n\t\t}\n\t}\n\n\tif (typeof value !== \"string\") return createEmptyRichTextDocument(variant)\n\n\ttry {\n\t\treturn parseRichTextHtmlToDocument(value, variant)\n\t} catch (error) {\n\t\tunhandledError(error)\n\t\treturn createEmptyRichTextDocument(variant)\n\t}\n}\n\nexport function getPlainTextFromRichTextTreeValue(value: unknown): string {\n\tif (typeof value === \"string\") return getHTMLTextContentCached(value)\n\tif (!isRichTextDocument(value)) return \"\"\n\treturn getPlainTextFromRichTextDocument(normalizeRichTextDocument(value), {\n\t\tpreserveTrailingEmptyBlockNewLine: true,\n\t})\n}\n\nexport function isEmptyRichTextDocument(value: unknown): boolean {\n\tif (typeof value === \"string\") return getHTMLTextContentCached(value).length === 0\n\tif (!isRichTextDocument(value)) return true\n\treturn !hasMeaningfulRichTextContent(normalizeRichTextDocument(value))\n}\n\nfunction hasMeaningfulRichTextContent(document: RichTextDocument): boolean {\n\treturn (\n\t\tfindRichTextDocumentNode(document, {\n\t\t\ttext(inline) {\n\t\t\t\treturn inline.text.length > 0\n\t\t\t},\n\t\t\tmedia() {\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tmodule() {\n\t\t\t\treturn true\n\t\t\t},\n\t\t}) !== undefined\n\t)\n}\n", "import type { CanvasNode } from \"document/models/CanvasTree/nodes/CanvasNode.ts\"\nimport { isDynamicValue } from \"document/models/CanvasTree/traits/DynamicValue.ts\"\nimport { defaultStackDirection, hasGridLayout, withLayout } from \"document/models/CanvasTree/traits/WithLayout.ts\"\nimport { isPinnable } from \"document/models/CanvasTree/traits/WithPins.ts\"\nimport { isNumber } from \"utils/typeChecks.ts\"\n\nfunction updateStackAndGridChildCache(\n\tnode: CanvasNode | undefined,\n\tchildNode: CanvasNode,\n\tresolveDynamicStackDirection: boolean,\n) {\n\tif (!node || !withLayout(node)) {\n\t\tchildNode.cache.parentDirected = undefined\n\t\treturn\n\t}\n\n\tchildNode.cache.parentDirected = node.layout\n\n\tif (hasGridLayout(node)) {\n\t\tchildNode.cache.parentDirectedRowHeightType = node.gridRowHeightType\n\t\tchildNode.cache.parentDirectedColumnCount = isNumber(node.gridColumnCount) ? node.gridColumnCount : undefined\n\t}\n\n\tif (isDynamicValue(node.stackDirection) && resolveDynamicStackDirection) {\n\t\tchildNode.cache.parentDirection = node.resolveValue(\"stackDirection\") ?? defaultStackDirection\n\t} else {\n\t\tchildNode.cache.parentDirection = node.stackDirection ?? null\n\t}\n\n\tif (isPinnable(node)) {\n\t\tchildNode.cache.parentWidthType = node.widthType\n\t\tchildNode.cache.parentHeightType = node.heightType\n\t}\n}\n\n/**\n * When updating the layout cache for code generation, we need to preserve the\n * dynamic value, as stack items need to collect a dynamic layout based on the\n * parentDirection variable. In the future we would like to refactor code\n * generation to be independent of the cache. When that happens, this helper\n * function can be cleanup.\n */\nexport function updateStackAndGridChildCacheForCodeGeneration(node: CanvasNode | undefined, childNode: CanvasNode) {\n\tupdateStackAndGridChildCache(node, childNode, false)\n}\n\nexport function updateStackAndGridChildCacheForCanvasSandbox(node: CanvasNode | undefined, childNode: CanvasNode) {\n\tupdateStackAndGridChildCache(node, childNode, true)\n}\n", "import { assertNever } from \"@framerjs/shared\"\nimport { updateHTMLText } from \"document/models/CanvasTree/nodes/utils/updateHTMLText.ts\"\nimport type { LocalizedValue, NonNullLocalizedValue } from \"document/models/LocalizedValue.ts\"\nimport { getLocalizedValueText, isNonNullLocalizedValue } from \"document/models/LocalizedValue.ts\"\nimport type { LocalizedRichTextDocumentVariant, RichTextDocument } from \"document/models/richText/RichTextDocument.ts\"\nimport { isLocalizedRichTextDocumentVariant } from \"document/models/richText/RichTextDocument.ts\"\nimport { isRichTextDocument } from \"document/models/richText/richTextStorage.ts\"\nimport { isString } from \"utils/typeChecks.ts\"\nimport type { LocalizationSourceTextType } from \"./getLocalizationSourceTextType.ts\"\n\nexport interface CompatibleTextLocalizedValue extends NonNullLocalizedValue<string> {\n\treadonly type?: undefined\n}\n\nexport interface CompatibleRichTextLocalizedValue extends NonNullLocalizedValue<\n\tstring | RichTextDocument<LocalizedRichTextDocumentVariant>\n> {\n\treadonly type: \"rich-text\"\n}\n\nexport type CompatibleNonNullLocalizedValue = CompatibleTextLocalizedValue | CompatibleRichTextLocalizedValue\n\nexport function convertToTextLocalizedValue(\n\tlocalizedValue: LocalizedValue<string | RichTextDocument> | undefined,\n): CompatibleTextLocalizedValue | undefined {\n\tif (!isNonNullLocalizedValue(localizedValue)) return\n\n\tif (localizedValue.type === undefined) {\n\t\treturn isString(localizedValue.value)\n\t\t\t? { ...localizedValue, type: undefined, value: localizedValue.value }\n\t\t\t: {\n\t\t\t\t\t...localizedValue,\n\t\t\t\t\ttype: undefined,\n\t\t\t\t\tvalue: getLocalizedValueText(localizedValue, { preserveNewLines: true }),\n\t\t\t\t}\n\t}\n\n\treturn {\n\t\t...localizedValue,\n\t\ttype: undefined,\n\t\tvalue: getLocalizedValueText(localizedValue, { preserveNewLines: true }),\n\t}\n}\n\nexport function convertToRichTextLocalizedValue(\n\tlocalizedValue: LocalizedValue<string | RichTextDocument> | undefined,\n\thtml: string,\n): CompatibleRichTextLocalizedValue | undefined {\n\tif (!isNonNullLocalizedValue(localizedValue)) return\n\n\tif (isLocalizedRichTextDocumentValue(localizedValue.value)) {\n\t\treturn { ...localizedValue, type: \"rich-text\", value: localizedValue.value }\n\t}\n\n\tif (localizedValue.type === \"rich-text\" && isString(localizedValue.value)) {\n\t\treturn { ...localizedValue, type: \"rich-text\", value: localizedValue.value }\n\t}\n\n\tif (!isString(localizedValue.value)) return\n\n\treturn {\n\t\t...localizedValue,\n\t\ttype: \"rich-text\",\n\t\tvalue: updateHTMLText(html, localizedValue.value),\n\t}\n}\n\nexport function getCompatibleNonNullLocalizedValue(\n\ttextType: LocalizationSourceTextType,\n\tlocalizedValue: LocalizedValue<string | RichTextDocument> | undefined,\n\thtml: string,\n): CompatibleNonNullLocalizedValue | undefined {\n\tswitch (textType) {\n\t\tcase \"text\":\n\t\t\treturn convertToTextLocalizedValue(localizedValue)\n\n\t\tcase \"rich-text\":\n\t\t\treturn convertToRichTextLocalizedValue(localizedValue, html)\n\n\t\tdefault:\n\t\t\tassertNever(textType)\n\t}\n}\n\nfunction isLocalizedRichTextDocumentValue(value: unknown): value is RichTextDocument<LocalizedRichTextDocumentVariant> {\n\treturn isRichTextDocument(value) && isLocalizedRichTextDocumentVariant(value.variant)\n}\n", "import { experiments } from \"app/experiments.ts\"\nimport type { LocalizedValue } from \"document/models/LocalizedValue.ts\"\n\ntype OptionalLocalizationSourceType = LocalizedValue[\"type\"] | \"text\"\nexport type LocalizationSourceTextType = NonNullable<OptionalLocalizationSourceType>\n\nconst identifier = `[a-z1-9]+(?:-[a-z1-9]+)*`\n\nconst attribute = `${identifier}=\"[^\"]*\"`\nconst attributes = String.raw`(?:\\s+${attribute})*`\n\nconst openingTag = String.raw`<${identifier}${attributes}\\s*>`\nconst openingTags = `(?:${openingTag})+`\n\nconst closingTag = String.raw`<\\/\\s*${identifier}\\s*>`\nconst closingTags = `(?:${closingTag})+`\n\nconst text = `[^<>]*`\nconst whitespace = String.raw`\\s*`\n\nconst regex = new RegExp(`^${whitespace}${openingTags}${text}${closingTags}${whitespace}$`, \"iu\")\n\nexport function getLocalizationSourceTextType(html: string): LocalizationSourceTextType {\n\tif (experiments.isOn(\"localizedLinks\") && html.includes(\"</a>\")) return \"rich-text\"\n\treturn regex.test(html) ? \"text\" : \"rich-text\"\n}\n", "import type { LocalizedRichTextDocumentVariant, RichTextDocument } from \"document/models/richText/RichTextDocument.ts\"\nimport { getProseMirrorDocFromRichTextTreeValue } from \"document/models/richText/richTextPmAdapter.ts\"\nimport type { Node as ProseMirrorNode } from \"prosemirror-model\"\nimport { createEditorState } from \"prosemirror/editorState.ts\"\nimport type { BackgroundMaskAttrs } from \"prosemirror/schema/backgroundMask.ts\"\nimport { isBackgroundMaskMark } from \"prosemirror/schema/backgroundMask.ts\"\nimport { isBoldMark } from \"prosemirror/schema/bold.ts\"\nimport { fullSchemaParams, makeSchema } from \"prosemirror/schema/index.ts\"\nimport type { FramerProseMirrorSchema } from \"prosemirror/schema/index.ts\"\nimport { isInlineStylesMark } from \"prosemirror/schema/inlineStyles.ts\"\nimport { isItalicMark } from \"prosemirror/schema/italic.ts\"\nimport { isLinkMark } from \"prosemirror/schema/link.ts\"\nimport { isProseMirrorTextNode } from \"prosemirror/schema/text.ts\"\nimport type { TextBlockAttrs, TextBlockTag } from \"prosemirror/schema/textBlock.ts\"\nimport { isTextBlockNode } from \"prosemirror/schema/textBlock.ts\"\nimport { serializeRichText } from \"prosemirror/serialization/dom.ts\"\nimport type { InlineStyles } from \"prosemirror/styles.ts\"\n\ntype TextBlockStyles = Pick<TextBlockAttrs, \"blockStyles\" | \"inlineStyles\" | \"textStylePreset\">\n\nexport function applyStylesToLocalizedRichText(originalHTML: string, localizedHTML: string): string {\n\treturn applyCanvasStylesToLocalizedRichTextValue(originalHTML, localizedHTML)\n}\n\nexport function applyCanvasStylesToLocalizedRichTextDocument(\n\toriginalHTML: string,\n\tlocalizedDocument: RichTextDocument<LocalizedRichTextDocumentVariant>,\n): string {\n\treturn applyCanvasStylesToLocalizedRichTextValue(originalHTML, localizedDocument)\n}\n\nfunction applyCanvasStylesToLocalizedRichTextValue(\n\toriginalHTML: string,\n\tlocalizedValue: string | RichTextDocument<LocalizedRichTextDocumentVariant>,\n): string {\n\tconst schema = makeSchema(fullSchemaParams)\n\tconst originalState = createEditorState(originalHTML, schema)\n\n\tconst stylesByPositionByTag: Partial<Record<TextBlockTag, TextBlockStyles[]>> = {}\n\n\tconst linkStylePresetByPosition: (string | undefined)[] = []\n\tconst inlineStylesForBoldByPosition: (InlineStyles | undefined)[] = []\n\tconst inlineStylesForItalicByPosition: (InlineStyles | undefined)[] = []\n\n\tconst backgroundMaskByPosition: (BackgroundMaskAttrs | undefined)[] = []\n\n\toriginalState.doc.descendants(node => {\n\t\tif (isTextBlockNode(node)) {\n\t\t\tconst styles: TextBlockStyles = {\n\t\t\t\tblockStyles: node.attrs.blockStyles,\n\t\t\t\tinlineStyles: node.attrs.inlineStyles,\n\t\t\t\ttextStylePreset: node.attrs.textStylePreset,\n\t\t\t}\n\n\t\t\tconst stylesByPosition = stylesByPositionByTag[node.attrs.tag] ?? []\n\t\t\tstylesByPosition.push(styles)\n\t\t\tstylesByPositionByTag[node.attrs.tag] = stylesByPosition\n\t\t}\n\n\t\tif (isProseMirrorTextNode(node)) {\n\t\t\tlet isBold = false\n\t\t\tlet isItalic = false\n\n\t\t\tlet inlineStyles: InlineStyles | undefined\n\t\t\tlet backgroundMask: BackgroundMaskAttrs | undefined\n\n\t\t\tfor (const mark of node.marks) {\n\t\t\t\tisBold ||= isBoldMark(mark)\n\t\t\t\tisItalic ||= isItalicMark(mark)\n\n\t\t\t\tif (isBackgroundMaskMark(mark)) {\n\t\t\t\t\tbackgroundMask ??= mark.attrs\n\t\t\t\t}\n\n\t\t\t\tif (isLinkMark(mark)) {\n\t\t\t\t\tlinkStylePresetByPosition.push(mark.attrs.linkStylePreset)\n\t\t\t\t}\n\n\t\t\t\tif (isInlineStylesMark(mark)) {\n\t\t\t\t\tinlineStyles = mark.attrs.inlineStyles\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbackgroundMaskByPosition.push(backgroundMask)\n\n\t\t\tif (isBold) {\n\t\t\t\tinlineStylesForBoldByPosition.push(inlineStyles)\n\t\t\t}\n\n\t\t\tif (isItalic) {\n\t\t\t\tinlineStylesForItalicByPosition.push(inlineStyles)\n\t\t\t}\n\t\t}\n\t})\n\n\tconst localizedState = createEditorState(getLocalizedProseMirrorInput(localizedValue, schema), schema)\n\n\tconst transaction = localizedState.tr\n\tconst inlineStylesByNode = new Map<ProseMirrorNode, InlineStyles | undefined>()\n\n\tlocalizedState.doc.descendants((node, position, parent) => {\n\t\tif (isTextBlockNode(node)) {\n\t\t\tconst stylesByPosition = stylesByPositionByTag[node.attrs.tag] ?? []\n\t\t\t// If there is only one style left for this tag, keep it in the\n\t\t\t// array. This will cause extra text blocks in the localized HTML to\n\t\t\t// use the same styles as the last text block with the same tag in\n\t\t\t// the original HTML.\n\t\t\tconst styles = stylesByPosition.length > 1 ? stylesByPosition.shift() : stylesByPosition[0]\n\n\t\t\tif (styles) {\n\t\t\t\t// Save the styles in a map so we can apply them to the TextNode\n\t\t\t\t// as an InlineStylesMark as well.\n\t\t\t\tinlineStylesByNode.set(node, styles.inlineStyles)\n\n\t\t\t\t// Apply the styles to the text block.\n\t\t\t\ttransaction.setNodeMarkup(position, node.type, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t...styles,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (isProseMirrorTextNode(node)) {\n\t\t\tlet isBold = false\n\t\t\tlet isItalic = false\n\n\t\t\tlet inlineStyles = parent ? inlineStylesByNode.get(parent) : undefined\n\n\t\t\t// Apply the link style preset to all links.\n\t\t\tfor (const mark of node.marks) {\n\t\t\t\tisBold ||= isBoldMark(mark)\n\t\t\t\tisItalic ||= isItalicMark(mark)\n\n\t\t\t\tif (isLinkMark(mark)) {\n\t\t\t\t\tconst linkStylePreset =\n\t\t\t\t\t\tlinkStylePresetByPosition.length > 1 ? linkStylePresetByPosition.shift() : linkStylePresetByPosition[0]\n\n\t\t\t\t\ttransaction.addMark(\n\t\t\t\t\t\tposition,\n\t\t\t\t\t\tposition + node.nodeSize,\n\t\t\t\t\t\tschema.marks.link.create({\n\t\t\t\t\t\t\t...mark.attrs,\n\t\t\t\t\t\t\tlinkStylePreset,\n\t\t\t\t\t\t}),\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isBold) {\n\t\t\t\tinlineStyles =\n\t\t\t\t\tinlineStylesForBoldByPosition.length > 1\n\t\t\t\t\t\t? inlineStylesForBoldByPosition.shift()\n\t\t\t\t\t\t: inlineStylesForBoldByPosition[0]\n\t\t\t}\n\n\t\t\tif (isItalic) {\n\t\t\t\tinlineStyles =\n\t\t\t\t\tinlineStylesForItalicByPosition.length > 1\n\t\t\t\t\t\t? inlineStylesForItalicByPosition.shift()\n\t\t\t\t\t\t: inlineStylesForItalicByPosition[0]\n\t\t\t}\n\n\t\t\tif (inlineStyles) {\n\t\t\t\ttransaction.addMark(\n\t\t\t\t\tposition,\n\t\t\t\t\tposition + node.nodeSize,\n\t\t\t\t\tschema.marks.inlineStyles.create({\n\t\t\t\t\t\tinlineStyles,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tconst backgroundMask =\n\t\t\t\tbackgroundMaskByPosition.length > 1 ? backgroundMaskByPosition.shift() : backgroundMaskByPosition[0]\n\n\t\t\tif (backgroundMask) {\n\t\t\t\ttransaction.addMark(position, position + node.nodeSize, schema.marks.backgroundMask.create(backgroundMask))\n\t\t\t}\n\t\t}\n\t})\n\n\tconst newLocalizedState = localizedState.apply(transaction)\n\treturn serializeRichText(newLocalizedState.doc, schema)\n}\n\nfunction getLocalizedProseMirrorInput(\n\tlocalizedValue: string | RichTextDocument<LocalizedRichTextDocumentVariant>,\n\tschema: FramerProseMirrorSchema,\n): string | ProseMirrorNode {\n\tif (typeof localizedValue === \"string\") return localizedValue\n\treturn getProseMirrorDocFromRichTextTreeValue(localizedValue, schema)\n}\n", "import {\n\tapplyCanvasStylesToLocalizedRichTextDocument,\n\tapplyStylesToLocalizedRichText,\n} from \"document/components/chrome/localization/applyStylesToLocalizedRichText.ts\"\nimport type { CompatibleNonNullLocalizedValue } from \"document/components/chrome/localization/getCompatibleLocalizedValue.ts\"\nimport { updateHTMLText } from \"document/models/CanvasTree/nodes/utils/updateHTMLText.ts\"\n\nexport function getStyledLocalizedRichTextHTML(\n\tbaseHTML: string,\n\tlocalizedValue: CompatibleNonNullLocalizedValue,\n): string {\n\tif (localizedValue.type !== \"rich-text\") return updateHTMLText(baseHTML, localizedValue.value)\n\tif (typeof localizedValue.value === \"string\") return applyStylesToLocalizedRichText(baseHTML, localizedValue.value)\n\treturn applyCanvasStylesToLocalizedRichTextDocument(baseHTML, localizedValue.value)\n}\n", "import type { ModuleExportIdentifierString } from \"@framerjs/shared\"\nimport { assert, assertNever, shouldBeNever } from \"@framerjs/shared\"\nimport type { CanvasNode } from \"document/models/CanvasTree/index.ts\"\nimport type { ConvertFromEnumOutputType, ValueTransform } from \"document/models/CanvasTree/traits/ValueTransform.ts\"\nimport {\n\tisKnownValueTransformName,\n\tisQueryableValueTransformName,\n\tisSetTransformInputType,\n} from \"document/models/CanvasTree/traits/ValueTransform.ts\"\nimport type {\n\tCombinedVariableProviderControlMap,\n\tVariableProviderControlMap,\n} from \"document/models/CanvasTree/traits/VariableProvider.ts\"\nimport type { VariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport { isVariableReference } from \"document/models/CanvasTree/traits/VariableReference.ts\"\nimport type { HasCollectionDataSource } from \"document/models/CanvasTree/traits/WithCollectionDataSource.ts\"\nimport type { WithCollectionOptions } from \"document/models/CanvasTree/traits/WithCollectionOptions.ts\"\nimport { defaultFiltersOperator } from \"document/models/CanvasTree/traits/WithCollectionOptions.ts\"\nimport type { VariableID } from \"document/models/CanvasTree/traits/WithVariables.ts\"\nimport { convertFromEnumOrStringFallbackOutputValue } from \"document/models/CanvasTree/traits/utils/valueTransformUtils.ts\"\nimport { isRepeaterVariableId } from \"document/utils/RepeaterVariables.ts\"\nimport type {\n\tBinaryOperation,\n\tCondition,\n\tExpression,\n\tFrom,\n\tOrderExpression,\n\tQuery,\n\tSelectExpression,\n} from \"library/modules/cms/types.ts\"\nimport { BinaryOperator, DataType, FunctionName, OrderDirection, UnaryOperator } from \"library/modules/cms/types.ts\"\nimport type { ControlDescription, WithOptional } from \"library/render/types/PropertyControls.ts\"\nimport { ControlType } from \"library/render/types/PropertyControls.ts\"\nimport { isIdVariableId } from \"utils/collectionReferenceUtils.ts\"\nimport { isBoolean, isNumber } from \"utils/typeChecks.ts\"\n\ntype DataRepeaterNode = CanvasNode & HasCollectionDataSource & WithCollectionOptions\n\ntype ResolveVariable = (value: VariableReference) => Expression\ntype ResolveCollection = (value: ModuleExportIdentifierString) => any\n\nexport function getQueryDefaultCollectionAlias(node: CanvasNode) {\n\treturn node.getPrimaryId()\n}\n\nfunction getConvertFromEnumOrStringOutputValue(\n\tvalue: VariableReference | unknown,\n\toutputType: ConvertFromEnumOutputType,\n\tresolveValue: (value: VariableReference | unknown) => Expression,\n): Expression {\n\tassert(outputType === ControlType.Boolean, \"Unsupported enum output type:\", outputType)\n\n\tif (isBoolean(value) || isVariableReference(value)) {\n\t\treturn resolveValue(value)\n\t}\n\n\treturn {\n\t\ttype: \"LiteralValue\",\n\t\tvalue: convertFromEnumOrStringFallbackOutputValue(outputType, undefined),\n\t}\n}\n\nexport function getTransformExpression(\n\ttransform: ValueTransform,\n\texpression: Expression,\n\tcontrol: ControlDescription | undefined,\n\tresolveVariable: ResolveVariable,\n): Expression {\n\tfunction resolveValue(value: VariableReference | unknown): Expression {\n\t\tif (isVariableReference(value)) {\n\t\t\treturn resolveVariable(value)\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"LiteralValue\",\n\t\t\tvalue,\n\t\t}\n\t}\n\n\tassert(isQueryableValueTransformName(transform.name), `Transform is not a valid expression: ${transform.name}`)\n\n\tswitch (transform.name) {\n\t\tcase \"contains\":\n\t\t\tswitch (control?.type) {\n\t\t\t\tcase ControlType.MultiCollectionReference:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\toperator: BinaryOperator.In,\n\t\t\t\t\t\tleft: resolveValue(transform.value),\n\t\t\t\t\t\tright: expression,\n\t\t\t\t\t}\n\t\t\t\tdefault:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\t\tfunctionName: FunctionName.Contains,\n\t\t\t\t\t\targuments: [expression, resolveValue(transform.value)],\n\t\t\t\t\t}\n\t\t\t}\n\n\t\tcase \"containsAny\": {\n\t\t\tconst transformValueExpression = resolveValue(transform.value)\n\n\t\t\tconst expressionContainsAnyOfTransformValue: BinaryOperation = {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\tfunctionName: FunctionName.Length,\n\t\t\t\t\targuments: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\t\t\tfunctionName: FunctionName.Intersect,\n\t\t\t\t\t\t\targuments: [expression, transformValueExpression],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\toperator: BinaryOperator.GreaterThan,\n\t\t\t\tright: { type: \"LiteralValue\", value: 0 },\n\t\t\t}\n\n\t\t\tconst transformValueIsEmpty: BinaryOperation = {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\tfunctionName: FunctionName.Length,\n\t\t\t\t\targuments: [transformValueExpression],\n\t\t\t\t},\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tright: { type: \"LiteralValue\", value: 0 },\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\tleft: expressionContainsAnyOfTransformValue,\n\t\t\t\toperator: BinaryOperator.Or,\n\t\t\t\tright: transformValueIsEmpty,\n\t\t\t}\n\t\t}\n\n\t\tcase \"containsAll\": {\n\t\t\tconst valueExpression = resolveValue(transform.value)\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\tfunctionName: FunctionName.Length,\n\t\t\t\t\targuments: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\t\t\tfunctionName: FunctionName.Intersect,\n\t\t\t\t\t\t\targuments: [expression, valueExpression],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\tfunctionName: FunctionName.Length,\n\t\t\t\t\targuments: [valueExpression],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tcase \"startsWith\":\n\t\t\treturn {\n\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\tfunctionName: FunctionName.StartsWith,\n\t\t\t\targuments: [expression, resolveValue(transform.value)],\n\t\t\t}\n\n\t\tcase \"endsWith\":\n\t\t\treturn {\n\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\tfunctionName: FunctionName.EndsWith,\n\t\t\t\targuments: [expression, resolveValue(transform.value)],\n\t\t\t}\n\n\t\tcase \"equals\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tleft: expression,\n\t\t\t\tright: resolveValue(transform.value),\n\t\t\t}\n\n\t\tcase \"isSet\": {\n\t\t\tconst notNull: Expression = {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.NotEquals,\n\t\t\t\tleft: expression,\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\tvalue: null,\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tif (!control) return notNull\n\n\t\t\tconst controlType = control.type\n\t\t\tif (!isSetTransformInputType(controlType)) return notNull\n\n\t\t\tswitch (controlType) {\n\t\t\t\tcase ControlType.MultiCollectionReference:\n\t\t\t\tcase ControlType.Array:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\toperator: BinaryOperator.And,\n\t\t\t\t\t\tleft: notNull,\n\t\t\t\t\t\tright: {\n\t\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\t\toperator: BinaryOperator.GreaterThan,\n\t\t\t\t\t\t\tleft: {\n\t\t\t\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\t\t\t\tfunctionName: FunctionName.Length,\n\t\t\t\t\t\t\t\targuments: [expression],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tright: {\n\t\t\t\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\t\t\t\tvalue: 0,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\tcase ControlType.String:\n\t\t\t\tcase ControlType.RichText:\n\t\t\t\tcase ControlType.Date:\n\t\t\t\tcase ControlType.Link:\n\t\t\t\tcase ControlType.Image:\n\t\t\t\tcase ControlType.File:\n\t\t\t\tcase ControlType.CollectionReference:\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\toperator: BinaryOperator.And,\n\t\t\t\t\t\tleft: notNull,\n\t\t\t\t\t\tright: {\n\t\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\t\toperator: BinaryOperator.NotEquals,\n\t\t\t\t\t\t\tleft: expression,\n\t\t\t\t\t\t\tright: {\n\t\t\t\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\t\t\t\tvalue: \"\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\tcase ControlType.Boolean:\n\t\t\t\tcase ControlType.Number:\n\t\t\t\tcase ControlType.ResponsiveImage:\n\t\t\t\t\treturn notNull\n\t\t\t\tdefault:\n\t\t\t\t\tshouldBeNever(controlType)\n\t\t\t\t\treturn notNull\n\t\t\t}\n\t\t}\n\n\t\tcase \"greaterThan\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.GreaterThan,\n\t\t\t\tleft: expression,\n\t\t\t\tright: resolveValue(transform.value),\n\t\t\t}\n\n\t\tcase \"lessThan\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.LessThan,\n\t\t\t\tleft: expression,\n\t\t\t\tright: resolveValue(transform.value),\n\t\t\t}\n\n\t\tcase \"negate\":\n\t\t\treturn {\n\t\t\t\ttype: \"UnaryOperation\",\n\t\t\t\toperator: UnaryOperator.Not,\n\t\t\t\tvalue: expression,\n\t\t\t}\n\n\t\tcase \"toBoolean\":\n\t\t\treturn {\n\t\t\t\ttype: \"TypeCast\",\n\t\t\t\tdataType: DataType.Boolean,\n\t\t\t\tvalue: expression,\n\t\t\t}\n\n\t\tcase \"isBefore\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.LessThanOrEqual,\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\tvalue: expression,\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\tvalue: resolveValue(transform.value),\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase \"isAfter\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.GreaterThanOrEqual,\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\tvalue: expression,\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\tvalue: resolveValue(transform.value),\n\t\t\t\t},\n\t\t\t}\n\n\t\tcase \"isBetweenDates\": {\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.And,\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\toperator: BinaryOperator.GreaterThanOrEqual,\n\t\t\t\t\tleft: {\n\t\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\t\tvalue: expression,\n\t\t\t\t\t},\n\t\t\t\t\tright: {\n\t\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\t\tvalue: resolveValue(transform.start),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\toperator: BinaryOperator.LessThanOrEqual,\n\t\t\t\t\tleft: {\n\t\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\t\tvalue: expression,\n\t\t\t\t\t},\n\t\t\t\t\tright: {\n\t\t\t\t\t\ttype: \"TypeCast\",\n\t\t\t\t\t\tdataType: DataType.Date,\n\t\t\t\t\t\tvalue: resolveValue(transform.end),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tcase \"isIncludedIn\":\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.In,\n\t\t\t\tleft: expression,\n\t\t\t\tright: resolveValue(transform.value),\n\t\t\t}\n\n\t\tcase \"convertFromEnum\": {\n\t\t\tif (control?.type !== ControlType.Enum) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\tvalue: convertFromEnumOrStringFallbackOutputValue(transform.outputType, undefined),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst seenCases = new Set<string>()\n\t\t\tconst conditions: Condition[] = []\n\n\t\t\tfor (const enumCase of transform.cases) {\n\t\t\t\tif (seenCases.has(enumCase.from)) continue\n\t\t\t\tif (!control.options.includes(enumCase.from)) continue\n\n\t\t\t\tseenCases.add(enumCase.from)\n\n\t\t\t\tconditions.push({\n\t\t\t\t\ttype: \"Condition\",\n\t\t\t\t\twhen: {\n\t\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\t\tvalue: enumCase.from,\n\t\t\t\t\t},\n\t\t\t\t\t// biome-ignore lint/suspicious/noThenProperty: We can't change the property name anymore.\n\t\t\t\t\tthen: getConvertFromEnumOrStringOutputValue(enumCase.to, transform.outputType, resolveValue),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: \"Case\",\n\t\t\t\tvalue: expression,\n\t\t\t\tconditions,\n\t\t\t\telse: getConvertFromEnumOrStringOutputValue(transform.default, transform.outputType, resolveValue),\n\t\t\t}\n\t\t}\n\n\t\tcase \"convertFromString\": {\n\t\t\tconst seenCases = new Set<string>()\n\t\t\tconst conditions: Condition[] = []\n\n\t\t\tfor (const enumCase of transform.cases) {\n\t\t\t\tif (seenCases.has(enumCase.from)) continue\n\n\t\t\t\tseenCases.add(enumCase.from)\n\n\t\t\t\tconditions.push({\n\t\t\t\t\ttype: \"Condition\",\n\t\t\t\t\twhen: {\n\t\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\t\tvalue: enumCase.from,\n\t\t\t\t\t},\n\t\t\t\t\t// biome-ignore lint/suspicious/noThenProperty: We can't change the property name anymore.\n\t\t\t\t\tthen: getConvertFromEnumOrStringOutputValue(enumCase.to, transform.outputType, resolveValue),\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: \"Case\",\n\t\t\t\tvalue: expression,\n\t\t\t\tconditions,\n\t\t\t\telse: getConvertFromEnumOrStringOutputValue(transform.default, transform.outputType, resolveValue),\n\t\t\t}\n\t\t}\n\n\t\tdefault:\n\t\t\tassertNever(transform.name)\n\t}\n}\n\nfunction isOptionalVariable(\n\tvariableReference: VariableReference,\n\tcombinedControlMap: CombinedVariableProviderControlMap,\n): boolean {\n\tif (!variableReference.providerId) return false\n\n\tconst controlMap = combinedControlMap.get(variableReference.providerId)\n\tif (!controlMap) return false\n\n\tconst control = controlMap.get(variableReference.id)\n\tif (!control) return false\n\n\tconst optionalKey: keyof WithOptional = \"optional\"\n\treturn optionalKey in control && control[optionalKey] === true\n}\n\ninterface ExpressionWithOptionalVariables {\n\texpression: Expression\n\toptionalVariables: VariableReference[]\n}\n\nfunction getWhereExpression(\n\tnode: DataRepeaterNode,\n\tcombinedControlMap: CombinedVariableProviderControlMap,\n\tqueriedVariableIds: Set<VariableID>,\n\tdefaultCollectionAlias: string,\n\tresolveVariable: ResolveVariable,\n\tresolveCollection: ResolveCollection,\n): Expression | undefined {\n\tif (!node.collectionFilters) return\n\n\tconst filters = node.collectionFilters.filters\n\n\tconst expressions: ExpressionWithOptionalVariables[] = []\n\n\tfor (const { itemKey, transforms } of filters) {\n\t\tif (!itemKey) continue\n\n\t\tconst controlMap = combinedControlMap?.get(node.getPrimaryId())\n\n\t\tconst control = controlMap?.get(itemKey)\n\t\tif (!control) continue\n\n\t\tqueriedVariableIds.add(itemKey)\n\n\t\tif (control.type !== ControlType.Boolean && transforms.length === 0) continue\n\n\t\tconst optionalVariables: VariableReference[] = []\n\n\t\tfunction resolveVariableForFilterTransform(variableReference: VariableReference): Expression {\n\t\t\tif (isOptionalVariable(variableReference, combinedControlMap)) {\n\t\t\t\toptionalVariables.push(variableReference)\n\t\t\t}\n\n\t\t\treturn resolveVariable(variableReference)\n\t\t}\n\n\t\tconst shouldResolve = transforms.some(transform => {\n\t\t\tif (!isKnownValueTransformName(transform.name)) return false\n\t\t\tif (!isQueryableValueTransformName(transform.name)) return false\n\n\t\t\tswitch (transform.name) {\n\t\t\t\tcase \"convertFromEnum\":\n\t\t\t\tcase \"convertFromString\":\n\t\t\t\tcase \"endsWith\":\n\t\t\t\tcase \"equals\":\n\t\t\t\tcase \"greaterThan\":\n\t\t\t\tcase \"isAfter\":\n\t\t\t\tcase \"isBefore\":\n\t\t\t\tcase \"isBetweenDates\":\n\t\t\t\tcase \"isSet\":\n\t\t\t\tcase \"lessThan\":\n\t\t\t\tcase \"negate\":\n\t\t\t\tcase \"startsWith\":\n\t\t\t\tcase \"toBoolean\":\n\t\t\t\t\treturn true\n\n\t\t\t\tcase \"contains\":\n\t\t\t\tcase \"containsAny\":\n\t\t\t\tcase \"containsAll\":\n\t\t\t\tcase \"isIncludedIn\":\n\t\t\t\t\t// In almost all cases, variables are resolved before being used in a `contains`\n\t\t\t\t\t// or `isIncludedIn`. The only exception is a smart component variable that's\n\t\t\t\t\t// set on the canvas.\n\t\t\t\t\treturn !isVariableReference(transform.value)\n\n\t\t\t\tdefault:\n\t\t\t\t\tassertNever(transform.name)\n\t\t\t}\n\t\t})\n\n\t\tlet expression: Expression = getQueryIdentifier(\n\t\t\titemKey,\n\t\t\tcontrol,\n\t\t\tqueriedVariableIds,\n\t\t\tdefaultCollectionAlias,\n\t\t\tresolveCollection,\n\t\t\tshouldResolve,\n\t\t)\n\n\t\tfor (const transform of transforms) {\n\t\t\t// Value transforms might be unknown after a rollback.\n\t\t\tif (!isKnownValueTransformName(transform.name)) continue\n\n\t\t\texpression = getTransformExpression(transform, expression, control, resolveVariableForFilterTransform)\n\t\t}\n\n\t\texpressions.push({ expression, optionalVariables })\n\t}\n\n\t// The filters are either combined using AND or OR. When optional variables are used within a\n\t// filter, these filters are ignored when the optional variable is undefined. This conditional\n\t// logic is applied to the query.\n\t//\n\t// Whe filters are combined using AND:\n\t// ```sql\n\t// WHERE (@A IS NULL OR A = @A)\n\t//   AND (@B IS NULL OR B = @B)\n\t//   AND (@C IS NULL OR C = @C)\n\t// ```\n\t//\n\t// When filters are combined using OR:\n\t// ```sql\n\t// WHERE (@A IS NULL AND @B IS NULL AND @C IS NULL)\n\t//    OR (@A IS NOT NULL AND A = @A)\n\t//    OR (@B IS NOT NULL AND B = @B)\n\t//    OR (@C IS NOT NULL AND C = @C)\n\t// ```\n\n\tconst filtersOperator = node.collectionFiltersOperator ?? defaultFiltersOperator\n\tswitch (filtersOperator) {\n\t\tcase \"all\":\n\t\t\treturn createAndWhereExpression(expressions, resolveVariable)\n\t\tcase \"any\":\n\t\t\treturn createOrWhereExpression(expressions, resolveVariable)\n\t\tdefault:\n\t\t\tassertNever(filtersOperator)\n\t}\n}\n\nfunction createAndWhereExpression(\n\texpressions: ExpressionWithOptionalVariables[],\n\tresolveVariable: ResolveVariable,\n): Expression | undefined {\n\tif (expressions.length === 0) return\n\n\treturn expressions.reduce<Expression | undefined>((acc, expression) => {\n\t\tconst expressionOrOptionalVariablesAreNull = getOrAnyOptionalVariableIsNullExpression(\n\t\t\texpression.expression,\n\t\t\texpression.optionalVariables,\n\t\t\tresolveVariable,\n\t\t)\n\n\t\tif (!acc) return expressionOrOptionalVariablesAreNull\n\n\t\treturn {\n\t\t\ttype: \"BinaryOperation\",\n\t\t\toperator: BinaryOperator.And,\n\t\t\tleft: acc,\n\t\t\tright: expressionOrOptionalVariablesAreNull,\n\t\t}\n\t}, undefined)\n}\n\nfunction createOrWhereExpression(\n\texpressions: ExpressionWithOptionalVariables[],\n\tresolveVariable: ResolveVariable,\n): Expression | undefined {\n\tif (expressions.length === 0) return\n\n\tconst result = expressions.reduce<Expression | undefined>((acc, expression) => {\n\t\tconst expressionAndOptionalVariablesAreNotNull = getAndAllOptionalVariablesAreNotNullExpression(\n\t\t\texpression.expression,\n\t\t\texpression.optionalVariables,\n\t\t\tresolveVariable,\n\t\t)\n\n\t\tif (!acc) return expressionAndOptionalVariablesAreNotNull\n\n\t\treturn {\n\t\t\ttype: \"BinaryOperation\",\n\t\t\toperator: BinaryOperator.Or,\n\t\t\tleft: acc,\n\t\t\tright: expressionAndOptionalVariablesAreNotNull,\n\t\t}\n\t}, undefined)\n\n\t// If some filters don't use optional variables, we don't need to disable all filters if all\n\t// optional variables are undefined.\n\tconst allFiltersUseOptionalVariables = expressions.every(expression => expression.optionalVariables.length > 0)\n\tif (!allFiltersUseOptionalVariables) return result\n\n\tconst allUsedOptionalVariables = expressions.flatMap(expression => expression.optionalVariables)\n\tassert(allUsedOptionalVariables.length > 0, \"allUsedOptionalVariables should have at least one element\")\n\n\t// Disable all filters when all optional variables are undefined.\n\treturn getOrAllOptionalVariablesAreNullExpression(result, allUsedOptionalVariables, resolveVariable)\n}\n\n/**\n * A = @A  --> (@A IS NULL OR A = @A)\n */\nfunction getOrAnyOptionalVariableIsNullExpression(\n\texpression: Expression,\n\tusedOptionalVariables: VariableReference[],\n\tresolveVariable: ResolveVariable,\n) {\n\tfor (const usedOptionalVariable of usedOptionalVariables) {\n\t\texpression = {\n\t\t\ttype: \"BinaryOperation\",\n\t\t\toperator: BinaryOperator.Or,\n\t\t\tleft: {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tleft: resolveVariable(usedOptionalVariable),\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\tvalue: null,\n\t\t\t\t},\n\t\t\t},\n\t\t\tright: expression,\n\t\t}\n\t}\n\treturn expression\n}\n\n/**\n * A = @A  --> (@A IS NOT NULL AND A = @A)\n */\nfunction getAndAllOptionalVariablesAreNotNullExpression(\n\texpression: Expression,\n\tusedOptionalVariables: VariableReference[],\n\tresolveVariable: ResolveVariable,\n) {\n\tfor (const usedOptionalVariable of usedOptionalVariables) {\n\t\texpression = {\n\t\t\ttype: \"BinaryOperation\",\n\t\t\toperator: BinaryOperator.And,\n\t\t\tleft: {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.NotEquals,\n\t\t\t\tleft: resolveVariable(usedOptionalVariable),\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\tvalue: null,\n\t\t\t\t},\n\t\t\t},\n\t\t\tright: expression,\n\t\t}\n\t}\n\treturn expression\n}\n\n/**\n * A = @A OR B = @B OR C = @C  --> (@A IS NULL AND @B IS NULL AND @C IS NULL) OR (A = @A OR B = @B OR C = @C)\n */\nfunction getOrAllOptionalVariablesAreNullExpression(\n\texpression: Expression | undefined,\n\tallUsedOptionalVariables: VariableReference[],\n\tresolveVariable: ResolveVariable,\n): Expression | undefined {\n\tif (!expression) return\n\n\tconst allOptionalVariablesAreNullExpression = allUsedOptionalVariables.reduce<Expression | undefined>(\n\t\t(acc, variable) => {\n\t\t\tconst variableIsNullExpression: Expression = {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tleft: resolveVariable(variable),\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"LiteralValue\",\n\t\t\t\t\tvalue: null,\n\t\t\t\t},\n\t\t\t}\n\n\t\t\tif (!acc) return variableIsNullExpression\n\n\t\t\treturn {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.And,\n\t\t\t\tleft: acc,\n\t\t\t\tright: variableIsNullExpression,\n\t\t\t}\n\t\t},\n\t\tundefined,\n\t)\n\n\tif (!allOptionalVariablesAreNullExpression) return expression\n\n\treturn {\n\t\ttype: \"BinaryOperation\",\n\t\toperator: BinaryOperator.Or,\n\t\tleft: expression,\n\t\tright: allOptionalVariablesAreNullExpression,\n\t}\n}\n\nfunction getOrderByExpressions(\n\tnode: DataRepeaterNode,\n\tcontrolMap: VariableProviderControlMap,\n\tqueriedVariableIds: Set<VariableID>,\n\tdefaultCollectionAlias: string,\n\tresolveVariable: ResolveVariable,\n\tresolveCollection: ResolveCollection,\n): OrderExpression[] {\n\tif (node.collectionOrder && node.collectionOrder.length > 0) {\n\t\tconst orderByExpressions: Expression[] = []\n\n\t\tfor (const { itemKey, direction } of node.collectionOrder) {\n\t\t\tif (!itemKey) continue\n\n\t\t\tconst control = controlMap.get(itemKey)\n\t\t\tif (!control) continue\n\n\t\t\tconst expression: OrderExpression = getQueryIdentifier(\n\t\t\t\titemKey,\n\t\t\t\tcontrol,\n\t\t\t\tqueriedVariableIds,\n\t\t\t\tdefaultCollectionAlias,\n\t\t\t\tresolveCollection,\n\t\t\t)\n\n\t\t\tif (direction === \"desc\") {\n\t\t\t\texpression.direction = OrderDirection.Descending\n\t\t\t}\n\n\t\t\torderByExpressions.push(expression)\n\t\t}\n\n\t\treturn orderByExpressions\n\t}\n\n\t// If we filter by a single collection reference included in a multi collection reference we want to sort the result\n\t// by the index of the collection reference in the multi collection reference to keep the order defined in the CMS.\n\tif (node.collectionFilters && node.collectionFilters.filters.length === 1) {\n\t\tconst filter = node.collectionFilters.filters.at(0)\n\t\tassert(filter, \"filter should exist\")\n\n\t\tif (filter.itemKey) {\n\t\t\tconst control = controlMap.get(filter.itemKey)\n\n\t\t\tconst expression: Expression = getQueryIdentifier(\n\t\t\t\tfilter.itemKey,\n\t\t\t\tcontrol,\n\t\t\t\tqueriedVariableIds,\n\t\t\t\tdefaultCollectionAlias,\n\t\t\t\tresolveCollection,\n\t\t\t)\n\n\t\t\tconst orderByExpression = getOrderByExpressionForFilter(\n\t\t\t\tnode,\n\t\t\t\tfilter.transforms,\n\t\t\t\texpression,\n\t\t\t\tcontrol,\n\t\t\t\tresolveVariable,\n\t\t\t)\n\n\t\t\tif (orderByExpression) {\n\t\t\t\treturn [orderByExpression]\n\t\t\t}\n\t\t}\n\t}\n\n\tif (node.collectionReverse) {\n\t\treturn [\n\t\t\t{\n\t\t\t\ttype: \"Identifier\",\n\t\t\t\tname: \"index\",\n\t\t\t\tcollection: defaultCollectionAlias,\n\t\t\t\tdirection: OrderDirection.Descending,\n\t\t\t},\n\t\t]\n\t}\n\n\treturn []\n}\n\nexport function getOrderByExpressionForFilter(\n\tnode: DataRepeaterNode,\n\ttransforms: ValueTransform[],\n\texpression: Expression,\n\tcontrol: ControlDescription | undefined,\n\tresolveVariable: ResolveVariable,\n): OrderExpression | undefined {\n\tif (transforms.length !== 1) return undefined\n\tif (control?.type !== ControlType.CollectionReference) return undefined\n\n\tconst transform = transforms[0]\n\tassert(transform, \"Transform must exist\")\n\n\tif (transform.name !== \"isIncludedIn\") return undefined\n\tif (!isVariableReference(transform.value)) return undefined\n\n\treturn {\n\t\ttype: \"FunctionCall\",\n\t\tfunctionName: FunctionName.IndexOf,\n\t\targuments: [resolveVariable(transform.value), expression],\n\t\tdirection: node.collectionReverse ? OrderDirection.Descending : OrderDirection.Ascending,\n\t}\n}\n\nexport function getQueryFrom(\n\tdataIdentifier: ModuleExportIdentifierString,\n\tcontrolMap: VariableProviderControlMap,\n\tqueriedVariableIds: Set<VariableID>,\n\tdefaultCollectionAlias: string,\n\tresolveCollection: ResolveCollection,\n) {\n\tlet result: From = {\n\t\ttype: \"Collection\",\n\t\tdata: resolveCollection(dataIdentifier),\n\t\talias: defaultCollectionAlias,\n\t}\n\n\tconst usedCollectionReferences = new Map<VariableID, ModuleExportIdentifierString>()\n\tfor (const variableId of queriedVariableIds) {\n\t\tconst path = variableId.split(\".\")\n\n\t\tfor (let i = 1; i < path.length; i++) {\n\t\t\tconst referenceId = path.slice(0, i).join(\".\")\n\n\t\t\tconst control = controlMap.get(referenceId)\n\t\t\tif (control?.type !== ControlType.CollectionReference) continue\n\n\t\t\tconst referenceDataIdentifier = control.dataIdentifier as ModuleExportIdentifierString\n\t\t\tusedCollectionReferences.set(referenceId, referenceDataIdentifier)\n\t\t}\n\t}\n\n\tfor (const [referenceCollectionAlias, referenceDataIdentifier] of usedCollectionReferences) {\n\t\tconst [collectionAlias, variableName] = getQueryVariableNames(referenceCollectionAlias, defaultCollectionAlias)\n\n\t\tresult = {\n\t\t\ttype: \"LeftJoin\",\n\t\t\tleft: result,\n\t\t\tright: {\n\t\t\t\ttype: \"Collection\",\n\t\t\t\tdata: resolveCollection(referenceDataIdentifier),\n\t\t\t\talias: referenceCollectionAlias,\n\t\t\t},\n\t\t\tconstraint: {\n\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\toperator: BinaryOperator.Equals,\n\t\t\t\tleft: {\n\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\tname: variableName,\n\t\t\t\t\tcollection: collectionAlias,\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\tname: \"id\",\n\t\t\t\t\tcollection: referenceCollectionAlias,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\treturn result\n}\n\nexport function getQuerySelect(\n\tcontrolMap: VariableProviderControlMap,\n\tselectedVariableIds: ReadonlySet<VariableID>,\n\tqueriedVariableIds: Set<VariableID>,\n\tdefaultCollectionAlias: string,\n\tresolveCollection: ResolveCollection,\n) {\n\tconst result: SelectExpression[] = []\n\n\tfor (const variableId of selectedVariableIds) {\n\t\tif (isRepeaterVariableId(variableId)) continue\n\n\t\tconst control = controlMap.get(variableId)\n\n\t\tconst expression: SelectExpression = getQueryIdentifier(\n\t\t\tvariableId,\n\t\t\tcontrol,\n\t\t\tqueriedVariableIds,\n\t\t\tdefaultCollectionAlias,\n\t\t\tresolveCollection,\n\t\t)\n\n\t\tif (expression.type !== \"Identifier\" || variableId !== expression.name) {\n\t\t\texpression.alias = variableId\n\t\t}\n\n\t\tresult.push(expression)\n\t}\n\n\treturn result\n}\n\nexport function getQueryForDataRepeater(\n\tnode: DataRepeaterNode,\n\tcombinedControlMap: CombinedVariableProviderControlMap,\n\tselectedVariableIds: ReadonlySet<VariableID>,\n\tresolveVariable: ResolveVariable,\n\tresolveCollection: ResolveCollection,\n): Query {\n\tconst query: Partial<Query> = {}\n\tconst queriedVariableIds = new Set<VariableID>()\n\tconst defaultCollectionAlias = getQueryDefaultCollectionAlias(node)\n\n\tif (node.collectionFilters) {\n\t\tquery.where = getWhereExpression(\n\t\t\tnode,\n\t\t\tcombinedControlMap,\n\t\t\tqueriedVariableIds,\n\t\t\tdefaultCollectionAlias,\n\t\t\tresolveVariable,\n\t\t\tresolveCollection,\n\t\t)\n\t}\n\n\tconst controlMap = combinedControlMap.get(node.getPrimaryId())\n\tassert(controlMap, \"Control map of repeater must exist\")\n\n\tconst orderBy = getOrderByExpressions(\n\t\tnode,\n\t\tcontrolMap,\n\t\tqueriedVariableIds,\n\t\tdefaultCollectionAlias,\n\t\tresolveVariable,\n\t\tresolveCollection,\n\t)\n\n\tif (orderBy.length > 0) {\n\t\tquery.orderBy = orderBy\n\t}\n\n\tif (isNumber(node.collectionStartOffset)) {\n\t\tquery.offset = {\n\t\t\ttype: \"LiteralValue\",\n\t\t\tvalue: node.collectionStartOffset,\n\t\t}\n\t}\n\n\tif (isNumber(node.collectionLimit)) {\n\t\tquery.limit = {\n\t\t\ttype: \"LiteralValue\",\n\t\t\tvalue: node.collectionLimit,\n\t\t}\n\t}\n\n\t// NOTE: We have to call `getQuerySelect` before `getQueryFrom` because it\n\t// might add variables to `queriedVariableIds`.\n\tconst select = getQuerySelect(\n\t\tcontrolMap,\n\t\tselectedVariableIds,\n\t\tqueriedVariableIds,\n\t\tdefaultCollectionAlias,\n\t\tresolveCollection,\n\t)\n\n\tconst from = getQueryFrom(\n\t\tnode.dataIdentifier,\n\t\tcontrolMap,\n\t\tqueriedVariableIds,\n\t\tdefaultCollectionAlias,\n\t\tresolveCollection,\n\t)\n\n\treturn { from, select, ...query }\n}\n\nfunction getQueryIdentifier(\n\tvariableId: VariableID,\n\tcontrol: ControlDescription | undefined,\n\tqueriedVariableIds: Set<VariableID>,\n\tdefaultCollectionAlias: string,\n\tresolveCollection: ResolveCollection,\n\tshouldResolve = true,\n): Expression {\n\t// Make sure we always use the resolved id variable because the unresolved\n\t// id could reference a deleted item.\n\tif (shouldResolve && control?.type === ControlType.CollectionReference && !isIdVariableId(variableId)) {\n\t\tvariableId += \".id\"\n\t}\n\n\t// Add the variable to the queried variable to generate the correct joins.\n\tqueriedVariableIds.add(variableId)\n\n\tconst [collectionAlias, variableName] = getQueryVariableNames(variableId, defaultCollectionAlias)\n\n\t// When using a multi collection reference as an identifier, we can't just\n\t// use the plain IDs as they may point to items that have since been\n\t// deleted. To fix this, we resolve the IDs by using a subquery, flatten\n\t// the results back into an array, and use that instead.\n\tif (shouldResolve && control?.type === ControlType.MultiCollectionReference) {\n\t\treturn {\n\t\t\ttype: \"FunctionCall\",\n\t\t\tfunctionName: FunctionName.FlatArray,\n\t\t\targuments: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"Select\",\n\t\t\t\t\tfrom: {\n\t\t\t\t\t\ttype: \"Collection\",\n\t\t\t\t\t\tdata: resolveCollection(control.dataIdentifier as ModuleExportIdentifierString),\n\t\t\t\t\t\talias: variableId,\n\t\t\t\t\t},\n\t\t\t\t\tselect: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\tname: \"id\",\n\t\t\t\t\t\t\tcollection: variableId,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\twhere: {\n\t\t\t\t\t\ttype: \"BinaryOperation\",\n\t\t\t\t\t\toperator: BinaryOperator.In,\n\t\t\t\t\t\tleft: {\n\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\tname: \"id\",\n\t\t\t\t\t\t\tcollection: variableId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tright: {\n\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\tname: variableName,\n\t\t\t\t\t\t\tcollection: collectionAlias,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\torderBy: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: \"FunctionCall\",\n\t\t\t\t\t\t\tfunctionName: FunctionName.IndexOf,\n\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\t\t\tname: variableName,\n\t\t\t\t\t\t\t\t\tcollection: collectionAlias,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttype: \"Identifier\",\n\t\t\t\t\t\t\t\t\tname: \"id\",\n\t\t\t\t\t\t\t\t\tcollection: variableId,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t}\n\n\treturn {\n\t\ttype: \"Identifier\",\n\t\tname: variableName,\n\t\tcollection: collectionAlias,\n\t}\n}\n\nexport function getQueryVariableNames(\n\tvariableId: VariableID,\n\tdefaultCollectionAlias: string,\n): [VariableID, VariableID] {\n\tconst path = variableId.split(\".\")\n\n\tif (path.length === 1) {\n\t\treturn [defaultCollectionAlias, variableId]\n\t}\n\n\tconst parentId = path.slice(0, -1).join(\".\")\n\tconst nestedId = path.slice(-1).join(\".\")\n\n\treturn [parentId, nestedId]\n}\n"],
  "mappings": "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",
  "names": ["text", "attributes", "identifier", "text", "attribute", "isObject", "mapChildren", "resolveVariableForFilterTransform"]
}
