@hyper-elements/react 0.0.1 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GUIDE.md +195 -0
- package/LICENSE +21 -0
- package/README.md +388 -2
- package/REFERENCE.md +951 -0
- package/dist/builder.cjs +8545 -0
- package/dist/builder.cjs.map +1 -0
- package/dist/builder.d.cts +89 -0
- package/dist/builder.d.ts +89 -0
- package/dist/builder.js +8518 -0
- package/dist/builder.js.map +1 -0
- package/dist/image.cjs +472 -0
- package/dist/image.cjs.map +1 -0
- package/dist/image.d.cts +34 -0
- package/dist/image.d.ts +34 -0
- package/dist/image.js +466 -0
- package/dist/image.js.map +1 -0
- package/dist/inspect.cjs +3601 -0
- package/dist/inspect.cjs.map +1 -0
- package/dist/inspect.d.cts +472 -0
- package/dist/inspect.d.ts +472 -0
- package/dist/inspect.js +3572 -0
- package/dist/inspect.js.map +1 -0
- package/dist/pdf.cjs +1256 -0
- package/dist/pdf.cjs.map +1 -0
- package/dist/pdf.d.cts +29 -0
- package/dist/pdf.d.ts +29 -0
- package/dist/pdf.js +1254 -0
- package/dist/pdf.js.map +1 -0
- package/dist/primitives.cjs +5550 -0
- package/dist/primitives.cjs.map +1 -0
- package/dist/primitives.d.cts +7302 -0
- package/dist/primitives.d.ts +7302 -0
- package/dist/primitives.js +5476 -0
- package/dist/primitives.js.map +1 -0
- package/package.json +143 -7
- package/index.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/primitives/components.tsx","../../core/src/model.ts","../../core/src/diagnostics.ts","../../core/src/email-clients.ts","../../core/src/kinds.ts","../../core/src/define.ts","../../core/src/conditions.ts","../../core/src/styles.ts","../../core/src/composites.ts","../../core/src/layouts.ts","../../core/src/roots.ts","../../core/src/document.ts","../../core/src/canvas.ts","../../core/src/components.ts","../../core/src/registry.ts","../../core/src/normalize.ts","../../core/src/declared.ts","../../core/src/expand.ts","../../core/src/resolve.ts","../../core/src/markup.ts","../../core/src/writers/shared/css.ts","../../core/src/writers/jsx.ts","../../core/src/writers/shared/block-map.ts","../../core/src/writers/shared/bytes.ts","../../core/src/writers/shared/classes.ts","../../core/src/writers/shared/fonts.ts","../../core/src/writers/email/context.ts","../../core/src/writers/shared/link.ts","../../core/src/writers/email/markup.tsx","../../core/src/writers/email/styles.tsx","../../core/src/writers/shared/gaps.ts","../../core/src/writers/email/layout.tsx","../../core/src/writers/email/Button.tsx","../../core/src/writers/email/Column.tsx","../../core/src/writers/email/Divider.tsx","../../core/src/writers/email/spacers.tsx","../../core/src/writers/email/Email.tsx","../../core/src/writers/email/Text.tsx","../../core/src/writers/email/Heading.tsx","../../core/src/writers/email/Html.tsx","../../core/src/writers/email/Image.tsx","../../core/src/writers/email/LineBreak.tsx","../../core/src/writers/email/Link.tsx","../../core/src/writers/email/lists.tsx","../../core/src/writers/email/List.tsx","../../core/src/writers/email/ListItem.tsx","../../core/src/writers/email/MergeTag.tsx","../../core/src/writers/shared/estimate.ts","../../core/src/writers/shared/phone-width.ts","../../core/src/writers/email/Row.tsx","../../core/src/writers/email/Layer.tsx","../../core/src/writers/email/Section.tsx","../../core/src/writers/email/Span.tsx","../../core/src/writers/email/Table.tsx","../../core/src/writers/email/TableCell.tsx","../../core/src/writers/email/TableRow.tsx","../../core/src/writers/email/Video.tsx","../../core/src/writers/email/index.tsx","../../core/src/writers/shared/support.ts","../../core/src/writers/email/support.ts","../../core/src/writers/shared/paged.ts","../../core/src/writers/page/context.ts","../../core/src/writers/page/layout.tsx","../../core/src/writers/page/styles.tsx","../../core/src/writers/page/Button.tsx","../../core/src/writers/page/Column.tsx","../../core/src/writers/page/Divider.tsx","../../core/src/writers/page/Text.tsx","../../core/src/writers/page/Heading.tsx","../../core/src/writers/page/Html.tsx","../../core/src/writers/page/Image.tsx","../../core/src/writers/page/LineBreak.tsx","../../core/src/writers/page/Link.tsx","../../core/src/writers/page/List.tsx","../../core/src/writers/page/ListItem.tsx","../../core/src/writers/page/MergeTag.tsx","../../core/src/writers/page/Page.tsx","../../core/src/writers/page/Row.tsx","../../core/src/writers/page/Layer.tsx","../../core/src/writers/page/PageNumber.tsx","../../core/src/writers/page/Document.tsx","../../core/src/writers/page/Canvas.tsx","../../core/src/writers/page/Svg.tsx","../../core/src/writers/page/Section.tsx","../../core/src/writers/page/Span.tsx","../../core/src/writers/page/Table.tsx","../../core/src/writers/page/TableCell.tsx","../../core/src/writers/page/TableRow.tsx","../../core/src/writers/page/Video.tsx","../../core/src/writers/page/index.tsx","../../core/src/writers/plain-text.ts","../../core/src/writers/shared/pretty.ts","../../core/src/writers/index.ts","../src/utils/collect.ts","../src/utils/server-renderer.ts","../src/utils/render-scope.ts","../src/primitives/collect.tsx","../src/builder/print.ts","../src/builder/tool-defaults.ts","../src/builder/read-values.ts","../src/builder/manifest.ts","../src/builder/values.ts","../src/builder/hide.ts","../src/builder/malformed.ts","../src/builder/reading.ts","../src/builder/read-runs.ts","../src/builder/image-sizing.ts","../src/builder/lexical.ts","../src/builder/text-json.ts","../src/builder/text.ts","../src/builder/paint.ts","../src/builder/text-tool.ts","../src/builder/unread.ts","../src/builder/blocks.ts","../src/builder/rows.ts","../src/builder/read.ts","../src/builder/check.ts","../src/builder/ids.ts","../src/builder/design.ts","../src/builder/fonts.ts","../src/builder/runs.ts","../src/builder/tools.ts","../src/builder/columns.ts","../src/builder/locked.ts","../src/builder/raise.ts","../src/builder/write.ts","../src/builder/index.ts"],"names":["Button","Canvas","Circle","Column","Divider","Document","Ellipse","Email","Grid","Heading","Html","Image","Layer","Line","LineBreak","Link","List","ListItem","Menu","MergeTag","Page","PageBreak","PageFooter","PageHeader","PageNumber","Path","Polygon","Rect","Row","Section","Social","Span","Svg","Table","TableCell","TableRow","Text","Video","same","length","a","read","side","shape","compact","kind","block","size","padding","text","link","item","WRITTEN","box","h","isObject","rule","own","hidden","raw","lineHeight","border","inText","stretched","image","items","wraps","line","frame","clamp","round","open","html","share","css","declarations","px","insets","sides","radius","fontFamily","write","markup","attributes","element","insert","TAG","pieces","hiding","fontFaces","isNode","color","content","PLACE","phoneText","fontWeight","letterSpacing","inline","marker","gapOf","placed","ALIGN","phonePadding","component","sheet","fallback","OUTLOOK_ONLY","TEXT_ALIGN","JUSTIFY","sized","boxed","textBlock","HtmlBlock","current","TAGS","COMPONENTS","propsOf","writer","phoneWidth","shown","VOID","resolved","SHARED","React","frames","ENTITIES","NODE_KEYS","PRIMITIVE","SIDES","LINE","inner","number","attrs","asset","decode","readHidden","copy","textStyle","declaration","last","tidy","closing","style","bodyValues","close","MARK","attribute","nested","styleOf","NONE","tag","only","painted","withId","lineWidth","video","ZERO","obj","add","defined","BOX","column","row","arr","SIZES","values","font","fontStack","escapeHtml","CSS","within","richText","value","TEXT_BOX","TOOLS","phoneBox","imageWidth","hasBox","childrenOf","ALIGN_ITEMS","spacer","tokens","breakpoints","PAINT","empty","top","divider"],"mappings":"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","file":"builder.js","sourcesContent":["/**\n * The primitives as React components, made from their definitions: their\n * props' types come from the same definitions that validate them.\n */\nimport type React from \"react\";\nimport {\n Button as ButtonDefinition,\n Column as ColumnDefinition,\n Divider as DividerDefinition,\n Email as EmailDefinition,\n Heading as HeadingDefinition,\n Html as HtmlDefinition,\n Image as ImageDefinition,\n LineBreak as LineBreakDefinition,\n Link as LinkDefinition,\n List as ListDefinition,\n ListItem as ListItemDefinition,\n MergeTag as MergeTagDefinition,\n Page as PageDefinition,\n Text as TextDefinition,\n Row as RowDefinition,\n Section as SectionDefinition,\n Social as SocialDefinition,\n Menu as MenuDefinition,\n Grid as GridDefinition,\n Layer as LayerDefinition,\n Document as DocumentDefinition,\n DocumentPage as DocumentPageDefinition,\n PageBreak as PageBreakDefinition,\n PageHeader as PageHeaderDefinition,\n PageFooter as PageFooterDefinition,\n PageNumber as PageNumberDefinition,\n Canvas as CanvasDefinition,\n Svg as SvgDefinition,\n Rect as RectDefinition,\n Circle as CircleDefinition,\n Ellipse as EllipseDefinition,\n Line as LineDefinition,\n Polygon as PolygonDefinition,\n Path as PathDefinition,\n Video as VideoDefinition,\n Span as SpanDefinition,\n Table as TableDefinition,\n TableCell as TableCellDefinition,\n TableRow as TableRowDefinition,\n type ComponentDefinition,\n type PropsInput,\n type InputOf,\n type StyleInput,\n type StyleSpecs,\n} from \"@unlayer-internal/elements-core\";\nimport { collectingPrimitives, recordPrimitive } from \"./collect\";\n\n/** The props of a primitive: its semantic props, plus its style, phone and hover styles, and children. */\nexport type PrimitiveProps<D> = D extends ComponentDefinition<infer P, infer S, any> ? PropsInput<P> & Extras<StyleInput<S>, ConditionStyles<D>> : never;\n\n/** The styles that may be set on phones: those whose definition says `mobile: true`. */\ntype MobileKeys<S extends StyleSpecs> = { [K in keyof S]-?: S[K] extends { mobile: true } ? K : never }[keyof S];\n\n/** A condition's block of the styles `K`; where it takes none, nothing can be set in it. */\ntype Block<S extends StyleSpecs, K> = [K] extends [never] ? never : { [Q in K & keyof S]?: InputOf<S[Q][\"kind\"]> };\n\n/**\n * A component's condition blocks in `style`: `mobile` with the styles it takes on phones, `hover` with its hover\n * styles (from its definition's list). Where a component takes none, the block is `never`: no value but `undefined`.\n */\nexport type ConditionStyles<D> = D extends ComponentDefinition<any, infer S, infer H> ? { mobile?: Block<S, MobileKeys<S>>; hover?: Block<S, H[number]> } : never;\n\n/** What every primitive takes beside its own props. */\ninterface Extras<Style, Conditions> {\n /** Stable id; one is assigned in document order when it's left out. */\n id?: string;\n /** Its style, and inside it its styles on phones (`mobile`) and on hover (`hover`), where it takes them. */\n style?: Style & Conditions;\n hidden?: { mobile?: boolean; desktop?: boolean };\n children?: React.ReactNode;\n}\n\n// Each component's props and style have names of their own (HeadingProps, HeadingStyle), so a type error names them\n// (\"'marginBottom' does not exist in type 'HeadingStyle'\") rather than spelling out every style the component takes.\ntype StyleOf<D> = D extends ComponentDefinition<any, infer S, any> ? { [K in keyof S]?: InputOf<S[K][\"kind\"]> } : never;\ntype PropsOf<D, Style> = D extends ComponentDefinition<infer P, any, any> ? PropsInput<P> & Extras<Style, ConditionStyles<D>> : never;\n\n/** Marks a primitive's component type. */\nexport const PRIMITIVE = Symbol.for(\"@hyper-elements/react/primitive\");\n\nfunction createPrimitive<D extends ComponentDefinition<any, any>>(definition: D): React.FC<PrimitiveProps<D>> {\n const Primitive = (props: PrimitiveProps<D>): React.ReactElement => {\n const collection = collectingPrimitives();\n if (!collection) {\n throw new Error(\n `[Elements] <${definition.type}> is part of a template: render the template with render(), not this component on its own`\n );\n }\n return recordPrimitive(collection, definition.type, props as Record<string, unknown>);\n };\n Primitive.displayName = definition.type;\n (Primitive as unknown as Record<symbol, string>)[PRIMITIVE] = definition.type;\n return Primitive;\n}\n\nexport const Email: React.FC<EmailProps> = createPrimitive(EmailDefinition);\nexport const Page: React.FC<PageProps> = createPrimitive(PageDefinition);\nexport const Section: React.FC<SectionProps> = createPrimitive(SectionDefinition);\nexport const Row: React.FC<RowProps> = createPrimitive(RowDefinition);\nexport const Column: React.FC<ColumnProps> = createPrimitive(ColumnDefinition);\nexport const Text: React.FC<TextProps> = createPrimitive(TextDefinition);\nexport const Heading: React.FC<HeadingProps> = createPrimitive(HeadingDefinition);\nexport const Span: React.FC<SpanProps> = createPrimitive(SpanDefinition);\nexport const Link: React.FC<LinkProps> = createPrimitive(LinkDefinition);\nexport const Button: React.FC<ButtonProps> = createPrimitive(ButtonDefinition);\nexport const Image: React.FC<ImageProps> = createPrimitive(ImageDefinition);\nexport const Divider: React.FC<DividerProps> = createPrimitive(DividerDefinition);\nexport const LineBreak: React.FC<LineBreakProps> = createPrimitive(LineBreakDefinition);\nexport const MergeTag: React.FC<MergeTagProps> = createPrimitive(MergeTagDefinition);\nexport const List: React.FC<ListProps> = createPrimitive(ListDefinition);\nexport const ListItem: React.FC<ListItemProps> = createPrimitive(ListItemDefinition);\nexport const Table: React.FC<TableProps> = createPrimitive(TableDefinition);\nexport const TableRow: React.FC<TableRowProps> = createPrimitive(TableRowDefinition);\nexport const TableCell: React.FC<TableCellProps> = createPrimitive(TableCellDefinition);\nexport const Social: React.FC<SocialProps> = createPrimitive(SocialDefinition);\nexport const Menu: React.FC<MenuProps> = createPrimitive(MenuDefinition);\nexport const Grid: React.FC<GridProps> = createPrimitive(GridDefinition);\nexport const Layer: React.FC<LayerProps> = createPrimitive(LayerDefinition);\n/** A printed document; `Document.Page` is one of its pages. */\nexport const Document: React.FC<DocumentProps> & { Page: React.FC<DocumentPageProps> } = Object.assign(createPrimitive(DocumentDefinition), { Page: createPrimitive(DocumentPageDefinition) });\nexport const PageBreak: React.FC<PageBreakProps> = createPrimitive(PageBreakDefinition);\nexport const PageHeader: React.FC<PageHeaderProps> = createPrimitive(PageHeaderDefinition);\nexport const PageFooter: React.FC<PageFooterProps> = createPrimitive(PageFooterDefinition);\nexport const PageNumber: React.FC<PageNumberProps> = createPrimitive(PageNumberDefinition);\nexport const Canvas: React.FC<CanvasProps> = createPrimitive(CanvasDefinition);\nexport const Svg: React.FC<SvgProps> = createPrimitive(SvgDefinition);\nexport const Rect: React.FC<RectProps> = createPrimitive(RectDefinition);\nexport const Circle: React.FC<CircleProps> = createPrimitive(CircleDefinition);\nexport const Ellipse: React.FC<EllipseProps> = createPrimitive(EllipseDefinition);\nexport const Line: React.FC<LineProps> = createPrimitive(LineDefinition);\nexport const Polygon: React.FC<PolygonProps> = createPrimitive(PolygonDefinition);\nexport const Path: React.FC<PathProps> = createPrimitive(PathDefinition);\nexport const Video: React.FC<VideoProps> = createPrimitive(VideoDefinition);\n/** Markup written as it is (the builder's HTML block), given as `html` or as JSX in it. */\nexport const Html = createPrimitive(HtmlDefinition) as unknown as React.FC<HtmlProps>;\n\nexport interface EmailStyle extends StyleOf<typeof EmailDefinition> {}\nexport interface EmailProps extends PropsOf<typeof EmailDefinition, EmailStyle> {}\nexport interface PageStyle extends StyleOf<typeof PageDefinition> {}\nexport interface PageProps extends PropsOf<typeof PageDefinition, PageStyle> {}\nexport interface SectionStyle extends StyleOf<typeof SectionDefinition> {}\nexport interface SectionProps extends PropsOf<typeof SectionDefinition, SectionStyle> {}\nexport interface RowStyle extends StyleOf<typeof RowDefinition> {}\nexport interface RowProps extends PropsOf<typeof RowDefinition, RowStyle> {}\nexport interface ColumnStyle extends StyleOf<typeof ColumnDefinition> {}\nexport interface ColumnProps extends PropsOf<typeof ColumnDefinition, ColumnStyle> {}\nexport interface TextStyle extends StyleOf<typeof TextDefinition> {}\nexport interface TextProps extends PropsOf<typeof TextDefinition, TextStyle> {}\n/** @deprecated Use `TextProps`. It stays under Elements 0.2's name for modules that import it: the migration leaves their type imports in place. */\nexport type ParagraphProps = TextProps;\nexport interface HeadingStyle extends StyleOf<typeof HeadingDefinition> {}\nexport interface HeadingProps extends PropsOf<typeof HeadingDefinition, HeadingStyle> {}\nexport interface SpanStyle extends StyleOf<typeof SpanDefinition> {}\nexport interface SpanProps extends PropsOf<typeof SpanDefinition, SpanStyle> {}\nexport interface LinkStyle extends StyleOf<typeof LinkDefinition> {}\nexport interface LinkProps extends PropsOf<typeof LinkDefinition, LinkStyle> {}\nexport interface ButtonStyle extends StyleOf<typeof ButtonDefinition> {}\nexport interface ButtonProps extends PropsOf<typeof ButtonDefinition, ButtonStyle> {}\nexport interface ImageStyle extends StyleOf<typeof ImageDefinition> {}\nexport interface ImageProps extends PropsOf<typeof ImageDefinition, ImageStyle> {}\nexport interface DividerStyle extends StyleOf<typeof DividerDefinition> {}\nexport interface DividerProps extends PropsOf<typeof DividerDefinition, DividerStyle> {}\nexport interface LineBreakStyle extends StyleOf<typeof LineBreakDefinition> {}\nexport interface LineBreakProps extends PropsOf<typeof LineBreakDefinition, LineBreakStyle> {}\nexport interface MergeTagStyle extends StyleOf<typeof MergeTagDefinition> {}\nexport interface MergeTagProps extends PropsOf<typeof MergeTagDefinition, MergeTagStyle> {}\nexport interface ListStyle extends StyleOf<typeof ListDefinition> {}\nexport interface ListProps extends PropsOf<typeof ListDefinition, ListStyle> {}\nexport interface ListItemStyle extends StyleOf<typeof ListItemDefinition> {}\nexport interface ListItemProps extends PropsOf<typeof ListItemDefinition, ListItemStyle> {}\nexport interface TableStyle extends StyleOf<typeof TableDefinition> {}\nexport interface TableProps extends PropsOf<typeof TableDefinition, TableStyle> {}\nexport interface TableRowStyle extends StyleOf<typeof TableRowDefinition> {}\nexport interface TableRowProps extends PropsOf<typeof TableRowDefinition, TableRowStyle> {}\nexport interface TableCellStyle extends StyleOf<typeof TableCellDefinition> {}\nexport interface TableCellProps extends PropsOf<typeof TableCellDefinition, TableCellStyle> {}\nexport interface SocialStyle extends StyleOf<typeof SocialDefinition> {}\nexport interface SocialProps extends PropsOf<typeof SocialDefinition, SocialStyle> {}\nexport interface MenuStyle extends StyleOf<typeof MenuDefinition> {}\nexport interface MenuProps extends PropsOf<typeof MenuDefinition, MenuStyle> {}\nexport interface GridStyle extends StyleOf<typeof GridDefinition> {}\nexport interface GridProps extends PropsOf<typeof GridDefinition, GridStyle> {}\nexport interface LayerStyle extends StyleOf<typeof LayerDefinition> {}\nexport interface LayerProps extends PropsOf<typeof LayerDefinition, LayerStyle> {}\nexport interface DocumentStyle extends StyleOf<typeof DocumentDefinition> {}\nexport interface DocumentProps extends PropsOf<typeof DocumentDefinition, DocumentStyle> {}\nexport interface DocumentPageStyle extends StyleOf<typeof DocumentPageDefinition> {}\nexport interface DocumentPageProps extends PropsOf<typeof DocumentPageDefinition, DocumentPageStyle> {}\nexport interface PageBreakStyle extends StyleOf<typeof PageBreakDefinition> {}\nexport interface PageBreakProps extends PropsOf<typeof PageBreakDefinition, PageBreakStyle> {}\nexport interface PageHeaderStyle extends StyleOf<typeof PageHeaderDefinition> {}\nexport interface PageHeaderProps extends PropsOf<typeof PageHeaderDefinition, PageHeaderStyle> {}\nexport interface PageFooterStyle extends StyleOf<typeof PageFooterDefinition> {}\nexport interface PageFooterProps extends PropsOf<typeof PageFooterDefinition, PageFooterStyle> {}\nexport interface PageNumberStyle extends StyleOf<typeof PageNumberDefinition> {}\nexport interface PageNumberProps extends PropsOf<typeof PageNumberDefinition, PageNumberStyle> {}\nexport interface CanvasStyle extends StyleOf<typeof CanvasDefinition> {}\nexport interface CanvasProps extends PropsOf<typeof CanvasDefinition, CanvasStyle> {}\nexport interface SvgStyle extends StyleOf<typeof SvgDefinition> {}\nexport interface SvgProps extends PropsOf<typeof SvgDefinition, SvgStyle> {}\nexport interface RectStyle extends StyleOf<typeof RectDefinition> {}\nexport interface RectProps extends PropsOf<typeof RectDefinition, RectStyle> {}\nexport interface CircleStyle extends StyleOf<typeof CircleDefinition> {}\nexport interface CircleProps extends PropsOf<typeof CircleDefinition, CircleStyle> {}\nexport interface EllipseStyle extends StyleOf<typeof EllipseDefinition> {}\nexport interface EllipseProps extends PropsOf<typeof EllipseDefinition, EllipseStyle> {}\nexport interface LineStyle extends StyleOf<typeof LineDefinition> {}\nexport interface LineProps extends PropsOf<typeof LineDefinition, LineStyle> {}\nexport interface PolygonStyle extends StyleOf<typeof PolygonDefinition> {}\nexport interface PolygonProps extends PropsOf<typeof PolygonDefinition, PolygonStyle> {}\nexport interface PathStyle extends StyleOf<typeof PathDefinition> {}\nexport interface PathProps extends PropsOf<typeof PathDefinition, PathStyle> {}\nexport interface VideoStyle extends StyleOf<typeof VideoDefinition> {}\nexport interface VideoProps extends PropsOf<typeof VideoDefinition, VideoStyle> {}\nexport interface HtmlStyle extends StyleOf<typeof HtmlDefinition> {}\nexport type HtmlProps = Omit<PropsOf<typeof HtmlDefinition, HtmlStyle>, \"html\" | \"children\"> &\n // As a string, or as JSX, which React writes.\n ({ html: string; children?: undefined } | { html?: undefined; children: React.ReactNode });\n","/**\n * The template tree: what a template's JSX is collected into inside one\n * render, and what layout and every writer read. Internal, never public; plain\n * data (no functions, no React elements).\n */\n\nexport type Json = string | number | boolean | null | Json[] | { [key: string]: Json };\n\nexport interface ElementsDocument {\n root: Node;\n}\n\nexport interface Node {\n /** Only when the author gives one; unique in the template, and written to the HTML as is. */\n id?: string;\n /** A defined component: \"Email\", \"Row\", \"Heading\", … */\n type: string;\n /** Meaning: href, src, alt, level. */\n props?: Record<string, Json>;\n /** Appearance, in the value kinds the component's definition gives. */\n style?: Record<string, Json>;\n /** Style overrides on phones (Email and Page). */\n mobile?: Record<string, Json>;\n /** Style while the pointer is over it, where the definition allows. */\n hover?: Record<string, Json>;\n hidden?: { mobile?: boolean; desktop?: boolean };\n children?: Child[];\n}\n\n/** A string is text, where the parent takes text. */\nexport type Child = Node | string;\n\nexport function isNode(child: Child): child is Node {\n return typeof child === \"object\" && child !== null;\n}\n","/**\n * What validation, resolution and conversion found: one list, each entry\n * naming the node (by id where it has one) and the path to the value.\n */\n\nimport type { EmailClient } from \"./email-clients\";\n\nexport type Severity = \"error\" | \"warning\" | \"info\";\n\nexport interface Diagnostic {\n /** Stable, for tools to match on: \"prop/unknown\", \"layout/overflow\", … */\n code: string;\n severity: Severity;\n message: string;\n /** Where in the input: `root.children[1].style.padding`. */\n path: string;\n /** The node's id, once it has one. */\n nodeId?: string;\n /** The email clients it's about; absent: every email, never left out by `emailClients`. */\n clients?: EmailClient[];\n /** What to change. */\n fix?: string;\n /** Where to see it: for a problem known from caniemail's tables, its page there. */\n see?: string;\n}\n\n/** What an email client problem adds to a diagnostic. */\nexport interface ClientFields {\n clients?: readonly EmailClient[];\n fix?: string;\n see?: string;\n}\n\nexport class Diagnostics {\n readonly list: Diagnostic[] = [];\n\n add(code: string, severity: Severity, message: string, path: string, nodeId?: string, extra: ClientFields = {}): void {\n const d: Diagnostic = { code, severity, message, path };\n if (nodeId !== undefined) d.nodeId = nodeId;\n if (extra.clients) d.clients = [...extra.clients];\n if (extra.fix) d.fix = extra.fix;\n if (extra.see) d.see = extra.see;\n this.list.push(d);\n }\n\n error(code: string, message: string, path: string, nodeId?: string): void {\n this.add(code, \"error\", message, path, nodeId);\n }\n\n warning(code: string, message: string, path: string, nodeId?: string, extra?: ClientFields): void {\n this.add(code, \"warning\", message, path, nodeId, extra);\n }\n\n get hasErrors(): boolean {\n return this.list.some((d) => d.severity === \"error\");\n }\n}\n\nexport function hasErrors(diagnostics: readonly Diagnostic[]): boolean {\n return diagnostics.some((d) => d.severity === \"error\");\n}\n\n/** One line per diagnostic, for error messages and logs: with the email clients it's about, what to change and how to see it, where it says. */\nexport function formatDiagnostics(diagnostics: readonly Diagnostic[]): string {\n return diagnostics\n .map((d) => `${d.severity} ${d.code} at ${d.path}: ${d.message}${d.clients ? ` [${d.clients.join(\", \")}]` : \"\"}${d.fix ? ` Fix: ${d.fix}` : \"\"}${d.see ? ` See: ${d.see}` : \"\"}`)\n .join(\"\\n\");\n}\n\n/** Thrown where a template with errors can't be rendered (`validate()` lists the problems without throwing). */\nexport class ElementsError extends Error {\n readonly diagnostics: Diagnostic[];\n\n constructor(diagnostics: Diagnostic[]) {\n const errors = diagnostics.filter((d) => d.severity === \"error\");\n super(`[Elements] The template has ${errors.length} error${errors.length === 1 ? \"\" : \"s\"}:\\n${formatDiagnostics(errors)}`);\n this.name = \"ElementsError\";\n this.diagnostics = diagnostics;\n }\n}\n","/**\n * The email clients Elements checks an Email for. Four were captured showing Elements 0.3.0 emails they weren't tuned\n * on (unlayer/email-renderer), which says how closely each is measured; what's known of the rest is from caniemail's\n * tables (caniemail.com, MIT), which test the CSS and HTML each client keeps. Either way a problem is said at its own\n * severity; only one Elements assumes, unchecked, is a note.\n */\nimport type { Diagnostic } from \"./diagnostics\";\n\nexport type EmailClient =\n | \"outlook\"\n | \"outlook-com\"\n | \"outlook-mac\"\n | \"outlook-app\"\n | \"gmail\"\n | \"gmail-app\"\n | \"gmail-app-other\"\n | \"apple-mail\"\n | \"yahoo\"\n | \"aol\"\n | \"samsung-email\"\n | \"thunderbird\"\n | \"protonmail\"\n | \"fastmail\"\n | \"hey\"\n | \"gmx\"\n | \"web-de\"\n | \"orange\"\n | \"sfr\"\n | \"laposte\"\n | \"free-fr\"\n | \"t-online-de\"\n | \"mail-ru\"\n | \"ionos\"\n | \"wp-pl\"\n | \"rainloop\";\n\nexport interface EmailClientMeasurement {\n /** The Elements version whose emails were captured. */\n elements: string;\n /** The client captured. */\n against: string;\n /** When (an ISO date). */\n captured: string;\n /** Of the words in emails it wasn't tuned on, the share a model of the client draws within 4px of the client. */\n wordsWithin4px: number;\n /** Of neighbouring word pairs, the share on the same line, or on different lines, in both. */\n lineBreaks: number;\n}\n\nexport interface EmailClientInfo {\n name: string;\n /** The widths it shows an email at, where it's been measured. */\n widths: { desktop?: number; phone?: number };\n /** Whether its dark mode was measured. */\n dark: boolean;\n /** Whether its model is an approximation (words placed within 4px well short of all of them). */\n approximate: boolean;\n /** Its captures; null where what's known of it is caniemail's. */\n measured: EmailClientMeasurement | null;\n}\n\nconst captured = (against: string, wordsWithin4px: number, lineBreaks: number): EmailClientMeasurement => ({ elements: \"0.3.0\", against, captured: \"2026-11-08\", wordsWithin4px, lineBreaks });\n\n/** A client known from caniemail's tables, not captured. */\nconst tables = (name: string): EmailClientInfo => ({ name, widths: {}, dark: false, approximate: true, measured: null });\n\nexport const EMAIL_CLIENTS: Readonly<Record<EmailClient, EmailClientInfo>> = {\n outlook: { name: \"Classic Outlook\", widths: { desktop: 820 }, dark: false, approximate: true, measured: captured(\"Outlook 16.0.20527 for Windows, 96 DPI\", 0.85, 0.983) },\n \"outlook-com\": { name: \"Outlook.com and new Outlook\", widths: { desktop: 820 }, dark: false, approximate: false, measured: captured(\"Outlook on the web\", 1, 1) },\n \"outlook-mac\": tables(\"Outlook for Mac\"),\n \"outlook-app\": tables(\"Outlook app (iOS and Android)\"),\n gmail: { name: \"Gmail\", widths: { desktop: 820 }, dark: false, approximate: false, measured: captured(\"Gmail on the web\", 1, 1) },\n \"gmail-app\": { name: \"Gmail app\", widths: { phone: 375 }, dark: false, approximate: true, measured: null },\n \"gmail-app-other\": { name: \"Gmail app, another account\", widths: { phone: 375 }, dark: false, approximate: true, measured: null },\n \"apple-mail\": { name: \"Apple Mail\", widths: { desktop: 820 }, dark: true, approximate: false, measured: captured(\"Mail 16 on macOS 26\", 0.999, 0.999) },\n yahoo: tables(\"Yahoo Mail\"),\n aol: tables(\"AOL Mail\"),\n \"samsung-email\": tables(\"Samsung Email\"),\n thunderbird: tables(\"Thunderbird\"),\n protonmail: tables(\"Proton Mail\"),\n fastmail: tables(\"Fastmail\"),\n hey: tables(\"HEY\"),\n gmx: tables(\"GMX\"),\n \"web-de\": tables(\"WEB.DE\"),\n orange: tables(\"Orange\"),\n sfr: tables(\"SFR\"),\n laposte: tables(\"La Poste\"),\n \"free-fr\": tables(\"Free\"),\n \"t-online-de\": tables(\"T-Online\"),\n \"mail-ru\": tables(\"Mail.ru\"),\n ionos: tables(\"IONOS (1&1)\"),\n \"wp-pl\": tables(\"WP Poczta\"),\n rainloop: tables(\"RainLoop\"),\n};\n\n/**\n * What's checked when no clients are named: the ones most email is read in (the four captured, the Gmail and Outlook\n * apps, Outlook for Mac, Yahoo, AOL and Samsung Email). The others only when named.\n */\nexport const DEFAULT_EMAIL_CLIENTS: readonly EmailClient[] = [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"apple-mail\", \"yahoo\", \"aol\", \"samsung-email\"];\n\n/** caniemail's page about a feature (its slug, as in the page's address). */\nexport const caniemail = (feature: string): string => `https://www.caniemail.com/features/${feature}/`;\n\n/** Throws on what isn't a list of email clients (an option given wrong, not a template's problem). */\nexport function checkEmailClients(clients: unknown): void {\n if (clients === undefined) return;\n const unknown = Array.isArray(clients) ? clients.filter((c) => !Object.prototype.hasOwnProperty.call(EMAIL_CLIENTS, c as string)) : [clients];\n if (unknown.length) throw new TypeError(`[Elements] emailClients takes a list of ${Object.keys(EMAIL_CLIENTS).join(\", \")}, not ${unknown.map((c) => JSON.stringify(c)).join(\", \")}`);\n}\n\n/**\n * The diagnostics for the email clients asked for: one about some clients is kept where they meet the selection, with\n * its clients narrowed to them; one about none in particular is always kept. Diagnostics equal in code, path, severity\n * and message are one, with the clients of both.\n */\nexport function forEmailClients(diagnostics: readonly Diagnostic[], selection: readonly EmailClient[] = DEFAULT_EMAIL_CLIENTS): Diagnostic[] {\n const out: Diagnostic[] = [];\n const seen = new Map<string, Diagnostic>();\n for (const d of diagnostics) {\n if (!d.clients) {\n out.push(d);\n continue;\n }\n const clients = d.clients.filter((c) => selection.includes(c));\n if (!clients.length) continue;\n const key = JSON.stringify([d.code, d.path, d.severity, d.message]);\n const same = seen.get(key);\n if (same) same.clients = [...new Set([...same.clients!, ...clients])];\n else {\n const kept = { ...d, clients };\n seen.set(key, kept);\n out.push(kept);\n }\n }\n return out;\n}\n","/**\n * Value kinds: what a prop or style property accepts, what it's normalized to,\n * the editor that edits it, and a JSON Schema of its values (for property\n * discovery). Component definitions are made of these, so types, validation\n * and editors come from one place.\n */\nimport type { Json } from \"./model\";\n\nexport type JsonSchema = { [key: string]: unknown };\n\n/** Conceptual editors, mapped by each editor (the builder, others) to its own widgets. */\nexport type EditorKind =\n | \"color\"\n | \"length\"\n | \"insets\"\n | \"border\"\n | \"radius\"\n | \"choice\"\n | \"fontFamily\"\n | \"fontFaces\"\n | \"items\"\n | \"fontWeight\"\n | \"lineHeight\"\n | \"image\"\n | \"link\"\n | \"text\"\n | \"number\"\n | \"toggle\";\n\nexport type Parsed<T> = { ok: true; value: T } | { ok: false; message: string };\n\nexport interface Kind<In = unknown, Out extends Json = Json> {\n readonly name: string;\n readonly editor: EditorKind;\n /** What it accepts, in words (for messages and descriptions). */\n readonly accepts: string;\n parse(input: unknown): Parsed<Out>;\n /** Whether a value it parsed sets nothing (`breakpoints={{}}`): the prop is then left out, as if not given. */\n empty?(value: Out): boolean;\n jsonSchema(): JsonSchema;\n /** Type only: what it accepts as input. */\n readonly __in?: In;\n}\n\nexport type InputOf<K> = K extends Kind<infer I, Json> ? I : never;\nexport type OutputOf<K> = K extends Kind<unknown, infer O> ? O : never;\n\nconst ok = <T>(value: T): Parsed<T> => ({ ok: true, value });\nconst fail = (message: string): Parsed<never> => ({ ok: false, message });\nconst show = (input: unknown): string => {\n try {\n return typeof input === \"string\" ? JSON.stringify(input) : typeof input === \"function\" ? \"a function\" : JSON.stringify(input) ?? String(input);\n } catch {\n return String(input);\n }\n};\nconst isObject = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nfunction kind<In, Out extends Json>(spec: Omit<Kind<In, Out>, \"__in\">): Kind<In, Out> {\n return spec;\n}\n\n// ─── Numbers and lengths ────────────────────────────────────────────────────\n\nconst NUMBER = \"-?(?:\\\\d+(?:\\\\.\\\\d*)?|\\\\.\\\\d+)\";\n\nexport type LengthUnit = \"px\" | \"%\" | \"pt\" | \"mm\" | \"in\";\n/** A length in px: a number, or a string with px. */\nexport type Px = number | `${number}px`;\nexport type LengthInput<U extends LengthUnit> = number | `${number}${U}`;\n/** px as a number, any other unit as a string (\"50%\", \"12pt\"). */\nexport type Length = number | string;\n\nconst LENGTH = new RegExp(`^(${NUMBER})(px|%|pt|mm|in)?$`);\n\n/** A length's value and unit, from a number (px) or a string (\"12px\", \"50%\", \"12\" as px). */\nexport function readLength(input: unknown): { value: number; unit: LengthUnit } | undefined {\n if (typeof input === \"number\") return Number.isFinite(input) ? { value: input, unit: \"px\" } : undefined;\n if (typeof input !== \"string\") return undefined;\n const match = LENGTH.exec(input.trim());\n return match ? { value: Number(match[1]), unit: (match[2] as LengthUnit | undefined) ?? \"px\" } : undefined;\n}\n\nfunction px(input: unknown, min: number, what: string): Parsed<number> {\n const length = readLength(input);\n if (!length || length.unit !== \"px\") return fail(`${what} must be a number of px or a px string (\"8px\"), not ${show(input)}`);\n if (length.value < min) return fail(`${what} can't be less than ${min}, not ${show(input)}`);\n return ok(length.value);\n}\n\n/** A length as a document holds it: px as a number, other units as a string. */\nexport type LengthOf<U extends LengthUnit> = number | `${number}${Exclude<U, \"px\">}`;\n\nexport function length<const U extends LengthUnit = \"px\">(\n units: readonly U[] = [\"px\"] as unknown as readonly U[],\n options: { min?: number } = {}\n): Kind<LengthInput<U>, LengthOf<U>> {\n const min = options.min ?? 0;\n const accepts = `a length (${units.map((u) => (u === \"px\" ? \"a number of px\" : u)).join(\", \")})`;\n return kind<LengthInput<U>, LengthOf<U>>({\n name: \"length\",\n editor: \"length\",\n accepts,\n parse(input) {\n const parsed = readLength(input);\n if (!parsed) return fail(`expected ${accepts}, not ${show(input)}`);\n if (!units.includes(parsed.unit as U)) return fail(`${parsed.unit} isn't accepted here; expected ${accepts}`);\n if (parsed.value < min) return fail(`can't be less than ${min}, not ${show(input)}`);\n return ok((parsed.unit === \"px\" ? parsed.value : `${parsed.value}${parsed.unit}`) as LengthOf<U>);\n },\n jsonSchema: () => ({\n anyOf: [\n ...(units.includes(\"px\" as U) ? [{ type: \"number\", minimum: min }] : []),\n { type: \"string\", pattern: `^${NUMBER}(${units.map((u) => (u === \"%\" ? \"%\" : u)).join(\"|\")})${units.includes(\"px\" as U) ? \"?\" : \"\"}$` },\n ],\n }),\n });\n}\n\nexport function number(options: { min?: number; max?: number; integer?: boolean } = {}): Kind<number, number> {\n const { min = -Infinity, max = Infinity, integer = false } = options;\n const accepts = `${integer ? \"an integer\" : \"a number\"}${Number.isFinite(min) ? ` from ${min}` : \"\"}${Number.isFinite(max) ? ` to ${max}` : \"\"}`;\n return kind({\n name: \"number\",\n editor: \"number\",\n accepts,\n parse(input) {\n if (typeof input !== \"number\" || !Number.isFinite(input) || (integer && !Number.isInteger(input)) || input < min || input > max) {\n return fail(`expected ${accepts}, not ${show(input)}`);\n }\n return ok(input);\n },\n jsonSchema: () => ({\n type: integer ? \"integer\" : \"number\",\n ...(Number.isFinite(min) ? { minimum: min } : {}),\n ...(Number.isFinite(max) ? { maximum: max } : {}),\n }),\n });\n}\n\n/** A share of a Row's free width (a grow factor), or \"none\" to take its own size. */\nexport function flex(): Kind<number | \"none\", number | \"none\"> {\n return kind({\n name: \"flex\",\n editor: \"number\",\n accepts: 'a share of the free width (0 or more), or \"none\"',\n parse: (input) =>\n input === \"none\" || (typeof input === \"number\" && Number.isFinite(input) && input >= 0)\n ? ok(input)\n : fail(`expected a share of the free width (0 or more) or \"none\", not ${show(input)}`),\n jsonSchema: () => ({ anyOf: [{ type: \"number\", minimum: 0 }, { const: \"none\" }] }),\n });\n}\n\n// ─── Insets, borders, corners ───────────────────────────────────────────────\n\nexport type InsetsInput =\n | Px\n | string\n | [Px, Px]\n | [Px, Px, Px]\n | [Px, Px, Px, Px]\n | { top?: Px; right?: Px; bottom?: Px; left?: Px };\nexport type Insets = { top: number; right: number; bottom: number; left: number };\n\nconst SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n\n/** CSS's 1-to-4 value order: top, right, bottom, left. */\nfunction fourSides<T>(values: T[]): [T, T, T, T] {\n const [a, b = a, c = a, d = b] = values;\n return [a, b, c, d];\n}\n\nexport function insets(): Kind<InsetsInput, Insets> {\n const accepts = 'px for all sides, \"8px 16px\" (1 to 4 values), [v, h] or [t, r, b, l], or { top, right, bottom, left }';\n const read = (values: unknown[]): Parsed<Insets> => {\n if (values.length < 1 || values.length > 4) return fail(`expected ${accepts}`);\n const out: number[] = [];\n for (const value of values) {\n const side = px(value, 0, \"each side\");\n if (!side.ok) return side;\n out.push(side.value);\n }\n const [top, right, bottom, left] = fourSides(out);\n return ok({ top, right, bottom, left });\n };\n return kind({\n name: \"insets\",\n editor: \"insets\",\n accepts,\n parse(input) {\n if (typeof input === \"number\") return read([input]);\n if (typeof input === \"string\") return read(input.trim().split(/\\s+/));\n if (Array.isArray(input)) return read(input);\n if (isObject(input)) {\n const extra = Object.keys(input).find((key) => !(SIDES as readonly string[]).includes(key));\n if (extra) return fail(`\"${extra}\" isn't a side; expected top, right, bottom or left`);\n const out = { top: 0, right: 0, bottom: 0, left: 0 };\n for (const side of SIDES) {\n if (input[side] === undefined) continue;\n const value = px(input[side], 0, side);\n if (!value.ok) return value;\n out[side] = value.value;\n }\n return ok(out);\n }\n return fail(`expected ${accepts}, not ${show(input)}`);\n },\n jsonSchema: () => {\n const side = { anyOf: [{ type: \"number\", minimum: 0 }, { type: \"string\", pattern: `^${NUMBER}(px)?$` }] };\n return {\n anyOf: [\n side.anyOf[0],\n { type: \"string\" },\n { type: \"array\", items: side, minItems: 1, maxItems: 4 },\n { type: \"object\", properties: Object.fromEntries(SIDES.map((s) => [s, side])), additionalProperties: false },\n ],\n };\n },\n });\n}\n\nexport type BorderStyle = \"solid\" | \"dashed\" | \"dotted\" | \"none\";\nexport type BorderSideInput = { width?: Px; style?: BorderStyle; color?: string };\nexport type BorderInput =\n | string\n | BorderSideInput\n | { top?: BorderSideInput | string; right?: BorderSideInput | string; bottom?: BorderSideInput | string; left?: BorderSideInput | string };\nexport type BorderSide = { width: number; style: BorderStyle; color: string };\nexport type Border = { top?: BorderSide; right?: BorderSide; bottom?: BorderSide; left?: BorderSide };\n\nconst BORDER_STYLES: readonly BorderStyle[] = [\"solid\", \"dashed\", \"dotted\", \"none\"];\n\nfunction borderSide(input: unknown): Parsed<BorderSide> {\n const out: BorderSide = { width: 1, style: \"solid\", color: \"#000000\" };\n if (typeof input === \"string\") {\n for (const token of input.match(/rgba?\\([^)]*\\)|\\S+/g) ?? []) {\n if (readLength(token)) {\n const width = px(token, 0, \"a border's width\");\n if (!width.ok) return width;\n out.width = width.value;\n } else if ((BORDER_STYLES as readonly string[]).includes(token)) {\n out.style = token as BorderStyle;\n } else {\n const c = parseColor(token);\n if (!c.ok) return fail(`\"${token}\" in ${show(input)} isn't a width, a style (${BORDER_STYLES.join(\", \")}) or a color`);\n out.color = c.value;\n }\n }\n return ok(out);\n }\n if (!isObject(input)) return fail(`expected \"1px solid #ccc\" or { width, style, color }, not ${show(input)}`);\n const extra = Object.keys(input).find((key) => ![\"width\", \"style\", \"color\"].includes(key));\n if (extra) return fail(`\"${extra}\" isn't part of a border side; expected width, style or color`);\n if (input.width !== undefined) {\n const width = px(input.width, 0, \"a border's width\");\n if (!width.ok) return width;\n out.width = width.value;\n }\n if (input.style !== undefined) {\n if (!(BORDER_STYLES as readonly unknown[]).includes(input.style)) return fail(`a border's style is one of ${BORDER_STYLES.join(\", \")}, not ${show(input.style)}`);\n out.style = input.style as BorderStyle;\n }\n if (input.color !== undefined) {\n const c = parseColor(input.color);\n if (!c.ok) return c;\n out.color = c.value;\n }\n return ok(out);\n}\n\n/** One line, as a border side: `\"1px solid #eee\"` or `{ width, style, color }` (a table's line between rows). */\nexport function line(): Kind<string | BorderSideInput, BorderSide> {\n return kind<string | BorderSideInput, BorderSide>({\n name: \"line\",\n editor: \"border\",\n accepts: '\"1px solid #ccc\" or { width, style, color }',\n parse: (input) => borderSide(input),\n jsonSchema: () => ({\n anyOf: [\n { type: \"string\" },\n {\n type: \"object\",\n properties: { width: { anyOf: [{ type: \"number\", minimum: 0 }, { type: \"string\" }] }, style: { enum: [...BORDER_STYLES] }, color: { type: \"string\" } },\n additionalProperties: false,\n },\n ],\n }),\n });\n}\n\nexport function border(): Kind<BorderInput, Border> {\n return kind({\n name: \"border\",\n editor: \"border\",\n accepts: '\"1px solid #ccc\", { width, style, color } for all sides, or { top, right, bottom, left } with one of those each',\n parse(input) {\n const perSide = isObject(input) && Object.keys(input).some((key) => (SIDES as readonly string[]).includes(key));\n if (!perSide) {\n const side = borderSide(input);\n return side.ok ? ok({ top: side.value, right: side.value, bottom: side.value, left: side.value }) : side;\n }\n const out: Border = {};\n for (const [key, value] of Object.entries(input as Record<string, unknown>)) {\n if (!(SIDES as readonly string[]).includes(key)) return fail(`\"${key}\" isn't a side; expected top, right, bottom or left`);\n const side = borderSide(value);\n if (!side.ok) return fail(`${key}: ${side.message}`);\n out[key as (typeof SIDES)[number]] = side.value;\n }\n return ok(out);\n },\n jsonSchema: () => {\n const side = {\n anyOf: [\n { type: \"string\" },\n {\n type: \"object\",\n properties: { width: { anyOf: [{ type: \"number\", minimum: 0 }, { type: \"string\" }] }, style: { enum: [...BORDER_STYLES] }, color: { type: \"string\" } },\n additionalProperties: false,\n },\n ],\n };\n return { anyOf: [...side.anyOf, { type: \"object\", properties: Object.fromEntries(SIDES.map((s) => [s, side])), additionalProperties: false }] };\n },\n });\n}\n\nexport type RadiusInput = Px | [Px, Px, Px, Px] | { topLeft?: Px; topRight?: Px; bottomRight?: Px; bottomLeft?: Px };\nexport type Corners = { topLeft: number; topRight: number; bottomRight: number; bottomLeft: number };\nexport type Radius = number | Corners;\n\nconst CORNERS = [\"topLeft\", \"topRight\", \"bottomRight\", \"bottomLeft\"] as const;\n\nexport function radius(): Kind<RadiusInput, Radius> {\n const accepts = \"px for every corner, [topLeft, topRight, bottomRight, bottomLeft], or { topLeft, topRight, bottomRight, bottomLeft }\";\n return kind<RadiusInput, Radius>({\n name: \"radius\",\n editor: \"radius\",\n accepts,\n parse(input) {\n let values: unknown[];\n if (Array.isArray(input)) {\n if (input.length !== 4) return fail(`expected ${accepts}`);\n values = input;\n } else if (isObject(input)) {\n const extra = Object.keys(input).find((key) => !(CORNERS as readonly string[]).includes(key));\n if (extra) return fail(`\"${extra}\" isn't a corner; expected ${CORNERS.join(\", \")}`);\n values = CORNERS.map((corner) => input[corner] ?? 0);\n } else {\n return px(input, 0, \"a radius\");\n }\n const out: number[] = [];\n for (const value of values) {\n const corner = px(value, 0, \"a corner\");\n if (!corner.ok) return corner;\n out.push(corner.value);\n }\n if (out.every((value) => value === out[0])) return ok(out[0]);\n const [topLeft, topRight, bottomRight, bottomLeft] = out;\n return ok({ topLeft, topRight, bottomRight, bottomLeft });\n },\n jsonSchema: () => {\n const corner = { anyOf: [{ type: \"number\", minimum: 0 }, { type: \"string\", pattern: `^${NUMBER}(px)?$` }] };\n return {\n anyOf: [\n ...corner.anyOf,\n { type: \"array\", items: corner, minItems: 4, maxItems: 4 },\n { type: \"object\", properties: Object.fromEntries(CORNERS.map((c) => [c, corner])), additionalProperties: false },\n ],\n };\n },\n });\n}\n\n// ─── Choices, text, flags ───────────────────────────────────────────────────\n\nexport function enumOf<const V extends readonly (string | number)[]>(values: V): Kind<V[number], V[number]> {\n const accepts = `one of ${values.map((v) => JSON.stringify(v)).join(\", \")}`;\n return kind({\n name: \"enum\",\n editor: \"choice\",\n accepts,\n parse: (input) => ((values as readonly unknown[]).includes(input) ? ok(input as V[number]) : fail(`expected ${accepts}, not ${show(input)}`)),\n jsonSchema: () => ({ enum: [...values] }),\n });\n}\n\n/** Text, at most `maxLength` long; with a `pattern`, text it finds something in (`mismatch` says what's missing). */\nexport function text(options: { maxLength?: number; pattern?: RegExp; mismatch?: string } = {}): Kind<string, string> {\n return kind({\n name: \"text\",\n editor: \"text\",\n accepts: \"text\",\n parse(input) {\n if (typeof input !== \"string\") return fail(`expected text, not ${show(input)}`);\n if (options.maxLength !== undefined && input.length > options.maxLength) return fail(`is longer than ${options.maxLength} characters`);\n if (options.pattern && !options.pattern.test(input)) return fail(options.mismatch ?? `doesn't match ${options.pattern.source}`);\n return ok(input);\n },\n jsonSchema: () => ({ type: \"string\", ...(options.maxLength !== undefined ? { maxLength: options.maxLength } : {}), ...(options.pattern ? { pattern: options.pattern.source } : {}) }),\n });\n}\n\nexport function boolean(): Kind<boolean, boolean> {\n return kind({\n name: \"boolean\",\n editor: \"toggle\",\n accepts: \"true or false\",\n parse: (input) => (typeof input === \"boolean\" ? ok(input) : fail(`expected true or false, not ${show(input)}`)),\n jsonSchema: () => ({ type: \"boolean\" }),\n });\n}\n\n// ─── Colors ─────────────────────────────────────────────────────────────────\n\nconst NAMED_COLORS = new Set(\n (\n \"aliceblue antiquewhite aqua aquamarine azure beige bisque black blanchedalmond blue blueviolet brown burlywood \" +\n \"cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan darkblue darkcyan darkgoldenrod darkgray \" +\n \"darkgreen darkgrey darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen \" +\n \"darkslateblue darkslategray darkslategrey darkturquoise darkviolet deeppink deepskyblue dimgray dimgrey dodgerblue \" +\n \"firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green greenyellow grey honeydew \" +\n \"hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan \" +\n \"lightgoldenrodyellow lightgray lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray \" +\n \"lightslategrey lightsteelblue lightyellow lime limegreen linen magenta maroon mediumaquamarine mediumblue \" +\n \"mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred \" +\n \"midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid \" +\n \"palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple \" +\n \"rebeccapurple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue \" +\n \"slateblue slategray slategrey snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white \" +\n \"whitesmoke yellow yellowgreen transparent\"\n ).split(\" \")\n);\n\nconst HEX = /^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst RGB = /^rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d*\\.?\\d+%?)\\s*)?\\)$/i;\n\nconst hex2 = (n: number) => n.toString(16).padStart(2, \"0\");\n\n/** A color as \"#rrggbb\", \"rgba(r, g, b, a)\" when it's see-through, or a lowercase CSS name. */\nexport function parseColor(input: unknown): Parsed<string> {\n if (typeof input !== \"string\") return fail(`expected a color (\"#0879a1\", \"rgb(…)\", \"rgba(…)\" or a CSS name), not ${show(input)}`);\n const value = input.trim().toLowerCase();\n const hex = HEX.exec(value);\n if (hex) {\n const digits = hex[1].length <= 4 ? [...hex[1]].map((d) => d + d).join(\"\") : hex[1];\n if (digits.length === 6 || digits.slice(6) === \"ff\") return ok(`#${digits.slice(0, 6)}`);\n const alpha = Math.round((parseInt(digits.slice(6), 16) / 255) * 1000) / 1000;\n return ok(`rgba(${parseInt(digits.slice(0, 2), 16)}, ${parseInt(digits.slice(2, 4), 16)}, ${parseInt(digits.slice(4, 6), 16)}, ${alpha})`);\n }\n const rgb = RGB.exec(value);\n if (rgb) {\n const channels = rgb.slice(1, 4).map(Number);\n if (channels.some((c) => c > 255)) return fail(`a color channel is 0 to 255 in ${show(input)}`);\n let alpha = 1;\n if (rgb[4] !== undefined) {\n alpha = rgb[4].endsWith(\"%\") ? Number(rgb[4].slice(0, -1)) / 100 : Number(rgb[4]);\n if (!(alpha >= 0 && alpha <= 1)) return fail(`a color's alpha is 0 to 1 in ${show(input)}`);\n }\n return ok(alpha === 1 ? `#${channels.map(hex2).join(\"\")}` : `rgba(${channels.join(\", \")}, ${alpha})`);\n }\n if (NAMED_COLORS.has(value)) return ok(value);\n return fail(`expected a color (\"#0879a1\", \"rgb(…)\", \"rgba(…)\" or a CSS name), not ${show(input)}`);\n}\n\nexport function color(): Kind<string, string> {\n return kind({\n name: \"color\",\n editor: \"color\",\n accepts: 'a color (\"#0879a1\", \"rgb(…)\", \"rgba(…)\" or a CSS name)',\n parse: parseColor,\n jsonSchema: () => ({ type: \"string\" }),\n });\n}\n\n// ─── Fonts ──────────────────────────────────────────────────────────────────\n\n/** A font stack, as CSS writes it: \"Inter, Arial, sans-serif\". Web fonts are declared once, in the root's `fonts`. */\nexport type FontFamilyInput = string;\nexport type FontFamily = string;\n\n/** What can't be in a font name or stack: what would end a declaration or a stylesheet. */\nconst FONT_UNSAFE = /[;{}<>\\\\\\n\\r]/;\n\nexport function fontFamily(): Kind<FontFamilyInput, FontFamily> {\n const accepts = 'a font stack, as CSS writes it (\"Inter, Arial, sans-serif\")';\n return kind<FontFamilyInput, FontFamily>({\n name: \"fontFamily\",\n editor: \"fontFamily\",\n accepts,\n parse(input) {\n if (isObject(input) && \"src\" in input) return fail(\"a web font is declared once, in the root's fonts ({ family, src, weight, style }); fontFamily names it in a stack\");\n if (typeof input !== \"string\" || !input.trim() || FONT_UNSAFE.test(input)) return fail(`expected ${accepts}, not ${show(input)}`);\n return ok(input.trim());\n },\n jsonSchema: () => ({ type: \"string\", minLength: 1 }),\n });\n}\n\n/** The families of a font stack, unquoted: \"'Brand Sans', Arial\" is [\"Brand Sans\", \"Arial\"]. */\nexport function fontStack(stack: string): string[] {\n return stack\n .split(\",\")\n .map((family) => family.trim().replace(/^([\"'])(.*)\\1$/, \"$2\"))\n .filter(Boolean);\n}\n\nexport type FontFormat = \"woff2\" | \"woff\" | \"truetype\" | \"opentype\";\nconst FONT_FORMATS: readonly FontFormat[] = [\"woff2\", \"woff\", \"truetype\", \"opentype\"];\n\nexport type FontFaceInput = {\n /** The name text uses for it in a fontFamily stack. */\n family: string;\n /** Its file: an http(s) URL, or a data:font URI. */\n src: string;\n /** The file's format; from its extension where not given. */\n format?: FontFormat;\n /** The weight this file draws (400, \"bold\"), or the range a variable font covers (\"100 900\" or [100, 900]). */\n weight?: FontWeightInput | number | `${number} ${number}` | readonly [number, number];\n style?: \"normal\" | \"italic\";\n};\nexport type FontFace = { family: string; src: string; format?: FontFormat; weight?: number | [number, number]; style?: \"normal\" | \"italic\" };\n\n/** Web fonts: the faces a template loads, each a family's file for a weight and style. */\n/** A list of items, each an object of the given fields, all of them required (a menu's links, a line of icons). */\nexport function items<const F extends Record<string, Kind<any, Json>>>(\n fields: F,\n noun: string\n): Kind<Array<{ [K in keyof F]: InputOf<F[K]> }>, Array<{ [K in keyof F]: OutputOf<F[K]> }>> {\n const names = Object.keys(fields);\n const shape = `{ ${names.join(\", \")} }`;\n const accepts = `a list of ${noun}s, each ${shape}`;\n return kind({\n name: \"items\",\n editor: \"items\",\n accepts,\n parse(input) {\n if (!Array.isArray(input)) return fail(`expected ${accepts}, not ${show(input)}`);\n const out: Array<Record<string, Json>> = [];\n for (const [index, item] of input.entries()) {\n const at = `${noun} ${index + 1}`;\n if (!isObject(item)) return fail(`${at}: expected ${shape}, not ${show(item)}`);\n const extra = Object.keys(item).find((key) => !names.includes(key));\n if (extra) return fail(`${at}: \"${extra}\" isn't one of its fields (${names.join(\", \")})`);\n const value: Record<string, Json> = {};\n for (const name of names) {\n if (item[name] === undefined) return fail(`${at}: ${name} is missing`);\n const parsed = fields[name].parse(item[name]);\n if (!parsed.ok) return fail(`${at}: ${name}: ${parsed.message}`);\n value[name] = parsed.value;\n }\n out.push(value);\n }\n return ok(out as Array<{ [K in keyof F]: OutputOf<F[K]> }>);\n },\n jsonSchema: () => ({\n type: \"array\",\n items: { type: \"object\", required: names, properties: Object.fromEntries(names.map((name) => [name, fields[name].jsonSchema()])), additionalProperties: false },\n }),\n });\n}\n\nexport function fontFaces(): Kind<FontFaceInput[], FontFace[]> {\n const accepts = \"a list of { family, src, format, weight, style }\";\n const face = (input: unknown, index: number): Parsed<FontFace> => {\n const at = `font ${index + 1}`;\n if (!isObject(input)) return fail(`${at}: expected { family, src, format, weight, style }, not ${show(input)}`);\n const extra = Object.keys(input).find((key) => ![\"family\", \"src\", \"format\", \"weight\", \"style\"].includes(key));\n if (extra) return fail(`${at}: \"${extra}\" isn't part of a font; expected family, src, format, weight or style`);\n if (typeof input.family !== \"string\" || !input.family.trim() || FONT_UNSAFE.test(input.family) || input.family.includes(\",\")) {\n return fail(`${at}: family is one font's name (\"Inter\"), not ${show(input.family)}`);\n }\n if (typeof input.src !== \"string\" || !input.src.trim() || unsafeUrl(input.src, /^data:(font|application)\\//)) {\n return fail(`${at}: src is the font file's http(s) URL (or a data:font URI), not ${show(input.src)}`);\n }\n const out: FontFace = { family: input.family.trim(), src: input.src.trim() };\n if (input.format !== undefined) {\n if (!(FONT_FORMATS as readonly unknown[]).includes(input.format)) return fail(`${at}: format is one of ${FONT_FORMATS.join(\", \")}, not ${show(input.format)}`);\n out.format = input.format as FontFormat;\n }\n if (input.weight !== undefined) {\n // A range as written (\"100 900\"), or as parsed ([100, 900]): a font is checked again once it's been read.\n const range = typeof input.weight === \"string\" ? /^\\s*(\\d+)\\s+(\\d+)\\s*$/.exec(input.weight) : Array.isArray(input.weight) && input.weight.length === 2 && input.weight.every(Number.isInteger) ? [null, ...input.weight] : null;\n const weight = input.weight === \"normal\" ? 400 : input.weight === \"bold\" ? 700 : input.weight;\n if (range && Number(range[1]) >= 1 && Number(range[2]) <= 1000 && Number(range[1]) <= Number(range[2])) out.weight = [Number(range[1]), Number(range[2])];\n else if (typeof weight === \"number\" && Number.isInteger(weight) && weight >= 1 && weight <= 1000) out.weight = weight;\n else return fail(`${at}: weight is 1 to 1000, \"normal\", \"bold\", or a range (\"100 900\"), not ${show(input.weight)}`);\n }\n if (input.style !== undefined) {\n if (input.style !== \"normal\" && input.style !== \"italic\") return fail(`${at}: style is \"normal\" or \"italic\", not ${show(input.style)}`);\n out.style = input.style;\n }\n return ok(out);\n };\n return kind<FontFaceInput[], FontFace[]>({\n name: \"fontFaces\",\n editor: \"fontFaces\",\n accepts,\n parse(input) {\n if (!Array.isArray(input)) return fail(`expected ${accepts}, not ${show(input)}`);\n const out: FontFace[] = [];\n for (const [index, item] of input.entries()) {\n const parsed = face(item, index);\n if (!parsed.ok) return parsed;\n out.push(parsed.value);\n }\n return ok(out);\n },\n jsonSchema: () => ({\n type: \"array\",\n items: {\n type: \"object\",\n required: [\"family\", \"src\"],\n properties: {\n family: { type: \"string\", minLength: 1 },\n src: { type: \"string\", minLength: 1 },\n format: { enum: [...FONT_FORMATS] },\n weight: { anyOf: [{ type: \"number\", minimum: 1, maximum: 1000 }, { type: \"string\" }, { type: \"array\", items: { type: \"integer\", minimum: 1, maximum: 1000 }, minItems: 2, maxItems: 2 }] },\n style: { enum: [\"normal\", \"italic\"] },\n },\n additionalProperties: false,\n },\n }),\n });\n}\n\nexport type FontWeightInput = 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 | \"normal\" | \"bold\";\n\nexport function fontWeight(): Kind<FontWeightInput, number> {\n return kind({\n name: \"fontWeight\",\n editor: \"fontWeight\",\n accepts: '100 to 900 in hundreds, \"normal\" or \"bold\"',\n parse(input) {\n if (input === \"normal\") return ok(400);\n if (input === \"bold\") return ok(700);\n if (typeof input === \"number\" && input >= 100 && input <= 900 && input % 100 === 0) return ok(input);\n return fail(`expected 100 to 900 in hundreds, \"normal\" or \"bold\", not ${show(input)}`);\n },\n jsonSchema: () => ({ anyOf: [{ enum: [100, 200, 300, 400, 500, 600, 700, 800, 900] }, { enum: [\"normal\", \"bold\"] }] }),\n });\n}\n\nexport type LineHeightInput = number | `${number}px` | `${number}%` | \"normal\";\n/** A multiple of the font size (1.5), or a fixed height in px (\"24px\"). */\nexport type LineHeight = number | `${number}px` | \"normal\";\n\nexport function lineHeight(): Kind<LineHeightInput, LineHeight> {\n const accepts = 'a multiple of the font size (1.5), a percentage (\"150%\"), px (\"24px\") or \"normal\" (the font\\'s own)';\n return kind<LineHeightInput, LineHeight>({\n name: \"lineHeight\",\n editor: \"lineHeight\",\n accepts,\n parse(input) {\n if (input === \"normal\") return ok(\"normal\");\n if (typeof input === \"number\") return input > 0 && Number.isFinite(input) ? ok(input) : fail(`expected ${accepts}, not ${show(input)}`);\n const parsed = typeof input === \"string\" && /^\\s*-?[\\d.]+\\s*$/.test(input) ? undefined : readLength(input);\n if (!parsed || parsed.value <= 0 || (parsed.unit !== \"px\" && parsed.unit !== \"%\")) return fail(`expected ${accepts}, not ${show(input)}`);\n return ok(parsed.unit === \"%\" ? Math.round(parsed.value * 1000) / 100000 : (`${parsed.value}px` as const));\n },\n jsonSchema: () => ({ anyOf: [{ type: \"number\", exclusiveMinimum: 0 }, { type: \"string\", pattern: `^${NUMBER}(px|%)$` }, { const: \"normal\" }] }),\n });\n}\n\n// ─── URLs: images and links ─────────────────────────────────────────────────\n\n/**\n * An email service's tag in a URL, as it's written or as Elements 0.2's components kept it from the writers (a mark,\n * `\\uFDD0<n>\\uFDD1`). Its service fills it in later, perhaps with nothing.\n */\nconst SERVICE_TAG = /<%[\\s\\S]*?%>|\\{%[\\s\\S]*?%\\}|\\{\\{[\\s\\S]*?\\}\\}|\\uFDD0\\d+\\uFDD1/g;\n\n/** A URL scheme that runs code or reads local files, after the characters browsers ignore in one, and without what a service fills in. */\nfunction unsafeUrl(url: string, allowedData?: RegExp): boolean {\n // eslint-disable-next-line no-control-regex\n const compact = url.replace(SERVICE_TAG, \"\").replace(/[\\u0000- \\u007f-\\u009f]/g, \"\").toLowerCase();\n if (compact.startsWith(\"data:\")) return !allowedData || !allowedData.test(compact);\n return /^(javascript|vbscript|file):/.test(compact);\n}\n\nexport type AssetInput = string | { src: string; width?: number; height?: number };\n/** A URL, or one with the image's own size in px (used to size it where no width is set). */\nexport type Asset = string | { src: string; width?: number; height?: number };\n\nconst IMAGE_DATA = /^data:image\\/(png|jpeg|jpg|gif|webp|svg\\+xml)[;,]/;\n\nexport function asset(): Kind<AssetInput, Asset> {\n const accepts = \"an image URL (http, https or a data:image URI), or { src, width, height }\";\n return kind<AssetInput, Asset>({\n name: \"asset\",\n editor: \"image\",\n accepts,\n parse(input) {\n const src = typeof input === \"string\" ? input : isObject(input) ? input.src : undefined;\n if (typeof src !== \"string\" || !src.trim()) return fail(`expected ${accepts}, not ${show(input)}`);\n if (unsafeUrl(src, IMAGE_DATA)) return fail(`${show(src)} isn't an image URL Elements will write`);\n if (typeof input === \"string\") return ok(src.trim());\n const extra = Object.keys(input as object).find((key) => ![\"src\", \"width\", \"height\"].includes(key));\n if (extra) return fail(`\"${extra}\" isn't part of an image; expected src, width or height`);\n const out: { src: string; width?: number; height?: number } = { src: src.trim() };\n for (const side of [\"width\", \"height\"] as const) {\n const value = (input as Record<string, unknown>)[side];\n if (value === undefined) continue;\n if (typeof value !== \"number\" || !(value > 0)) return fail(`an image's ${side} is its size in px, not ${show(value)}`);\n out[side] = value;\n }\n return ok(out);\n },\n jsonSchema: () => ({\n anyOf: [\n { type: \"string\", minLength: 1 },\n {\n type: \"object\",\n required: [\"src\"],\n properties: { src: { type: \"string\", minLength: 1 }, width: { type: \"number\", exclusiveMinimum: 0 }, height: { type: \"number\", exclusiveMinimum: 0 } },\n additionalProperties: false,\n },\n ],\n }),\n });\n}\n\nexport type LinkTarget = \"_blank\" | \"_self\";\nexport type LinkInput = string | { href: string; target?: LinkTarget };\nexport type LinkValue = string | { href: string; target?: LinkTarget };\n\n// ─── Videos ─────────────────────────────────────────────────────────────────\n\nexport type VideoProvider = \"youtube\" | \"vimeo\";\nconst YOUTUBE = /^https:\\/\\/(?:www\\.|m\\.)?(?:youtube\\.com\\/(?:watch\\?(?:[^#]*&)?v=|embed\\/|shorts\\/|live\\/)|youtu\\.be\\/)([A-Za-z0-9_-]{6,})/;\nconst VIMEO = /^https:\\/\\/(?:www\\.|player\\.)?vimeo\\.com\\/(?:video\\/)?(\\d+)/;\n\n/**\n * A video's provider and id, and what follows from them without the network: its player's URL, and a YouTube\n * video's thumbnail (a Vimeo video's is only found by asking Vimeo).\n */\nexport function videoParts(url: string): { provider: VideoProvider; id: string; embed: string; thumbnail?: string } | undefined {\n const youtube = YOUTUBE.exec(url);\n if (youtube) return { provider: \"youtube\", id: youtube[1], embed: `https://www.youtube.com/embed/${youtube[1]}`, thumbnail: `https://img.youtube.com/vi/${youtube[1]}/0.jpg` };\n const vimeo = VIMEO.exec(url);\n if (vimeo) return { provider: \"vimeo\", id: vimeo[1], embed: `https://player.vimeo.com/video/${vimeo[1]}` };\n return undefined;\n}\n\nexport function video(): Kind<string, string> {\n const accepts = \"a YouTube or Vimeo video's https link\";\n return kind<string, string>({\n name: \"video\",\n editor: \"link\",\n accepts,\n parse(input) {\n if (typeof input !== \"string\" || !videoParts(input.trim())) return fail(`expected ${accepts}, not ${show(input)}`);\n return ok(input.trim());\n },\n jsonSchema: () => ({ type: \"string\", pattern: \"^https://\" }),\n });\n}\n\nexport function link(): Kind<LinkInput, LinkValue> {\n const accepts = \"a URL (http, https, mailto, tel, a path, or a merge tag) or { href, target }\";\n return kind<LinkInput, LinkValue>({\n name: \"link\",\n editor: \"link\",\n accepts,\n parse(input) {\n const href = typeof input === \"string\" ? input : isObject(input) ? input.href : undefined;\n // A link to nothing is { href: \"\" }, as a template from another format says one has no URL; a string that's empty is a mistake.\n if (typeof href !== \"string\" || (!href.trim() && (typeof input === \"string\" || href !== \"\"))) return fail(`expected ${accepts}, not ${show(input)}`);\n if (unsafeUrl(href)) return fail(`${show(href)} isn't a link Elements will write (scripts, data and local files aren't)`);\n if (typeof input === \"string\") return ok(href.trim());\n const extra = Object.keys(input as object).find((key) => ![\"href\", \"target\"].includes(key));\n if (extra) return fail(`\"${extra}\" isn't part of a link; expected href or target`);\n const target = (input as Record<string, unknown>).target;\n if (target === undefined) return ok(href ? href.trim() : { href });\n if (target !== \"_blank\" && target !== \"_self\") return fail(`a link's target is \"_blank\" or \"_self\", not ${show(target)}`);\n return ok({ href: href.trim(), target });\n },\n jsonSchema: () => ({\n anyOf: [\n { type: \"string\", minLength: 1 },\n { type: \"object\", required: [\"href\"], properties: { href: { type: \"string\" }, target: { enum: [\"_blank\", \"_self\"] } }, additionalProperties: false },\n ],\n }),\n });\n}\n\n/** More attributes for an element, by name (a link's class, a `data-` attribute): not its handlers, which run scripts. */\nexport function attributes(): Kind<Record<string, string>, Record<string, string>> {\n const accepts = \"attributes by name, each a text value (no on… handlers, href or style)\";\n return kind<Record<string, string>, Record<string, string>>({\n name: \"attributes\",\n editor: \"text\",\n accepts,\n parse(input) {\n if (!isObject(input)) return fail(`expected ${accepts}, not ${show(input)}`);\n for (const [name, value] of Object.entries(input)) {\n if (!/^[a-zA-Z_:][\\w:.-]*$/.test(name) || /^(on|href$|style$)/i.test(name) || typeof value !== \"string\") return fail(`${show(name)} isn't an attribute Elements will write, with ${show(value)}`);\n }\n return ok(input as Record<string, string>);\n },\n jsonSchema: () => ({ type: \"object\", additionalProperties: { type: \"string\" } }),\n });\n}\n\n/** The narrowest a phone width may be set to. */\nexport const MIN_PHONE_WIDTH = 240;\n\n/** A Page's breakpoints: `mobile`, the widest window, in px, its phone styles apply to. */\nexport function breakpoints(): Kind<{ mobile?: number }, { mobile?: number } & { [key: string]: Json }> {\n const accepts = `{ mobile }: the phone width in px (from ${MIN_PHONE_WIDTH})`;\n return kind<{ mobile?: number }, { mobile?: number } & { [key: string]: Json }>({\n name: \"breakpoints\",\n editor: \"number\",\n accepts,\n parse(input) {\n if (!isObject(input)) return fail(`expected ${accepts}, not ${show(input)}`);\n const unknown = Object.keys(input).find((key) => key !== \"mobile\");\n if (unknown !== undefined) return fail(`${show(unknown)} isn't a breakpoint a Page has: it has mobile`);\n const { mobile } = input;\n if (mobile === undefined) return ok({});\n if (typeof mobile !== \"number\" || !Number.isInteger(mobile) || mobile < MIN_PHONE_WIDTH) return fail(`mobile is the widest window its phone styles apply to, an integer from ${MIN_PHONE_WIDTH}, not ${show(mobile)}`);\n return ok({ mobile });\n },\n empty: (value) => value.mobile === undefined,\n jsonSchema: () => ({ type: \"object\", properties: { mobile: { type: \"integer\", minimum: MIN_PHONE_WIDTH } }, additionalProperties: false }),\n });\n}\n\n/** A link's href and target, from either form. */\nexport function linkParts(value: LinkValue): { href: string; target?: LinkTarget } {\n return typeof value === \"string\" ? { href: value } : value;\n}\n\n/** An image's URL and own size, from either form. */\nexport function assetParts(value: Asset): { src: string; width?: number; height?: number } {\n return typeof value === \"string\" ? { src: value } : value;\n}\n","/**\n * Component definitions: one per component, the source of its props, styles,\n * children, targets, support in each output and editors. Types, validation,\n * the support pass and property discovery are all read from these.\n */\nimport type { EmailClient } from \"./email-clients\";\nimport type { EditorKind, InputOf, Kind, OutputOf } from \"./kinds\";\nimport type { Json, Node } from \"./model\";\n\n/** What a component is, for the nesting rules: a component belongs to one or more. */\nexport type Category = \"root\" | \"section\" | \"layout\" | \"block\" | \"inline\" | \"shape\";\n\n/** The outputs Elements renders. */\nexport type Target = \"email\" | \"web\" | \"print\" | \"pdf\" | \"image\";\n\nexport const TARGETS: readonly Target[] = [\"email\", \"web\", \"print\", \"pdf\", \"image\"];\n\n/** The roots a template can have: each decides the output (`render()` writes an Email's HTML, a Page's, …). */\nexport type RootName = \"Email\" | \"Page\" | \"Document\" | \"Canvas\";\n\nexport const ROOT_NAMES: readonly RootName[] = [\"Email\", \"Page\", \"Document\", \"Canvas\"];\n\n/** What a style is about, for the guide and `describeComponents()`: the group it's listed in. */\nexport type StyleGroup = \"Layout\" | \"Size\" | \"Position\" | \"Spacing\" | \"Typography\" | \"Background\" | \"Border\" | \"Effects\";\n\nexport const STYLE_GROUPS: readonly StyleGroup[] = [\"Layout\", \"Size\", \"Position\", \"Spacing\", \"Typography\", \"Background\", \"Border\", \"Effects\"];\n\nexport interface PropSpec<K extends Kind<any, any> = Kind<any, any>, R extends boolean = boolean> {\n kind: K;\n required?: R;\n label: string;\n description?: string;\n /**\n * The roots it may be given under (default: every root its component goes in). Under another root it's a\n * `prop/not-supported` error naming these.\n */\n roots?: readonly RootName[];\n /** Used where the prop isn't given (not written into the document). */\n default?: OutputOf<K>;\n /** Editors may change it (default true). */\n editable?: boolean;\n /** How each output shows it: required for every output its component renders to (a test checks). */\n support?: SupportByTarget;\n}\n\n/** A style's or prop's support, by output. */\nexport type SupportByTarget = Partial<Record<Target, Support | readonly Support[]>>;\n\n/**\n * Where what an output shows of a style or prop is known from: captures of\n * real classic Outlook for Windows; caniemail's client tables\n * (caniemail.com); the output's writer itself, which turns it into markup the\n * output shows (checked in Chromium, for email with and without <style>, and\n * against a model of Outlook's layout built from those captures); captures of\n * Gmail, Outlook.com or Apple Mail; CSS written as is, which browsers show as\n * asked; or assumed, not yet checked.\n */\nexport type SupportSource = \"outlook-captures\" | \"gmail-captures\" | \"outlook-com-captures\" | \"apple-mail-captures\" | \"caniemail\" | \"writer\" | \"css\" | \"assumed\";\n\n/**\n * How an output shows a style or prop, or some of its values (`values`, or\n * `when` the value, on a node with such props, is such): as asked (`full`); as asked but in classic\n * Outlook, which shows something else (`outlook`, email only: what it shows);\n * not quite as asked anywhere it's shown (`partial`: what it shows); or not at\n * all (`none`: what it does instead). Read by the support pass every output\n * runs: `outlook` and `partial` are notes, `none` a warning, whether the email\n * clients it names were captured or are from caniemail's tables; one `assumed`\n * is only ever a note.\n */\nexport type Support =\n | { level: \"full\"; source: SupportSource }\n | {\n level: \"outlook\" | \"partial\" | \"none\";\n shows: string;\n values?: readonly Json[];\n when?: (value: Json, node: { props: Record<string, Json> }) => boolean;\n source: SupportSource;\n /** For email, the clients it's about (`outlook`: classic Outlook); absent, every email client. */\n clients?: readonly EmailClient[];\n /** caniemail's feature the clients are from (its slug), checked against its tables (test/caniemail.test.ts). */\n feature?: string;\n /** What to change. */\n fix?: string;\n };\n\nexport interface StyleSpec<K extends Kind<any, any> = Kind<any, any>> {\n kind: K;\n label: string;\n description?: string;\n /** Passed down to children that don't set it (text styles). */\n inherited?: boolean;\n /** May be overridden on phones (`mobile`). */\n mobile?: boolean;\n /**\n * The roots it may be set under (default: every root its component goes in). Under another root it's a\n * `style/not-supported` error naming these, in `style` and in its condition blocks alike.\n */\n roots?: readonly RootName[];\n /** The group it's listed in; default: the group of its name (`STYLE_GROUP_OF`), as a style's name is CSS's. */\n group?: StyleGroup;\n editable?: boolean;\n /** How each output shows it: required for every output its component renders to (a test checks). */\n support?: SupportByTarget;\n}\n\nexport type PropSpecs = Record<string, PropSpec>;\nexport type StyleSpecs = Record<string, StyleSpec>;\n\nexport interface ChildrenRule {\n /** Text (strings) may be children. */\n text?: boolean;\n /** Components of these categories may be children. */\n categories?: readonly Category[];\n /** These types may be children, whatever their category. */\n types?: readonly string[];\n}\n\nexport interface TargetSupport {\n /** What's different in this target, for docs and diagnostics. */\n note?: string;\n}\n\n/** A change to a node: what a composite editor writes. */\nexport interface NodePatch {\n props?: Record<string, Json | undefined>;\n style?: Record<string, Json | undefined>;\n hover?: Record<string, Json | undefined>;\n}\n\n/** An editor that reads and writes several props at once (a button's colors). */\nexport interface CompositeEditor<V = any> {\n /** The conceptual editor (\"buttonColors\"); editors map it to a widget. */\n editor: string;\n /** The paths it reads and writes (\"style.color\", \"hover.backgroundColor\"). */\n covers: readonly string[];\n read(node: Pick<Node, \"props\" | \"style\" | \"hover\">): V;\n write(value: V): NodePatch;\n}\n\nexport type EditorGroup =\n | { title: string; paths: readonly string[] }\n | { title: string; composite: CompositeEditor };\n\n/**\n * A component's definition. `H` is its hover styles' keys: a definition made with `defineComponent()` keeps the list it\n * gives (none: `readonly []`), so the types of its `style.hover` can be exactly those; the default is any of its styles.\n */\nexport interface ComponentDefinition<P extends PropSpecs = PropSpecs, S extends StyleSpecs = StyleSpecs, H extends readonly (keyof S & string)[] = readonly (keyof S & string)[]> {\n type: string;\n label: string;\n description: string;\n categories: readonly Category[];\n props: P;\n style: S;\n /** The component's own style, under what the author sets and over what's inherited (as a browser's defaults are). */\n defaultStyle?: { [K in keyof S]?: OutputOf<S[K][\"kind\"]> };\n /** Default style that depends on a prop's value (a Heading's size on its level), over `defaultStyle`. */\n defaultStyleBy?: { prop: keyof P & string; values: Record<string, { [K in keyof S]?: OutputOf<S[K][\"kind\"]> }> };\n /** Style keys that may be set for `hover`. */\n hover?: H;\n /**\n * Styles a condition takes on this component that an output doesn't show under it, by condition, style and\n * output (a Page root's phone font size): reported when the template is expanded, before a Grid is arranged.\n */\n conditionSupport?: Partial<Record<\"mobile\" | \"hover\", Partial<Record<keyof S & string, SupportByTarget>>>>;\n children: ChildrenRule;\n /**\n * How wide it is where nothing sets its width: `stretch` fills its parent's\n * content width; `shrink` takes its own size (an image's, a button's\n * content).\n */\n sizing: \"stretch\" | \"shrink\" | \"none\";\n /** A root that has a phone width (Email, Page): `mobile` and `hidden` apply under it. */\n responsive?: boolean;\n /**\n * A built-in that lays its children out with other components (a Grid's Rows of Columns): its node as those,\n * before layout. Its children (and their ids) are kept as they are.\n */\n arrange?: (node: Node) => Node;\n /** Where it renders; a target left out is a diagnostic. */\n targets: Partial<Record<Target, TargetSupport>>;\n /**\n * The roots it may go in, of those whose output it renders to (default: every one whose children reach it). Under\n * another such root it's the `notAllowed` error, by default `component/not-supported` naming these; under a root\n * whose output it doesn't render to, it's `target/unsupported`, as for any component.\n */\n roots?: readonly RootName[];\n notAllowed?: { code: string; message: (root: string) => string };\n /** Why a target it doesn't render can't, and what to do instead (in the diagnostic). */\n unsupported?: Partial<Record<Target, string>>;\n editor?: { groups: readonly EditorGroup[] };\n}\n\n/** Keeps the literal types of a definition's props and styles, for the derived TypeScript types. */\nexport function defineComponent<const P extends PropSpecs, const S extends StyleSpecs, const H extends readonly (keyof S & string)[] = readonly []>(\n definition: ComponentDefinition<P, S, H>\n): ComponentDefinition<P, S, H> {\n return definition;\n}\n\n/** A prop of `kind`; the type keeps whether it's required and whether it has a default. */\nexport function prop<K extends Kind<any, any>, const R extends boolean = false, const D extends OutputOf<K> | undefined = undefined>(\n kind: K,\n options: Omit<PropSpec<K, R>, \"kind\" | \"default\"> & { default?: D }\n): PropSpec<K, R> & { default: D } {\n return { kind, ...options } as PropSpec<K, R> & { default: D };\n}\n\n// ─── Types derived from definitions ─────────────────────────────────────────\n\ntype RequiredKeys<P extends PropSpecs> = { [K in keyof P]: Exclude<P[K][\"required\"], undefined> extends true ? K : never }[keyof P];\ntype OptionalKeys<P extends PropSpecs> = Exclude<keyof P, RequiredKeys<P>>;\n\n/** The props a component takes, as authors write them. */\nexport type PropsInput<P extends PropSpecs> = { [K in RequiredKeys<P>]: InputOf<P[K][\"kind\"]> } & {\n [K in OptionalKeys<P>]?: InputOf<P[K][\"kind\"]>;\n};\n\n/** Its style, as authors write it. */\nexport type StyleInput<S extends StyleSpecs> = { [K in keyof S]?: InputOf<S[K][\"kind\"]> };\n\n/** Its style once normalized (in a document). */\nexport type StyleOutput<S extends StyleSpecs> = { [K in keyof S]?: OutputOf<S[K][\"kind\"]> };\n\n/** A node of this component in the template tree, before normalization. */\nexport type NodeInput<D extends ComponentDefinition<any, any>> = D extends ComponentDefinition<infer P, infer S>\n ? {\n type: D[\"type\"];\n id?: string;\n props?: PropsInput<P>;\n style?: StyleInput<S>;\n mobile?: StyleInput<S>;\n hover?: StyleInput<S>;\n hidden?: { mobile?: boolean; desktop?: boolean };\n children?: Array<{ type: string; [key: string]: unknown } | string>;\n }\n : never;\n\nexport type { EditorKind };\n","/**\n * The conditions a component's styles can be set for besides its own: on phones (`mobile`) and while the pointer is\n * over it (`hover`). Each says where it's allowed, which styles it takes, where its rules go in the stylesheet, and\n * how each output shows it, so reading a template, expanding composites, the support diagnostics and the writers all\n * go through this one list. A condition joins it with its support for every output (test/writers/support.test.ts).\n */\nimport type { ComponentDefinition, StyleSpec, Support, SupportByTarget, Target } from \"./define\";\nimport type { Json } from \"./model\";\nimport type { Level, Media } from \"./writers/shared/classes\";\n\nexport type ConditionName = \"mobile\" | \"hover\";\n\n/** The least a node needs for a paged output's message. */\ninterface Named {\n type: string;\n}\n\nexport interface Condition {\n name: ConditionName;\n /** What it's called in messages: \"on phones\", and \"for phones\" for what can be set for it. */\n on: string;\n for: string;\n /** Whether it's allowed under a root; elsewhere it's the `notAllowed` error when a template is read. Undefined: every root. */\n roots?: (root: ComponentDefinition | undefined) => boolean;\n notAllowed?: { code: string; message: string };\n /**\n * Where its rules go in the stylesheet: an existing Media, and for a state its selector and Level; `within`, the\n * selector for a box that draws part of a focusable element inside it (an email Button's cell, around its link).\n */\n sheet: { media: Media; selector: string; within?: string; level?: Level };\n /** Which styles of a component it takes. */\n allows: (spec: StyleSpec, key: string, definition: ComponentDefinition) => boolean;\n /** How each output shows the block itself. */\n support: Partial<Record<Target, Support>>;\n /** Per style, how each output shows it inside this block, where that differs from the style's own declaration. */\n styles?: Record<string, SupportByTarget>;\n /** What a PDF or an image writes for it, where it can reach one. */\n paged?: (node: Named, where: string) => string;\n /** Whether classic Outlook for Windows ever applies it: a style's `outlook` note inside it is skipped where it doesn't. */\n outlookApplies: boolean;\n /** A node hidden here doesn't need its block: the support pass skips it. */\n hiddenKey?: \"mobile\" | \"desktop\";\n}\n\nexport const MOBILE: Condition = {\n name: \"mobile\",\n on: \"on phones\",\n for: \"for phones\",\n roots: (root) => !!root?.responsive,\n notAllowed: { code: \"mobile/not-supported\", message: \"Phone styles are for an Email or a Page, which have a phone width\" },\n sheet: { media: \"phone\", selector: \"&\" },\n allows: (spec) => !!spec.mobile,\n support: { web: { level: \"full\", source: \"writer\" }, email: { level: \"full\", source: \"writer\" } },\n styles: {\n // The email's phone text styles are rules that override a size; \"normal\" isn't one.\n lineHeight: { email: { level: \"none\", values: [\"normal\"], shows: \"the line height it has on desktop\", source: \"writer\" } },\n },\n outlookApplies: false,\n hiddenKey: \"mobile\",\n};\n\nexport const HOVER: Condition = {\n name: \"hover\",\n on: \"on hover\",\n for: \"for hover\",\n // Keyboard focus gets the same styles as the pointer: a link or button reached by Tab shows its hover colors.\n // A box around the link (an email Button's cell, its background) takes them while the link in it has focus.\n sheet: { media: \"all\", selector: \"&:hover,&:focus-visible\", within: \"&:hover,&:focus-within\", level: \"hover\" },\n allows: (_, key, definition) => !!definition.hover?.includes(key),\n support: {\n web: { level: \"full\", source: \"css\" },\n // On type selectors only in Outlook.com and Outlook for Mac (Elements' are classes); the phone apps' results don't\n // matter, as nothing hovers there.\n email: {\n level: \"partial\",\n shows: \"no change (where it shows, keyboard focus gets it too)\",\n source: \"caniemail\",\n feature: \"css-pseudo-class-hover\",\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"gmx\", \"web-de\", \"sfr\", \"laposte\", \"mail-ru\"],\n },\n },\n paged: (node, where) => `A hover isn't possible in ${where}: nothing points at it. The ${node.type} shows its own colors`,\n outlookApplies: false,\n};\n\n/** In the order a node's blocks are read and reported. */\nexport const CONDITIONS: readonly Condition[] = [MOBILE, HOVER];\n\nexport const CONDITION_NAMES: ReadonlySet<string> = new Set(CONDITIONS.map((condition) => condition.name));\n\n/** A node's block for a condition, if it has one with something in it. */\nexport function blockOf(node: { mobile?: Record<string, Json>; hover?: Record<string, Json> }, condition: Condition): Record<string, Json> | undefined {\n const block = node[condition.name];\n return block && Object.keys(block).length ? block : undefined;\n}\n\n/** Whether a node shows anywhere: hidden on phones and on desktop, it never does. */\nexport function shownAnywhere(node: { hidden?: { mobile?: boolean; desktop?: boolean } }): boolean {\n return !(node.hidden?.mobile && node.hidden?.desktop);\n}\n","/**\n * The style properties components pick from. There are no margins: space\n * between siblings is the parent's `gap`, space inside a box its `padding`,\n * which every target can do (margins aren't reliable in email).\n */\nimport type { Support, StyleGroup, StyleSpec } from \"./define\";\n\n/** Shown as asked, by how the writer writes it. */\nconst writer: Support = { level: \"full\", source: \"writer\" };\n/** Written as CSS, which browsers show as asked. */\nexport const css: Support = { level: \"full\", source: \"css\" };\nimport { border, color, enumOf, flex, fontFamily, fontWeight, insets, length, lineHeight, radius } from \"./kinds\";\n\n/** Inherited from the root down through layouts, as in CSS. */\nexport const textStyle = {\n color: { kind: color(), label: \"Text color\", inherited: true, support: { email: writer, web: css }},\n // A web font in a stack is reported from the root's fonts (whether it loads depends on the client).\n fontFamily: { kind: fontFamily(), label: \"Font\", inherited: true, support: { email: { level: \"full\", source: \"outlook-captures\" }, web: css } },\n // Word rounds sizes to half points (13px is 10pt): a fraction of a px.\n fontSize: { kind: length([\"px\"], { min: 1 }), label: \"Font size\", inherited: true, mobile: true, support: { email: { level: \"full\", source: \"outlook-captures\" }, web: css } },\n fontWeight: {\n kind: fontWeight(),\n label: \"Font weight\",\n inherited: true,\n support: { email: { level: \"outlook\", values: [100, 200, 300, 500], shows: \"normal weight: Word draws only normal and bold (600 and over)\", source: \"caniemail\", feature: \"css-font-weight\" }, web: css },\n },\n fontStyle: { kind: enumOf([\"normal\", \"italic\"]), label: \"Font style\", inherited: true, support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n // Written in px with mso-line-height-rule: exactly, which Word keeps (it drops unitless ones).\n lineHeight: { kind: lineHeight(), label: \"Line height\", inherited: true, mobile: true, support: { email: { level: \"full\", source: \"outlook-captures\" }, web: css } },\n letterSpacing: {\n kind: length([\"px\"], { min: -100 }),\n label: \"Letter spacing\",\n inherited: true,\n mobile: true,\n support: { email: { level: \"outlook\", shows: \"normal spacing: Word keeps letter spacing but doesn't draw it\", source: \"outlook-captures\" }, web: css },\n },\n textAlign: { kind: enumOf([\"left\", \"center\", \"right\", \"justify\"]), label: \"Alignment\", inherited: true, mobile: true, support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n textTransform: {\n kind: enumOf([\"none\", \"uppercase\", \"lowercase\", \"capitalize\"]),\n label: \"Letter case\",\n inherited: true,\n support: { email: { level: \"outlook\", values: [\"lowercase\"], shows: \"the text as written: Word doesn't lowercase it\", source: \"caniemail\", feature: \"css-text-transform\" }, web: css },\n },\n textDecoration: {\n kind: enumOf([\"none\", \"underline\", \"line-through\"]),\n label: \"Decoration\",\n support: {\n // Removed, so \"none\" leaves a link the client's own underline: said only where a line is asked for.\n email: { level: \"partial\", values: [\"underline\", \"line-through\"], shows: \"no line: the client removes it\", source: \"caniemail\", feature: \"css-text-decoration\", clients: [\"gmail-app-other\", \"protonmail\", \"orange\", \"sfr\"] },\n web: css,\n },\n },\n} satisfies Record<string, StyleSpec>;\n\n/** Text styles for a container, passed down to its text: all but decoration, which is a text element's own (CSS doesn't pass it down). */\nexport const inheritedTextStyle = (({ textDecoration: _, ...rest }) => rest)(textStyle);\n\nexport const boxStyle = {\n // Widths are the resolver's, written as table, cell and image attributes in px (what Word sizes by).\n width: { kind: length([\"px\", \"%\"]), label: \"Width\", mobile: true, support: { email: writer, web: css }},\n minWidth: { kind: length([\"px\", \"%\"]), label: \"Minimum width\", support: { email: writer, web: css }},\n maxWidth: { kind: length([\"px\", \"%\"]), label: \"Maximum width\", mobile: true, support: { email: writer, web: css }},\n height: { kind: length([\"px\"]), label: \"Height\", support: { email: writer, web: css }},\n // Cell padding, which Word keeps (it drops a div's).\n padding: { kind: insets(), label: \"Padding\", mobile: true, support: { email: { level: \"full\", source: \"outlook-captures\" }, web: css } },\n backgroundColor: { kind: color(), label: \"Background color\", support: { email: writer, web: css }},\n border: { kind: border(), label: \"Border\", mobile: true, support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n borderRadius: {\n kind: radius(),\n label: \"Corner radius\",\n support: {\n email: [\n { level: \"outlook\", shows: \"square corners\", source: \"caniemail\", feature: \"css-border-radius\" },\n { level: \"partial\", shows: \"square corners\", source: \"caniemail\", feature: \"css-border-radius\", clients: [\"gmx\", \"web-de\", \"orange\"] },\n ],\n web: css,\n },\n },\n overflow: {\n kind: enumOf([\"visible\", \"hidden\"]),\n label: \"Overflow\",\n description: \"Whether content past a set height is cut off.\",\n support: { email: { level: \"outlook\", shows: \"content past the height: Word doesn't cut it off\", values: [\"hidden\"], source: \"caniemail\" }, web: css },\n },\n} satisfies Record<string, StyleSpec>;\n\nexport const layoutStyle = {\n gap: { kind: length([\"px\"]), label: \"Gap\", description: \"Space between children.\", mobile: true, support: { email: writer, web: css }},\n alignItems: {\n kind: enumOf([\"start\", \"center\", \"end\", \"stretch\"]),\n label: \"Align items\",\n description: \"Where children sit across the layout's direction (vertically in a Row, horizontally in a Column), as CSS align-items. Across a Column it places what has its own size (a Button, an Image, an Svg, a box with a width); a block of text fills the width, so its words move with its textAlign.\",\n // A cell's align, and a Row's cells' valign.\n support: { email: writer, web: css },\n },\n justifyContent: {\n kind: enumOf([\"start\", \"center\", \"end\", \"space-between\"]),\n label: \"Justify content\",\n description: \"Where children sit along the layout's direction, as CSS justify-content.\",\n support: { email: writer, web: css },\n },\n} satisfies Record<string, StyleSpec>;\n\n/** On any child, read by the Row it's in. */\nexport const placementStyle = {\n flex: {\n kind: flex(),\n label: \"Share\",\n description: 'In a Row: its share of the width left after children with a width (default 1); \"none\" takes its own size.',\n support: { email: writer, web: css },\n },\n} satisfies Record<string, StyleSpec>;\n\n/** The keys of `group` named, as a group of their own. */\nexport function pick<G extends Record<string, StyleSpec>, const K extends keyof G>(group: G, ...keys: K[]): Pick<G, K> {\n return Object.fromEntries(keys.map((key) => [key, group[key]])) as Pick<G, K>;\n}\n\n/**\n * The group each style is listed in, by its name. A style's name is CSS's (or, for a component's own, says what it\n * draws), and it's in the same group on every component that takes it; a spec's own `group` comes first.\n */\nexport const STYLE_GROUP_OF: Readonly<Record<string, StyleGroup>> = {\n // How children are placed, and how a box sits among its siblings.\n alignItems: \"Layout\",\n justifyContent: \"Layout\",\n justifyItems: \"Layout\",\n alignSelf: \"Layout\",\n verticalAlign: \"Layout\",\n flex: \"Layout\",\n flexWrap: \"Layout\",\n overflow: \"Layout\",\n // A box's size.\n width: \"Size\",\n minWidth: \"Size\",\n maxWidth: \"Size\",\n height: \"Size\",\n boxSizing: \"Size\",\n // Space inside a box and between its children.\n padding: \"Spacing\",\n gap: \"Spacing\",\n rowGap: \"Spacing\",\n indent: \"Spacing\",\n cellPadding: \"Spacing\",\n // Text.\n color: \"Typography\",\n fontFamily: \"Typography\",\n fontSize: \"Typography\",\n fontWeight: \"Typography\",\n fontStyle: \"Typography\",\n lineHeight: \"Typography\",\n letterSpacing: \"Typography\",\n textAlign: \"Typography\",\n textTransform: \"Typography\",\n textDecoration: \"Typography\",\n // What's drawn behind content, and a shape's paint.\n backgroundColor: \"Background\",\n fill: \"Background\",\n // Lines around and between boxes, and a shape's outline.\n border: \"Border\",\n borderTop: \"Border\",\n borderRadius: \"Border\",\n borderCollapse: \"Border\",\n rowBorder: \"Border\",\n separatorColor: \"Border\",\n stroke: \"Border\",\n strokeWidth: \"Border\",\n opacity: \"Effects\",\n};\n\n/** The group a style is listed in: its spec's own, else its name's. */\nexport function styleGroup(key: string, spec: StyleSpec): StyleGroup | undefined {\n return spec.group ?? STYLE_GROUP_OF[key];\n}\n","/**\n * Built-in components made of primitives: today's Social, Menu and Video on the new engine.\n * Each is a component of its own in the template (validated, described, and a block of its own in the builder's\n * design), and is expanded into the primitives it's made of before layout, as a custom component is: the writers\n * draw only primitives, in every output, and nothing in a render needs a browser or the network.\n */\nimport { prop, type ComponentDefinition, type PropSpecs, type StyleSpecs, type SupportByTarget } from \"./define\";\nimport { color, enumOf, insets, items, link, number, text, type LinkValue } from \"./kinds\";\nimport type { Json } from \"./model\";\nimport type { ExpandContext, ExpandProps } from \"./registry\";\nimport { css, layoutStyle, pick, placementStyle, textStyle } from \"./styles\";\n\nconst WRITTEN: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: { level: \"full\", source: \"writer\" } };\nconst BY_PARTS: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: css as SupportByTarget[\"web\"] };\n\n/** A definition made of primitives: `expand` returns the node it is, from its props and style (defaults applied). */\nfunction defineComposite<const P extends PropSpecs, const S extends StyleSpecs, const H extends readonly (keyof S & string)[] = readonly []>(\n definition: ComponentDefinition<P, S, H> & { expand(props: ExpandProps<P>, context: ExpandContext): unknown }\n): ComponentDefinition<P, S, H> {\n return { ...definition, custom: true } as ComponentDefinition<P, S, H>;\n}\n\n/** Where the social networks' icons are, by style and network: Unlayer's, as today's Social uses them. */\nconst SOCIAL_ICONS = \"https://cdn.tools.unlayer.com/social/icons\";\n\nexport const Social = defineComposite({\n type: \"Social\",\n label: \"Social icons\",\n description: \"Links to social profiles: a line of the networks' icons, each linked to its profile.\",\n categories: [\"block\"],\n props: {\n // Its icon is found by its name's letters and digits (\"LinkedIn\": linkedin.png): a name needs one.\n icons: prop(items({ name: text({ maxLength: 40, pattern: /[A-Za-z0-9]/, mismatch: `has no letter (a to z) or digit, which its icon is found by (\"Instagram\")` }), href: link() }, \"icon\"), {\n support: WRITTEN,\n label: \"Icons\",\n required: true,\n description: 'Each network by name (\"Instagram\", \"LinkedIn\") and the link to its profile.',\n }),\n iconType: prop(enumOf([\"circle\", \"rounded\", \"squared\"]), { support: WRITTEN, label: \"Icon style\", default: \"circle\" }),\n size: prop(number({ min: 1, integer: true }), { support: WRITTEN, label: \"Icon size\", description: \"Each icon's width and height, in px.\", default: 32 }),\n },\n style: {\n gap: { ...layoutStyle.gap, label: \"Space between icons\", support: BY_PARTS },\n justifyContent: { kind: enumOf([\"start\", \"center\", \"end\"]), label: \"Alignment\", description: \"Where the icons sit across the line.\", support: BY_PARTS },\n ...placementStyle,\n },\n defaultStyle: { gap: 5, justifyContent: \"center\" },\n children: {},\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Social icons\", paths: [\"props.icons\", \"props.iconType\", \"props.size\", \"style.gap\", \"style.justifyContent\"] }] },\n expand: ({ icons, iconType, size }, { style }) => ({\n type: \"Row\",\n props: { stackOnMobile: false },\n style: { gap: style.gap, justifyContent: style.justifyContent },\n children: icons.map((icon: { name: string; href: LinkValue }) => ({\n type: \"Link\",\n // Each opens in a new window, as the builder's do, unless it says otherwise.\n props: { href: typeof icon.href === \"string\" ? { href: icon.href, target: \"_blank\" } : icon.href, title: icon.name },\n style: { flex: \"none\" },\n children: [\n {\n type: \"Image\",\n props: { src: `${SOCIAL_ICONS}/${iconType}/${icon.name.toLowerCase().replace(/[^a-z0-9]+/g, \"\")}.png`, alt: icon.name },\n style: { width: size },\n },\n ],\n })),\n }),\n});\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\nconst MENU_TEXT = [\"fontFamily\", \"fontSize\", \"fontWeight\", \"lineHeight\", \"letterSpacing\", \"textTransform\"] as const;\n\nexport const Menu = defineComposite({\n type: \"Menu\",\n label: \"Menu\",\n description: \"A line of links (a site's sections, a footer's), onto more lines where they don't fit, with a separator between them on desktop; or links down a column.\",\n categories: [\"block\"],\n props: {\n items: prop(items({ text: text({ maxLength: 200 }), href: link() }, \"item\"), {\n support: WRITTEN,\n label: \"Items\",\n required: true,\n description: \"Each link's text and where it goes.\",\n }),\n separator: prop(text({ maxLength: 10 }), { support: WRITTEN, label: \"Separator\", description: 'Between the links of a horizontal menu (\"|\", \"·\"), on desktop: phones show none.', default: \"\" }),\n layout: prop(enumOf([\"horizontal\", \"vertical\"]), { support: WRITTEN, label: \"Layout\", default: \"horizontal\" }),\n },\n style: {\n ...pick(textStyle, \"color\", ...MENU_TEXT),\n separatorColor: { kind: color(), label: \"Separator color\", support: BY_PARTS },\n padding: { kind: insets(), label: \"Each link's padding\", description: \"Around each link: its sides are the space between them.\", support: BY_PARTS },\n justifyContent: { kind: enumOf([\"start\", \"center\", \"end\"]), label: \"Alignment\", description: \"Where the links sit.\", support: BY_PARTS },\n ...placementStyle,\n },\n defaultStyle: {\n color: \"#0068A5\",\n fontSize: 14,\n lineHeight: 1.2,\n separatorColor: \"#444444\",\n padding: { top: 5, right: 15, bottom: 5, left: 15 },\n justifyContent: \"center\",\n },\n children: {},\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: {\n groups: [\n { title: \"Menu\", paths: [\"props.items\", \"props.layout\", \"props.separator\", \"style.justifyContent\"] },\n { title: \"Text\", paths: [\"style.color\", \"style.separatorColor\", ...MENU_TEXT.map((key) => `style.${key}`)] },\n { title: \"Spacing\", paths: [\"style.padding\"] },\n ],\n },\n expand: ({ items: links, separator, layout }, { style, responsive }) => {\n const padding = style.padding as Sides;\n const text = Object.fromEntries(MENU_TEXT.filter((key) => style[key] !== undefined).map((key) => [key, style[key]]));\n const link = (item: { text: string; href: LinkValue }) => ({ type: \"Link\", props: { href: item.href }, style: { color: style.color, textDecoration: \"none\" }, children: [item.text] });\n if (layout === \"vertical\") {\n return { type: \"Column\", style: { ...text, gap: padding.top + padding.bottom, padding, alignItems: style.justifyContent }, children: links.map(link) };\n }\n // Each link in its padding, as today's Menu has it: two links are its sides apart, and a separator between them\n // has a link's padding on either side, not twice the space. Separators are left out on phones, where a template\n // has phones (a Document or a Canvas has none); they're as high in the line as the links' words.\n const item = (entry: { text: string; href: LinkValue }) => ({ type: \"Text\", style: { flex: \"none\", padding }, children: [link(entry)] });\n const between = {\n type: \"Text\",\n ...(responsive ? { hidden: { mobile: true } } : {}),\n style: { flex: \"none\", padding: { top: padding.top, right: 0, bottom: padding.bottom, left: 0 }, color: style.separatorColor },\n children: [separator],\n };\n return {\n type: \"Row\",\n props: { stackOnMobile: false },\n // Links that don't fit on one line go onto another, as today's Menu's do.\n style: { ...text, flexWrap: \"wrap\", justifyContent: style.justifyContent },\n children: links.flatMap((entry: { text: string; href: LinkValue }, index: number) => [...(index && separator ? [between] : []), item(entry)]),\n };\n },\n});\n","/**\n * Layouts made of the others. A Grid is a component of its own in the template (validated,\n * described, a block of its own in the builder's design) and, before layout, the Rows of Columns it is: the resolver\n * and every writer lay out only those, so a Grid draws the same in every output with nothing of its own to support.\n */\nimport { defineComponent, prop, type SupportByTarget } from \"./define\";\nimport { boolean, enumOf, number } from \"./kinds\";\nimport type { Json, Node } from \"./model\";\nimport { boxStyle, css, inheritedTextStyle, layoutStyle, pick, placementStyle } from \"./styles\";\n\nconst WRITTEN: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: { level: \"full\", source: \"writer\" } };\n\n/** Styles of a Grid that are its box's (the Column it is), not its rows'. */\nconst BOX = [...Object.keys(boxStyle), \"flex\", ...Object.keys(inheritedTextStyle)];\n\nconst only = (style: Record<string, Json> | undefined, keys: readonly string[]) => {\n const out = Object.fromEntries(Object.entries(style ?? {}).filter(([key]) => keys.includes(key)));\n return Object.keys(out).length ? out : undefined;\n};\n\n/** A Grid as the Column of Rows it is: its children `columns` to a Row, each in a cell of equal width (the last Row's empty cells too). */\nfunction arrangeGrid(node: Node): Node {\n const columns = Math.max(1, Math.floor(Number(node.props?.columns ?? 2)));\n const stackOnMobile = node.props?.stackOnMobile !== false;\n const style = node.style ?? {};\n const gap = style.gap;\n const rowGap = style.rowGap ?? gap;\n const children = (node.children ?? []).filter((child): child is Node => typeof child === \"object\" && child !== null);\n const rows: Node[] = [];\n for (let start = 0; start < children.length; start += columns) {\n const cells: Node[] = children.slice(start, start + columns).map((child) => ({ type: \"Column\", children: [child] }));\n // The last Row's empty cells keep its cells as wide as the others; on phones, where the cells stack, they're not\n // drawn (where they stay side by side, they are: the cells keep their widths there too).\n while (cells.length < columns) cells.push({ type: \"Column\", ...(stackOnMobile ? { hidden: { mobile: true } } : {}), children: [] });\n const mobileGap = node.mobile?.gap;\n rows.push({\n type: \"Row\",\n props: { stackOnMobile },\n style: { ...(gap !== undefined ? { gap } : {}), ...(style.alignItems !== undefined ? { alignItems: style.alignItems } : {}) },\n ...(mobileGap !== undefined ? { mobile: { gap: mobileGap } } : {}),\n children: cells,\n });\n }\n const box = only(style, BOX);\n const mobileBox = only(node.mobile, BOX);\n // On phones, where the children stack one under another, the gap is between every two of them, across a row's end\n // too: the rows are its gap apart there, not rowGap.\n const phoneGap = node.mobile?.gap ?? gap ?? 0;\n const mobileRowGap = stackOnMobile ? (phoneGap !== (rowGap ?? 0) ? phoneGap : undefined) : (node.mobile?.rowGap ?? node.mobile?.gap);\n return {\n type: \"Column\",\n ...(node.id ? { id: node.id } : {}),\n style: { ...box, ...(rowGap !== undefined ? { gap: rowGap } : {}) },\n ...(mobileBox || mobileRowGap !== undefined ? { mobile: { ...mobileBox, ...(mobileRowGap !== undefined ? { gap: mobileRowGap } : {}) } } : {}),\n ...(node.hidden ? { hidden: node.hidden } : {}),\n children: rows,\n };\n}\n\nexport const Grid = defineComponent({\n type: \"Grid\",\n label: \"Grid\",\n description: \"Its children in columns of equal width, row after row; on phones, one under another.\",\n categories: [\"layout\", \"block\"],\n props: {\n columns: prop(number({ min: 1, max: 12, integer: true }), { support: WRITTEN, label: \"Columns\", description: \"How many children to a row.\", default: 2 }),\n stackOnMobile: prop(boolean(), { support: WRITTEN, label: \"Stack on phones\", description: \"Its children one under another on phones (in an Email or a Page).\", default: true }),\n },\n style: {\n ...inheritedTextStyle,\n ...boxStyle,\n gap: { ...layoutStyle.gap, description: \"Space between its children, across and down (unless rowGap is set).\" },\n rowGap: { ...layoutStyle.gap, label: \"Row gap\", description: \"Space between its rows (gap by default); on phones, where the children stack, gap is between them.\" },\n alignItems: { ...layoutStyle.alignItems, description: \"Where each child sits in its row's height, as CSS align-items.\" },\n ...placementStyle,\n },\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n // Stacked on phones, every two of its children are its phone gap apart: there are no rows for a row gap.\n conditionSupport: {\n mobile: {\n rowGap: {\n web: { level: \"none\", when: (_, node) => node.props.stackOnMobile !== false, shows: \"its phone gap between every two children\", source: \"writer\" },\n email: { level: \"none\", when: (_, node) => node.props.stackOnMobile !== false, shows: \"its phone gap between every two children\", source: \"writer\" },\n },\n },\n },\n targets: { email: {}, web: {} },\n editor: {\n groups: [\n { title: \"Grid\", paths: [\"props.columns\", \"props.stackOnMobile\", \"style.gap\", \"style.rowGap\", \"style.alignItems\"] },\n { title: \"Box\", paths: [\"style.backgroundColor\", \"style.padding\", \"style.border\", \"style.borderRadius\", \"style.width\"] },\n ],\n },\n arrange: arrangeGrid,\n});\n\n/**\n * A Layer's children over each other, each in its whole box (as CSS grid places children in one cell): an image with\n * words on it. On a page any children go; an email draws one shape of it, an Image as wide as the Layer with one child\n * over it, the image as the cell's background (which Outlook gets as VML), and reports any other.\n */\nexport const Layer = defineComponent({\n type: \"Layer\",\n label: \"Layer\",\n description: \"Its children over each other, in one box as tall as the tallest: words on an image (a background image, its first child). In an email, an Image with one child over it.\",\n categories: [\"layout\", \"block\"],\n props: {},\n style: {\n ...inheritedTextStyle,\n ...pick(boxStyle, \"width\", \"minWidth\", \"maxWidth\", \"backgroundColor\", \"border\", \"borderRadius\"),\n height: { ...boxStyle.height, description: \"Its height: the image under its children covers it, cut at its sides or its top and bottom.\" },\n alignItems: {\n ...layoutStyle.alignItems,\n description: \"Where its children sit in its height, as CSS align-items.\",\n support: { email: { level: \"partial\", values: [\"stretch\"], shows: \"the child over the image as tall as its content\", source: \"writer\" }, web: css },\n },\n justifyItems: {\n kind: enumOf([\"start\", \"center\", \"end\", \"stretch\"]),\n label: \"Justify items\",\n description: \"Where its children sit across its width, as CSS justify-items: stretched to it by default.\",\n support: { email: { level: \"full\", source: \"writer\" }, web: css },\n },\n ...placementStyle,\n },\n defaultStyle: { alignItems: \"start\", justifyItems: \"stretch\" },\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { email: { note: \"An Image as wide as the Layer, with one child over it\" }, web: {} },\n editor: {\n groups: [\n { title: \"Layer\", paths: [\"style.height\", \"style.alignItems\", \"style.justifyItems\"] },\n { title: \"Box\", paths: [\"style.backgroundColor\", \"style.border\", \"style.borderRadius\", \"style.width\"] },\n ],\n },\n});\n","/** What every root (Email, Page, Document) takes: its title, language, direction and fonts, and its own style. */\nimport { prop, type SupportByTarget } from \"./define\";\nimport type { EmailClient } from \"./email-clients\";\nimport { enumOf, fontFaces, text } from \"./kinds\";\nimport { boxStyle, inheritedTextStyle, layoutStyle, pick } from \"./styles\";\n\nconst WRITTEN: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: { level: \"full\", source: \"writer\" } };\n\n/** The email clients that load no web font (caniemail's css-at-font-face; Apple Mail, Samsung Email and others do). */\nexport const NO_WEB_FONTS: readonly EmailClient[] = [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"yahoo\", \"aol\", \"protonmail\", \"fastmail\", \"gmx\", \"web-de\", \"orange\", \"sfr\", \"laposte\", \"mail-ru\", \"ionos\"];\n\nexport const ROOT_PROPS = {\n title: prop(text(), { support: WRITTEN, label: \"Title\", description: \"The document's title (shown in a browser tab, and by some email clients).\" }),\n lang: prop(text({ maxLength: 35 }), {\n support: {\n ...WRITTEN,\n email: { level: \"partial\", shows: \"no language: the client removes it, and a screen reader reads the email in its own\", source: \"caniemail\", feature: \"html-lang\", clients: [\"hey\", \"gmx\", \"web-de\", \"orange\", \"ionos\"] },\n },\n label: \"Language\",\n description: 'Its language, as a BCP 47 tag (\"en\", \"ar\").',\n }),\n dir: prop(enumOf([\"ltr\", \"rtl\", \"auto\"]), {\n support: {\n ...WRITTEN,\n email: { level: \"partial\", values: [\"rtl\", \"auto\"], shows: \"left to right: the client removes the direction\", source: \"caniemail\", feature: \"html-dir\", clients: [\"gmx\", \"web-de\"] },\n },\n label: \"Text direction\",\n }),\n fonts: prop(fontFaces(), {\n support: {\n email: { level: \"partial\", shows: \"no web font loads: the next font in each stack shows\", source: \"caniemail\", feature: \"css-at-font-face\", clients: NO_WEB_FONTS },\n web: { level: \"full\", source: \"writer\" },\n },\n label: \"Web fonts\",\n description: \"The font files the template loads: a family's file for each weight and style it uses. Text names a family in its fontFamily stack, before the fonts to show where it can't load.\",\n }),\n};\n\n/** A root's own style: the window's background, the text styles its content inherits, and how it stacks its children. */\nexport const ROOT_STYLE = {\n ...inheritedTextStyle,\n backgroundColor: { ...boxStyle.backgroundColor, label: \"Background color\", description: \"The window's background, behind the content.\" },\n ...pick(layoutStyle, \"gap\", \"alignItems\"),\n};\n\nexport const ROOT_DEFAULT_STYLE = {\n color: \"#000000\",\n fontFamily: \"Arial, Helvetica, sans-serif\",\n fontSize: 16,\n fontWeight: 400,\n lineHeight: 1.5,\n textAlign: \"left\",\n} as const;\n\nexport const TEXT_EDITOR = { title: \"Text\", paths: [\"style.fontFamily\", \"style.fontSize\", \"style.fontWeight\", \"style.color\", \"style.lineHeight\", \"style.letterSpacing\", \"style.textAlign\"] };\n","/**\n * Printed documents: a Document's children on pages of its size, as print HTML (a page writer's\n * output with each page a box of the page's size, and CSS's @page) and as PDF (@hyper-elements/react/pdf, without a\n * browser). Pages are given (Document.Page) or made by PageBreaks; a PageHeader and a PageFooter go on every page, and a\n * PageNumber says which page it's on. Nothing flows from one page to the next: a page holds what it's given.\n */\nimport { defineComponent, prop, type SupportByTarget } from \"./define\";\nimport { boolean, enumOf, insets } from \"./kinds\";\nimport type { Json } from \"./model\";\nimport { ROOT_DEFAULT_STYLE, ROOT_PROPS, ROOT_STYLE, TEXT_EDITOR } from \"./roots\";\nimport { boxStyle, inheritedTextStyle, layoutStyle, pick } from \"./styles\";\n\nconst WRITTEN: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: { level: \"full\", source: \"writer\" } };\n\n/** Paper sizes, in inches (ISO's in mm, converted): CSS's page sizes. */\nconst SIZES = {\n A3: [297 / 25.4, 420 / 25.4],\n A4: [210 / 25.4, 297 / 25.4],\n A5: [148 / 25.4, 210 / 25.4],\n Letter: [8.5, 11],\n Legal: [8.5, 14],\n Tabloid: [11, 17],\n} as const;\nexport type PageSize = keyof typeof SIZES;\n\n/** A CSS px: 96 to the inch. */\nconst PX_PER_INCH = 96;\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\n\nexport interface PageBox {\n /** The page, in CSS px (96 to the inch). */\n width: number;\n height: number;\n margin: Sides;\n /** What's inside the margins. */\n contentWidth: number;\n contentHeight: number;\n /** The page's size as CSS's @page size says it (\"A4 portrait\"). */\n css: string;\n}\n\n/** A Document's page, from its props (size, orientation, margin). */\nexport function pageBox(props: Record<string, Json | undefined>): PageBox {\n const size = (props.size as PageSize | undefined) ?? \"A4\";\n const [w, h] = SIZES[size] ?? SIZES.A4;\n const landscape = props.orientation === \"landscape\";\n const width = Math.round((landscape ? h : w) * PX_PER_INCH * 100) / 100;\n const height = Math.round((landscape ? w : h) * PX_PER_INCH * 100) / 100;\n const margin = (props.margin as Sides | undefined) ?? { top: 48, right: 48, bottom: 48, left: 48 };\n return {\n width,\n height,\n margin,\n contentWidth: Math.round(width - margin.left - margin.right),\n contentHeight: Math.round(height - margin.top - margin.bottom),\n css: `${size} ${landscape ? \"landscape\" : \"portrait\"}`,\n };\n}\n\nconst PAGE_STYLE = {\n ...inheritedTextStyle,\n backgroundColor: { ...boxStyle.backgroundColor, description: \"The page's background, out to its edges.\" },\n ...pick(layoutStyle, \"gap\", \"alignItems\"),\n};\n\nexport const Document = defineComponent({\n type: \"Document\",\n label: \"Document\",\n description:\n \"A printed document: its children on pages of its size (Document.Page, or split by PageBreaks), a PageHeader and a PageFooter on each. Renders to print HTML, and to PDF with @hyper-elements/react/pdf.\",\n categories: [\"root\"],\n props: {\n size: prop(enumOf([\"A3\", \"A4\", \"A5\", \"Letter\", \"Legal\", \"Tabloid\"]), { support: WRITTEN, label: \"Page size\", default: \"A4\" }),\n orientation: prop(enumOf([\"portrait\", \"landscape\"]), { support: WRITTEN, label: \"Orientation\", default: \"portrait\" }),\n margin: prop(insets(), {\n support: WRITTEN,\n label: \"Margins\",\n description: \"Around each page's content (its header and footer too), in px: 96 to the inch.\",\n default: { top: 48, right: 48, bottom: 48, left: 48 },\n }),\n ...ROOT_PROPS,\n },\n style: { ...ROOT_STYLE, backgroundColor: { ...ROOT_STYLE.backgroundColor, description: \"Each page's background, out to its edges.\" } },\n defaultStyle: ROOT_DEFAULT_STYLE,\n children: { types: [\"DocumentPage\", \"PageBreak\", \"PageHeader\", \"PageFooter\"], categories: [\"section\", \"layout\", \"block\"] },\n sizing: \"none\",\n targets: { web: {} },\n editor: {\n groups: [\n { title: \"Document\", paths: [\"props.size\", \"props.orientation\", \"props.margin\", \"props.title\"] },\n { title: \"Background\", paths: [\"style.backgroundColor\"] },\n TEXT_EDITOR,\n ],\n },\n});\n\nexport const DocumentPage = defineComponent({\n type: \"DocumentPage\",\n label: \"Page\",\n description: \"One page of a Document (Document.Page in JSX): its children stacked down it, inside the Document's margins.\",\n categories: [],\n props: {},\n style: PAGE_STYLE,\n children: { categories: [\"section\", \"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { web: {} },\n editor: { groups: [{ title: \"Page\", paths: [\"style.backgroundColor\", \"style.gap\"] }, TEXT_EDITOR] },\n});\n\nexport const PageBreak = defineComponent({\n type: \"PageBreak\",\n label: \"Page break\",\n description: \"In a Document, where a page ends: what follows starts the next page.\",\n categories: [],\n props: {},\n style: {},\n children: {},\n sizing: \"none\",\n targets: { web: {} },\n});\n\nconst HEADER_STYLE = { ...inheritedTextStyle, ...pick(boxStyle, \"padding\", \"backgroundColor\", \"border\"), ...pick(layoutStyle, \"gap\", \"alignItems\") };\n\nexport const PageHeader = defineComponent({\n type: \"PageHeader\",\n label: \"Page header\",\n description: \"In a Document: drawn at the top of every page, inside its margins.\",\n categories: [],\n props: {},\n style: HEADER_STYLE,\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { web: {} },\n editor: { groups: [{ title: \"Header\", paths: [\"style.padding\", \"style.backgroundColor\", \"style.border\", \"style.gap\"] }, TEXT_EDITOR] },\n});\n\nexport const PageFooter = defineComponent({\n type: \"PageFooter\",\n label: \"Page footer\",\n description: \"In a Document: drawn at the bottom of every page, inside its margins.\",\n categories: [],\n props: {},\n style: HEADER_STYLE,\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { web: {} },\n editor: { groups: [{ title: \"Footer\", paths: [\"style.padding\", \"style.backgroundColor\", \"style.border\", \"style.gap\"] }, TEXT_EDITOR] },\n});\n\nexport const PageNumber = defineComponent({\n type: \"PageNumber\",\n label: \"Page number\",\n description: \"In a Document's text: the number of the page it's on, or (total) how many pages there are.\",\n categories: [\"inline\"],\n props: {\n total: prop(boolean(), { support: WRITTEN, label: \"Page count\", description: \"How many pages the Document has, instead of this page's number.\", default: false }),\n },\n style: {},\n children: {},\n sizing: \"none\",\n targets: { web: {} },\n // A Page's or a Canvas's text has no page to number.\n roots: [\"Document\"],\n notAllowed: { code: \"document/page-number\", message: (root) => `A PageNumber is a page's number in a Document; this ${root} has no pages` },\n});\n\n/**\n * A Document's pages: each Document.Page, and the other content between them in runs a PageBreak ends (an empty run\n * is no page, but a document without content has one blank page); its PageHeader and PageFooter, for every page.\n */\nexport function documentPages<N extends { type: string; children: Array<N | string> }>(root: N): { pages: Array<{ page?: N; children: N[] }>; header?: N; footer?: N } {\n const pages: Array<{ page?: N; children: N[] }> = [];\n let run: N[] = [];\n const end = () => {\n if (run.length) pages.push({ children: run });\n run = [];\n };\n let header: N | undefined;\n let footer: N | undefined;\n for (const child of root.children) {\n if (typeof child === \"string\") continue;\n if (child.type === \"PageHeader\") header = child;\n else if (child.type === \"PageFooter\") footer = child;\n else if (child.type === \"PageBreak\") end();\n else if (child.type === \"DocumentPage\") {\n end();\n pages.push({ page: child, children: child.children.filter((c): c is N => typeof c !== \"string\") });\n } else run.push(child);\n }\n end();\n // A document has a page, if a blank one.\n if (!pages.length) pages.push({ children: [] });\n return { pages, header, footer };\n}\n","/**\n * Images: a Canvas is a fixed-size root, its children laid out in it as on a page, written as an\n * image by @hyper-elements/react/image (and as HTML by render(), to look at); an Svg draws shapes (Rect, Circle, Ellipse,\n * Line, Polygon, Path) in a box of its own, on a page, in a Canvas and in a PDF. An email can't show one: Gmail and\n * Outlook drop inline SVG.\n */\nimport { defineComponent, prop, type PropSpecs, type SupportByTarget } from \"./define\";\nimport { color, length, number, text } from \"./kinds\";\nimport { ROOT_DEFAULT_STYLE, ROOT_PROPS, ROOT_STYLE, TEXT_EDITOR } from \"./roots\";\nimport { boxStyle, css, layoutStyle, pick, placementStyle } from \"./styles\";\n\nconst WRITTEN: SupportByTarget = { web: { level: \"full\", source: \"writer\" } };\nconst coordinate = (label: string, description?: string) => prop(number(), { support: WRITTEN, label, ...(description ? { description } : {}), default: 0 });\nconst size = (label: string) => prop(number({ min: 0 }), { support: WRITTEN, label, required: true });\n\nexport const Canvas = defineComponent({\n type: \"Canvas\",\n label: \"Canvas\",\n description: \"An image of a fixed size (a social card, a banner): its children laid out in it as on a page. Written as PNG or SVG with @hyper-elements/react/image.\",\n categories: [\"root\"],\n props: {\n width: prop(length([\"px\"], { min: 16 }), { support: WRITTEN, label: \"Width\", description: \"The image's width, in px.\", default: 1200 }),\n height: prop(length([\"px\"], { min: 16 }), { support: WRITTEN, label: \"Height\", description: \"The image's height, in px: what's past it is cut.\", default: 630 }),\n ...ROOT_PROPS,\n },\n style: { ...ROOT_STYLE, padding: boxStyle.padding, justifyContent: layoutStyle.justifyContent },\n defaultStyle: ROOT_DEFAULT_STYLE,\n children: { categories: [\"section\", \"layout\", \"block\"] },\n sizing: \"none\",\n targets: { web: {} },\n editor: {\n groups: [\n { title: \"Canvas\", paths: [\"props.width\", \"props.height\", \"style.backgroundColor\", \"style.padding\"] },\n { title: \"Layout\", paths: [\"style.gap\", \"style.alignItems\", \"style.justifyContent\"] },\n TEXT_EDITOR,\n ],\n },\n});\n\nexport const Svg = defineComponent({\n type: \"Svg\",\n label: \"Vector drawing\",\n description: \"Shapes (Rect, Circle, Ellipse, Line, Polygon, Path) drawn in a box of its own: its width and height, and the coordinates its viewBox gives them.\",\n categories: [\"block\"],\n props: {\n width: size(\"Width\"),\n height: size(\"Height\"),\n viewBox: prop(text({ maxLength: 100 }), { support: WRITTEN, label: \"View box\", description: 'The shapes\\' coordinates in it, as \"x y width height\" (its width and height by default).' }),\n title: prop(text({ maxLength: 200 }), { support: WRITTEN, label: \"Title\", description: \"What it shows, read out by screen readers.\" }),\n },\n style: { ...pick(boxStyle, \"padding\", \"backgroundColor\", \"border\", \"borderRadius\"), ...placementStyle },\n children: { categories: [\"shape\"] },\n sizing: \"shrink\",\n targets: { web: {} },\n unsupported: { email: \"Gmail and classic Outlook don't show inline SVG; use an Image of it (a PNG) instead\" },\n editor: { groups: [{ title: \"Drawing\", paths: [\"props.width\", \"props.height\", \"props.viewBox\", \"props.title\"] }] },\n});\n\n/** How a shape is painted. */\nconst PAINT = {\n fill: { kind: color(), label: \"Fill\", description: 'Its inside (\"transparent\" for none).', support: { web: css } },\n stroke: { kind: color(), label: \"Stroke\", description: \"Its outline's color.\", support: { web: css } },\n strokeWidth: { kind: number({ min: 0 }), label: \"Stroke width\", support: { web: css } },\n opacity: { kind: number({ min: 0, max: 1 }), label: \"Opacity\", support: { web: css } },\n};\nconst PAINT_DEFAULT = { fill: \"#000000\" } as const;\n\nconst shape = <const P extends PropSpecs>(type: string, label: string, description: string, props: P) =>\n defineComponent({ type, label, description, categories: [\"shape\"], props, style: PAINT, defaultStyle: PAINT_DEFAULT, children: {}, sizing: \"none\", targets: { web: {} } });\n\nexport const Rect = shape(\"Rect\", \"Rectangle\", \"A rectangle at x, y in its Svg, rounded by rx.\", {\n x: coordinate(\"X\"),\n y: coordinate(\"Y\"),\n width: size(\"Width\"),\n height: size(\"Height\"),\n rx: prop(number({ min: 0 }), { support: WRITTEN, label: \"Corner radius\" }),\n});\nexport const Circle = shape(\"Circle\", \"Circle\", \"A circle centered at cx, cy in its Svg.\", { cx: coordinate(\"Center X\"), cy: coordinate(\"Center Y\"), r: size(\"Radius\") });\nexport const Ellipse = shape(\"Ellipse\", \"Ellipse\", \"An ellipse centered at cx, cy in its Svg.\", { cx: coordinate(\"Center X\"), cy: coordinate(\"Center Y\"), rx: size(\"Radius across\"), ry: size(\"Radius down\") });\nexport const Line = shape(\"Line\", \"Line\", \"A straight line from x1, y1 to x2, y2 in its Svg (drawn by its stroke).\", {\n x1: coordinate(\"Start X\"),\n y1: coordinate(\"Start Y\"),\n x2: coordinate(\"End X\"),\n y2: coordinate(\"End Y\"),\n});\nexport const Polygon = shape(\"Polygon\", \"Polygon\", 'A closed shape through its points (\"0,0 40,0 20,30\"), in its Svg.', {\n points: prop(text({ maxLength: 10000 }), { support: WRITTEN, label: \"Points\", required: true }),\n});\nexport const Path = shape(\"Path\", \"Path\", \"A shape drawn by an SVG path (d), in its Svg.\", {\n d: prop(text({ maxLength: 100000 }), { support: WRITTEN, label: \"Path\", description: 'SVG path data (\"M0 0 L40 0 L20 30 Z\").', required: true }),\n});\n\n/** The shapes, by type. */\nexport const SHAPES = [Rect, Circle, Ellipse, Line, Polygon, Path];\n\n","/**\n * The components' definitions: Email, Page, Section, layouts, text, links,\n * buttons, images, dividers, lists and tables; grids, layers, documents,\n * canvases and shapes follow in their own steps.\n */\nimport { defineComponent, prop, type ComponentDefinition, type CompositeEditor, type SupportByTarget } from \"./define\";\nimport { attributes, asset, boolean, breakpoints, enumOf, insets, length, line, link, number, text, video } from \"./kinds\";\nimport type { Json } from \"./model\";\nimport { boxStyle, css, inheritedTextStyle, layoutStyle, pick, placementStyle, textStyle } from \"./styles\";\nimport { Menu, Social } from \"./composites\";\nimport { Grid, Layer } from \"./layouts\";\nimport { ROOT_DEFAULT_STYLE, ROOT_PROPS, ROOT_STYLE, TEXT_EDITOR } from \"./roots\";\nimport { Document, DocumentPage, PageBreak, PageFooter, PageHeader, PageNumber } from \"./document\";\nimport { Canvas, SHAPES, Svg } from \"./canvas\";\n\n/** A prop each output writes as given. */\nconst WRITTEN: SupportByTarget = { email: { level: \"full\", source: \"writer\" }, web: { level: \"full\", source: \"writer\" } };\n\n/** A block of text's own direction, beside its neighbours' (an Arabic paragraph in an English email). */\nconst TEXT_DIR = {\n dir: prop(enumOf([\"ltr\", \"rtl\", \"auto\"]), { support: WRITTEN, label: \"Text direction\", description: \"Its text's direction, where it differs from the template's; it starts on that side unless aligned otherwise.\" }),\n};\n\nconst SPACING_EDITOR = { title: \"Spacing\", paths: [\"style.padding\"] };\n\nexport const Email = defineComponent({\n type: \"Email\",\n label: \"Email\",\n description: \"An email. Its children are stacked down the content width, centered in the window.\",\n categories: [\"root\"],\n props: {\n width: prop(length([\"px\"], { min: 200 }), { support: WRITTEN, label: \"Content width\", default: 600 }),\n previewText: prop(text(), { support: WRITTEN, label: \"Preview text\", description: \"Shown after the subject in inbox lists, not in the email.\" }),\n ...ROOT_PROPS,\n },\n style: ROOT_STYLE,\n defaultStyle: ROOT_DEFAULT_STYLE,\n children: { categories: [\"section\", \"layout\", \"block\"] },\n sizing: \"none\",\n responsive: true,\n targets: { email: {} },\n editor: {\n groups: [\n { title: \"Email\", paths: [\"props.width\", \"props.previewText\", \"props.title\"] },\n { title: \"Background\", paths: [\"style.backgroundColor\"] },\n TEXT_EDITOR,\n ],\n },\n});\n\nexport const Page = defineComponent({\n type: \"Page\",\n label: \"Page\",\n description: \"A web page. Its children are stacked down the content width, centered in the window.\",\n categories: [\"root\"],\n props: {\n width: prop(length([\"px\"], { min: 200 }), { support: WRITTEN, label: \"Content width\", description: \"The widest the content gets.\", default: 1200 }),\n description: prop(text(), { support: WRITTEN, label: \"Description\", description: \"The page's meta description.\" }),\n breakpoints: prop(breakpoints(), {\n support: { web: { level: \"full\", source: \"writer\" } },\n label: \"Breakpoints\",\n description: \"Where its phone styles start: mobile, the widest window they apply to, in px (480 where it's not set).\",\n }),\n ...ROOT_PROPS,\n },\n style: ROOT_STYLE,\n defaultStyle: ROOT_DEFAULT_STYLE,\n children: { categories: [\"section\", \"layout\", \"block\"] },\n sizing: \"none\",\n responsive: true,\n // The page writer writes the root's phone gap, not its phone text styles.\n conditionSupport: {\n mobile: Object.fromEntries(\n ([\"fontSize\", \"lineHeight\", \"letterSpacing\", \"textAlign\"] as const).map((key) => [key, { web: { level: \"none\", shows: \"its desktop value: set phone text styles on its Sections or Columns\", source: \"writer\" } }])\n ),\n },\n targets: { web: {} },\n editor: {\n groups: [\n { title: \"Page\", paths: [\"props.width\", \"props.title\", \"props.description\"] },\n { title: \"Background\", paths: [\"style.backgroundColor\"] },\n TEXT_EDITOR,\n ],\n },\n});\n\nexport const Section = defineComponent({\n type: \"Section\",\n label: \"Section\",\n description: \"A band across the whole window, directly in an Email or Page: its background spans the window, its children are stacked at the content width.\",\n categories: [\"section\"],\n props: {},\n style: { ...inheritedTextStyle, ...pick(boxStyle, \"backgroundColor\", \"padding\", \"border\"), ...pick(layoutStyle, \"gap\", \"alignItems\") },\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Section\", paths: [\"style.backgroundColor\", \"style.padding\", \"style.border\", \"style.gap\"] }, TEXT_EDITOR] },\n});\n\nexport const Row = defineComponent({\n type: \"Row\",\n label: \"Row\",\n description: \"Lays its children out side by side. A child takes its width, or a share of what's left (its flex, 1 by default).\",\n categories: [\"layout\", \"block\"],\n props: {\n stackOnMobile: prop(boolean(), { support: WRITTEN, label: \"Stack on phones\", description: \"Its children stack full-width on phones (in an Email or a Page).\", default: true }),\n ...TEXT_DIR,\n },\n style: {\n ...inheritedTextStyle,\n ...boxStyle,\n ...layoutStyle,\n alignItems: {\n ...layoutStyle.alignItems,\n support: { email: { level: \"partial\", values: [\"stretch\"], shows: \"children not stretched to one height: each background or border ends with its content\", source: \"writer\" }, web: css },\n },\n justifyContent: {\n ...layoutStyle.justifyContent,\n support: { email: { level: \"none\", values: [\"space-between\"], shows: \"children start at the left\", source: \"writer\" }, web: css },\n },\n flexWrap: {\n kind: enumOf([\"nowrap\", \"wrap\", \"words\"]),\n label: \"Wrap\",\n description: '\"wrap\": children that don\\'t fit wrap onto another line, as CSS flex-wrap (in an email, in a Row kept side by side on phones, with no gap between the lines). \"words\": in an email, also a space of the text\\'s font apart, on lines at least as tall as its, as words are.',\n // A Row kept side by side wraps in an email (but classic Outlook, which the email's checks say where it matters).\n support: {\n email: { level: \"none\", values: [\"wrap\", \"words\"], when: (_, row) => row.props.stackOnMobile !== false, shows: \"children on one line on desktop, stacked on phones\", source: \"writer\" },\n web: css,\n },\n },\n ...placementStyle,\n },\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: {\n groups: [\n { title: \"Layout\", paths: [\"style.gap\", \"style.alignItems\", \"style.justifyContent\", \"props.stackOnMobile\"] },\n { title: \"Box\", paths: [\"style.backgroundColor\", \"style.padding\", \"style.border\", \"style.borderRadius\"] },\n ],\n },\n});\n\nexport const Column = defineComponent({\n type: \"Column\",\n label: \"Column\",\n description: \"Stacks its children vertically, with its own spacing and box.\",\n categories: [\"layout\", \"block\"],\n props: {},\n style: {\n ...inheritedTextStyle,\n ...boxStyle,\n ...layoutStyle,\n justifyContent: {\n ...layoutStyle.justifyContent,\n support: { email: { level: \"partial\", values: [\"center\", \"end\", \"space-between\"], shows: \"no effect: its children start at the top\", source: \"writer\" }, web: css },\n },\n ...placementStyle,\n },\n children: { categories: [\"layout\", \"block\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: {\n groups: [\n { title: \"Layout\", paths: [\"style.gap\", \"style.alignItems\"] },\n { title: \"Box\", paths: [\"style.backgroundColor\", \"style.padding\", \"style.border\", \"style.borderRadius\", \"style.width\"] },\n ],\n },\n});\n\nconst TEXT_BLOCK_STYLE = {\n ...textStyle,\n ...pick(boxStyle, \"width\", \"maxWidth\", \"padding\", \"backgroundColor\", \"border\", \"borderRadius\"),\n ...placementStyle,\n};\nconst TEXT_CHILDREN = { text: true, categories: [\"inline\"] } as const;\n\nexport const Text = defineComponent({\n type: \"Text\",\n label: \"Text\",\n description: \"A paragraph of text.\",\n categories: [\"block\"],\n props: TEXT_DIR,\n style: TEXT_BLOCK_STYLE,\n children: { ...TEXT_CHILDREN, types: [\"Image\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [TEXT_EDITOR, SPACING_EDITOR] },\n});\n\nexport const Heading = defineComponent({\n type: \"Heading\",\n label: \"Heading\",\n description: \"A heading, from level 1 (the page's title) to 6.\",\n categories: [\"block\"],\n props: {\n level: prop(enumOf([1, 2, 3, 4, 5, 6]), { support: WRITTEN, label: \"Level\", default: 1 }),\n ...TEXT_DIR,\n },\n style: TEXT_BLOCK_STYLE,\n defaultStyle: { fontWeight: 700, lineHeight: 1.25 },\n defaultStyleBy: {\n prop: \"level\",\n values: { 1: { fontSize: 32 }, 2: { fontSize: 24 }, 3: { fontSize: 20 }, 4: { fontSize: 18 }, 5: { fontSize: 16 }, 6: { fontSize: 14 } },\n },\n children: TEXT_CHILDREN,\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Heading\", paths: [\"props.level\"] }, TEXT_EDITOR, SPACING_EDITOR] },\n});\n\nconst RUN_STYLE = {\n ...pick(textStyle, \"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"letterSpacing\", \"textTransform\", \"textDecoration\"),\n backgroundColor: boxStyle.backgroundColor,\n};\n\nexport const Span = defineComponent({\n type: \"Span\",\n label: \"Span\",\n description: \"Styled text inside text; raised or lowered (superscript, subscript) with verticalAlign.\",\n categories: [\"inline\"],\n props: {},\n style: {\n ...RUN_STYLE,\n verticalAlign: {\n kind: enumOf([\"baseline\", \"super\", \"sub\"]),\n label: \"Raise or lower\",\n description: '\"super\": superscript (®, a footnote mark); \"sub\": subscript; as CSS vertical-align.',\n // Written as <sup> and <sub>, which every client (Word too) raises and lowers.\n support: { email: { level: \"full\", source: \"caniemail\" }, web: css },\n },\n },\n children: { text: true, categories: [\"inline\"] },\n sizing: \"none\",\n targets: { email: {}, web: {} },\n});\n\nexport const Link = defineComponent({\n type: \"Link\",\n label: \"Link\",\n description: \"A link: text inside text, or around an Image.\",\n categories: [\"inline\", \"block\"],\n props: {\n href: prop(link(), { support: WRITTEN, label: \"Link\", required: true }),\n title: prop(text(), { support: WRITTEN, label: \"Title\", description: \"Shown as a tooltip by mail clients and browsers that show one.\" }),\n \"aria-label\": prop(text(), { support: WRITTEN, label: \"Label for screen readers\", description: \"What a screen reader says for it, where its text alone doesn't say enough (\\\"Read more about pricing\\\").\" }),\n attrs: prop(attributes(), { support: WRITTEN, editable: false, label: \"More attributes\", description: \"More attributes for it: a class, a `data-` attribute.\" }),\n },\n style: { ...RUN_STYLE, ...placementStyle },\n defaultStyle: { color: \"#0000ee\", textDecoration: \"underline\" },\n hover: [\"color\", \"textDecoration\", \"backgroundColor\"],\n children: { text: true, categories: [\"inline\"], types: [\"Image\"] },\n sizing: \"shrink\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Link\", paths: [\"props.href\", \"style.color\", \"style.textDecoration\", \"hover.color\"] }] },\n});\n\ntype ButtonColors = { color?: string; backgroundColor?: string; hoverColor?: string; hoverBackgroundColor?: string };\n\n/** A button's colors, as one editor: the builder's button-color widget, for one. */\nexport const buttonColors: CompositeEditor<ButtonColors> = {\n editor: \"buttonColors\",\n covers: [\"style.color\", \"style.backgroundColor\", \"hover.color\", \"hover.backgroundColor\"],\n read: (node) => ({\n color: node.style?.color as string | undefined,\n backgroundColor: node.style?.backgroundColor as string | undefined,\n hoverColor: node.hover?.color as string | undefined,\n hoverBackgroundColor: node.hover?.backgroundColor as string | undefined,\n }),\n write: (value) => ({\n style: { color: value.color as Json | undefined, backgroundColor: value.backgroundColor as Json | undefined },\n hover: { color: value.hoverColor as Json | undefined, backgroundColor: value.hoverBackgroundColor as Json | undefined },\n }),\n};\n\nexport const Button = defineComponent({\n type: \"Button\",\n label: \"Button\",\n description: \"A link drawn as a button.\",\n categories: [\"block\"],\n props: {\n href: prop(link(), { support: WRITTEN, label: \"Link\", required: true }),\n title: prop(text(), { support: WRITTEN, label: \"Title\", description: \"Shown as a tooltip by mail clients and browsers that show one.\" }),\n \"aria-label\": prop(text(), { support: WRITTEN, label: \"Label for screen readers\", description: \"What a screen reader says for it, where its text alone doesn't say enough (\\\"Read more about pricing\\\").\" }),\n attrs: prop(attributes(), { support: WRITTEN, editable: false, label: \"More attributes\", description: \"More attributes for its link: a class, a `data-` attribute.\" }),\n },\n style: {\n ...textStyle,\n ...pick(boxStyle, \"width\", \"maxWidth\", \"padding\", \"backgroundColor\", \"border\", \"borderRadius\"),\n boxSizing: { kind: enumOf([\"border-box\", \"content-box\"]), label: \"Width holds\", description: \"Whether its width holds its padding and border (border-box), or they go on top of it (content-box).\", support: { email: { level: \"none\", shows: \"a width that holds them\", source: \"writer\" }, web: css } },\n alignSelf: { kind: enumOf([\"start\", \"center\", \"end\"]), label: \"Place\", description: \"Where it sits in its stack, whatever the stack's alignItems: on phones too, another place than on desktop.\", mobile: true, support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n ...placementStyle,\n },\n defaultStyle: {\n color: \"#ffffff\",\n backgroundColor: \"#0879a1\",\n fontSize: 14,\n lineHeight: 1.2,\n textAlign: \"center\",\n padding: { top: 10, right: 20, bottom: 10, left: 20 },\n borderRadius: 4,\n },\n hover: [\"color\", \"backgroundColor\"],\n children: { text: true, types: [\"Span\", \"MergeTag\", \"LineBreak\"] },\n sizing: \"shrink\",\n targets: { email: {}, web: {} },\n editor: {\n groups: [\n { title: \"Button\", paths: [\"props.href\", \"style.width\"] },\n { title: \"Colors\", composite: buttonColors },\n TEXT_EDITOR,\n { title: \"Spacing\", paths: [\"style.padding\", \"style.border\", \"style.borderRadius\"] },\n ],\n },\n});\n\nexport const Image = defineComponent({\n type: \"Image\",\n label: \"Image\",\n description: \"An image in the content. Without a width it takes its own size, no wider than its parent.\",\n categories: [\"block\"],\n props: {\n src: prop(asset(), { support: WRITTEN, label: \"Image\", required: true }),\n alt: prop(text(), { support: WRITTEN, label: \"Alternate text\", description: \"Read out by screen readers, and shown where images don't load.\", default: \"\" }),\n title: prop(text(), { support: WRITTEN, label: \"Title\", description: \"Shown as a tooltip by mail clients and browsers that show one.\" }),\n },\n style: {\n ...pick(boxStyle, \"width\", \"maxWidth\", \"height\", \"border\", \"borderRadius\"),\n ...placementStyle,\n alignSelf: { kind: enumOf([\"start\", \"center\", \"end\"]), label: \"Place\", description: \"Where it sits in its stack on phones, where that's another place than on desktop.\", mobile: true, support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n verticalAlign: { kind: enumOf([\"top\", \"middle\"]), label: \"Place in its line\", description: \"Where it sits in a line of text it's in.\", support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n },\n children: {},\n sizing: \"shrink\",\n conditionSupport: { mobile: { border: { email: { level: \"none\", shows: \"its desktop border\", source: \"writer\" } } } },\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Image\", paths: [\"props.src\", \"props.alt\", \"style.width\"] }, { title: \"Box\", paths: [\"style.border\", \"style.borderRadius\"] }] },\n});\n\nexport const Divider = defineComponent({\n type: \"Divider\",\n label: \"Divider\",\n description: \"A horizontal line.\",\n categories: [\"block\"],\n props: {},\n style: {\n borderTop: { kind: line(), label: \"Line\", description: 'The line, as CSS border-top: \"1px solid #bbbbbb\".', support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n width: { kind: length([\"px\", \"%\"]), label: \"Length\", mobile: true, support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n padding: { kind: insets(), label: \"Padding\", mobile: true, support: { email: { level: \"full\", source: \"outlook-captures\" }, web: css } },\n },\n defaultStyle: { borderTop: { width: 1, style: \"solid\", color: \"#bbbbbb\" }, width: \"100%\" },\n children: {},\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Line\", paths: [\"style.borderTop\", \"style.width\"] }, SPACING_EDITOR] },\n});\n\nexport const LineBreak = defineComponent({\n type: \"LineBreak\",\n label: \"Line break\",\n description: \"Starts a new line inside text.\",\n categories: [\"inline\"],\n props: {},\n style: {},\n children: {},\n sizing: \"none\",\n targets: { email: {}, web: {} },\n});\n\nexport const MergeTag = defineComponent({\n type: \"MergeTag\",\n label: \"Merge tag\",\n description: \"A value the sending service fills in (a name, a link), written in the service's own syntax.\",\n categories: [\"inline\"],\n props: {\n name: prop(text({ maxLength: 200 }), { support: WRITTEN, label: \"Name\", required: true }),\n },\n style: {},\n children: {},\n sizing: \"none\",\n targets: { email: {}, web: {} },\n});\n\nexport const List = defineComponent({\n type: \"List\",\n label: \"List\",\n description: \"A bulleted or numbered list of ListItems. Its markers sit in a column of their own (indent) before the items.\",\n categories: [\"block\"],\n props: {\n type: prop(enumOf([\"bullet\", \"number\"]), { support: WRITTEN, label: \"Type\", default: \"bullet\" }),\n start: prop(number({ min: 0, integer: true }), { support: WRITTEN, label: \"Starts at\", description: \"The first item's number, in a numbered list.\", default: 1 }),\n },\n style: {\n ...inheritedTextStyle,\n ...pick(boxStyle, \"width\", \"maxWidth\", \"padding\", \"backgroundColor\", \"border\"),\n gap: { kind: length([\"px\"]), label: \"Gap\", description: \"Space between items.\", mobile: true, support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n indent: { kind: length([\"px\"], { min: 0 }), label: \"Indent\", description: \"The width of the markers' column, before the items.\", support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n ...placementStyle,\n },\n defaultStyle: { indent: 24 },\n children: { types: [\"ListItem\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"List\", paths: [\"props.type\", \"props.start\", \"style.gap\", \"style.indent\"] }, TEXT_EDITOR, SPACING_EDITOR] },\n});\n\nexport const ListItem = defineComponent({\n type: \"ListItem\",\n label: \"List item\",\n description: \"An item of a List: text, and a List of its own to nest one.\",\n categories: [],\n props: TEXT_DIR,\n style: pick(textStyle, \"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"lineHeight\", \"letterSpacing\", \"textAlign\", \"textTransform\", \"textDecoration\"),\n children: { text: true, categories: [\"inline\"], types: [\"List\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [TEXT_EDITOR] },\n});\n\nexport const Table = defineComponent({\n type: \"Table\",\n label: \"Table\",\n description: \"A table of data: TableRows of TableCells. Columns take their cells' widths; the rest share what's left.\",\n categories: [\"block\"],\n props: {},\n style: {\n ...inheritedTextStyle,\n ...pick(boxStyle, \"width\", \"maxWidth\", \"backgroundColor\", \"border\"),\n cellPadding: { kind: insets(), label: \"Cell padding\", description: \"Every cell's padding, where the cell doesn't set its own.\", support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n rowBorder: { kind: line(), label: \"Line between rows\", support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n borderCollapse: { kind: enumOf([\"separate\", \"collapse\"]), label: \"Cell borders\", description: \"Whether cells side by side draw a border each (separate) or share one (collapse).\", support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n ...placementStyle,\n },\n children: { types: [\"TableRow\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Table\", paths: [\"style.cellPadding\", \"style.rowBorder\", \"style.border\", \"style.backgroundColor\"] }, TEXT_EDITOR] },\n});\n\nexport const TableRow = defineComponent({\n type: \"TableRow\",\n label: \"Table row\",\n description: \"A row of a Table. A header row's cells are header cells, in bold.\",\n categories: [],\n props: {\n header: prop(boolean(), { support: WRITTEN, label: \"Header\", description: \"Its cells head the columns below them.\", default: false }),\n footer: prop(boolean(), { support: WRITTEN, label: \"Footer\", description: \"It ends the table (printed, on each page the table runs to).\", default: false }),\n },\n style: { ...pick(textStyle, \"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"lineHeight\", \"letterSpacing\", \"textAlign\", \"textTransform\"), backgroundColor: boxStyle.backgroundColor, height: boxStyle.height },\n defaultStyleBy: { prop: \"header\", values: { true: { fontWeight: 700 } } },\n children: { types: [\"TableCell\"] },\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Row\", paths: [\"props.header\", \"style.backgroundColor\"] }, TEXT_EDITOR] },\n});\n\nexport const TableCell = defineComponent({\n type: \"TableCell\",\n label: \"Table cell\",\n description: \"A cell of a TableRow: text, and images. Its width sets its column's.\",\n categories: [],\n props: {\n colSpan: prop(number({ min: 1, integer: true }), { support: WRITTEN, label: \"Columns\", description: \"How many columns it spans.\", default: 1 }),\n ...TEXT_DIR,\n },\n style: {\n ...textStyle,\n ...pick(boxStyle, \"padding\", \"backgroundColor\", \"border\"),\n width: { kind: length([\"px\", \"%\"]), label: \"Width\", description: \"Its column's width (of a cell spanning one column).\", support: { email: { level: \"full\", source: \"writer\" }, web: css } },\n verticalAlign: { kind: enumOf([\"top\", \"middle\", \"bottom\"]), label: \"Vertical alignment\", support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\n },\n children: { text: true, categories: [\"inline\"], types: [\"Image\"] },\n sizing: \"none\",\n conditionSupport: { mobile: { border: { email: { level: \"none\", shows: \"its desktop border\", source: \"writer\" } } } },\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Cell\", paths: [\"props.colSpan\", \"style.width\", \"style.verticalAlign\"] }, TEXT_EDITOR, { title: \"Box\", paths: [\"style.padding\", \"style.backgroundColor\", \"style.border\"] }] },\n});\n\nexport const Video = defineComponent({\n type: \"Video\",\n label: \"Video\",\n description: \"A YouTube or Vimeo video: its player on a page; in an email (which can't play one), its thumbnail, linked to it.\",\n categories: [\"block\"],\n props: {\n src: prop(video(), { support: WRITTEN, label: \"Video\", required: true, description: \"The video's YouTube or Vimeo link.\" }),\n thumbnail: prop(asset(), {\n support: { email: { level: \"full\", source: \"writer\" }, web: { level: \"none\", shows: \"the video's player: a page plays the video\", source: \"writer\" } },\n label: \"Thumbnail\",\n description: \"The image an email shows, linked to the video. A YouTube video's own where there's none; a Vimeo video's can't be found without the network.\",\n }),\n title: prop(text(), { support: WRITTEN, label: \"Title\", description: \"The player's title on a page, the thumbnail's alternate text in an email.\", default: \"Video\" }),\n },\n style: { ...pick(boxStyle, \"width\", \"maxWidth\"), ...placementStyle },\n children: {},\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"Video\", paths: [\"props.src\", \"props.thumbnail\", \"props.title\", \"style.width\", \"style.maxWidth\"] }] },\n});\n\n/**\n * Markup no component says (the builder's HTML block), written as it is. A PDF and an image can't draw markup: they\n * draw its plain text, and say so.\n */\nexport const Html = defineComponent({\n type: \"Html\",\n label: \"HTML\",\n description:\n \"Markup written as it is, for what no component says (the builder's HTML block): in an email and on a page as given, nothing in it checked or escaped. A Document's PDF and a Canvas's image draw its plain text.\",\n categories: [\"block\"],\n props: {\n html: prop(text(), { support: WRITTEN, label: \"HTML\", required: true, description: \"The markup, written as it is: only markup you trust. Or give it as JSX inside the block, which React writes.\" }),\n text: prop(text(), { support: WRITTEN, label: \"Plain text\", description: \"What it reads as in the plain-text version, and in a PDF or an image (its markup's words where there's none).\" }),\n },\n style: {},\n children: {},\n sizing: \"stretch\",\n targets: { email: {}, web: {} },\n editor: { groups: [{ title: \"HTML\", paths: [\"props.html\", \"props.text\"] }] },\n});\n\nexport const COMPONENTS: Readonly<Record<string, ComponentDefinition>> = Object.freeze(\n Object.fromEntries(\n [Email, Page, Document, DocumentPage, PageBreak, PageHeader, PageFooter, PageNumber, Canvas, Svg, ...SHAPES, Section, Row, Column, Grid, Layer, Text, Heading, Span, Link, Button, Image, Divider, LineBreak, MergeTag, List, ListItem, Table, TableRow, TableCell, Video, Social, Menu, Html].map((d) => [\n d.type,\n d as unknown as ComponentDefinition,\n ])\n )\n);\n\nexport function definitionOf(type: string): ComponentDefinition | undefined {\n return Object.prototype.hasOwnProperty.call(COMPONENTS, type) ? COMPONENTS[type] : undefined;\n}\n","/**\n * Which components a document may use: the built-in ones, and the custom\n * components a caller passes. A custom component is a definition like the\n * built-in ones, plus `expand`: what it is, as primitives.\n */\nimport { COMPONENTS } from \"./components\";\nimport { TARGETS, type ComponentDefinition, type PropSpecs, type Target, type TargetSupport } from \"./define\";\nimport type { OutputOf } from \"./kinds\";\nimport type { Diagnostic } from \"./diagnostics\";\nimport type { Json } from \"./model\";\nimport { placementStyle } from \"./styles\";\n\n/** A namespace, a dot, a capitalized name: \"acme.ProductCard\". Built-in types never look like this. */\nexport const CUSTOM_TYPE = /^[a-z][a-z0-9-]*\\.[A-Z][A-Za-z0-9]*$/;\n\n/** Props that always have a value: required ones, and ones with a default (see `prop`). */\ntype RequiredOrDefaulted<P extends PropSpecs> = {\n [K in keyof P]: Exclude<P[K][\"required\"], undefined> extends true ? K : [P[K][\"default\"]] extends [undefined] ? never : K;\n}[keyof P];\n\n/** The props `expand` (or a `render`) gets: normalized, with defaults applied. */\nexport type ExpandProps<P extends PropSpecs> = { [K in RequiredOrDefaulted<P>]: OutputOf<P[K][\"kind\"]> } & {\n [K in Exclude<keyof P, RequiredOrDefaulted<P>>]?: OutputOf<P[K][\"kind\"]>;\n};\n\n/** What `expand` may do besides returning its node, and what it may read besides its props. */\nexport interface ExpandContext {\n /** Makes custom components the expansion uses known (ones not passed in the components option). */\n register(definition: CustomDefinition<any>): void;\n /** The node's style, with its definition's defaults: a built-in made of primitives (Social, Menu) styles them by it. */\n style: Record<string, Json>;\n /** Whether the template has phones (an Email or a Page): what's hidden on phones is only hidden there. */\n responsive: boolean;\n /** A problem found while expanding that doesn't stop it (a warning or a note), said once at the expansion's place. */\n report(diagnostic: Diagnostic): void;\n}\n\nexport interface CustomDefinition<P extends PropSpecs = PropSpecs> extends ComponentDefinition<P, typeof placementStyle> {\n custom: true;\n /**\n * The component as primitives: one node of the template tree\n * (`{ type, props, style, children }`). Pure: the same props give the same node.\n */\n expand(props: ExpandProps<P>, context: ExpandContext): unknown;\n}\n\nexport interface CustomComponentSpec<P extends PropSpecs> {\n type: string;\n label: string;\n description?: string;\n props: P;\n /** Where it goes: where a block goes (default), or where a Section goes. */\n placement?: \"block\" | \"section\";\n expand(props: ExpandProps<P>, context: ExpandContext): unknown;\n}\n\nexport function defineCustomComponent<const P extends PropSpecs>(spec: CustomComponentSpec<P>): CustomDefinition<P> {\n if (!CUSTOM_TYPE.test(spec.type)) {\n throw new Error(`[Elements] A custom component's type is a namespace, a dot and a capitalized name (\"acme.ProductCard\"), not ${JSON.stringify(spec.type)}`);\n }\n const section = spec.placement === \"section\";\n const paths = Object.keys(spec.props).map((key) => `props.${key}`);\n return {\n type: spec.type,\n label: spec.label,\n description: spec.description ?? spec.label,\n categories: section ? [\"section\"] : [\"block\"],\n props: spec.props,\n style: section ? ({} as typeof placementStyle) : placementStyle,\n children: {},\n sizing: \"stretch\",\n // Rendered as the primitives it expands to, which are checked for each target themselves.\n targets: Object.fromEntries(TARGETS.map((target) => [target, {}])) as Record<Target, TargetSupport>,\n editor: paths.length ? { groups: [{ title: spec.label, paths }] } : undefined,\n custom: true,\n expand: spec.expand,\n };\n}\n\nexport function isCustom(definition: ComponentDefinition): definition is CustomDefinition {\n return (definition as Partial<CustomDefinition>).custom === true;\n}\n\nexport class Registry {\n private readonly custom = new Map<string, CustomDefinition>();\n\n constructor(components: readonly CustomDefinition<any>[] = []) {\n for (const definition of components) this.add(definition);\n }\n\n add(definition: CustomDefinition<any>): void {\n if (!isCustom(definition) || !CUSTOM_TYPE.test(definition.type)) {\n throw new Error(`[Elements] ${JSON.stringify((definition as { type?: unknown })?.type)} isn't a custom component (make one with component())`);\n }\n const known = this.custom.get(definition.type);\n if (known && known !== definition) throw new Error(`[Elements] Two custom components are named ${definition.type}`);\n this.custom.set(definition.type, definition as CustomDefinition);\n }\n\n get(type: string): ComponentDefinition | undefined {\n if (Object.prototype.hasOwnProperty.call(COMPONENTS, type)) return COMPONENTS[type];\n return this.custom.get(type);\n }\n\n get customs(): CustomDefinition[] {\n return [...this.custom.values()];\n }\n\n all(): ComponentDefinition[] {\n return [...Object.values(COMPONENTS), ...this.custom.values()];\n }\n}\n\n/** The props of a node with its definition's defaults where it has none. */\nexport function propsWithDefaults(definition: ComponentDefinition, props: Record<string, Json> | undefined): Record<string, Json> {\n const out: Record<string, Json> = {};\n for (const [key, spec] of Object.entries(definition.props)) if (spec.default !== undefined) out[key] = spec.default as Json;\n return { ...out, ...props };\n}\n\nexport interface ComponentsOption {\n /** Custom components (made with `component()`) the document may use. */\n components?: readonly CustomDefinition<any>[];\n}\n\nexport function registryOf(options: ComponentsOption | Registry | undefined): Registry {\n return options instanceof Registry ? options : new Registry(options?.components);\n}\n","/**\n * Reading the tree a template's JSX was collected into: validated against the\n * component definitions and normalized (values in their canonical form, ids\n * checked).\n */\nimport { CONDITION_NAMES, CONDITIONS, shownAnywhere } from \"./conditions\";\nimport type { ComponentDefinition, RootName, StyleSpecs } from \"./define\";\nimport { Diagnostics, ElementsError, type Diagnostic } from \"./diagnostics\";\nimport { type Child, type ElementsDocument, type Json, type Node } from \"./model\";\nimport { CUSTOM_TYPE, registryOf, type ComponentsOption, type Registry } from \"./registry\";\n\nexport interface CheckResult {\n /** The document with what could be read, or null when there's no usable root. */\n document: ElementsDocument | null;\n diagnostics: Diagnostic[];\n}\n\nconst NODE_KEYS = [\"id\", \"type\", \"props\", \"style\", \"mobile\", \"hover\", \"hidden\", \"children\"];\n/** An id is written into HTML ids and CSS selectors. */\nconst ID = /^[A-Za-z][A-Za-z0-9_-]*$/;\n\nconst isObject = (value: unknown): value is Record<string, unknown> => typeof value === \"object\" && value !== null && !Array.isArray(value);\n\ninterface Context {\n d: Diagnostics;\n registry: Registry;\n /**\n * Inside a custom component's expansion (see expand.ts): the instance's id, put before the ids its\n * render writes, or null when the instance has none (those ids are then dropped: a block used many\n * times can't own an id). Undefined outside one.\n */\n idPrefix?: string | null;\n /** Ids taken so far: an id is unique in a template. */\n used: Set<string>;\n /** The template's root: which conditions its nodes may have (phone styles only under one with a phone width). */\n root: ComponentDefinition | undefined;\n}\n\n/** Validates and normalizes a document; never throws. */\nexport function checkDocument(input: unknown, options?: ComponentsOption | Registry): CheckResult {\n const registry = registryOf(options);\n const d = new Diagnostics();\n if (!isObject(input)) {\n d.error(\"document/invalid\", \"A document is an object: { root: { type: \\\"Email\\\", … } }\", \"\");\n return { document: null, diagnostics: d.list };\n }\n const extra = Object.keys(input).filter((key) => key !== \"root\");\n for (const key of extra) d.error(\"document/unknown-key\", `\"${key}\" isn't part of a document (root)`, key);\n\n const rootDefinition = isObject(input.root) && typeof input.root.type === \"string\" ? registry.get(input.root.type) : undefined;\n const context: Context = { d, registry, used: new Set(), root: rootDefinition };\n const root = input.root === undefined ? null : readNode(input.root, \"root\", null, context);\n if (input.root === undefined) d.error(\"document/root\", 'A document has a root: { type: \"Email\" }, \"Page\", …', \"root\");\n return { document: root ? { root } : null, diagnostics: d.list };\n}\n\n/** Validates and normalizes a document, throwing an `ElementsError` if it has errors. */\nexport function parseDocument(input: unknown, options?: ComponentsOption | Registry): ElementsDocument {\n const { document, diagnostics } = checkDocument(input, options);\n if (!document || diagnostics.some((x) => x.severity === \"error\")) throw new ElementsError(diagnostics);\n return document;\n}\n\n/**\n * One node read as the child of `parent` would be: what a custom component\n * expands to. Ids its render writes go after the instance's id (`idPrefix`),\n * and mustn't take one of `taken`.\n */\nexport function checkFragment(\n input: unknown,\n options: { parent: ComponentDefinition; root: ComponentDefinition | undefined; idPrefix: string | null; taken: ReadonlySet<string>; registry: Registry; path: string }\n): { node: Node | null; diagnostics: Diagnostic[] } {\n const d = new Diagnostics();\n const context: Context = { d, registry: options.registry, idPrefix: options.idPrefix, used: new Set(options.taken), root: options.root };\n const node = readNode(input, options.path, options.parent, context);\n return { node, diagnostics: d.list };\n}\n\n/** \"an Email or a Page\", \"a Document\": the roots something is for, in a message. */\nexport function rootList(roots: readonly string[]): string {\n const named = roots.map((root) => a(root).replace(/^A/, \"a\"));\n return named.length > 1 ? `${named.slice(0, -1).join(\", \")} or ${named[named.length - 1]}` : named[0] ?? \"no root\";\n}\n\n/**\n * Whether a root takes what's declared for `roots` (a component's, a prop's, a style's): undefined is every root, and\n * so is a root Elements doesn't know (its own error says so).\n */\nfunction rootTakes(roots: readonly RootName[] | undefined, root: ComponentDefinition | undefined): boolean {\n return !roots || !root || roots.includes(root.type as RootName);\n}\n\n/** Whether a component and a root share an output: where they don't, it's the output's `target/unsupported`, as today. */\nfunction sharesOutput(definition: ComponentDefinition, root: ComponentDefinition): boolean {\n return Object.keys(definition.targets).some((target) => target in root.targets);\n}\n\nfunction allowedIn(parent: ComponentDefinition, child: ComponentDefinition): boolean {\n const rule = parent.children;\n return !!rule.types?.includes(child.type) || child.categories.some((category) => rule.categories?.includes(category));\n}\n\n/** Where each component's props and styles are listed: the guide the package ships. */\nconst GUIDE = \"@hyper-elements/react/GUIDE.md\";\n/** A message, then where to look the component up. */\nconst seeing = (message: string, type: string) => `${message}${/[?.]$/.test(message) ? \"\" : \".\"} See ${type} in ${GUIDE}`;\nconst a = (type: string) => `${/^[AEIOU]/.test(type) ? \"An\" : \"A\"} ${type}`;\n\n/** The name meant, where one is a typo away (a letter or two, or its case): \"colour\" is \"color\". */\nfunction nearest(key: string, names: readonly string[]): string | undefined {\n const lower = key.toLowerCase();\n let best: { name: string; distance: number } | undefined;\n for (const name of names) {\n const distance = name.toLowerCase() === lower ? 0 : editDistance(lower, name.toLowerCase());\n if (distance <= (key.length > 4 ? 2 : 1) && (!best || distance < best.distance)) best = { name, distance };\n }\n return best?.name;\n}\n\nfunction editDistance(from: string, to: string): number {\n let row = Array.from({ length: to.length + 1 }, (_, i) => i);\n for (let i = 1; i <= from.length; i++) {\n const next = [i];\n for (let j = 1; j <= to.length; j++) next[j] = Math.min(row[j] + 1, next[j - 1] + 1, row[j - 1] + (from[i - 1] === to[j - 1] ? 0 : 1));\n row = next;\n }\n return row[to.length];\n}\n\n/** What's wrong with a prop the component doesn't have, and what to write instead. */\n/** Breakpoint names other libraries use (Tailwind's, Chakra's, Bootstrap's), which Elements doesn't have. */\nconst OTHER_BREAKPOINTS = new Set([\"base\", \"initial\", \"xs\", \"sm\", \"md\", \"lg\", \"xl\", \"2xl\", \"tablet\", \"desktop\", \"wide\", \"small\", \"medium\", \"large\"]);\n\n/**\n * Where a key that names a condition goes, written the way another library writes it (`_hover`, `\":hover\"`,\n * `hoverStyle`, `$sm`, `md`, `@media …`) or as a prop (`mobile={…}`): what an agent or a person coming from Chakra,\n * Tailwind, Stitches or Tamagui tries first. Undefined: it isn't one.\n */\nfunction conditionHint(definition: ComponentDefinition, key: string): string | undefined {\n const name = key\n .trim()\n .replace(/^(&?:+|_+|\\$|@)/, \"\")\n .replace(/Style$/, \"\")\n .toLowerCase();\n const own = CUSTOM_TYPE.test(definition.type);\n const hoverStyles = definition.hover ?? [];\n const toHover = own\n ? `a template's own component takes only its place in a Row in its style: set hover styles in what it renders`\n : hoverStyles.length\n ? `hover styles go in its style's hover block, style={{ hover: { … } }} (it takes ${hoverStyles.join(\", \")})`\n : `${a(definition.type).replace(/^A/, \"a\")} takes no hover styles (a Button's and a Link's colors do)`;\n const toPhone = own\n ? `a template's own component takes only its place in a Row in its style: set phone styles in what it renders`\n : `phone styles go in its style's mobile block, style={{ mobile: { … } }}`;\n if (name === \"hover\") return toHover;\n if (name === \"mobile\" || name === \"phone\" || name === \"phones\" || key.trim().startsWith(\"@media\")) return toPhone;\n if (name === \"focus\" || name === \"focus-visible\" || name === \"focusvisible\" || name === \"focus-within\") {\n return hoverStyles.length && !own ? `keyboard focus gets its hover styles: set them in style={{ hover: { … } }}` : `there are no focus styles; keyboard focus gets a Button's and a Link's hover styles`;\n }\n if (OTHER_BREAKPOINTS.has(name)) {\n return `Elements has one breakpoint, phones: desktop styles go in style itself, phone styles in its mobile block, style={{ mobile: { … } }} (a Page sets where phones start with breakpoints={{ mobile }})`;\n }\n if (name === \"active\" || name === \"pressed\" || name === \"press\" || name === \"visited\" || name === \"dark\" || name === \"light\" || name === \"print\") {\n return `there are no ${name} styles: Elements has phone styles (mobile) and hover styles (hover) in style`;\n }\n return undefined;\n}\n\nfunction unknownProp(definition: ComponentDefinition, key: string): string {\n const condition = conditionHint(definition, key);\n if (condition) return `${a(definition.type)} has no prop \"${key}\": ${condition}`;\n if (Object.prototype.hasOwnProperty.call(definition.style, key)) return `${a(definition.type)} has no prop \"${key}\": it's a style, style={{ ${key}: … }}`;\n const known = Object.keys(definition.props);\n const meant = nearest(key, known);\n return seeing(`${a(definition.type)} has no prop \"${key}\"${meant ? `: did you mean \"${meant}\"?` : known.length ? ` (it has ${known.join(\", \")})` : \"\"}`, definition.type);\n}\n\nfunction placementMessage(parent: ComponentDefinition, child: ComponentDefinition): string {\n if (child.categories.includes(\"section\")) return `A ${child.type} goes directly in an Email or Page, not in a ${parent.type}`;\n if (child.categories.includes(\"root\")) return `A ${child.type} is a root: it can't be inside a ${parent.type}`;\n const takes = [...(parent.children.text ? [\"text\"] : []), ...(parent.children.categories ?? []).map((c) => `${c} components`), ...(parent.children.types ?? [])];\n return takes.length ? seeing(`A ${parent.type} takes ${takes.join(\", \")}; a ${child.type} can't go in it`, parent.type) : `A ${parent.type} has no children`;\n}\n\nfunction readNode(input: unknown, path: string, parent: ComponentDefinition | null, context: Context): Node | null {\n const { d } = context;\n if (!isObject(input)) {\n d.error(\"node/invalid\", `Expected a component ({ \"type\": … }), not ${JSON.stringify(input) ?? String(input)}`, path);\n return null;\n }\n if (typeof input.type !== \"string\") {\n d.error(\"node/type\", 'A component has a \"type\" (\"Row\", \"Heading\", …)', `${path}.type`);\n return null;\n }\n const definition = context.registry.get(input.type);\n if (!definition) {\n const custom = CUSTOM_TYPE.test(input.type);\n d.error(\n \"node/unknown-type\",\n custom ? `\"${input.type}\" is a custom component this document wasn't given: pass it in the components option` : `\"${input.type}\" isn't a component Elements knows`,\n `${path}.type`\n );\n return null;\n }\n if (!parent && !definition.categories.includes(\"root\")) {\n d.error(\"root/invalid\", `A document's root is an Email or Page, not a ${definition.type}`, `${path}.type`);\n return null;\n }\n if (parent && !allowedIn(parent, definition)) {\n d.error(\"children/not-allowed\", placementMessage(parent, definition), path);\n return null;\n }\n const root = context.root;\n if (root && !rootTakes(definition.roots, root) && sharesOutput(definition, root)) {\n const { code, message } = definition.notAllowed ?? {\n code: \"component/not-supported\",\n message: (under: string) => `${a(definition.type)} goes in ${rootList(definition.roots ?? [])}, not in ${a(under).replace(/^A/, \"a\")}`,\n };\n d.error(code, message(root.type), path);\n return null;\n }\n\n // Only what the author writes: an id is theirs (an anchor, a reference), never generated.\n let id: string | undefined;\n if (input.id !== undefined) {\n if (typeof input.id !== \"string\" || !ID.test(input.id)) {\n d.error(\"id/invalid\", `An id starts with a letter and holds letters, digits, \"_\" and \"-\", not ${JSON.stringify(input.id)}`, `${path}.id`);\n } else if (context.idPrefix === null) {\n d.add(\"id/dropped\", \"info\", `The id \"${input.id}\" is left out: inside a custom component, ids are kept only when the component is given one (a block used many times can't own an id)`, `${path}.id`);\n } else {\n const full = context.idPrefix ? `${context.idPrefix}-${input.id}` : input.id;\n if (context.used.has(full)) d.error(\"id/duplicate\", `The id \"${full}\" is already used by another component`, `${path}.id`);\n else {\n id = full;\n context.used.add(full);\n }\n }\n }\n\n for (const key of Object.keys(input)) {\n if (!NODE_KEYS.includes(key)) d.error(\"node/unknown-key\", `\"${key}\" isn't part of a component (${NODE_KEYS.join(\", \")})`, `${path}.${key}`, id);\n }\n\n const node: Node = id === undefined ? { type: definition.type } : { id, type: definition.type };\n\n const props = readProps(input.props, definition, `${path}.props`, id, d, context.root);\n if (props) node.props = props;\n\n // A condition's block written inside `style` (`style={{ mobile: { … } }}`) is read as the condition's own; a template's\n // own component (`acme.Card`) takes no condition, so in its style a block is an unknown style, as anything else is.\n const lifted: Partial<Record<string, unknown>> = {};\n let styleInput = input.style;\n if (isObject(styleInput) && !CUSTOM_TYPE.test(definition.type)) {\n const rest: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(styleInput)) {\n if (CONDITION_NAMES.has(key)) lifted[key] = value;\n else rest[key] = value;\n }\n styleInput = rest;\n }\n\n const style = readStyles(styleInput, definition, definition.style, `${path}.style`, id, d, \"style\", () => true, undefined, context.root);\n if (style) node.style = style;\n\n for (const condition of CONDITIONS) {\n const inStyle = lifted[condition.name];\n const given = input[condition.name];\n if (inStyle !== undefined && given !== undefined) {\n d.error(\n \"style/twice\",\n `${condition.name} is given twice: as ${condition.name}={…} and in style. Give it once, in style: style={{ ${condition.name}: { … } }}`,\n `${path}.style.${condition.name}`,\n id\n );\n continue;\n }\n let value = inStyle ?? given;\n if (value === undefined) continue;\n const at = inStyle !== undefined ? `${path}.style.${condition.name}` : `${path}.${condition.name}`;\n if (condition.roots && !condition.roots(context.root)) {\n if (condition.notAllowed) d.error(condition.notAllowed.code, condition.notAllowed.message, at, id);\n continue;\n }\n // One level deep: a condition inside a condition's block (hover on phones) isn't something Elements writes.\n if (isObject(value) && Object.keys(value).some((key) => CONDITION_NAMES.has(key))) {\n const own: Record<string, unknown> = {};\n for (const [key, inner] of Object.entries(value)) {\n if (CONDITION_NAMES.has(key)) d.error(\"style/nested\", `${key} can't be set inside ${condition.name}: a block holds styles, not another block`, `${at}.${key}`, id);\n else own[key] = inner;\n }\n value = own;\n }\n const read = readStyles(value, definition, definition.style, at, id, d, condition.name, (spec, key) => condition.allows(spec, key, definition), condition.for, context.root);\n if (read) node[condition.name] = read;\n }\n\n if (input.hidden !== undefined) {\n const hidden = readHidden(input.hidden, `${path}.hidden`, id, context);\n if (hidden) node.hidden = hidden;\n }\n\n const children = readChildren(input.children, definition, `${path}.children`, id, context);\n if (children.length) node.children = children;\n return node;\n}\n\nfunction readProps(input: unknown, definition: ComponentDefinition, path: string, id: string | undefined, d: Diagnostics, root: ComponentDefinition | undefined): Record<string, Json> | undefined {\n const out: Record<string, Json> = {};\n if (input !== undefined && !isObject(input)) {\n d.error(\"props/invalid\", \"props is an object\", path, id);\n input = undefined;\n }\n for (const [key, value] of Object.entries((input as Record<string, unknown> | undefined) ?? {})) {\n if (value === undefined) continue;\n const spec = Object.prototype.hasOwnProperty.call(definition.props, key) ? definition.props[key] : undefined;\n if (!spec) {\n d.error(\"prop/unknown\", unknownProp(definition, key), `${path}.${key}`, id);\n continue;\n }\n if (!rootTakes(spec.roots, root)) {\n d.error(\"prop/not-supported\", `${a(definition.type)}'s \"${key}\" is for ${rootList(spec.roots!)}, not ${a(root!.type).replace(/^A/, \"a\")}`, `${path}.${key}`, id);\n continue;\n }\n const parsed = spec.kind.parse(value);\n if (parsed.ok) {\n if (!spec.kind.empty?.(parsed.value)) out[key] = parsed.value;\n } else d.error(\"prop/invalid\", `${key}: ${parsed.message}`, `${path}.${key}`, id);\n }\n for (const [key, spec] of Object.entries(definition.props)) {\n if (spec.required && !(key in out) && !(isObject(input) && input[key] !== undefined)) {\n d.error(\"prop/required\", `A ${definition.type} needs \"${key}\" (${spec.kind.accepts})`, `${path}.${key}`, id);\n }\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nconst UNSUPPORTED_CSS: Record<string, string> = {\n margin: \"use the parent's gap for space between siblings, or padding for space inside\",\n marginTop: \"use the parent's gap, or padding\",\n marginBottom: \"use the parent's gap, or padding\",\n marginLeft: \"use padding\",\n marginRight: \"use padding\",\n display: \"the component sets it\",\n position: \"use a Layer for content placed over other content\",\n backgroundImage: \"put a Layer around it, its first child an Image (the Layer's height crops it to cover), the rest over it\",\n background: \"backgroundColor for a color; for an image, a Layer: its first child an Image, the rest over it\",\n float: \"use a Row to put things side by side\",\n // Names Elements used before it took CSS's.\n align: \"it's alignItems now\",\n justify: 'it\\'s justifyContent now (\"between\" is \"space-between\")',\n wrap: \"a Row stays side by side on phones with its stackOnMobile prop set to false; flexWrap wraps it on the web\",\n color: \"a Divider's line is its borderTop, with its color\",\n thickness: 'a Divider\\'s line is borderTop now: \"1px solid #bbbbbb\"',\n lineStyle: 'a Divider\\'s line is borderTop now: \"1px solid #bbbbbb\"',\n};\n\n/** What to write instead of a style a component doesn't take, after a colon; or nothing. */\nfunction styleHint(definition: ComponentDefinition, specs: StyleSpecs, key: string): string {\n if (Object.prototype.hasOwnProperty.call(definition.props, key)) return `: it's a prop, ${key}={…}`;\n if (key === \"padding\" && definition.categories.includes(\"root\")) return \": a root has no padding; put it on a Column (a card) or a Section (a band) inside it\";\n if (UNSUPPORTED_CSS[key]) return `: ${UNSUPPORTED_CSS[key]}`;\n const condition = conditionHint(definition, key);\n if (condition) return `: ${condition}`;\n const meant = nearest(key, Object.keys(specs));\n return meant ? `: did you mean \"${meant}\"?` : \"\";\n}\n\nfunction readStyles(\n input: unknown,\n definition: ComponentDefinition,\n specs: StyleSpecs,\n path: string,\n id: string | undefined,\n d: Diagnostics,\n what: string,\n allowed: (spec: StyleSpecs[string], key: string) => boolean,\n /** For a condition, what can be set for it is set \"for phones\". */\n forLabel?: string,\n /** The template's root: a style declared for other roots is an error under it. */\n root?: ComponentDefinition\n): Record<string, Json> | undefined {\n if (input === undefined) return undefined;\n if (!isObject(input)) {\n d.error(`${what}/invalid`, `${what} is an object of style properties`, path, id);\n return undefined;\n }\n const out: Record<string, Json> = {};\n for (const [key, value] of Object.entries(input)) {\n if (value === undefined) continue;\n const spec = Object.prototype.hasOwnProperty.call(specs, key) ? specs[key] : undefined;\n if (!spec) {\n d.error(\"style/unknown\", seeing(`\"${key}\" isn't a style ${a(definition.type).replace(/^A/, \"a\")} takes${styleHint(definition, specs, key)}`, definition.type), `${path}.${key}`, id);\n continue;\n }\n if (!rootTakes(spec.roots, root)) {\n d.error(\"style/not-supported\", `${a(definition.type)}'s \"${key}\" is for ${rootList(spec.roots!)}, not ${a(root!.type).replace(/^A/, \"a\")}`, `${path}.${key}`, id);\n continue;\n }\n if (!allowed(spec, key)) {\n d.error(`${what}/not-allowed`, `\"${key}\" can't be set ${forLabel ?? \"here\"}`, `${path}.${key}`, id);\n continue;\n }\n const parsed = spec.kind.parse(value);\n if (parsed.ok) out[key] = parsed.value;\n else d.error(`${what}/invalid`, `${key}: ${parsed.message}`, `${path}.${key}`, id);\n }\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction readHidden(input: unknown, path: string, id: string | undefined, context: Context): Node[\"hidden\"] | undefined {\n const { d } = context;\n if (!context.root?.responsive) {\n d.error(\"hidden/not-supported\", \"Hiding on phones or desktops is for an Email or a Page\", path, id);\n return undefined;\n }\n if (!isObject(input) || Object.entries(input).some(([key, value]) => (key !== \"mobile\" && key !== \"desktop\") || (value !== undefined && typeof value !== \"boolean\"))) {\n d.error(\"hidden/invalid\", \"hidden is { mobile?: boolean, desktop?: boolean }\", path, id);\n return undefined;\n }\n const out: { mobile?: boolean; desktop?: boolean } = {};\n if (input.mobile === true) out.mobile = true;\n if (input.desktop === true) out.desktop = true;\n if (!shownAnywhere({ hidden: out })) d.warning(\"hidden/everywhere\", \"Hidden on phones and on desktops, it never shows\", path, id);\n return Object.keys(out).length ? out : undefined;\n}\n\nfunction readChildren(input: unknown, definition: ComponentDefinition, path: string, id: string | undefined, context: Context): Child[] {\n const { d } = context;\n if (input === undefined) return [];\n if (!Array.isArray(input)) {\n d.error(\"children/invalid\", \"children is an array of components and text\", path, id);\n return [];\n }\n const out: Child[] = [];\n input.forEach((child, index) => {\n const at = `${path}[${index}]`;\n if (typeof child === \"string\") {\n if (!child) return;\n if (definition.children.text) {\n const last = out[out.length - 1];\n if (typeof last === \"string\") out[out.length - 1] = last + child;\n else out.push(child);\n } else if (child.trim()) {\n d.error(\"children/text-not-allowed\", `Text can't go straight in a ${definition.type}: put it in a Text or Heading`, at, id);\n }\n return;\n }\n const node = readNode(child, at, definition, context);\n if (!node) return;\n // A Document's header and footer are drawn on every page: it has one of each, and a second would replace the first.\n if (definition.type === \"Document\" && (node.type === \"PageHeader\" || node.type === \"PageFooter\") && out.some((other) => typeof other !== \"string\" && other.type === node.type)) {\n d.error(\"children/one-only\", `A Document has one ${node.type}, drawn on every page: this is a second (put what both hold in one)`, at, node.id);\n }\n out.push(node);\n });\n return out;\n}\n","/**\n * The diagnostics a style's, a prop's or a condition's support declaration gives for a value: what an output shows\n * otherwise than asked. Shared by the support pass over the laid-out tree (writers/shared/support.ts) and expansion's\n * check of what a condition takes but an output doesn't show (expand.ts).\n */\nimport { Diagnostics, type Severity } from \"./diagnostics\";\nimport { caniemail } from \"./email-clients\";\nimport type { Json } from \"./model\";\nimport type { Support, SupportByTarget, Target } from \"./define\";\n\nconst same = (a: Json | undefined, b: Json | undefined) => JSON.stringify(a) === JSON.stringify(b);\n\n/**\n * The diagnostics a declaration gives for a value at `at` (`key` names it in the message), on this node: nothing where\n * it's shown as asked. Classic Outlook's notes are left out where `outlook` is false (a block it never applies). For\n * email, a rule's clients go on its diagnostics (`outlook` is classic Outlook's), with caniemail's page where it's from there.\n */\nexport function reportDeclared(\n d: Diagnostics,\n node: { type: string; id?: string; props: Record<string, Json> },\n at: string,\n key: string,\n value: Json,\n declared: SupportByTarget[Target] | undefined,\n target: Target,\n outlook = true\n): void {\n if (!declared) return;\n for (const rule of ([] as Support[]).concat(declared)) {\n if (rule.level === \"full\") continue;\n if (rule.level === \"outlook\" && !outlook) continue;\n if (rule.values && !rule.values.some((v) => same(v, value))) continue;\n if (rule.when && !rule.when(value, node)) continue;\n const asked = typeof value === \"string\" ? `${key}: \"${value}\"` : key;\n // For email, the clients it's about (`outlook`: classic Outlook).\n const clients = target === \"email\" ? (rule.clients ?? (rule.level === \"outlook\" ? ([\"outlook\"] as const) : undefined)) : undefined;\n const output = clients ? \"some email clients\" : target === \"web\" ? \"a page\" : target;\n const [code, severity, message]: [string, Severity, string] =\n rule.level === \"none\"\n ? [`${target}/unsupported`, \"warning\", `${asked} isn't possible in ${output}: ${rule.shows}`]\n : rule.level === \"partial\"\n ? [`${target}/degraded`, \"info\", `${asked} on this ${node.type} in ${output}: ${rule.shows}`]\n : [\"email/outlook-degraded\", \"info\", `${asked} on this ${node.type} in classic Outlook: ${rule.shows}`];\n // What Elements assumes, unchecked, is a note that says so.\n const [said, as] = rule.source === \"assumed\" ? ([\"info\", `${message} (not checked)`] as const) : [severity, message];\n d.add(code, said, as, at, node.id, { clients, fix: rule.fix, see: rule.feature && caniemail(rule.feature) });\n }\n}\n","/**\n * Custom components expanded into the primitives they're made of, before a\n * document is resolved and rendered. The document keeps them as one node\n * each; only what's rendered is expanded.\n */\nimport { blockOf, CONDITIONS } from \"./conditions\";\nimport type { ComponentDefinition, SupportByTarget, Target } from \"./define\";\nimport { Diagnostics, type Diagnostic } from \"./diagnostics\";\nimport { isNode, type ElementsDocument, type Json, type Node } from \"./model\";\nimport { checkFragment } from \"./normalize\";\nimport { reportDeclared } from \"./declared\";\nimport { CUSTOM_TYPE, isCustom, propsWithDefaults, registryOf, type ComponentsOption, type CustomDefinition, type Registry } from \"./registry\";\n\n/** How deep custom components may expand into others: deeper is a component that contains itself. */\nconst MAX_DEPTH = 32;\n\n/**\n * Each expanded node's place in the template (\"root.children[4].children[1]\"), for messages: a Grid's children are\n * where the template has them, not in the Rows and cells it lays them out in (which are the Grid); what a custom\n * component renders is its node, and the nodes inside it are \"root.children[2](acme.Card).children[1]\".\n */\nexport type TemplatePaths = WeakMap<Node, string>;\n\n/** A path in an expanded document (a node's place in it, and what follows: \".props.src\") as the template's. */\nexport function templatePathsOf(document: ElementsDocument, paths: TemplatePaths): (path: string) => string {\n const places = new Map<string, string>();\n const visit = (node: Node, at: string) => {\n places.set(at, paths.get(node) ?? at);\n node.children?.forEach((child, index) => isNode(child) && visit(child, `${at}.children[${index}]`));\n };\n visit(document.root, \"root\");\n return (path) => {\n // The deepest node it starts with.\n for (let at = path; at; at = at.slice(0, Math.max(at.lastIndexOf(\".\"), at.lastIndexOf(\"[\"), 0))) {\n const place = places.get(at);\n if (place !== undefined) return place + path.slice(at.length);\n }\n return path;\n };\n}\n\n/**\n * `target`, the output the root renders to: given, what a condition takes on a component but that output doesn't\n * show under it (its definition's `conditionSupport`) is reported here, before a Grid is arranged and loses it.\n */\nexport function expandDocument(document: ElementsDocument, options?: ComponentsOption | Registry, target?: Target): { document: ElementsDocument; diagnostics: Diagnostic[]; paths: TemplatePaths } {\n const registry = registryOf(options);\n const d = new Diagnostics();\n const paths: TemplatePaths = new WeakMap();\n const taken = new Set<string>();\n const collect = (node: Node) => {\n if (node.id) taken.add(node.id);\n node.children?.forEach((child) => isNode(child) && collect(child));\n };\n collect(document.root);\n const rootDefinition = registry.get(document.root.type);\n const responsive = !!rootDefinition?.responsive;\n\n /** What a condition takes on this node's component but the output doesn't show under it. */\n const unshown = (node: Node, path: string) => {\n const declared = target && registry.get(node.type)?.conditionSupport;\n if (!declared) return;\n for (const condition of CONDITIONS) {\n const block = blockOf(node, condition);\n const byStyle: Partial<Record<string, SupportByTarget>> | undefined = declared[condition.name];\n // Hidden where the condition applies (on phones), nothing in its block shows anyway: as the support pass skips it.\n if (!block || !byStyle || (condition.hiddenKey && node.hidden?.[condition.hiddenKey])) continue;\n for (const [key, value] of Object.entries(block)) {\n reportDeclared(d, { type: node.type, id: node.id, props: node.props ?? {} }, `${path}.${condition.name}.${key}`, key, value, byStyle[key]?.[target], target);\n }\n }\n };\n\n /** A node at `path` (its children's paths start from it), arranged first if its component arranges; it's at `self` in the template. */\n const visit = (given: Node, path: string, depth: number, self = path): Node => {\n unshown(given, path);\n const arrange = registry.get(given.type)?.arrange;\n if (!arrange) return walk(given, path, self, depth);\n // Its own children keep their places in the template, wherever it puts them.\n const origins = new Map<Node, string>();\n given.children?.forEach((child, index) => isNode(child) && origins.set(child, `${path}.children[${index}]`));\n return walk(arrange(given), path, self, depth, origins);\n };\n\n /** A node's children expanded; inside an arranged node, what it adds around the children it was given is it (`self`). */\n const walk = (node: Node, path: string, self: string, depth: number, origins?: Map<Node, string>): Node => {\n const definition = registry.get(node.type)!;\n const children = node.children?.map((child, index) => {\n if (!isNode(child)) return child;\n const at = origins ? (origins.get(child) ?? self) : `${path}.children[${index}]`;\n const childDefinition = registry.get(child.type);\n if (childDefinition && isCustom(childDefinition)) return expandOne(child, childDefinition, definition, at, depth) ?? null;\n if (origins && !origins.has(child)) return walk(child, self, self, depth, origins);\n return visit(child, at, depth);\n });\n const out = children?.length ? { ...node, children: children.filter((child): child is NonNullable<typeof child> => child !== null) } : node;\n paths.set(out, self);\n return out;\n };\n\n /** A custom node at `path` expanded; what it renders is at `self` (its own path, or the custom node's that rendered it). */\n const expandOne = (node: Node, definition: CustomDefinition, parent: ComponentDefinition, path: string, depth: number, self = path): Node | undefined => {\n if (depth >= MAX_DEPTH) {\n d.error(\"custom/depth\", `${node.type} expands into custom components ${MAX_DEPTH} deep: does it contain itself?`, path, node.id);\n return undefined;\n }\n let raw: unknown;\n const reported: Diagnostic[] = [];\n try {\n const style = { ...(definition.defaultStyle as Record<string, Json> | undefined), ...node.style } as Record<string, Json>;\n raw = definition.expand(propsWithDefaults(definition, node.props) as never, { register: (custom) => registry.add(custom), style, responsive, report: (diagnostic) => reported.push(diagnostic) });\n } catch (error) {\n d.error(\"custom/render\", `${node.type} failed to render: ${error instanceof Error ? error.message : String(error)}`, path, node.id);\n return undefined;\n }\n // What its render said that doesn't stop it, at its place: \"root.mobile\" in it is \"root.children[2](acme.Card).mobile\".\n const at = `${path}(${node.type})`;\n for (const diagnostic of reported) d.list.push({ ...diagnostic, path: diagnostic.path === \"root\" || diagnostic.path.startsWith(\"root.\") ? at + diagnostic.path.slice(4) : at });\n if (Array.isArray(raw) || typeof raw !== \"object\" || raw === null) {\n d.error(\"custom/render\", `${node.type} renders one component (a Column, a Section, …), not ${Array.isArray(raw) ? \"several\" : JSON.stringify(raw)}`, path, node.id);\n return undefined;\n }\n const { node: expanded, diagnostics } = checkFragment(raw, { parent, root: rootDefinition, idPrefix: node.id ?? null, taken, registry, path: `${path}(${node.type})` });\n for (const diagnostic of diagnostics) d.list.push(diagnostic);\n if (!expanded) return undefined;\n collectIds(expanded);\n // The custom node's place in a Row and its visibility go onto what it renders; a built-in's (a Menu's, a\n // Social's) id and phone styles too. A template's own component's id is only what the ids in it go after.\n if (node.style?.flex !== undefined) expanded.style = { ...expanded.style, flex: node.style.flex };\n if (node.hidden) expanded.hidden = { ...expanded.hidden, ...node.hidden };\n if (node.id && !expanded.id && !CUSTOM_TYPE.test(node.type)) expanded.id = node.id;\n for (const condition of CONDITIONS) {\n const rendered = registry.get(expanded.type);\n for (const [key, value] of Object.entries(node[condition.name] ?? {})) {\n const spec = rendered?.style[key];\n if (rendered && spec && condition.allows(spec, key, rendered)) expanded[condition.name] = { [key]: value, ...expanded[condition.name] };\n else d.warning(`${condition.name}/not-shown`, `${node.type}'s ${key} ${condition.on} isn't shown: what it renders (a ${expanded.type}) has no ${key} ${condition.for}`, `${path}.${condition.name}.${key}`, node.id);\n }\n }\n const inner = registry.get(expanded.type)!;\n if (isCustom(inner)) return expandOne(expanded, inner, parent, `${path}(${node.type})`, depth + 1, self);\n return visit(expanded, `${path}(${node.type})`, depth + 1, self);\n };\n\n const collectIds = (node: Node) => {\n if (node.id) taken.add(node.id);\n node.children?.forEach((child) => isNode(child) && collectIds(child));\n };\n\n return { document: { ...document, root: visit(document.root, \"root\", 0) }, diagnostics: d.list, paths };\n}\n","/**\n * Resolving a document: what every target needs worked out the same way\n * before it writes anything. Defaults applied, text styles inherited, and\n * every box's width on desktop in px, from the root's width down. Targets\n * only turn this into markup; none of them decides layout on its own.\n */\nimport type { ComponentDefinition, Target } from \"./define\";\nimport { Diagnostics, type Diagnostic } from \"./diagnostics\";\nimport { assetParts, readLength, type Asset, type Border, type BorderSide, type FontFamily, type Insets, type LineHeight } from \"./kinds\";\nimport { isNode, type ElementsDocument, type Json, type Node } from \"./model\";\nimport { pageBox } from \"./document\";\nimport { expandDocument, templatePathsOf, type TemplatePaths } from \"./expand\";\nimport { propsWithDefaults, registryOf, type ComponentsOption, type Registry } from \"./registry\";\n\n/** Text styles as they apply to a node: its own, its component's defaults, else its parent's. */\nexport interface ResolvedText {\n color: string;\n fontFamily: FontFamily;\n fontSize: number;\n fontWeight: number;\n fontStyle: \"normal\" | \"italic\";\n lineHeight: LineHeight;\n /** The line height in px at this node's font size. */\n lineHeightPx: number;\n letterSpacing: number;\n textAlign: \"left\" | \"center\" | \"right\" | \"justify\";\n textTransform: \"none\" | \"uppercase\" | \"lowercase\" | \"capitalize\";\n}\n\nexport interface ResolvedNode {\n /** The author's id, if any. */\n id?: string;\n /**\n * Where it is in the tree as laid out (\"root.children[2]\"): its place in the template, but inside a Grid (laid out\n * as Rows of cells) and inside what a custom component renders. The document's `templatePath` gives the template's.\n */\n path: string;\n type: string;\n definition: ComponentDefinition;\n /** Its props, with the definition's defaults where not given. */\n props: Record<string, Json>;\n /** Its component's default style under its own (inherited text styles are in `text`). */\n style: Record<string, Json>;\n hover?: Record<string, Json>;\n mobile?: Record<string, Json>;\n hidden?: { mobile?: boolean; desktop?: boolean };\n text: ResolvedText;\n /** The width its parent gives it on desktop, in px (null inside text). */\n available: number | null;\n /**\n * Its width on desktop in px, padding and border included; null where it\n * takes its own size and that size isn't known (a Button's text, an Image\n * without its size, text inside text).\n */\n width: number | null;\n /** Its width inside its padding and border, in px, or null. */\n contentWidth: number | null;\n children: Array<ResolvedNode | string>;\n /** A Table's column widths in px, each column's from its cells, the rest shared (null where the table's width isn't known). */\n columns?: number[] | null;\n /** On a Table and its rows, where a column of its own px sits beside one with no width: how each column is written. \"px\" stays that wide in a narrower window, \"share\" stays its share of the table, \"free\" takes what they leave (otherwise, none: every column is a share of the table). */\n columnSizes?: Array<\"px\" | \"share\" | \"free\"> | null;\n}\n\nexport interface ResolvedDocument {\n root: ResolvedNode;\n /** At their places in the template. */\n diagnostics: Diagnostic[];\n /** A path in the tree as laid out (a node's `path`, and what follows it: \".props.src\") as the template's, for messages. */\n templatePath?: (path: string) => string;\n}\n\n/**\n * The laid-out tree's format (ResolvedNode), as prepare() gives it to the packages that write a PDF or an image: each\n * reads the version it's built with and refuses another. Raise it only where a reader of the tree would break (a\n * field renamed, removed or meaning something else), not for one added.\n */\nexport const LAYOUT_VERSION = 1;\n\n/** What a root's text styles start from, under its own defaults. */\nconst INITIAL_TEXT: Omit<ResolvedText, \"lineHeightPx\"> = {\n color: \"#000000\",\n fontFamily: \"Arial, Helvetica, sans-serif\",\n fontSize: 16,\n fontWeight: 400,\n fontStyle: \"normal\",\n lineHeight: 1.5,\n letterSpacing: 0,\n textAlign: \"left\",\n textTransform: \"none\",\n};\n\nconst INHERITED = Object.keys(INITIAL_TEXT) as Array<keyof typeof INITIAL_TEXT>;\n\n/** A length in px, given the width a percentage is of. */\nexport function toPx(value: Json | undefined, of: number | null): number | null {\n const length = readLength(value);\n if (!length) return null;\n switch (length.unit) {\n case \"px\":\n return length.value;\n case \"%\":\n return of === null ? null : (of * length.value) / 100;\n case \"pt\":\n return (length.value * 96) / 72;\n case \"mm\":\n return (length.value * 96) / 25.4;\n case \"in\":\n return length.value * 96;\n }\n}\n\nexport function lineHeightPx(lineHeight: LineHeight, fontSize: number): number {\n // A font's own (\"normal\") is about this: for what can't leave it to the font (a PDF's lines, an estimate of a height).\n if (lineHeight === \"normal\") return Math.round(1.2 * fontSize * 100) / 100;\n return typeof lineHeight === \"number\" ? Math.round(lineHeight * fontSize * 100) / 100 : Number.parseFloat(lineHeight);\n}\n\n/** The horizontal space a box's padding and border take. */\nexport function horizontalFrame(style: Record<string, Json>): number {\n const padding = style.padding as Insets | undefined;\n const border = style.border as Border | undefined;\n return (padding ? padding.left + padding.right : 0) + (border?.left?.width ?? 0) + (border?.right?.width ?? 0);\n}\n\ninterface Context {\n d: Diagnostics;\n registry: Registry;\n /** The root's type: Rows stack on phones by default in a responsive one. */\n responsive: boolean;\n /** The root's type: a Row wraps on a Page, and in an Email where it stays side by side on phones. A PDF and an image draw one line. */\n root: string;\n}\n\n/**\n * Resolves a valid document (see `checkDocument`), its custom components\n * expanded first: what's resolved is primitives only.\n */\nexport function resolveDocument(input: ElementsDocument, options?: ComponentsOption | Registry): ResolvedDocument {\n const registry = registryOf(options);\n const expanded = expandDocument(input, registry);\n const resolved = resolveExpanded(expanded.document, registry, expanded.paths);\n return { ...resolved, diagnostics: [...expanded.diagnostics, ...resolved.diagnostics] };\n}\n\n/**\n * Resolves a document whose custom components are already expanded (`expandDocument`): primitives only. With the\n * expansion's `paths`, its messages (and its `templatePath`) say where things are in the template.\n */\nexport function resolveExpanded(document: ElementsDocument, options?: ComponentsOption | Registry, paths?: TemplatePaths): ResolvedDocument {\n const registry = registryOf(options);\n const d = new Diagnostics();\n const definition = registry.get(document.root.type)!;\n const context: Context = { d, registry, responsive: !!definition.responsive, root: document.root.type };\n const root = resolveNode(document.root, \"root\", { ...INITIAL_TEXT, lineHeightPx: 24 }, null, context);\n // A Document's content is as wide as its page inside the margins; a Canvas's, as it inside its padding.\n const width = root.type === \"Document\" ? pageBox(root.props).contentWidth : toPx(root.props.width, null);\n root.width = width;\n root.contentWidth = width === null ? null : width - horizontalFrame(root.style);\n root.children = resolveChildren(document.root, \"root\", root, root.contentWidth, \"stack\", context);\n const templatePath = paths ? templatePathsOf(document, paths) : (path: string) => path;\n return { root, diagnostics: d.list.map((diagnostic) => ({ ...diagnostic, path: templatePath(diagnostic.path) })), templatePath };\n}\n\nfunction styleOf(node: Node, definition: ComponentDefinition, props: Record<string, Json>, context: Context): Record<string, Json> {\n const style: Record<string, Json> = { ...((definition.defaultStyle ?? {}) as Record<string, Json>) };\n const by = definition.defaultStyleBy;\n if (by) Object.assign(style, by.values[String(props[by.prop])] ?? {});\n return { ...style, ...node.style };\n}\n\nfunction textOf(parent: ResolvedText, style: Record<string, Json>): ResolvedText {\n const text = { ...parent } as Record<string, unknown>;\n for (const key of INHERITED) if (style[key] !== undefined) text[key] = style[key];\n const out = text as unknown as ResolvedText;\n out.lineHeightPx = lineHeightPx(out.lineHeight, out.fontSize);\n return out;\n}\n\n/** A direction of its own (a block's, or the root's) sets where its text starts, unless its author aligned it. */\nfunction directed(text: ResolvedText, dir: Json | undefined, ownAlign: Json | undefined): ResolvedText {\n if (ownAlign !== undefined || (dir !== \"rtl\" && dir !== \"ltr\")) return text;\n return { ...text, textAlign: dir === \"rtl\" ? \"right\" : \"left\" };\n}\n\n/** A node with its own values worked out; its width and children are set by its parent's layout. */\nfunction resolveNode(node: Node, path: string, parentText: ResolvedText, available: number | null, context: Context): ResolvedNode {\n const definition = context.registry.get(node.type)!;\n const props = propsWithDefaults(definition, node.props);\n const style = styleOf(node, definition, props, context);\n return {\n ...(node.id ? { id: node.id } : {}),\n path,\n type: node.type,\n definition,\n props,\n style,\n ...(node.hover ? { hover: node.hover } : {}),\n ...(node.mobile ? { mobile: node.mobile } : {}),\n ...(node.hidden ? { hidden: node.hidden } : {}),\n text: directed(textOf(parentText, style), props.dir, node.style?.textAlign),\n available,\n width: null,\n contentWidth: null,\n children: [],\n };\n}\n\nfunction clamp(width: number, style: Record<string, Json>, of: number | null): number {\n const min = toPx(style.minWidth, of);\n const max = toPx(style.maxWidth, of);\n if (max !== null) width = Math.min(width, max);\n if (min !== null) width = Math.max(width, min);\n return width;\n}\n\n/** The size a node has of its own: an image's, when its document gives it. */\nfunction intrinsicWidth(resolved: ResolvedNode, available: number | null): number | null {\n // An Svg's drawing is as wide as it says, its padding and border around it; it's never narrowed (the Page draws it\n // so): wider than its room, it overflows it.\n if (resolved.type === \"Svg\" && typeof resolved.props.width === \"number\") return resolved.props.width + horizontalFrame(resolved.style);\n if (resolved.type !== \"Image\" || resolved.props.src === undefined) return null;\n const own = assetParts(resolved.props.src as Asset).width ?? null;\n if (own === null) return null;\n return clamp(available === null ? own : Math.min(own, available), resolved.style, available);\n}\n\n/** The width a node takes of `available` where its parent stacks its children. */\nfunction stackedWidth(resolved: ResolvedNode, available: number | null): number | null {\n const set = toPx(resolved.style.width, available);\n if (set !== null) return clamp(set, resolved.style, available);\n if (resolved.definition.sizing === \"stretch\") return available === null ? null : clamp(available, resolved.style, available);\n if (resolved.definition.sizing === \"shrink\") return intrinsicWidth(resolved, available);\n return null;\n}\n\nfunction setWidth(resolved: ResolvedNode, width: number | null): void {\n resolved.width = width === null ? null : Math.round(width);\n resolved.contentWidth = resolved.width === null ? null : Math.max(0, resolved.width - horizontalFrame(resolved.style));\n}\n\ntype Layout = \"stack\" | \"row\" | \"text\";\n\nfunction resolveChildren(node: Node, path: string, parent: ResolvedNode, available: number | null, layout: Layout, context: Context): Array<ResolvedNode | string> {\n const out: Array<ResolvedNode | string> = [];\n const nodes: Array<{ source: Node; resolved: ResolvedNode; at: string }> = [];\n (node.children ?? []).forEach((child, index) => {\n if (!isNode(child)) {\n out.push(child);\n return;\n }\n const at = `${path}.children[${index}]`;\n // Inside text, text takes no width of its own; what isn't text (an Image, a nested List) does.\n const inText = layout === \"text\" && !!context.registry.get(child.type)?.categories.includes(\"inline\");\n const resolved = resolveNode(child, at, parent.text, inText ? null : available, context);\n if (resolved.style.flex !== undefined && layout !== \"row\") {\n context.d.warning(\"style/ignored\", `flex only applies to a child of a Row; this ${child.type} is in a ${parent.type}`, `${at}.style.flex`, child.id);\n }\n nodes.push({ source: child, resolved, at });\n out.push(resolved);\n });\n\n if (layout === \"row\") layOutRow(parent, nodes, available, path, context);\n else {\n for (const { resolved, at, source } of nodes) {\n if (resolved.available === null && layout === \"text\") continue;\n // A stack that stretches its children widens those that take their own size (a Button, an Image), as flexbox does;\n // not an Svg, whose width is its drawing's. Across a Layer is its justifyItems (its alignItems is down it).\n const across = parent.type === \"Layer\" ? parent.style.justifyItems : parent.style.alignItems;\n const stretched = layout === \"stack\" && across === \"stretch\" && resolved.definition.sizing === \"shrink\" && resolved.style.width === undefined && resolved.type !== \"Svg\";\n const width = stretched && resolved.available !== null ? clamp(resolved.available, resolved.style, resolved.available) : stackedWidth(resolved, resolved.available);\n if (width !== null && resolved.available !== null && width > resolved.available + 0.5) {\n context.d.warning(\"layout/overflow\", `This ${source.type} is ${Math.round(width)}px wide, wider than the ${Math.round(resolved.available)}px it's in`, at, source.id);\n }\n setWidth(resolved, width);\n }\n }\n\n for (const { source, resolved, at } of nodes) {\n if (source.type === \"Table\") {\n resolved.children = resolveTable(source, at, resolved, context);\n continue;\n }\n const own: Layout = source.type === \"Row\" ? \"row\" : resolved.definition.children.text ? \"text\" : \"stack\";\n // A box without a known width (a Link around an image) gives its children what it was given; one inside text, what the text was given.\n let inner = resolved.contentWidth ?? resolved.available ?? (layout === \"text\" ? available : null);\n // A List's items are beside its markers' column.\n if (source.type === \"List\" && inner !== null) inner = Math.max(0, inner - (toPx(resolved.style.indent, null) ?? 0));\n resolved.children = resolveChildren(source, at, resolved, inner, own, context);\n // A block Link around an image is as wide as it; inside text, a Link is a run and takes no width.\n if (resolved.width === null && source.type === \"Link\" && layout !== \"text\") {\n const image = resolved.children.find((c): c is ResolvedNode => typeof c !== \"string\" && c.type === \"Image\");\n if (image && image.width !== null) setWidth(resolved, image.width + horizontalFrame(resolved.style));\n }\n }\n return out;\n}\n\n/**\n * A Row, laid out as CSS flexbox lays out the Page's (one line, no\n * wrapping), so email gets the widths a browser gives:\n * - each child starts from its base: its width (px or %), its own size\n * (`flex: \"none\"`: an image's), or, for a child sharing what's left (by its\n * `flex`, 1 by default), its padding and border;\n * - what's left is shared by `flex`; what's missing is taken back from the\n * children with a width, in proportion to their width inside their padding;\n * - a child that reaches its `minWidth` or `maxWidth` (or no room inside its\n * padding) keeps it, and the rest is shared again among the others.\n * Widths are whole px. Children hidden on desktop aren't in it.\n */\nfunction layOutRow(row: ResolvedNode, nodes: Array<{ source: Node; resolved: ResolvedNode; at: string }>, available: number | null, path: string, context: Context): void {\n if (available === null) return;\n // A child shown only on phones takes no room on desktop; on phones, where it shows, the Row's children stack: it's as wide as the Row.\n const desktop = nodes.filter(({ resolved }) => !resolved.hidden?.desktop);\n for (const { resolved } of nodes) if (resolved.hidden?.desktop) setWidth(resolved, available);\n const gap = toPx(row.style.gap, null) ?? 0;\n const items = desktop.map(({ resolved }) => flexItem(resolved, available));\n // A Row that wraps breaks where its children no longer fit, and each line is laid out on its own.\n const wraps = row.style.flexWrap === \"wrap\" && (context.root === \"Page\" || (context.root === \"Email\" && row.props.stackOnMobile === false));\n for (const line of wraps ? wrappedLines(items, gap, available) : [items.map((_, index) => index)]) {\n const room = available - gap * Math.max(0, line.length - 1);\n const ownItems = line.map((index) => items[index]);\n const widths = roundTogether(flexWidths(ownItems, room));\n // A child that takes its own size, and whose size isn't known (a Button without a width), takes no room and stays unknown.\n line.forEach((index, at) => setWidth(desktop[index].resolved, items[index].unknown ? null : widths[at]));\n\n const asked = ownItems.reduce((sum, item) => sum + item.base, 0);\n const used = widths.reduce((sum, width) => sum + width, 0);\n if (used > room + 0.5) {\n context.d.warning(\"layout/overflow\", `The Row's children need ${Math.round(used - room)}px more than the ${Math.round(available)}px it has, at their minimum widths`, path, row.id);\n } else if (asked > room + 0.5 && ownItems.some((item) => item.shrink > 0 && item.inner > 0)) {\n context.d.warning(\"layout/shrunk\", `The Row's children's widths add up to ${Math.round(asked)}px, more than the ${Math.round(room)}px it has: they're narrowed to fit, as a browser does`, path, row.id);\n }\n }\n}\n\n/** A wrapping Row's children by line, as flexbox breaks them: at the child whose size no longer fits beside the others. */\nfunction wrappedLines(items: FlexItem[], gap: number, available: number): number[][] {\n const lines: number[][] = [];\n let used = 0;\n items.forEach((item, index) => {\n const size = Math.max(item.min, Math.min(item.max, item.base));\n const line = lines[lines.length - 1];\n if (line && used + gap + size <= available + 0.5) {\n line.push(index);\n used += gap + size;\n } else {\n lines.push([index]);\n used = size;\n }\n });\n return lines;\n}\n\ninterface FlexItem {\n /** Where it starts from, padding and border included. */\n base: number;\n /** Its base inside its padding and border: what shrinking takes from. */\n inner: number;\n min: number;\n max: number;\n grow: number;\n shrink: number;\n /** It takes its own size, and that size isn't known. */\n unknown: boolean;\n}\n\n/** A Row's child as a flex item: its base and limits, as the Page writes it (`flex: 0 1 <width>`, `0 0 auto`, or `<flex> 1 0%`, with `min-width: 0`). */\nfunction flexItem(resolved: ResolvedNode, available: number): FlexItem {\n const { style } = resolved;\n const frame = horizontalFrame(style);\n const width = toPx(style.width, available);\n // An Svg is the size it says in a Row too (the Page draws it `flex: none`), not a share of what's left.\n const own = style.flex === \"none\" || style.flex === 0 || resolved.type === \"Svg\";\n const intrinsic = own && width === null ? intrinsicWidth(resolved, available) : null;\n const base = width !== null ? width : own ? (intrinsic ?? 0) : frame;\n // Its content can't be narrower than nothing: at least its padding and border.\n const min = Math.max(frame, toPx(style.minWidth, available) ?? 0);\n const max = Math.max(min, toPx(style.maxWidth, available) ?? Number.POSITIVE_INFINITY);\n return {\n base,\n inner: Math.max(0, base - frame),\n min,\n max,\n grow: width !== null || own ? 0 : typeof style.flex === \"number\" ? style.flex : 1,\n shrink: own ? 0 : 1,\n unknown: own && width === null && intrinsic === null,\n };\n}\n\n/** CSS flexbox's widths for one line of items in `room` px (css-flexbox-1, \"Resolving Flexible Lengths\"). */\nfunction flexWidths(items: FlexItem[], room: number): number[] {\n const clamp = (item: FlexItem, width: number) => Math.max(item.min, Math.min(item.max, width));\n const sum = (values: number[]) => values.reduce((total, value) => total + value, 0);\n const hypothetical = items.map((item) => clamp(item, item.base));\n const growing = sum(hypothetical) <= room;\n const factor = (item: FlexItem) => (growing ? item.grow : item.shrink);\n const target = items.map((item) => item.base);\n const frozen = items.map((item, index) => {\n const inflexible = factor(item) === 0 || (growing ? item.base > hypothetical[index] : item.base < hypothetical[index]);\n if (inflexible) target[index] = hypothetical[index];\n return inflexible;\n });\n const initialFree = room - sum(items.map((item, index) => (frozen[index] ? target[index] : item.base)));\n\n for (let round = 0; round <= items.length && frozen.includes(false); round++) {\n const open = items.map((_, index) => index).filter((index) => !frozen[index]);\n let free = room - sum(items.map((item, index) => (frozen[index] ? target[index] : item.base)));\n // Flex factors that add up to less than 1 share only that part of the space.\n const factors = sum(open.map((index) => factor(items[index])));\n if (factors < 1 && Math.abs(initialFree * factors) < Math.abs(free)) free = initialFree * factors;\n const weights = open.map((index) => (growing ? items[index].grow : items[index].shrink * items[index].inner));\n const total = sum(weights);\n open.forEach((index, k) => {\n target[index] = items[index].base + (total > 0 ? (free * weights[k]) / total : 0);\n });\n // Clamp to the limits; freeze those that went past one, the side that went past most.\n const violation = open.map((index) => clamp(items[index], target[index]) - target[index]);\n const net = sum(violation);\n open.forEach((index, k) => {\n const past = Math.abs(net) < 1e-9 || (net > 0 ? violation[k] > 0 : violation[k] < 0);\n target[index] = clamp(items[index], target[index]);\n if (past) frozen[index] = true;\n });\n }\n return target;\n}\n\n/** Widths in whole px that add up to their rounded total (the largest remainders get the leftover px). */\nfunction roundTogether(widths: number[]): number[] {\n const floors = widths.map(Math.floor);\n let left = Math.round(widths.reduce((sum, width) => sum + width, 0)) - floors.reduce((sum, width) => sum + width, 0);\n const order = widths.map((width, index) => ({ index, rest: width - Math.floor(width) })).sort((a, b) => b.rest - a.rest || a.index - b.index);\n for (const { index } of order) {\n if (left <= 0) break;\n floors[index] += 1;\n left -= 1;\n }\n return floors;\n}\n\n/** `free` px shared by `weights`, in whole px that add up to it (the largest remainders get the leftover px). */\nfunction share(free: number, weights: number[]): number[] {\n const total = weights.reduce((sum, w) => sum + w, 0);\n const room = Math.floor(free);\n const exact = weights.map((w) => (total ? (room * w) / total : 0));\n const widths = exact.map(Math.floor);\n let left = room - widths.reduce((a, b) => a + b, 0);\n const order = exact.map((value, index) => ({ index, rest: value - Math.floor(value) })).sort((a, b) => b.rest - a.rest || a.index - b.index);\n for (const { index } of order) {\n if (left <= 0) break;\n widths[index] += 1;\n left -= 1;\n }\n return widths;\n}\n\n/**\n * A Table: its rows as wide as its content, its columns as wide as their\n * cells say (a cell spanning one column, the first that has a width), the\n * rest sharing what's left; each cell as wide as the columns it spans, its\n * padding its own or the table's `cellPadding`, its bottom border its own or\n * the table's `rowBorder` (but in the last row).\n */\nfunction resolveTable(source: Node, path: string, table: ResolvedNode, context: Context): Array<ResolvedNode | string> {\n const available = table.contentWidth;\n const rows = (source.children ?? []).flatMap((child, index) => {\n if (!isNode(child)) return [];\n const at = `${path}.children[${index}]`;\n const row = resolveNode(child, at, table.text, available, context);\n setWidth(row, available);\n const cells = (child.children ?? []).flatMap((cell, cellIndex) => {\n if (!isNode(cell)) return [];\n const resolved = resolveNode(cell, `${at}.children[${cellIndex}]`, row.text, available, context);\n if (resolved.style.padding === undefined && table.style.cellPadding !== undefined) resolved.style.padding = table.style.cellPadding;\n return [{ source: cell, resolved, at: `${at}.children[${cellIndex}]` }];\n });\n return [{ row, cells }];\n });\n\n const span = (cell: ResolvedNode) => Math.max(1, Number(cell.props.colSpan) || 1);\n const count = Math.max(0, ...rows.map(({ cells }) => cells.reduce((sum, { resolved }) => sum + span(resolved), 0)));\n let columns: number[] | null = null;\n if (available !== null && count > 0) {\n const set: Array<number | null> = new Array(count).fill(null);\n const own: boolean[] = new Array(count).fill(false);\n for (const { cells } of rows) {\n let column = 0;\n for (const { resolved } of cells) {\n if (span(resolved) === 1 && set[column] === null) {\n const width = toPx(resolved.style.width, available);\n set[column] = width === null ? null : Math.round(width);\n own[column] = typeof resolved.style.width === \"number\";\n }\n column += span(resolved);\n }\n }\n const fixed = set.reduce<number>((sum, width) => sum + (width ?? 0), 0);\n // (Each column's width is rounded: by half a pixel at most.)\n if (fixed > available + count / 2) {\n context.d.warning(\"layout/overflow\", `The Table's columns are ${Math.round(fixed - available)}px wider than the ${Math.round(available)}px it has`, path, table.id);\n }\n const free = set.map((width, index) => (width === null ? index : -1)).filter((index) => index >= 0);\n const shared = share(Math.max(0, available - fixed), free.map(() => 1));\n columns = set.map((width, index) => (width === null ? shared[free.indexOf(index)] : width));\n // Every column has a width and they don't add up to the table: they grow or shrink in proportion to fill it, as\n // the writers' shares of the table draw them (too wide is still warned about, above).\n if (free.length === 0 && fixed > 0 && Math.abs(fixed - available) > 0.5) columns = share(available, columns);\n // A column of its own px stays that wide in a narrower window, the others taking what's left: as a share of the\n // table it would shrink past its words. With no other to take it, the whole table would run past the window.\n if (free.length > 0 && own.some(Boolean)) {\n const sizes = set.map<\"px\" | \"share\" | \"free\">((width, index) => (own[index] ? \"px\" : width === null ? \"free\" : \"share\"));\n table.columnSizes = sizes;\n for (const { row } of rows) row.columnSizes = sizes;\n }\n }\n table.columns = columns;\n\n // The line between rows is each cell's bottom border, but in the last row and where a cell sets its own.\n const rowBorder = table.style.rowBorder as BorderSide | undefined;\n rows.forEach(({ cells }, index) => {\n if (!rowBorder || index === rows.length - 1) return;\n for (const { resolved } of cells) {\n const own = resolved.style.border as Border | undefined;\n if (!own?.bottom) resolved.style.border = { ...own, bottom: rowBorder };\n }\n });\n\n for (const { row, cells } of rows) {\n let column = 0;\n for (const { source: cell, resolved, at } of cells) {\n const width = columns ? columns.slice(column, column + span(resolved)).reduce((sum, w) => sum + w, 0) : null;\n column += span(resolved);\n resolved.available = width;\n setWidth(resolved, width);\n resolved.children = resolveChildren(cell, at, resolved, resolved.contentWidth, \"text\", context);\n }\n row.children = cells.map(({ resolved }) => resolved);\n }\n return rows.map(({ row }) => row);\n}\n\n/** Errors for each component the target doesn't render (custom components: for what they're made of). */\nexport function checkTarget(input: ElementsDocument, target: Target, options?: ComponentsOption | Registry): Diagnostic[] {\n const registry = registryOf(options);\n const expanded = expandDocument(input, registry);\n return checkTargetExpanded(expanded.document, target, registry, expanded.paths);\n}\n\n/** `checkTarget` for a document whose custom components are already expanded (its `paths`: each node's place in the template). */\nexport function checkTargetExpanded(document: ElementsDocument, target: Target, options?: ComponentsOption | Registry, paths?: TemplatePaths): Diagnostic[] {\n const registry = registryOf(options);\n const d = new Diagnostics();\n const visit = (node: Node, path: string) => {\n const definition = registry.get(node.type);\n if (definition && !definition.targets[target]) {\n const why = definition.unsupported?.[target];\n d.error(\"target/unsupported\", `A ${node.type} can't be rendered to ${target}${why ? `: ${why}` : \"\"}`, path, node.id);\n // What's in it goes with it: one error.\n return;\n }\n node.children?.forEach((child, index) => isNode(child) && visit(child, `${path}.children[${index}]`));\n };\n visit(document.root, \"root\");\n const templatePath = paths ? templatePathsOf(document, paths) : (path: string) => path;\n return d.list.map((diagnostic) => ({ ...diagnostic, path: templatePath(diagnostic.path) }));\n}\n","/**\n * The words of markup an Html block holds, for what can't show markup: the plain-text version, a PDF, an image. Not a\n * browser: what a browser hides (a style sheet, a script, a comment, which holds Outlook's own markup) is left out, a\n * block ends its line, a table's cells are a space apart, and the entities text uses most are read; everything else is\n * its words as written.\n */\n\nconst DROPPED = /<(style|script|head|title|template)\\b[^>]*>[\\s\\S]*?<\\/\\1\\s*>|<!--[\\s\\S]*?-->/gi;\n/** Tags that end a line (a block, a cell's row, a line break). */\nconst LINE = /<\\s*(br|\\/?(p|div|h[1-6]|li|ul|ol|tr|table|blockquote|section|article|header|footer|pre))\\b[^>]*>/gi;\n/** The end of a table's cell: its words and the next cell's are apart. */\nconst CELL = /<\\s*\\/\\s*(td|th)\\s*>/gi;\nconst TAG = /<[^>]*>/g;\nconst ENTITIES: Record<string, string> = { amp: \"&\", lt: \"<\", gt: \">\", quot: '\"', apos: \"'\", nbsp: \" \", copy: \"©\", reg: \"®\", trade: \"™\", mdash: \"—\", ndash: \"–\", hellip: \"…\", rsquo: \"’\", lsquo: \"‘\", rdquo: \"”\", ldquo: \"“\", bull: \"•\", middot: \"·\", euro: \"€\", pound: \"£\" };\n\nconst decode = (text: string) =>\n text.replace(/&(#x[0-9a-f]+|#\\d+|[a-z]+);/gi, (match, name: string) => {\n if (name[0] !== \"#\") return Object.prototype.hasOwnProperty.call(ENTITIES, name.toLowerCase()) ? ENTITIES[name.toLowerCase()] : match;\n const code = name[1] === \"x\" || name[1] === \"X\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n return code > 0 && code <= 0x10ffff ? String.fromCodePoint(code) : match;\n });\n\n/** Markup's words, a line for each block, blank lines between none. */\nexport function markupText(html: string): string {\n const text = decode(html.replace(DROPPED, \"\").replace(LINE, \"\\n\").replace(CELL, \" \").replace(TAG, \"\"));\n return text\n .split(\"\\n\")\n .map((line) => line.replace(/[ \\t\\r\\f\\v\\u00a0]+/g, \" \").trim())\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/** An Html block's plain text: its own, else its markup's words. */\nexport function htmlText(node: { props: Record<string, unknown> }): string {\n return (typeof node.props.text === \"string\" ? node.props.text : markupText(String(node.props.html ?? \"\"))).trim();\n}\n","/**\n * Writing markup and CSS from resolved values: escaping, and each value kind\n * as CSS. Shared by every HTML target.\n */\nimport type { Border, BorderSide, FontFamily, Insets, LineHeight, Radius } from \"../../kinds\";\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode, ResolvedText } from \"../../resolve\";\n\n/** A width as a share of `of`, in %. */\nexport const share = (width: number, of: number) => `${Math.round((width / of) * 1e4) / 100}%`;\n\n/** A Table's column as a share of the table, unless it has columns that keep their own px. */\nexport function columnWidth(table: ResolvedNode, width: number, index: number, total: number): number | string {\n const size = table.columnSizes?.[index] ?? \"share\";\n return size === \"px\" ? width : size === \"free\" ? \"auto\" : share(width, total);\n}\n\nexport function escapeText(text: string): string {\n return text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\nexport function escapeAttr(value: string): string {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/'/g, \"'\");\n}\n\n/** An HTML attribute list, skipping absent values. */\nexport function attrs(values: Record<string, string | number | undefined | null | false>): string {\n return Object.entries(values)\n .filter(([, value]) => value !== undefined && value !== null && value !== false)\n .map(([name, value]) => ` ${name}=\"${escapeAttr(String(value))}\"`)\n .join(\"\");\n}\n\nexport type Declarations = Array<[string, string | number | undefined]>;\n\n/** Declarations as a style attribute's text, skipping absent values. */\nexport function css(declarations: Declarations, important = false): string {\n return declarations\n .filter((d): d is [string, string | number] => d[1] !== undefined && d[1] !== \"\")\n .map(([property, value]) => `${property}:${shortColors(String(value))}${important ? \"!important\" : \"\"}`)\n .join(\";\");\n}\n\n/** `#ffffff` as `#fff` wherever it's the same color: bytes count in email (Gmail clips at 102 KB). */\nexport function shortColors(value: string): string {\n return value.replace(/#([0-9a-f])\\1([0-9a-f])\\2([0-9a-f])\\3(?![0-9a-f])/gi, \"#$1$2$3\");\n}\n\n/** A style attribute, or nothing when there's no style. */\nexport function styleAttr(declarations: Declarations): string {\n const text = css(declarations);\n return text ? ` style=\"${escapeAttr(text)}\"` : \"\";\n}\n\nexport const px = (value: number): string => (value === 0 ? \"0\" : `${Math.round(value * 100) / 100}px`);\n\n/** A length from a document (a number of px, or \"50%\"). */\nexport function length(value: Json | undefined): string | undefined {\n if (value === undefined || value === null) return undefined;\n return typeof value === \"number\" ? px(value) : String(value);\n}\n\nexport function insets(value: Json | undefined): string | undefined {\n if (!value) return undefined;\n const { top, right, bottom, left } = value as Insets;\n if (top === right && right === bottom && bottom === left) return px(top);\n if (top === bottom && right === left) return `${px(top)} ${px(right)}`;\n return `${px(top)} ${px(right)} ${px(bottom)} ${px(left)}`;\n}\n\nconst side = (s: BorderSide) => `${px(s.width)} ${s.style} ${s.color}`;\n\nexport function border(value: Json | undefined): Declarations {\n if (!value) return [];\n const b = value as Border;\n const sides = ([\"top\", \"right\", \"bottom\", \"left\"] as const).filter((key) => b[key]);\n if (sides.length === 4 && sides.every((key) => side(b[key]!) === side(b.top!))) return [[\"border\", side(b.top!)]];\n return sides.map((key) => [`border-${key}`, side(b[key]!)]);\n}\n\nexport function radius(value: Json | undefined): string | undefined {\n if (value === undefined) return undefined;\n const r = value as Radius;\n return typeof r === \"number\" ? px(r) : `${px(r.topLeft)} ${px(r.topRight)} ${px(r.bottomRight)} ${px(r.bottomLeft)}`;\n}\n\n/** A font stack, as written (validated: nothing that could end a declaration). */\nexport function fontFamily(value: FontFamily): string {\n return value;\n}\n\nexport function lineHeight(value: LineHeight): string {\n return typeof value === \"number\" ? String(value) : value;\n}\n\nconst TEXT_CSS: Array<[keyof ResolvedText, string, (value: never) => string]> = [\n [\"color\", \"color\", (v: string) => v],\n [\"fontFamily\", \"font-family\", fontFamily],\n [\"fontSize\", \"font-size\", px],\n [\"fontWeight\", \"font-weight\", (v: number) => String(v)],\n [\"fontStyle\", \"font-style\", (v: string) => v],\n [\"lineHeight\", \"line-height\", lineHeight],\n [\"letterSpacing\", \"letter-spacing\", px],\n [\"textAlign\", \"text-align\", (v: string) => v],\n [\"textTransform\", \"text-transform\", (v: string) => v],\n];\n\nconst same = (a: unknown, b: unknown) => a === b || JSON.stringify(a) === JSON.stringify(b);\n\n/**\n * The text styles that differ from what's inherited (all of them without a\n * parent), plus those in `always` (what a browser's own styles would change:\n * a heading's size and weight, a link's color).\n */\nexport function textDeclarations(text: ResolvedText, parent: ResolvedText | undefined, always: ReadonlyArray<keyof ResolvedText> = []): Declarations {\n const out: Declarations = [];\n for (const [key, property, write] of TEXT_CSS) {\n if (!parent || always.includes(key) || !same(text[key], parent[key])) out.push([property, write(text[key] as never)]);\n }\n return out;\n}\n\n/** The value of a text style as CSS, for overrides (phones, hover). */\nexport function textValue(key: string, value: Json): string | undefined {\n const entry = TEXT_CSS.find(([k]) => k === key);\n return entry ? entry[2](value as never) : undefined;\n}\n","/**\n * JSX that writes HTML strings, for the email and page components: no React, no DOM.\n *\n * <td align=\"center\" style={{ padding: node.style.padding, fontSize: 0 }}>{label}</td>\n *\n * - Text and attribute values are escaped, always: what users write can't add markup.\n * - `style` is an object (or a list of objects and `[property, value]` pairs, merged in order).\n * Properties are camelCase (`msoPaddingAlt` is `mso-padding-alt`); a value is written by its\n * property: a number in px (unitless for `fontWeight`, `lineHeight`, `flex`), padding and\n * radius from their objects, a border from its sides, one side (`borderTop`) from its own. Empty values are left out. Colors are\n * shortened (`#ffffff` is `#fff`). `style` is always the last attribute.\n * - Attributes with no value (`undefined`, `null`, `false`) are left out.\n * - `phone={style}` and `hover={style}` are styles for phones and on hover: each is a rule in the\n * render's stylesheet, under a class named after it, added to the element's classes. `class`\n * takes a name or a list of names (empty ones left out). The classes are written in the order\n * these props are, where the first of them that has one is.\n * - `<Outlook>` and `<NotOutlook>` write conditional comments; `<Merged>` puts neighbouring\n * comments of a kind into one; `open()` and `close()` write an element's tags apart, for\n * Outlook's tables that open in one comment and close in another.\n *\n * Core's tsconfig sets `jsxFactory: \"h\"` and `jsxFragmentFactory: \"Fragment\"`; each\n * `.tsx` file imports them from here.\n */\nimport { HOVER, MOBILE } from \"../conditions\";\nimport type { Level, Media, Stylesheet } from \"./shared/classes\";\nimport { border, css, escapeAttr, escapeText, insets, px, radius, type Declarations } from \"./shared/css\";\n\n// ─── The render's stylesheet ────────────────────────────────────────────────\n\nconst sheets: Stylesheet[] = [];\n\n/** Writes markup with `sheet` as the stylesheet its `phone`, `hover` and `rule()` classes go in. */\nexport function withStylesheet<T>(sheet: Stylesheet, write: () => T): T {\n sheets.push(sheet);\n try {\n return write();\n } finally {\n sheets.pop();\n }\n}\n\n/** The class of a rule in the render's stylesheet (`&` is where the class goes: `&>div{…}`). */\nexport function rule(media: Media, text: string, level: Level = \"own\"): string {\n const sheet = sheets[sheets.length - 1];\n if (!sheet) throw new Error(\"[Elements] Markup with phone or hover styles is written inside withStylesheet()\");\n return sheet.classFor(media, text, level);\n}\n\ntype Kind = \"outlook\" | \"notOutlook\";\n\n/** Markup: an element, a list of pieces (a fragment), or what's inside a conditional comment. */\nexport class Html {\n constructor(\n readonly markup: string,\n readonly options: { kind?: Kind; list?: Html[]; start?: string } = {}\n ) {}\n\n toString(): string {\n const { kind, list } = this.options;\n if (list) return list.join(\"\");\n if (kind === \"outlook\") return `<!--[if mso]>${this.markup}<![endif]-->`;\n if (kind === \"notOutlook\") return `<!--[if !mso]><!-->${this.markup}<!--<![endif]-->`;\n return this.markup;\n }\n}\n\nexport type Child = Html | string | number | boolean | null | undefined | readonly Child[];\n\nexport interface Style {\n [property: string]: unknown;\n}\nexport type StyleValue = Style | Declarations | Declarations[number] | readonly StyleValue[] | false | null | undefined;\n\ntype Attribute = string | number | boolean | null | undefined;\ntype Component<P> = (props: P & { children?: Child }) => Html;\n\n/** Markup written as it is: only for markup the writers make themselves. */\nexport const raw = (markup: string) => new Html(markup);\n\n/** Children as pieces: text escaped, fragments opened, nothing for `null`, `undefined` and booleans. */\nfunction pieces(children: Child, out: Html[] = []): Html[] {\n if (children === null || children === undefined || typeof children === \"boolean\") return out;\n if (Array.isArray(children)) {\n for (const child of children as readonly Child[]) pieces(child, out);\n } else if (children instanceof Html) {\n if (children.options.list) out.push(...children.options.list);\n else out.push(children);\n } else out.push(new Html(escapeText(String(children))));\n return out;\n}\n\nconst VOID = new Set([\"img\", \"br\", \"hr\", \"meta\", \"link\", \"col\", \"wbr\"]);\nconst UNITLESS = new Set([\"fontWeight\", \"lineHeight\", \"flex\", \"flexGrow\", \"flexShrink\", \"opacity\", \"zIndex\", \"order\"]);\nconst kebab = (key: string) => key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n\nfunction declaration(key: string, value: unknown, out: Declarations): void {\n if (value === undefined || value === null || value === false) return;\n if (key === \"border\" && typeof value === \"object\") out.push(...border(value as never));\n else if (key === \"padding\" && typeof value === \"object\") out.push([\"padding\", insets(value as never)]);\n else if (key === \"borderRadius\" && typeof value !== \"string\") out.push([\"border-radius\", radius(value as never)]);\n else if (/^border(Top|Right|Bottom|Left)$/.test(key) && typeof value === \"object\") {\n const side = value as { width: number; style: string; color: string };\n out.push([kebab(key), `${px(side.width)} ${side.style} ${side.color}`]);\n }\n else if (typeof value === \"number\") out.push([kebab(key), UNITLESS.has(key) ? String(value) : px(value)]);\n else out.push([kebab(key), String(value)]);\n}\n\n/** A `[property, value]` pair, as opposed to a list of styles. */\nconst isPair = (value: readonly unknown[]): value is [string, string | number | undefined] => value.length === 2 && typeof value[0] === \"string\";\n\nfunction declarations(style: StyleValue, out: Declarations = []): Declarations {\n if (!style) return out;\n if (Array.isArray(style)) {\n if (isPair(style)) out.push(style);\n else for (const item of style as readonly StyleValue[]) declarations(item, out);\n } else for (const [key, value] of Object.entries(style as Style)) declaration(key, value, out);\n return out;\n}\n\n/** A style's CSS text, as written in a `style` attribute or a stylesheet rule. */\nexport function styleText(style: StyleValue, important = false): string {\n return css(declarations(style), important);\n}\n\n/** A `class`, `phone`, `hover` or `hoverWithin` (a box around a focusable element: its hover while that has focus) prop's class names. */\nfunction classesOf(name: string, value: unknown): string[] {\n if (name === \"class\") return (Array.isArray(value) ? value : [value]).filter((v): v is string => typeof v === \"string\" && v !== \"\");\n const text = styleText(value as StyleValue, true);\n if (!text) return [];\n if (name === \"phone\") return [rule(MOBILE.sheet.media, `${MOBILE.sheet.selector}{${text}}`)];\n const selector = name === \"hoverWithin\" ? (HOVER.sheet.within ?? HOVER.sheet.selector) : HOVER.sheet.selector;\n return [rule(HOVER.sheet.media, `${selector}{${text}}`, HOVER.sheet.level)];\n}\n\nfunction attributes(props: Record<string, unknown>): string {\n const out: string[] = [];\n const classes: string[] = [];\n let slot = -1;\n for (const [name, value] of Object.entries(props)) {\n if (name === \"children\" || name === \"style\" || value === undefined || value === null || value === false) continue;\n if (name === \"class\" || name === \"phone\" || name === \"hover\" || name === \"hoverWithin\") {\n const found = classesOf(name, value);\n if (found.length && slot < 0) slot = out.push(\"\") - 1;\n classes.push(...found);\n continue;\n }\n out.push(` ${name}=\"${escapeAttr(String(value))}\"`);\n }\n if (slot >= 0) out[slot] = ` class=\"${escapeAttr(classes.join(\" \"))}\"`;\n const style = styleText(props.style as StyleValue);\n return style ? `${out.join(\"\")} style=\"${escapeAttr(style)}\"` : out.join(\"\");\n}\n\n/** `element` with an `id` as its first attribute, unless `id` is empty. */\nexport function withId(element: Html, id: string | undefined): Html {\n if (!id) return element;\n const tag = /^<[a-zA-Z0-9]+/.exec(element.markup)?.[0];\n if (!tag) throw new Error(\"[Elements] An id goes on an element\");\n const insert = (markup: string) => `${tag} id=\"${escapeAttr(id)}\"${markup.slice(tag.length)}`;\n return new Html(insert(element.markup), { ...element.options, start: element.options.start && insert(element.options.start) });\n}\n\nexport function h(type: string | Component<any>, props: Record<string, unknown> | null, ...children: Child[]): Html {\n const all = props ?? {};\n if (typeof type === \"function\") return type({ ...all, children });\n const start = `<${type}${attributes(all)}>`;\n if (VOID.has(type)) return new Html(start);\n return new Html(`${start}${pieces(children).join(\"\")}</${type}>`, { start });\n}\n\nexport function Fragment({ children }: { children?: Child }): Html {\n return new Html(\"\", { list: pieces(children) });\n}\n\n/** What only classic Outlook reads (`<!--[if mso]>`). */\nexport const Outlook = ({ children }: { children?: Child }) => new Html(pieces(children).join(\"\"), { kind: \"outlook\" });\n\nconst OUTLOOK_ONLY = /<!--\\[if mso\\]>[\\s\\S]*?<!\\[endif\\]-->/g;\nconst NOT_OUTLOOK_MARKS = /<!--\\[if !mso\\]><!-->|<!--<!\\[endif\\]-->/g;\n\n/**\n * What every client but classic Outlook reads (`<!--[if !mso]><!-->`). Conditional comments can't nest:\n * Outlook ends what it skips at the first `<![endif]>`, and would show the rest. So inside, Outlook's own\n * markup is left out (Outlook never sees any of it) and the inner comments of this kind are unwrapped.\n */\nexport const NotOutlook = ({ children }: { children?: Child }) =>\n new Html(pieces(children).join(\"\").replace(OUTLOOK_ONLY, \"\").replace(NOT_OUTLOOK_MARKS, \"\"), { kind: \"notOutlook\" });\n\n/** Its children, with neighbouring conditional comments of a kind written as one. */\nexport function Merged({ children }: { children?: Child }): Html {\n const out: Html[] = [];\n for (const piece of pieces(children)) {\n const last = out[out.length - 1];\n if (piece.options.kind && last?.options.kind === piece.options.kind) out[out.length - 1] = new Html(last.markup + piece.markup, { kind: piece.options.kind });\n else out.push(piece);\n }\n return new Html(\"\", { list: out });\n}\n\n/** An element's start tag alone. */\nexport const open = (element: Html) => new Html(element.options.start ?? element.markup);\n\n/** An element's end tag alone. */\nexport const close = (tag: string) => new Html(`</${tag}>`);\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport declare namespace h {\n namespace JSX {\n type Element = Html;\n interface ElementChildrenAttribute {\n children: unknown;\n }\n interface IntrinsicElements {\n [tag: string]: { style?: StyleValue; phone?: StyleValue; hover?: StyleValue; hoverWithin?: StyleValue; class?: string | ReadonlyArray<string | undefined>; children?: Child } & {\n [attribute: string]: Attribute | StyleValue | Child | ReadonlyArray<string | undefined>;\n };\n }\n }\n}\n","/**\n * Where each block of an Email is in its HTML, for render()'s `blockMap`: a tool that previews the email (marking each\n * block, then reading where each one is drawn) finds the template path of what it draws.\n *\n * While the email is written, each node's markup gets a mark just after the tag name of its outermost element (the\n * first one every client but classic Outlook reads, else the first in Outlook's own markup): two Unicode\n * noncharacters around the node's number. Once it's written the marks are taken out, so the HTML is the same bytes as\n * without them, and where each one was is its block's offset. A template whose own text holds those noncharacters\n * would be misread: it's written again with another pair.\n */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { Html } from \"../jsx\";\n\n/** The format of render()'s `blocks`, kept by hand: raised only when the format changes (not the package's version). */\nexport const BLOCK_MAP_VERSION = 1;\n\nexport interface BlockMapEntry {\n /** The block's place in the template (`root.children[2]`), as diagnostics give it. */\n path: string;\n /** Its `id`, where it has one. */\n nodeId?: string;\n /** The UTF-8 byte offset in `html` just after its outermost element's tag name (`<table`, `<div`). */\n offset: number;\n}\n\nexport interface BlockMap {\n /** `BLOCK_MAP_VERSION`. */\n version: number;\n /** What `offset` counts: bytes of the HTML in UTF-8. */\n unit: \"utf8\";\n /** Each block written as an element, in the order of their offsets (blocks at one offset: the outer first). */\n entries: BlockMapEntry[];\n}\n\n/** How many pairs of noncharacters there are to mark with (U+FDD0 to U+FDEF). */\nexport const MARK_PAIRS = 16;\n\n/** The marks of one writing of an email: the nodes marked, by number, and the pair of characters around each number. */\nexport class BlockMarks {\n readonly nodes: ResolvedNode[] = [];\n readonly open: string;\n readonly close: string;\n constructor(pair: number) {\n this.open = String.fromCharCode(0xfdd0 + pair * 2);\n this.close = String.fromCharCode(0xfdd1 + pair * 2);\n }\n}\n\nlet current: BlockMarks | null = null;\n\n/** Writes with `marks` collecting each block's mark (none where it's null). */\nexport function withBlockMarks<T>(marks: BlockMarks | null, write: () => T): T {\n const before = current;\n current = marks;\n try {\n return write();\n } finally {\n current = before;\n }\n}\n\n/** `html`, a node's markup, with the node's mark just after its outermost element's tag name; as it is where nothing is collecting. */\nexport function markBlock(html: Html, node: ResolvedNode): Html {\n if (!current) return html;\n const mark = `${current.open}${current.nodes.length}${current.close}`;\n const marked = insert(html, mark, false) ?? insert(html, mark, true);\n if (!marked) return html;\n current.nodes.push(node);\n return marked;\n}\n\nconst OUTLOOK_OPEN = \"<!--[if mso]>\";\nconst OUTLOOK_CLOSE = \"<![endif]-->\";\nconst TAG = /<[a-zA-Z][a-zA-Z0-9]*/y;\n\n/** Where the first element's tag name ends in `markup`: outside Outlook-only comments, or (`outlook`) anywhere. -1 if none. */\nfunction tagEnd(markup: string, outlook: boolean): number {\n for (let i = markup.indexOf(\"<\"); i >= 0; i = markup.indexOf(\"<\", i + 1)) {\n if (markup.startsWith(OUTLOOK_OPEN, i)) {\n if (outlook) {\n i += OUTLOOK_OPEN.length - 1;\n continue;\n }\n const end = markup.indexOf(OUTLOOK_CLOSE, i);\n if (end < 0) return -1;\n i = end + OUTLOOK_CLOSE.length - 1;\n continue;\n }\n // Other comments, `<!--[if !mso]><!-->` and `<!--<![endif]-->` among them.\n if (markup.startsWith(\"<!--\", i)) {\n const end = markup.indexOf(\"-->\", i + 4);\n if (end < 0) return -1;\n i = end + 2;\n continue;\n }\n TAG.lastIndex = i;\n const tag = TAG.exec(markup);\n if (tag) return i + tag[0].length;\n }\n return -1;\n}\n\n/** `html` with `mark` put where its first element's tag name ends (outside Outlook-only markup, unless `outlook`), keeping its pieces and their kinds. */\nfunction insert(html: Html, mark: string, outlook: boolean): Html | null {\n const { list, kind, start } = html.options;\n if (list) {\n for (let i = 0; i < list.length; i++) {\n const marked = insert(list[i]!, mark, outlook);\n if (marked) return new Html(html.markup, { ...html.options, list: list.map((piece, j) => (j === i ? marked : piece)) });\n }\n return null;\n }\n if (kind === \"outlook\" && !outlook) return null;\n const at = tagEnd(html.markup, outlook);\n if (at < 0) return null;\n const put = (text: string) => text.slice(0, at) + mark + text.slice(at);\n return new Html(put(html.markup), { ...html.options, start: start !== undefined && at <= start.length ? put(start) : start });\n}\n\n/**\n * The written markup without its marks, and where each was (a character index in it), in order; null where the\n * template's own text holds the pair (a mark repeated, unknown or not just after a tag name, or the pair left over).\n */\nexport function readMarks(marks: BlockMarks, written: string): { text: string; found: Array<{ node: ResolvedNode; at: number }> } | null {\n const found: Array<{ node: ResolvedNode; at: number }> = [];\n const seen = new Set<number>();\n const pieces: string[] = [];\n let length = 0;\n let last = 0;\n for (const match of written.matchAll(new RegExp(`${marks.open}(\\\\d+)${marks.close}`, \"g\"))) {\n const index = Number(match[1]);\n const node = marks.nodes[index];\n if (!node || seen.has(index)) return null;\n seen.add(index);\n const before = written.slice(last, match.index);\n pieces.push(before);\n length += before.length;\n last = match.index! + match[0].length;\n if (!/<[a-zA-Z][a-zA-Z0-9]*$/.test(written.slice(Math.max(0, match.index! - 32), match.index).replace(new RegExp(`${marks.open}\\\\d+${marks.close}`, \"g\"), \"\"))) return null;\n found.push({ node, at: length });\n }\n pieces.push(written.slice(last));\n const text = pieces.join(\"\");\n if (text.includes(marks.open) || text.includes(marks.close)) return null;\n return { text, found };\n}\n","/**\n * A string's size in UTF-8, counted from its characters: without TextEncoder, which some places a render runs don't\n * have (Jest's jsdom environment).\n */\nexport function utf8Bytes(text: string): number {\n let bytes = 0;\n for (let i = 0; i < text.length; i++) {\n const code = text.charCodeAt(i);\n if (code < 0x80) bytes += 1;\n else if (code < 0x800) bytes += 2;\n // A surrogate pair is one character of 4 bytes.\n else if (code >= 0xd800 && code <= 0xdbff && i + 1 < text.length) {\n bytes += 4;\n i++;\n } else bytes += 3;\n }\n return bytes;\n}\n","/**\n * The stylesheet: what inline styles can't do (phone overrides, hiding, hover,\n * a Row stacking on phones), each rule under a class named after its content.\n * The same rule always gets the same short name (`e` and five characters), so\n * nodes with the same rule share it, a template renders the same every time,\n * and two renders on one page (or a block pasted into another email) can't\n * give one name two meanings.\n */\n\n/** \"hiding\": what's hidden or shown by width, which a template may start at another width than its phone styles. */\nexport type Media = \"all\" | \"phone\" | \"desktop\" | \"hiding\";\n\n/**\n * Which rule wins where two set the same property on one element with the\n * same specificity (CSS takes the later one): a layout's rules for its\n * children (a Row stacking them on phones) come first, a node's own rules\n * (its phone styles, hiding) after them, so what the author set on the node\n * wins, then hover. The order rules are made in doesn't matter.\n */\nexport type Level = \"layout\" | \"own\" | \"hover\";\nconst LEVELS: Level[] = [\"layout\", \"own\", \"hover\"];\n\n/** A 32-bit FNV-1a hash: small, fast, and the same everywhere. */\nfunction fnv1a(text: string): number {\n let hash = 0x811c9dc5;\n for (let i = 0; i < text.length; i++) {\n hash ^= text.charCodeAt(i);\n hash = Math.imul(hash, 0x01000193);\n }\n return hash >>> 0;\n}\n\n/** What a class prefix may be: it starts every class name. */\nexport const CLASS_PREFIX = /^[a-zA-Z][a-zA-Z0-9_-]*$/;\n\nexport class Stylesheet {\n private readonly names = new Map<string, string>();\n private readonly keys = new Map<string, string>();\n private readonly rules: Record<Media, Array<{ level: Level; text: string }>> = { all: [], phone: [], desktop: [], hiding: [] };\n\n constructor(private readonly prefix = \"e\") {\n if (!CLASS_PREFIX.test(prefix)) throw new Error(`[Elements] A class prefix starts with a letter and holds letters, digits, \"_\" and \"-\", not ${JSON.stringify(prefix)}`);\n }\n\n /**\n * The class for `rule`, written with `&` where the class goes (`&{…}`,\n * `&:hover{…}`, `&>*{…}`), under `media`, at `level`.\n */\n classFor(media: Media, rule: string, level: Level = \"own\"): string {\n const key = `${media}\\n${rule}`;\n const known = this.names.get(key);\n if (known) return known;\n const hash = fnv1a(key).toString(36).padStart(7, \"0\");\n // Two rules of one render with the same five characters: the later one takes more of its hash.\n let name = `${this.prefix}${hash.slice(-5)}`;\n for (let size = 6; this.keys.has(name); size++) name = size <= 7 ? `${this.prefix}${hash.slice(-size)}` : `${name}x`;\n this.names.set(key, name);\n this.keys.set(name, key);\n this.rules[media].push({ level, text: rule.replace(/&/g, `.${name}`) });\n return name;\n }\n\n /**\n * The rules, with the queries that say what a phone and a desktop are: by media, then by level, then in the order\n * they were made. Without queries (`null`), what's of a fixed size (a Canvas, a Document) has no phone: its phone\n * rules are left out, and its desktop rules always apply.\n */\n css(phone: string | null, desktop: string | null, hiding: string | null = phone): string {\n const ordered = (media: Media) =>\n LEVELS.flatMap((level) => this.rules[media].filter((rule) => rule.level === level))\n .map((rule) => rule.text)\n .join(\"\");\n return [\n ordered(\"all\"),\n ...(this.rules.desktop.length ? [desktop === null ? ordered(\"desktop\") : `${desktop}{${ordered(\"desktop\")}}`] : []),\n ...(this.rules.phone.length && phone !== null ? [`${phone}{${ordered(\"phone\")}}`] : []),\n ...(this.rules.hiding.length && hiding !== null ? [`${hiding}{${ordered(\"hiding\")}}`] : []),\n ].join(\"\");\n }\n}\n","/**\n * Web fonts: the root's `fonts` as `@font-face` rules, each face once, in the\n * order declared. Shared by every HTML target.\n */\nimport type { FontFace, FontFormat } from \"../../kinds\";\nimport type { ResolvedNode } from \"../../resolve\";\n\n/** A CSS string, with what could end it or the stylesheet escaped. */\nconst cssString = (value: string) => `\"${value.replace(/[\\\\\"\\n\\r<>]/g, (c) => `\\\\${c.charCodeAt(0).toString(16)} `)}\"`;\n\n/** A file's format from its extension, where the face doesn't say. */\nfunction formatOf(face: FontFace): FontFormat | undefined {\n if (face.format) return face.format;\n const extension = /\\.(woff2|woff|ttf|otf)(?:[?#]|$)/i.exec(face.src)?.[1].toLowerCase();\n return extension === \"ttf\" ? \"truetype\" : extension === \"otf\" ? \"opentype\" : (extension as FontFormat | undefined);\n}\n\n/** `swap`: show the text in a fallback until the font loads (browsers; email clients load fonts before they show). */\nexport function fontFaces(root: ResolvedNode, { swap }: { swap: boolean }): string[] {\n const faces = new Map<string, string>();\n for (const face of (root.props.fonts as FontFace[] | undefined) ?? []) {\n const format = formatOf(face);\n const weight = Array.isArray(face.weight) ? face.weight.join(\" \") : face.weight;\n const rule = [\n `font-family:${cssString(face.family)}`,\n `src:url(${cssString(face.src)})${format ? ` format(${cssString(format)})` : \"\"}`,\n weight !== undefined ? `font-weight:${weight}` : \"\",\n face.style ? `font-style:${face.style}` : \"\",\n swap ? \"font-display:swap\" : \"\",\n ]\n .filter(Boolean)\n .join(\";\");\n faces.set(rule, `@font-face{${rule}}`);\n }\n return [...faces.values()];\n}\n","/**\n * What the email components get: one props object per node, with\n * what every component needs worked out (its styles, its phone text styles, its\n * text), and `render()` for its children, so components don't import each\n * other.\n */\nimport { shownAnywhere } from \"../../conditions\";\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport type { Html } from \"../jsx\";\nimport type { Declarations } from \"../shared/css\";\n\nexport interface EmailOptions {\n /** How a merge tag is written (default `{{name}}`): into the HTML as it is, the name in it escaped. */\n mergeTag?: (name: string) => string;\n /** What every class name in the stylesheet starts with (default \"e\"). */\n classPrefix?: string;\n /** The window's width in px at and below which what's hidden on phones is (default: where its phone styles start). */\n hideBelow?: number;\n}\n\nexport interface Props {\n node: ResolvedNode;\n /** Its styles, its component's defaults included. */\n style: Record<string, Json>;\n /** Its own phone styles (empty where it has none). */\n mobile: Record<string, Json>;\n parent: ResolvedNode;\n /** Its cell is exactly its width (a Row's child), so it fills it rather than placing itself. */\n fill: boolean;\n /** Inside text. */\n inline: boolean;\n /** The phone text styles of its text: its own, and its parents' where it doesn't set them itself (a run inside text: its own only, as CSS carries the text's to it). */\n phoneText: Declarations;\n /** Its text, and the runs in it. */\n text(): Html;\n /** Whether its text runs right to left: its own `dir`, else its parent's (the root's `dir` to start with). */\n rtl: boolean;\n /** Writes a child: a block (with `fill` where its cell is exactly its width), or with `inline`, a run inside text. */\n render(child: ResolvedNode, how?: { fill?: boolean; inline?: boolean }): Html;\n options: EmailOptions;\n}\n\n/** A component's markup in this output, from its props. */\nexport type Component = (props: Props) => Html;\n\nexport const isNode = (child: ResolvedNode | string): child is ResolvedNode => typeof child !== \"string\";\nexport const shown = (node: ResolvedNode) => shownAnywhere(node);\n","import { linkParts, type LinkValue } from \"../../kinds\";\nimport type { Json } from \"../../model\";\n\n/** A link's attributes, from its props: `href`, `target` with `rel` where it opens a new window, `title` and `aria-label`, and any others it has (`attrs`). */\nexport function link(props: Record<string, Json>): { href: string; target?: string; rel?: string; title?: string; \"aria-label\"?: string; class?: string } {\n const { href, target } = linkParts(props.href as LinkValue);\n return {\n href,\n target,\n rel: target === \"_blank\" ? \"noopener noreferrer\" : undefined,\n title: props.title as string | undefined,\n \"aria-label\": props[\"aria-label\"] as string | undefined,\n ...(props.attrs as Record<string, string> | undefined),\n };\n}\n","/** Email markup: layout tables, and colors as Word reads them. */\nimport type { Json } from \"../../model\";\nimport { close, Fragment, h, open, Outlook, type Child, type Html, type Style, type StyleValue } from \"../jsx\";\n\n/** What every layout table has: no role for screen readers, no spacing, no border. */\nexport const TABLE = { role: \"presentation\", cellpadding: \"0\", cellspacing: \"0\", border: \"0\" };\n\ntype TableProps = { id?: string; role?: string; class?: string | Array<string | undefined>; phone?: StyleValue; width?: string | number; bgcolor?: string; style?: StyleValue; children?: Child };\n\n/** A layout table (`role` presentation, unless it says otherwise); an author's `id` first. */\nexport function Table({ children, style, ...attributes }: TableProps) {\n return (\n <table id={attributes.id} {...TABLE} {...attributes} style={style}>\n {children}\n </table>\n );\n}\n\n/**\n * What a table is whose cell has a border or corners of its own: its borders apart, as the stylesheet's\n * `border-collapse` (the editor's, against gaps between cells in Word) would square off its corners and move its border.\n */\nexport const ownBorders = (...styles: Array<Record<string, unknown> | undefined>) => (styles.some((style) => style?.border !== undefined || style?.borderTop !== undefined || style?.borderRadius !== undefined) ? \"separate\" : undefined);\n\n/** The content's width for classic Outlook, in a table of that width around it, centered, as the editor's email has it. */\nexport function OutlookWidth({ width, children }: { width: number; children?: Child }) {\n return (\n <>\n <Outlook>\n {open(<table {...TABLE} width={width} align=\"center\" />)}\n {open(<tr />)}\n {open(<td />)}\n </Outlook>\n {children}\n <Outlook>\n {close(\"td\")}\n {close(\"tr\")}\n {close(\"table\")}\n </Outlook>\n </>\n );\n}\n\n/** A color Word reads as a `bgcolor` attribute (hex only). */\nexport const bgcolor = (value: Json | undefined) => (typeof value === \"string\" && /^#[0-9a-f]{3}([0-9a-f]{3})?$/i.test(value) ? value : undefined);\n\n/**\n * A picture as a cell's background: `background` and CSS for the clients that take either, a VML rectangle around the\n * cell's content for classic Outlook, which takes neither. Of a fixed height, or fitted to its content. A background\n * has no alternate text: the rectangle has `alt`.\n */\nexport function pictureCell(\n src: string,\n { width, height, color, alt, repeat, position, size }: { width: number; height?: number; color?: string; alt?: string; repeat?: string; position?: string; size?: string }\n): { background: string; style: Style; open: Html; close: Html } {\n return {\n background: src,\n style: { backgroundImage: `url(\"${src.replace(/\"/g, \"%22\")}\")`, backgroundSize: size, backgroundPosition: position, backgroundRepeat: repeat },\n open: (\n <Outlook>\n {open(h(\"v:rect\", { \"xmlns:v\": \"urn:schemas-microsoft-com:vml\", fill: \"true\", stroke: \"false\", alt, style: { width, height } }))}\n {h(\"v:fill\", { type: \"frame\", src, color })}\n {open(h(\"v:textbox\", { inset: \"0,0,0,0\", style: height === undefined ? { msoFitShapeToText: \"true\" } : undefined }))}\n </Outlook>\n ),\n close: (\n <Outlook>\n {close(\"v:textbox\")}\n {close(\"v:rect\")}\n </Outlook>\n ),\n };\n}\n","/**\n * Email styles: text as every client needs it (on the element with the text,\n * line heights in px), phone text styles inherited down to the text, and\n * hiding on phones or desktop.\n */\nimport { lineHeightPx, type ResolvedNode } from \"../../resolve\";\nimport type { Json } from \"../../model\";\nimport { rule, type Style } from \"../jsx\";\nimport { fontFamily, px, textDeclarations, textValue, type Declarations } from \"../shared/css\";\n\n/** Text styles a phone override changes, inherited down to the text that doesn't set them itself. */\nexport type MobileText = Record<string, Json>;\nconst TEXT_KEYS = [\"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"lineHeight\", \"letterSpacing\", \"textAlign\", \"textTransform\"];\n\n/** Hidden on phones: a class. Hidden on desktop: inline, and shown on phones by a class (`display` is how it shows). */\nexport function hiding(node: Pick<ResolvedNode, \"hidden\">, display: string): { class?: string; style: Style } {\n if (node.hidden?.mobile) return { class: rule(\"hiding\", \"&{display:none!important}\"), style: {} };\n if (node.hidden?.desktop) return { class: rule(\"hiding\", `&{display:${display}!important}`), style: { display: \"none\" } };\n return { style: {} };\n}\n\n/** The phone text styles of a node's own text: its own overrides, and its parents' where it doesn't set the style itself. */\nexport function mobileTextOf(node: ResolvedNode, inherited: MobileText): MobileText {\n const out: MobileText = {};\n for (const key of TEXT_KEYS) if (inherited[key] !== undefined && node.style[key] === undefined) out[key] = inherited[key];\n for (const key of TEXT_KEYS) if (node.mobile?.[key] !== undefined) out[key] = node.mobile[key];\n return out;\n}\n\n/** Phone text styles as CSS; the line height in px, as inline, so a larger size gets a taller line. */\nexport function phoneText(node: ResolvedNode, mobile: MobileText): Declarations {\n const out: Declarations = [];\n for (const [key, value] of Object.entries(mobile)) {\n if (key === \"lineHeight\") continue;\n const written = textValue(key, value);\n if (written !== undefined) out.push([key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`), written]);\n }\n // (A font's own line height needs nothing: it goes with its size.)\n if ((mobile.fontSize !== undefined || mobile.lineHeight !== undefined) && (mobile.lineHeight ?? node.text.lineHeight) !== \"normal\") {\n const size = (mobile.fontSize as number | undefined) ?? node.text.fontSize;\n out.push([\"line-height\", px(lineHeightPx((mobile.lineHeight as never) ?? node.text.lineHeight, size))]);\n }\n return out;\n}\n\n/**\n * All of a node's text styles: every client gets them on the element with the\n * text, as Outlook doesn't carry styles down through tables. The line height\n * in px, exactly.\n */\nexport function fullText(node: ResolvedNode, { weight = false, align = true } = {}): Style {\n const { text } = node;\n return {\n color: text.color,\n fontFamily: fontFamily(text.fontFamily),\n fontSize: text.fontSize,\n fontWeight: weight || text.fontWeight !== 400 ? text.fontWeight : undefined,\n fontStyle: text.fontStyle === \"italic\" ? \"italic\" : undefined,\n // A font's own (\"normal\") is what a line has with none written.\n lineHeight: text.lineHeight === \"normal\" ? undefined : px(text.lineHeightPx),\n msoLineHeightRule: text.lineHeight === \"normal\" ? undefined : \"exactly\",\n letterSpacing: text.letterSpacing || undefined,\n textAlign: align ? text.textAlign : undefined,\n textTransform: text.textTransform !== \"none\" ? text.textTransform : undefined,\n };\n}\n\n/** Text inside text: only what differs from its parent, and its line height in px where its size changes it. */\nexport function runText(node: ResolvedNode, parent: ResolvedNode, always: Array<\"color\"> = []): Declarations {\n const out = textDeclarations(node.text, parent.text, always).filter(([property]) => property !== \"line-height\");\n if (node.text.lineHeightPx !== parent.text.lineHeightPx) out.push([\"line-height\", px(node.text.lineHeightPx)]);\n return out;\n}\n","/**\n * Where a layout's gap goes: between the children that show, on desktop and\n * on phones apart, so a hidden child leaves no gap behind. Every writer of a\n * gap (a Row's spacers, a stack's and a List's padding, a page List's margins,\n * the root's rows) reads it from here.\n */\nimport type { ResolvedNode } from \"../../resolve\";\n\n/** Whether a gap goes beside a child on desktop and on phones (`false` where the child, or every child on that side, is hidden there). */\nexport interface GapAt {\n desktop: boolean;\n phone: boolean;\n}\n\n/** What shows where: a node, or a run of them (hidden where all of them are). */\ntype Shown = Pick<ResolvedNode, \"hidden\">;\n\n/**\n * Whether each child has a gap before it: where it shows and so does a child\n * before it, on desktop and on phones apart. A hidden child takes no gap, so\n * the gaps add up to what the resolver counts (desktop) and what stacks (phones).\n */\nexport function gapsBefore(children: readonly Shown[]): GapAt[] {\n let desktop = false;\n let phone = false;\n return children.map((child) => {\n const at = { desktop: desktop && !child.hidden?.desktop, phone: phone && !child.hidden?.mobile };\n desktop ||= !child.hidden?.desktop;\n phone ||= !child.hidden?.mobile;\n return at;\n });\n}\n\n/** Whether each child has a gap after it: where it shows and so does a child after it. */\nexport const gapsAfter = (children: readonly Shown[]): GapAt[] => gapsBefore([...children].reverse()).reverse();\n\n/** A gap's own element: shown where its gap is more than 0 (`desktop` and `phone` are the gap's sizes there), hidden elsewhere. */\nexport const gapShown = (at: GapAt, desktop: number, phone: number): GapAt => ({ desktop: at.desktop && desktop > 0, phone: at.phone && phone > 0 });\n\n/** The `hidden` of a gap's own element: hidden where there's no gap. */\nexport const gapHidden = (at: GapAt) => ({ desktop: !at.desktop, mobile: !at.phone });\n\n/** A run of nodes, as one thing that shows or hides: hidden on a side where every one of them is. */\nexport const runHidden = (nodes: readonly ResolvedNode[]): Shown[\"hidden\"] => ({\n desktop: nodes.every((node) => node.hidden?.desktop),\n mobile: nodes.every((node) => node.hidden?.mobile),\n});\n","/**\n * Email layout: widths from the resolver as Word reads them (table and cell\n * attributes, px maximums), where a child sits in its cell, `<Box>` (a node's\n * box as a table around its content) and `<Stack>` (children as table rows);\n * a Row's gaps and its children's shares on phones; what a Layer draws.\n */\nimport { assetParts, type Asset } from \"../../kinds\";\nimport { toPx, type ResolvedNode } from \"../../resolve\";\nimport type { Json } from \"../../model\";\nimport { h, NotOutlook, withId, type Child, type Html, type Style, type StyleValue } from \"../jsx\";\nimport { length } from \"../shared/css\";\nimport { isNode, shown, type Props } from \"./context\";\nimport { bgcolor, ownBorders, Table } from \"./markup\";\nimport { hiding } from \"./styles\";\nimport { gapsAfter, type GapAt } from \"../shared/gaps\";\n\nexport const VALIGN: Record<string, string> = { start: \"top\", center: \"middle\", end: \"bottom\", stretch: \"top\" };\nconst ALIGN: Record<string, string | undefined> = { start: undefined, center: \"center\", end: \"right\", stretch: undefined };\nexport const TEXT_ALIGN: Record<string, string | undefined> = { left: \"left\", justify: \"left\", center: \"center\", right: \"right\" };\n\nexport const sized = (node: ResolvedNode) => node.style.width !== undefined || node.style.maxWidth !== undefined;\n\nexport const toNumber = (value: Json) => (typeof value === \"number\" ? value : Number.parseFloat(String(value)));\n\n/** A Row's child that takes its own size (`flex: \"none\"`), whatever its component's sizing. */\nconst ownSize = (node: ResolvedNode) => node.style.flex === \"none\" || node.style.flex === 0;\n\n/**\n * A box's table: filling its cell (`width` 100%), or its own width as a\n * percentage or a px maximum (fluid on phones; Word takes the maximum as the\n * width), or neither (as wide as its content: a Row's child of its own size, a Menu's link).\n */\nexport function boxWidth(node: ResolvedNode, fill: boolean): { width?: string; maxWidth?: number } {\n if (fill || (!sized(node) && node.definition.sizing === \"stretch\" && !ownSize(node))) return { width: \"100%\" };\n if (typeof node.style.width === \"string\" && node.style.width.endsWith(\"%\") && node.style.maxWidth === undefined) return { width: node.style.width };\n if (node.width !== null) return { width: \"100%\", maxWidth: node.width };\n // As wide as its content, up to its maximum.\n const max = toPx(node.style.maxWidth, node.available);\n return max !== null ? { maxWidth: max } : {};\n}\n\n/** Where an image sits in its cell on phones: its margins (the cell's `align` is for desktop). */\nexport const PLACE: Record<string, Style> = { start: { marginLeft: 0, marginRight: \"auto\" }, center: { marginLeft: \"auto\", marginRight: \"auto\" }, end: { marginLeft: \"auto\", marginRight: 0 } };\n\n/** An image's width (an Image's, a Video's thumbnail): 100% of its cell up to its width, and on phones what `mobile` says. */\nexport function fluidImage(node: ResolvedNode, style: Record<string, Json>, mobile: Record<string, Json>, fill: boolean): { style: Style; phone: Style[] } {\n const width = node.width ?? undefined;\n // A percentage of its cell on phones too, where it isn't the whole of a Row's cell; with a maximum, its width\n // as written and its size in px as the cap.\n const percent = !fill && typeof style.width === \"string\" && style.width.endsWith(\"%\") ? style.width : undefined;\n const capped = percent !== undefined && style.maxWidth !== undefined;\n // The cap: its width, or the maximum as given where its width is that maximum rounded (a share of a column can be a\n // fraction of a pixel, which the cap keeps so the image is as wide as the share).\n const given = typeof style.maxWidth === \"number\" || /^\\d*\\.?\\d+px$/.test(String(style.maxWidth)) ? toNumber(style.maxWidth as Json) : undefined;\n const cap = given !== undefined && width !== undefined && Math.round(given) === width ? given : width;\n return {\n style: { width: capped ? percent : width !== undefined ? \"100%\" : undefined, maxWidth: capped ? cap : (percent ?? width ?? \"100%\") },\n // (With a maximum, a share of its cell is its own on phones. A width there replaces that share, or it would still be the share.)\n phone: [{ width: mobile.maxWidth !== undefined || capped ? mobile.width : undefined, maxWidth: mobile.maxWidth ?? mobile.width }, PLACE[mobile.alignSelf as string]],\n };\n}\n\n/** A phone width for a table or div: a percentage of its cell, or a px maximum. */\nexport function phoneWidth(value: Json | undefined): Style {\n const written = length(value);\n if (written === undefined) return {};\n return typeof value === \"string\" && value.endsWith(\"%\") ? { width: written, maxWidth: \"none\" } : { width: \"100%\", maxWidth: written };\n}\n\n/**\n * Where a child sits across a stack: one that fills the width fills it; one\n * with its own size (a Button, an Image, a box with a width) sits where the\n * stack's `align` says, else where its text alignment says. As a cell's\n * `align`, which every client (Word too) applies to the tables and images in it.\n * Left is a cell's own unless its text runs right to left (`rtl`).\n */\nexport function cellAlign(child: ResolvedNode, stack: ResolvedNode, rtl = false): string | undefined {\n const text = TEXT_ALIGN[stack.text.textAlign];\n const written = text === \"left\" && !rtl ? undefined : text;\n if (child.type === \"Divider\") {\n if (stack.style.alignItems && stack.style.alignItems !== \"stretch\") return ALIGN[stack.style.alignItems as string];\n return written;\n }\n if (child.definition.sizing !== \"shrink\" && !sized(child)) return undefined;\n const align = (child.style.alignSelf ?? stack.style.alignItems) as string | undefined;\n if (align) return ALIGN[align];\n return written;\n}\n\n/** Whether a node has a box of its own to write: a background, padding, border, corners, a height or a width. */\nfunction hasBox(node: ResolvedNode, fill: boolean): boolean {\n const { style } = node;\n const mobile = node.mobile ?? {};\n const width = boxWidth(node, fill);\n return (\n [\"padding\", \"border\", \"borderRadius\", \"backgroundColor\", \"height\"].some((key) => style[key] !== undefined) ||\n [\"padding\", \"border\", \"backgroundColor\", \"width\", \"maxWidth\"].some((key) => mobile[key] !== undefined) ||\n width.width !== \"100%\" ||\n width.maxWidth !== undefined\n );\n}\n\n/**\n * A node's box as a one-cell table around its content (Word has no box on a\n * div or a paragraph), with the node's id. Without a box, the content alone,\n * with the id.\n */\nexport function Box({ node, fill, children }: { node: ResolvedNode; fill: boolean; children?: Child }): Html {\n const content = (Array.isArray(children) ? children[0] : children) as Html;\n if (!hasBox(node, fill)) return withId(content, node.id);\n const { style } = node;\n const mobile = node.mobile ?? {};\n const width = boxWidth(node, fill);\n const height = style.height !== undefined ? toNumber(style.height) : undefined;\n // A cell's CSS height leaves out its padding; Word's attribute, and a page's box, hold it.\n const padding = style.padding as { top: number; bottom: number } | undefined;\n const contentHeight = height !== undefined && padding ? Math.max(0, height - padding.top - padding.bottom) : height;\n return (\n <Table id={node.id} phone={phoneWidth(mobile.maxWidth ?? mobile.width)} width={width.width} style={{ maxWidth: width.maxWidth, borderCollapse: ownBorders(style, mobile) }}>\n <tr>\n <td\n phone={{ padding: mobile.padding, border: mobile.border, backgroundColor: mobile.backgroundColor }}\n bgcolor={bgcolor(style.backgroundColor)}\n height={height}\n // What's in a box of its own height starts at its top, as on a page.\n valign={height !== undefined ? \"top\" : undefined}\n style={{\n padding: style.padding,\n backgroundColor: style.backgroundColor,\n border: style.border,\n borderRadius: style.borderRadius,\n height: contentHeight,\n overflow: style.overflow === \"hidden\" ? \"hidden\" : undefined,\n }}\n >\n {content}\n </td>\n </tr>\n </Table>\n );\n}\n\n/**\n * A row's gap below it, for a table of rows with the gap as their cells' bottom padding (a stack, a list):\n * inline where a row after it shows on desktop, and by a class where phones need another (the phone gap, or none).\n */\nexport function gapBelow(node: ResolvedNode, at: GapAt): { style: Style; phone?: Style } {\n const gap = typeof node.style.gap === \"number\" ? node.style.gap : 0;\n const phoneGap = typeof node.mobile?.gap === \"number\" ? node.mobile.gap : gap;\n const desktop = at.desktop ? gap : 0;\n const phone = at.phone ? phoneGap : 0;\n return { style: { paddingBottom: desktop || undefined }, phone: phone !== desktop ? { paddingBottom: phone } : undefined };\n}\n\n/** A node's children stacked down a table, one row each, its `gap` as the cells' bottom padding. */\nexport function Stack({ node, rtl, render, style }: { node: ResolvedNode; rtl: boolean; render: Props[\"render\"]; style?: StyleValue }): Html {\n const children = node.children.filter(isNode).filter(shown);\n const gaps = gapsAfter(children);\n return (\n <Table width=\"100%\" style={style}>\n {children.map((child, index) => {\n const hidden = hiding(child, \"table-row\");\n const below = gapBelow(node, gaps[index]);\n const row = (\n <tr class={hidden.class} style={hidden.style}>\n <td align={cellAlign(child, node, rtl)} phone={below.phone} style={below.style}>\n {render(child)}\n </td>\n </tr>\n );\n // What's hidden on desktop isn't Outlook's at all (Outlook is never a phone).\n return child.hidden?.desktop ? <NotOutlook>{row}</NotOutlook> : row;\n })}\n </Table>\n );\n}\n\nexport const gapOf = (props: Props) => (typeof props.style.gap === \"number\" ? props.style.gap : 0);\n/** The gap on phones: the Row's phone gap, else its gap. */\nexport const phoneGapOf = (props: Props) => (typeof props.mobile.gap === \"number\" ? props.mobile.gap : gapOf(props));\nexport const valignOf = (props: Props) => VALIGN[(props.style.alignItems as string | undefined) ?? \"start\"];\n\n/** A child that shares its Row on phones (no width of its own, a flex). */\nexport const sharing = (child: ResolvedNode) => child.width !== null && child.style.width === undefined && child.mobile?.width === undefined && child.style.flex !== \"none\" && child.style.flex !== 0;\n\n/**\n * Each child's width on phones in a side-by-side Row whose children share it: a table shares its width out by its\n * cells' content, flexbox (as on desktop) by their widths. A cell's share is a percentage, and the gaps are the cells'\n * side padding, inside their width (a cell's share of the gaps, split so neighbours leave one gap between them): the\n * shares add up to the whole, which every client's table gives exactly. None where a padding would be negative.\n */\nexport function phoneShares(children: readonly ResolvedNode[], gap: number): Map<ResolvedNode, Style> | undefined {\n const onPhones = children.filter((child) => !child.hidden?.mobile);\n // Only children that share the Row: one of its own size keeps it, as on the page.\n if (onPhones.length < 2) return undefined;\n // Beside one of its own size, they take what it leaves: a table would shrink it with them.\n if (!onPhones.every(sharing)) {\n const beside = onPhones.filter(sharing);\n return beside.length ? new Map(beside.map((child) => [child, { width: \"auto\" }])) : undefined;\n }\n const total = onPhones.reduce((sum, child) => sum + child.width!, 0);\n const gaps = gap * (onPhones.length - 1);\n const out = new Map<ResolvedNode, Style>();\n let left = 0;\n for (const [index, child] of onPhones.entries()) {\n const share = child.width! / total;\n const right = index === onPhones.length - 1 ? 0 : share * gaps - left;\n if (left < -0.01 || right < -0.01) return undefined;\n const px = (n: number) => Math.round(n * 100) / 100;\n out.set(child, { width: `${px(share * 100)}%`, paddingLeft: left ? px(left) : undefined, paddingRight: right ? px(right) : undefined, boxSizing: \"border-box\" });\n left = gap - right;\n }\n return out;\n}\n\n/** What an email draws of a Layer: its Image, the child over it and its height; or why it can't. */\nexport function layerShape(node: ResolvedNode): { base: ResolvedNode; over?: ResolvedNode; height: number } | { problem: string; path: string } {\n const children = node.children.filter(isNode).filter(shown);\n const [base, over] = children;\n if (!base || base.type !== \"Image\" || children.length > 2) {\n return { problem: `In an email, a Layer is an Image with one child over it (drawn as the image's background); this one has ${children.length > 2 ? `${children.length} children` : base ? `a ${base.type} under` : \"no children\"}`, path: node.path };\n }\n if (base.width === null || node.contentWidth === null || Math.abs(base.width - node.contentWidth) > 1) {\n return { problem: \"In an email, a Layer's Image is as wide as the Layer (it's drawn as its background): give it width 100%\", path: `${base.path}.style.width` };\n }\n if (typeof node.style.height === \"number\") return { base, over, height: node.style.height };\n const { width, height } = assetParts(base.props.src as Asset);\n if (!width || !height) {\n return { problem: \"In an email, a Layer is as tall as its Image, which needs its file's width and height (src={{ src, width, height }}); or give the Layer a height\", path: `${base.path}.props.src` };\n }\n return { base, over, height: Math.round((base.width * height) / width) };\n}\n","/**\n * A Button as a one-cell table: its background, border and corners on the\n * cell, its padding both on the link (so all of it is clickable) and, for\n * Outlook, which has no padding on links, as the cell's `mso-padding-alt`.\n * On hover the cell changes its background and the link its text's color,\n * each where it's set (the link's own inline color would win over the\n * cell's).\n * Not VML: in captures of classic Outlook, Word draws a VML button's label in\n * its own font, wrapped inside the shape's fixed size. Square corners in\n * classic Outlook.\n */\nimport { h, type Style } from \"../jsx\";\nimport { insets } from \"../shared/css\";\nimport { link } from \"../shared/link\";\nimport type { Component } from \"./context\";\nimport { boxWidth, phoneWidth, TEXT_ALIGN } from \"./layout\";\nimport { bgcolor, ownBorders, Table } from \"./markup\";\nimport { fullText } from \"./styles\";\n\n/** Where a table sits in its cell on phones: its margins (the cell's `align` is for desktop). */\nconst PLACE: Record<string, Style> = { start: { marginLeft: 0, marginRight: \"auto\" }, center: { marginLeft: \"auto\", marginRight: \"auto\" }, end: { marginLeft: \"auto\", marginRight: 0 } };\n\nexport const Button: Component = ({ node, style, mobile, fill, phoneText, text }) => {\n const width = boxWidth(node, fill);\n return (\n <Table id={node.id} phone={[phoneWidth(mobile.maxWidth ?? mobile.width), PLACE[mobile.alignSelf as string]]} width={width.width} style={{ maxWidth: width.maxWidth, borderCollapse: ownBorders(style, mobile) }}>\n <tr>\n <td\n align={TEXT_ALIGN[node.text.textAlign]}\n bgcolor={bgcolor(style.backgroundColor)}\n // The background is the cell's, so its hover is too; the text's color is the link's (below).\n hoverWithin={{ backgroundColor: node.hover?.backgroundColor }}\n phone={{ border: mobile.border, backgroundColor: mobile.backgroundColor }}\n style={{ backgroundColor: style.backgroundColor, border: style.border, borderRadius: style.borderRadius, msoPaddingAlt: insets(style.padding) }}\n >\n <a\n {...link(node.props)}\n phone={[phoneText, { padding: mobile.padding }]}\n hover={{ color: node.hover?.color }}\n style={[\n // A button with a width fills it. Its label's words stay whole (the email's word-break: break-word\n // is for long links in text): a button narrower than its padding otherwise sized itself to one letter\n // and drew its label a letter a line, in Gmail and browsers; it grows to its longest word instead, as\n // classic Outlook's and Apple Mail's do (captures of Elements 0.3.0, e3-fresh/g-0054).\n { display: width.width !== undefined ? \"block\" : \"inline-block\", padding: style.padding, wordBreak: \"normal\" },\n fullText(node),\n { textDecoration: style.textDecoration ?? \"none\", borderRadius: style.borderRadius },\n ]}\n >\n {text()}\n </a>\n </td>\n </tr>\n </Table>\n );\n};\n","/** A Column: its children stacked down a table, in its box. */\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { Box, Stack } from \"./layout\";\n\nexport const Column: Component = ({ node, fill, rtl, render }) => (\n <Box node={node} fill={fill}>\n <Stack node={node} rtl={rtl} render={render} />\n </Box>\n);\n","/** A Divider: a table with a top border and an empty cell Word can't make taller, in a padded table where it has padding. */\nimport { h, raw } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { phoneWidth, TEXT_ALIGN } from \"./layout\";\nimport { ownBorders, Table } from \"./markup\";\n\nexport const Divider: Component = ({ node, style, mobile, fill, parent, rtl }) => {\n // In a Row its column is already its width: the line fills it.\n const length = fill ? \"100%\" : style.width;\n const percent = typeof length === \"string\" && length.endsWith(\"%\");\n const padded = style.padding !== undefined || mobile.padding !== undefined;\n const align = ({ center: \"center\", end: \"right\" } as Record<string, string>)[parent.style.alignItems as string] ?? TEXT_ALIGN[node.text.textAlign];\n\n const line = (\n <Table id={padded ? undefined : node.id} width={percent ? length : \"100%\"} phone={phoneWidth(mobile.width)} style={{ maxWidth: percent ? undefined : length, borderCollapse: ownBorders(style) }}>\n <tr>\n <td style={{ borderTop: style.borderTop, fontSize: 0, lineHeight: 0, msoLineHeightRule: \"exactly\" }}>{raw(\" \")}</td>\n </tr>\n </Table>\n );\n if (!padded) return line;\n return (\n <Table id={node.id} width=\"100%\">\n <tr>\n <td align={align === \"left\" && !rtl ? undefined : align} phone={{ padding: mobile.padding }} style={{ padding: style.padding }}>\n {line}\n </td>\n </tr>\n </Table>\n );\n};\n","/**\n * Email spacers: the markup that holds a gap where one shows (`at`, from gapShown in shared/gaps.ts). A row of its own\n * between an email's runs of content and its Sections; between a Row's children, an inline-block where they stack or\n * wrap, a cell where they stay side by side.\n */\nimport { Fragment, h, NotOutlook, Outlook, raw, type Html } from \"../jsx\";\nimport { px } from \"../shared/css\";\nimport { gapHidden, type GapAt } from \"../shared/gaps\";\nimport { hiding } from \"./styles\";\n\n/** A gap as a row of its own: as tall as the gap, the phone gap on phones, hidden where there's none (and out of Outlook's view then). */\nexport function spacerRow(at: GapAt, gap: number, phoneGap: number): Html | null {\n if (!at.desktop && !at.phone) return null;\n const hidden = hiding({ hidden: gapHidden(at) }, \"table-row\");\n const row = (\n <tr class={hidden.class} style={hidden.style}>\n <td phone={at.phone && phoneGap !== gap ? { lineHeight: px(phoneGap) } : undefined} style={{ fontSize: 0, lineHeight: px(gap), msoLineHeightRule: \"exactly\" }}>\n {raw(\" \")}\n </td>\n </tr>\n );\n return at.desktop ? row : <NotOutlook>{row}</NotOutlook>;\n}\n\n/**\n * The gap before a stacking or wrapping Row's child, where there is one (`at`, from gapShown): a cell in Outlook's\n * table on desktop; for the rest, an inline-block as wide as the gap, and as tall as the phone gap where the children\n * stack (as wide as it, where they wrap).\n */\nexport function spacer(at: GapAt, gap: number, phoneGap: number, stacks: boolean): Html | null {\n if (!at.desktop && !at.phone) return null;\n const hidden = hiding({ hidden: gapHidden(at) }, \"inline-block\");\n const phone = stacks ? { height: phoneGap } : phoneGap !== gap ? { width: phoneGap } : undefined;\n return (\n <>\n {at.desktop && (\n <Outlook>\n <td width={gap} style={{ width: gap }} />\n </Outlook>\n )}\n <NotOutlook>\n <div class={hidden.class} phone={phone} style={[{ display: \"inline-block\", width: gap || undefined }, hidden.style]} />\n </NotOutlook>\n </>\n );\n}\n\n/**\n * The gap before a side-by-side Row's child, where there is one, as a cell: the phone gap's width on phones, and kept\n * from Outlook where there's none on desktop. Beside cells that take all the room (`solid`: empty cells packing the\n * children, or the children's shares on phones), an empty cell would give its width up: a div as wide as the gap\n * holds it.\n */\nexport function gapCell(at: GapAt, gap: number, phoneGap: number, solid = false): Html | null {\n if (!at.desktop && !at.phone) return null;\n const hidden = hiding({ hidden: gapHidden(at) }, \"table-cell\");\n const phone = at.phone && phoneGap !== gap ? { width: phoneGap } : undefined;\n const cell = (\n <td class={hidden.class} width={gap || undefined} phone={phone} style={[{ width: gap || undefined }, hidden.style]}>\n {solid && <div phone={phone} style={{ width: gap || undefined }} />}\n </td>\n );\n return at.desktop ? cell : <NotOutlook>{cell}</NotOutlook>;\n}\n","/**\n * The email's body: a full-width table with the window's background, the\n * content at the content width, centered, and Sections as bands across the\n * window between runs of content.\n */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { Fragment, h } from \"../jsx\";\nimport { gapsBefore, gapShown, runHidden } from \"../shared/gaps\";\nimport { isNode, shown, type Component } from \"./context\";\nimport { Stack } from \"./layout\";\nimport { bgcolor, OutlookWidth, ownBorders, Table } from \"./markup\";\nimport { spacerRow } from \"./spacers\";\n\nexport const Email: Component = ({ node: root, style, mobile, rtl, render }) => {\n const width = root.width ?? 600;\n const gap = typeof style.gap === \"number\" ? style.gap : 0;\n const phoneGap = typeof mobile.gap === \"number\" ? mobile.gap : gap;\n\n // Runs of content between Sections.\n const parts: Array<ResolvedNode | ResolvedNode[]> = [];\n for (const node of root.children.filter(isNode).filter(shown)) {\n const last = parts[parts.length - 1];\n if (node.type === \"Section\") parts.push(node);\n else if (Array.isArray(last)) last.push(node);\n else parts.push([node]);\n }\n\n // Between a Section and its neighbours the gap is a row of its own, outside the Section's background, where both show.\n const gaps = gapsBefore(parts.map((part) => ({ hidden: Array.isArray(part) ? runHidden(part) : part.hidden })));\n\n return (\n <Table width=\"100%\" bgcolor={bgcolor(style.backgroundColor)} style={{ backgroundColor: style.backgroundColor, borderCollapse: ownBorders(...parts.flatMap((part) => (Array.isArray(part) ? [] : [part.style, part.mobile]))) }}>\n {parts.map((part, index) => (\n <>\n {spacerRow(gapShown(gaps[index], gap, phoneGap), gap, phoneGap)}\n {Array.isArray(part) ? (\n <tr>\n <td align=\"center\">\n <OutlookWidth width={width}>\n <Stack node={{ ...root, children: part }} rtl={rtl} render={render} style={{ maxWidth: width }} />\n </OutlookWidth>\n </td>\n </tr>\n ) : (\n render(part)\n )}\n </>\n ))}\n </Table>\n );\n};\n","/**\n * A Text: a `<p>` with all of its text styles (Outlook doesn't carry styles\n * down through tables), in its box. A Heading is the same with its own tag.\n */\nimport { h, type Html } from \"../jsx\";\nimport type { Props, Component } from \"./context\";\nimport { Box } from \"./layout\";\nimport { fullText } from \"./styles\";\n\n/** A block of text as `Tag`, with no margins (the browsers' own, and Word's spacing). */\nexport const textBlock = ({ node, style, fill, phoneText, text }: Props, Tag: string, { weight = false } = {}): Html => (\n <Box node={node} fill={fill}>\n <Tag dir={node.props.dir as string | undefined} phone={phoneText} style={[{ margin: 0 }, fullText(node, { weight }), { textDecoration: style.textDecoration }]}>\n {text()}\n </Tag>\n </Box>\n);\n\nexport const Text: Component = (props) => textBlock(props, \"p\");\n","/** A Heading: `<h1>`–`<h6>` with all of its text styles, its weight too (the browsers' own is bold), in its box. */\nimport type { Component } from \"./context\";\nimport { textBlock } from \"./Text\";\n\nexport const Heading: Component = (props) => textBlock(props, `h${props.node.props.level}`, { weight: true });\n","/**\n * An Html block: its markup written as it is, in the text around it, as on a page. Its parent hides it where it's\n * hidden. It's in the template's text size again: a stacking Row's cells set theirs to 0 (no gaps between their\n * inline-blocks), which would close up the spaces in its markup.\n */\nimport { h, raw } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const HtmlBlock: Component = ({ node }) => {\n const { color, fontFamily, fontWeight, lineHeight, letterSpacing, textAlign, fontSize } = node.text;\n return (\n <div id={node.id} style={{ color, fontFamily, fontWeight, lineHeight, letterSpacing, textAlign, fontSize }}>\n {raw(String(node.props.html))}\n </div>\n );\n};\n","/**\n * An Image: its width attribute in px (Word's size for it), fluid elsewhere\n * (100% of its cell, its width at most), its height in proportion where the\n * file's size is known.\n */\nimport { assetParts, type Asset } from \"../../kinds\";\nimport { h, type Style } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { fluidImage, PLACE, toNumber } from \"./layout\";\nimport { hiding } from \"./styles\";\n\nexport const Image: Component = ({ node, style, mobile, parent, fill, inline }) => {\n const { src, width: fileWidth, height: fileHeight } = assetParts(node.props.src as Asset);\n const width = node.width ?? undefined;\n const height = style.height !== undefined ? toNumber(style.height) : undefined;\n const fluid = fluidImage(node, style, mobile, fill);\n // In a stack or a Row its cell hides it; in a link, its own style.\n const hidden: { class?: string; style: Style } = parent.type === \"Link\" ? hiding(node, \"block\") : { style: {} };\n return (\n <img\n id={node.id}\n class={hidden.class}\n phone={fluid.phone}\n src={src}\n alt={(node.props.alt as string) ?? \"\"}\n title={node.props.title as string | undefined}\n width={width}\n // Its height in proportion, for Word, when the file's size is known.\n height={height ?? (width !== undefined && fileWidth && fileHeight ? Math.round((fileHeight * width) / fileWidth) : undefined)}\n border=\"0\"\n style={[\n // Among text it's in the line.\n { display: inline ? \"inline-block\" : \"block\", verticalAlign: style.verticalAlign, ...fluid.style, height: height ?? \"auto\", border: \"0\" },\n { border: style.border, borderRadius: style.borderRadius },\n PLACE[style.alignSelf as string],\n hidden.style,\n ]}\n />\n );\n};\n","/** A LineBreak: `<br>`. */\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const LineBreak: Component = () => <br />;\n","/**\n * A Link: inside text, a run with its color and decoration always written\n * (email clients color links their own way); as a block, around an image or\n * text of its own, with all of its text styles.\n */\nimport { Fragment, h } from \"../jsx\";\nimport { link } from \"../shared/link\";\nimport type { Component } from \"./context\";\nimport { fullText, hiding, runText } from \"./styles\";\n\nexport const Link: Component = ({ node, style, parent, fill, inline, phoneText, text, render }) => {\n if (inline) {\n const hidden = hiding(node, \"inline\");\n return (\n <a id={node.id} class={hidden.class} phone={phoneText} hover={node.hover} {...link(node.props)} style={[runText(node, parent, [\"color\"]), { textDecoration: style.textDecoration, backgroundColor: style.backgroundColor }, hidden.style]}>\n {text()}\n </a>\n );\n }\n // A block: around an image (which fills what the link is given), or text of its own.\n const onlyImage = node.children.every((child) => typeof child !== \"string\" && child.type === \"Image\");\n return (\n <a\n id={node.id}\n phone={onlyImage ? undefined : phoneText}\n hover={node.hover}\n {...link(node.props)}\n style={onlyImage ? { textDecoration: \"none\" } : [fullText(node, { align: false }), { textDecoration: style.textDecoration, backgroundColor: style.backgroundColor }]}\n >\n {onlyImage ? <>{node.children.map((child) => typeof child !== \"string\" && render(child, { fill }))}</> : text()}\n </a>\n );\n};\n","/**\n * What a List and its items work out besides their markup: each item's number where it shows, counted apart on\n * desktop and on phones, and a nested List's hiding.\n */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { Fragment, h, NotOutlook, type Html } from \"../jsx\";\nimport { shown, type Props } from \"./context\";\nimport { hiding } from \"./styles\";\n\n/** Each item's number on desktop and on phones: the start, and one more for each item shown before it there. */\nexport function numbersOf(items: readonly ResolvedNode[], start: number): Array<{ desktop: number; phone: number }> {\n let [desktop, phone] = [start, start];\n return items.map((item) => {\n const at = { desktop, phone };\n if (!item.hidden?.desktop) desktop += 1;\n if (!item.hidden?.mobile) phone += 1;\n return at;\n });\n}\n\n/** An item's number, or where desktop and phones count it differently, each one where it shows (desktop's in Outlook). */\nexport function numberOf(item: ResolvedNode, at: { desktop: number; phone: number }): Html | string {\n if (item.hidden?.desktop) return `${at.phone}.`;\n if (item.hidden?.mobile || at.desktop === at.phone) return `${at.desktop}.`;\n const [desktop, phone] = [hiding({ hidden: { mobile: true } }, \"inline\"), hiding({ hidden: { desktop: true } }, \"inline\")];\n return (\n <>\n <span class={desktop.class}>{at.desktop}.</span>\n <NotOutlook>\n <span class={phone.class} style={phone.style}>\n {at.phone}.\n </span>\n </NotOutlook>\n </>\n );\n}\n\n/** A List nested in an item, hidden where it's hidden itself (a List takes no hiding of its own, its parent's row does that elsewhere). */\nexport function nested(list: ResolvedNode, render: Props[\"render\"]): Html | null {\n if (!shown(list)) return null;\n if (!list.hidden?.desktop && !list.hidden?.mobile) return render(list);\n const hidden = hiding(list, \"block\");\n const block = (\n <div class={hidden.class} style={hidden.style}>\n {render(list)}\n </div>\n );\n return list.hidden?.desktop ? <NotOutlook>{block}</NotOutlook> : block;\n}\n","/**\n * A List as a table: an item a row, its marker in a cell as wide as the\n * indent, right-aligned against the item. Word's own lists indent and space\n * differently from version to version; a table lays out the same in every\n * client. `role=\"list\"` and `\"listitem\"` keep it a list for screen readers.\n */\nimport { toPx } from \"../../resolve\";\nimport { h, NotOutlook } from \"../jsx\";\nimport { isNode, shown, type Component } from \"./context\";\nimport { Box, gapBelow } from \"./layout\";\nimport { gapsAfter } from \"../shared/gaps\";\nimport { numberOf, numbersOf } from \"./lists\";\nimport { Table } from \"./markup\";\nimport { fullText, hiding } from \"./styles\";\n\n/** The space between a marker and its item. */\nconst MARKER_GAP = 8;\n\nexport const List: Component = ({ node, style, fill, render }) => {\n const items = node.children.filter(isNode).filter(shown);\n const indent = toPx(style.indent, null) ?? 0;\n const gaps = gapsAfter(items);\n const numbers = numbersOf(items, Number(node.props.start));\n const marker = (index: number) => (node.props.type === \"number\" ? numberOf(items[index], numbers[index]) : \"•\");\n return (\n <Box node={node} fill={fill}>\n <Table role=\"list\" width=\"100%\">\n {items.map((item, index) => {\n const hidden = hiding(item, \"table-row\");\n const below = gapBelow(node, gaps[index]);\n const row = (\n <tr role=\"listitem\" class={hidden.class} style={hidden.style}>\n <td aria-hidden=\"true\" width={indent} valign=\"top\" phone={below.phone} style={[fullText(item, { align: false }), { textAlign: \"right\", width: indent, boxSizing: \"border-box\", paddingRight: MARKER_GAP }, below.style]}>\n {marker(index)}\n </td>\n <td valign=\"top\" phone={below.phone} style={below.style}>\n {render(item)}\n </td>\n </tr>\n );\n return item.hidden?.desktop ? <NotOutlook>{row}</NotOutlook> : row;\n })}\n </Table>\n </Box>\n );\n};\n","/** A ListItem: its text in a div with all of its text styles, and the Lists nested in it, in order. */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { Fragment, h, type Html } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { nested } from \"./lists\";\nimport { fullText } from \"./styles\";\n\nexport const ListItem: Component = ({ node, style, phoneText, render }) => {\n // Runs of text between nested Lists.\n const parts: Array<ResolvedNode | Array<ResolvedNode | string>> = [];\n for (const child of node.children) {\n const last = parts[parts.length - 1];\n if (typeof child !== \"string\" && child.type === \"List\") parts.push(child);\n else if (Array.isArray(last)) last.push(child);\n else parts.push([child]);\n }\n const blocks: Array<Html | null> = parts.map((part, index) =>\n Array.isArray(part) ? (\n <div id={index === 0 ? node.id : undefined} dir={node.props.dir as string | undefined} phone={phoneText} style={[fullText(node), { textDecoration: style.textDecoration }]}>\n {part.map((child) => (typeof child === \"string\" ? child : render(child, { inline: true })))}\n </div>\n ) : (\n nested(part, render)\n )\n );\n // An empty item keeps its id.\n if (parts.length === 0) return node.id ? <div id={node.id} /> : <></>;\n // An item that starts with a nested List: its id goes on a div around it all, as the List has its own.\n return node.id && parts.length > 0 && !Array.isArray(parts[0]) ? <div id={node.id}>{blocks}</div> : <>{blocks}</>;\n};\n","/**\n * A MergeTag: the sending service's syntax for the value. The default, `{{name}}`, is text; the options' syntax is\n * written as it is (`<%= name %>`, `{{ name | default: \"a & b\" }}`), with the name in it escaped for text and for an\n * attribute's value alike.\n */\nimport { Fragment, h, raw } from \"../jsx\";\nimport { escapeAttr } from \"../shared/css\";\nimport type { Component } from \"./context\";\n\nexport const MergeTag: Component = ({ node, options }) => {\n const name = node.props.name as string;\n return options.mergeTag ? raw(options.mergeTag(escapeAttr(name))) : <>{`{{${name}}}`}</>;\n};\n","/**\n * Sizes estimated where text isn't measured yet (RFC 0002): a character's width from its font size, a little under\n * most Latin text's, so text is never thought longer than it is, and only what looks clearly too big is said.\n */\nimport { horizontalFrame, type ResolvedNode } from \"../../resolve\";\n\n/** A character's average width, in ems. */\nexport const CHARACTER = 0.45;\n\n/** The characters a node's text runs hold. */\nexport const characters = (node: ResolvedNode): number =>\n node.children.reduce((sum: number, child) => sum + (typeof child === \"string\" ? child.length : child.type === \"MergeTag\" ? String(child.props.name ?? \"\").length + 4 : characters(child)), 0);\n\n/** A node's width on one line: its own where it's known, else its text's (an image's in it), its padding and border. With `phone`, a phone's width of that much room. */\nfunction widthOf(node: ResolvedNode, phone?: number): number {\n const own = phone === undefined ? undefined : node.mobile?.width;\n if (typeof own === \"number\") return own;\n if (typeof own === \"string\") return (Number.parseFloat(own) / 100) * phone!;\n if (node.width !== null) return node.width;\n const images = node.children.reduce((sum: number, child) => sum + (typeof child !== \"string\" && child.type === \"Image\" && child.width !== null ? child.width : 0), 0);\n return characters(node) * node.text.fontSize * CHARACTER + images + horizontalFrame(node.style);\n}\n\n/** The width a Row's children shown on desktop take side by side, with its gaps between them, estimated. With `phone`, those shown on a phone with that much room. */\nexport function oneLineWidth(row: ResolvedNode, phone?: number): number {\n const children = row.children.filter((child): child is ResolvedNode => typeof child !== \"string\" && !(phone === undefined ? child.hidden?.desktop : child.hidden?.mobile));\n const gap = gapOf(row, phone !== undefined);\n return children.reduce((sum, child) => sum + widthOf(child, phone), 0) + gap * Math.max(0, children.length - 1);\n}\n\nconst gapOf = (row: ResolvedNode, phone: boolean) => (phone && typeof row.mobile?.gap === \"number\" ? row.mobile.gap : typeof row.style.gap === \"number\" ? row.style.gap : 0);\n\n/** A Row that wraps (a Menu) whose children look wider than it on one line: where it can't wrap, they don't fit. */\nexport function wrapsPastIts(row: ResolvedNode): number | null {\n if (row.type !== \"Row\" || row.style.flexWrap !== \"wrap\" || row.contentWidth === null) return null;\n const width = oneLineWidth(row);\n return width > row.contentWidth + 0.5 ? Math.round(width) : null;\n}\n\n/** Where a Row kept side by side that wraps looks too wide for one line (at a small phone's width on phones), with a gap to keep between its lines. */\nexport function wrapsWithGap(row: ResolvedNode): \"desktop\" | \"phones\" | \"desktop and phones\" | null {\n if (row.props.stackOnMobile !== false || (row.style.flexWrap !== \"wrap\" && row.style.flexWrap !== \"words\") || row.contentWidth === null) return null;\n const room = Math.min(row.contentWidth, 320);\n const desktop = !row.hidden?.desktop && gapOf(row, false) > 0 && oneLineWidth(row) > row.contentWidth + 0.5;\n const phones = !row.hidden?.mobile && gapOf(row, true) > 0 && oneLineWidth(row, room) > room + 0.5;\n return desktop && phones ? \"desktop and phones\" : desktop ? \"desktop\" : phones ? \"phones\" : null;\n}\n","/** What a child of a Row kept side by side asks of its place on phones. */\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\n\n/**\n * Its phone width, in a Row that stays side by side on phones: the Row's layout gives a child its place (a flex basis\n * on a page, a cell in an email), so that's where the width has to go, within its phone maximum. A padded Divider's is\n * its line's, in its place.\n */\nexport function phoneWidthInRow(child: ResolvedNode, row: ResolvedNode): Json | undefined {\n if (row.type !== \"Row\" || row.props.stackOnMobile !== false) return undefined;\n if (child.type === \"Divider\" && child.style.padding !== undefined) return undefined;\n const { width, maxWidth } = child.mobile ?? {};\n return typeof width === \"number\" && typeof maxWidth === \"number\" ? Math.min(width, maxWidth) : width;\n}\n","/**\n * A Row. One that stacks on phones is \"fluid hybrid\": each child is an\n * inline-block div as wide as its desktop width at most and 100% otherwise,\n * so the children sit side by side where there's room and stack where there\n * isn't, without media queries; Outlook, which ignores divs' sizes, gets a\n * table of the same widths in conditional comments. Gaps are spacers: a\n * cell for Outlook, an inline-block for the rest (as tall as the gap on\n * phones, where the children stack). A Row that stays side by side\n * (`stackOnMobile` false) is a table row; one that wraps (`flexWrap`, a\n * Menu's) is the same inline-blocks, onto another line where they don't fit\n * (classic Outlook's table keeps them on one). Where they wrap as words do,\n * they're a space of the text's font apart, on lines at least as tall as its.\n */\nimport { close, Fragment, h, Merged, NotOutlook, open, Outlook, rule, type Html } from \"../jsx\";\nimport { isNode, shown, type Props, type Component } from \"./context\";\nimport { boxWidth, gapOf, phoneGapOf, phoneShares, phoneWidth, sharing, toNumber, valignOf } from \"./layout\";\nimport { bgcolor, ownBorders, Table, TABLE } from \"./markup\";\nimport { gapCell, spacer } from \"./spacers\";\nimport { hiding } from \"./styles\";\nimport { fontFamily } from \"../shared/css\";\nimport { oneLineWidth } from \"../shared/estimate\";\nimport { gapsBefore, gapShown } from \"../shared/gaps\";\nimport { phoneWidthInRow } from \"../shared/phone-width\";\nimport type { ResolvedNode } from \"../../resolve\";\n\nconst JUSTIFY: Record<string, string | undefined> = { center: \"center\", end: \"right\" };\n/** The most a Row's line or a child's minimum can be and be sure to fit a small phone. */\nconst FITS_A_PHONE = 240;\n\n/** A child whose phone width is its cell's or its div's: what's in it fills that, or a percentage would count twice. */\nconst filling = (child: ResolvedNode, own: unknown): ResolvedNode => (own === undefined ? child : { ...child, mobile: { ...child.mobile, width: \"100%\" } });\n\nexport const Row: Component = (props) => {\n const { node, style, mobile, fill } = props;\n const stacks = node.props.stackOnMobile !== false;\n const words = !stacks && style.flexWrap === \"words\";\n const wraps = (!stacks && style.flexWrap === \"wrap\") || words;\n const width = boxWidth(node, fill);\n return (\n <Table id={node.id} phone={phoneWidth(mobile.maxWidth ?? mobile.width)} width={width.width} style={{ maxWidth: width.maxWidth, borderCollapse: ownBorders(style, mobile) }}>\n <tr>\n <td\n // On phones the children take the whole width, one under another (inline-blocks of 100%: each on a line of its own).\n class={stacks ? rule(\"phone\", \"&>div{width:100%!important;max-width:100%!important}\", \"layout\") : undefined}\n phone={{ padding: mobile.padding, border: mobile.border, backgroundColor: mobile.backgroundColor }}\n align={JUSTIFY[style.justifyContent as string]}\n dir={node.props.dir as string | undefined}\n bgcolor={bgcolor(style.backgroundColor)}\n height={style.height !== undefined ? toNumber(style.height) : undefined}\n style={{\n // No line boxes between the children: their inline-blocks touch. (Words have this font's spaces between them.)\n fontFamily: words ? fontFamily(node.text.fontFamily) : undefined,\n fontSize: words ? node.text.fontSize : stacks || wraps ? 0 : undefined,\n letterSpacing: words ? node.text.letterSpacing || undefined : undefined,\n textAlign: wraps ? (JUSTIFY[style.justifyContent as string] ?? \"left\") : undefined,\n padding: style.padding,\n backgroundColor: style.backgroundColor,\n border: style.border,\n borderRadius: style.borderRadius,\n height: style.height !== undefined ? toNumber(style.height) : undefined,\n overflow: style.overflow === \"hidden\" ? \"hidden\" : undefined,\n }}\n >\n {stacks || wraps ? fluidHybrid(props, stacks, words) : sideBySide(props)}\n </td>\n </tr>\n </Table>\n );\n};\n\n/** Each child in a div of its width, beside the others where they fit; Outlook's table of the same widths around them. */\nfunction fluidHybrid(props: Props, stacks: boolean, words: boolean): Html {\n const { node, render } = props;\n const [gap, phoneGap] = [gapOf(props), phoneGapOf(props)];\n const valign = valignOf(props);\n const children = node.children.filter(isNode).filter(shown);\n const gaps = gapsBefore(children);\n // The cell's text is 0px (no line boxes between the children): each child gets the Row's size back, for what it\n // holds that sets no size of its own (a Video's link, an Image's alternate text).\n const phoneSize = props.phoneText.filter(([property]) => property === \"font-size\");\n return (\n <Merged>\n <Outlook>\n {/* Where they wrap, as wide as they are (placed by the cell's align), not spread across the Row. */}\n {open(<table {...TABLE} width={stacks ? \"100%\" : undefined} />)}\n {open(<tr />)}\n </Outlook>\n {children.map((child, index) => {\n const width = child.width ?? undefined;\n const hidden = hiding(child, \"inline-block\");\n const own = phoneWidthInRow(child, node);\n const column = (\n <div class={hidden.class} phone={[phoneSize, phoneWidth(own)]} style={[{ display: \"inline-block\", verticalAlign: valign, width: width !== undefined ? \"100%\" : undefined, maxWidth: width, fontSize: node.text.fontSize }, hidden.style]}>\n {render(filling(child, own), { fill: width !== undefined })}\n </div>\n );\n // What's hidden on desktop isn't in Outlook's table.\n const inOutlook = !child.hidden?.desktop;\n return (\n <>\n {words && index > 0 && \" \"}\n {spacer(gapShown(gaps[index], gap, phoneGap), gap, phoneGap, stacks)}\n {inOutlook ? (\n <>\n <Outlook>{open(<td width={width} valign={valign} style={{ width }} />)}</Outlook>\n {column}\n <Outlook>{close(\"td\")}</Outlook>\n </>\n ) : (\n <NotOutlook>{column}</NotOutlook>\n )}\n </>\n );\n })}\n <Outlook>\n {close(\"tr\")}\n {close(\"table\")}\n </Outlook>\n </Merged>\n );\n}\n\n/** A table row: the children side by side on phones too. */\nfunction sideBySide(props: Props): Html {\n const { node, render } = props;\n const [gap, phoneGap] = [gapOf(props), phoneGapOf(props)];\n const valign = valignOf(props);\n // Room the children leave: an empty cell takes it (where the Row's justify puts it), else a table spreads it over them.\n const placed = node.children.filter(isNode).filter((child) => shown(child) && !child.hidden?.desktop);\n const used = placed.reduce((sum, child) => sum + (child.width ?? 0), 0) + gap * Math.max(0, placed.length - 1);\n const left = node.contentWidth !== null && used < node.contentWidth - 0.5;\n const justify = node.style.justifyContent as string | undefined;\n // A child of its own size whose size only the client knows (a Link, a Button) takes no room above. Where there's\n // one, the empty cells take all the room (half each, around centered children) and the gaps can't give theirs\n // up, so the table packs the children where flexbox does.\n const packed = left && placed.some((child) => child.width === null);\n // Beside them a cell shrinks to its content whatever its width: a minimum holds it, where that can't push the Row past\n // its width. On phones, where it could (it looks too wide for a small phone to be sure), the cells hold their widths\n // as far as they fit, and the room goes to the children of their own size rather than the empty cells.\n const line = packed ? oneLineWidth(node) : 0;\n const tight = line > FITS_A_PHONE;\n const children = node.children.filter(isNode).filter(shown);\n // Children of their own widths on phones leave room there, where they use it all on desktop: a cell only phones have takes it.\n const room = !left && children.some((child) => phoneWidthInRow(child, node) !== undefined) && !children.some((child) => !child.hidden?.mobile && sharing(child));\n const filler = room ? (\n <NotOutlook>\n <td class={hiding({ hidden: { desktop: true } }, \"table-cell\").class} style={{ display: \"none\" }} />\n </NotOutlook>\n ) : (\n <td phone={tight ? { width: \"auto\" } : undefined} width={packed ? (justify === \"center\" ? \"50%\" : \"100%\") : undefined} />\n );\n const gaps = gapsBefore(children);\n const shares = packed ? undefined : phoneShares(children, phoneGap);\n // Whether the gaps on phones are the cells' padding: not beside a child of its own size.\n const inShares = !!shares && children.every((child) => child.hidden?.mobile || shares.get(child)?.width !== undefined) && ![...shares.values()].some((style) => style.width === \"auto\");\n const cells = children.map((child, index) => {\n const width = child.width ?? undefined;\n const hidden = hiding(child, \"table-cell\");\n const own = phoneWidthInRow(child, node);\n const held = packed && typeof child.style.width === \"number\" && line <= (node.contentWidth ?? 0) ? width : undefined;\n // Its phone width is its cell's, which would otherwise keep its desktop width.\n // A minimum beside a child of its own size holds it there, as far as a phone surely has room: more would push the\n // email past the screen, where a page's flex item shrinks.\n const phone = own !== undefined ? { width: own, minWidth: packed ? (typeof own === \"number\" && own <= FITS_A_PHONE ? own : 0) : undefined } : tight && held !== undefined ? { minWidth: 0 } : undefined;\n // A child whose size only the client knows is as wide as its content on one line, as a flex item of its own size\n // is on the page: beside the empty cells that take the room, its cell would otherwise shrink to its longest word.\n const cell = (\n <td\n class={hidden.class}\n width={width}\n valign={valign}\n phone={[shares?.get(child), phone]}\n style={[{ width, minWidth: held, whiteSpace: child.width === null ? \"nowrap\" : undefined }, hidden.style]}\n >\n {render(filling(child, own), { fill: width !== undefined })}\n </td>\n );\n return (\n <>\n {/* With the shares, the gaps on phones are the cells' padding. */}\n {gapCell(gapShown(shares && inShares ? { ...gaps[index], phone: false } : gaps[index], gap, phoneGap), gap, phoneGap, packed)}\n {child.hidden?.desktop ? <NotOutlook>{cell}</NotOutlook> : cell}\n </>\n );\n });\n return (\n <Table width=\"100%\">\n <tr>\n {(left || room) && (justify === \"end\" || justify === \"center\") && filler}\n {cells}\n {(left || room) && justify !== \"end\" && filler}\n </tr>\n </Table>\n );\n}\n","/**\n * A Layer: an Image with one child over it, the email way (anything else is reported before writing, see\n * `layerShape` in layout.tsx). The image is the cell's background, covering it (`background` and CSS for the clients\n * that take either, a VML rectangle for classic Outlook, which takes neither); the child is the cell's content, placed\n * by the cell's `valign` and `align`. The cell is the image's height at the Layer's width, or the Layer's height. A\n * background has no alternate text: the image's is an empty labelled image's, for screen readers, and the VML's.\n */\nimport { assetParts, type Asset } from \"../../kinds\";\nimport { h, NotOutlook, raw } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { boxWidth, layerShape, phoneWidth, sized, VALIGN } from \"./layout\";\nimport { bgcolor, ownBorders, pictureCell, Table } from \"./markup\";\nimport { hiding } from \"./styles\";\n\nconst ALIGN: Record<string, string | undefined> = { start: \"left\", center: \"center\", end: \"right\", stretch: undefined };\n\nexport const Layer: Component = ({ node, style, mobile, fill, render }) => {\n const shape = layerShape(node);\n if (\"problem\" in shape) return raw(\"\");\n const { base, over, height } = shape;\n const src = assetParts(base.props.src as Asset).src;\n const width = node.contentWidth ?? 0;\n const background = bgcolor(style.backgroundColor);\n const box = boxWidth(node, fill);\n const alt = (base.props.alt as string | undefined) || undefined;\n // An image hidden on phones leaves the Layer there as tall as what's over it (or its own height), as on a page.\n const phoneless = !!base.hidden?.mobile;\n const picture = pictureCell(src, { width, height, color: background, alt, repeat: \"no-repeat\", position: \"center\", size: \"cover\" });\n return (\n <Table id={node.id} phone={phoneWidth(mobile.maxWidth ?? mobile.width)} width={box.width} style={{ maxWidth: box.maxWidth, borderCollapse: ownBorders(style, mobile) }}>\n <tr>\n <td\n background={picture.background}\n bgcolor={background}\n height={height}\n valign={VALIGN[(style.alignItems as string) ?? \"start\"]}\n align={ALIGN[(style.justifyItems as string) ?? \"stretch\"]}\n phone={{\n border: mobile.border,\n backgroundColor: mobile.backgroundColor,\n backgroundImage: phoneless ? \"none\" : undefined,\n height: phoneless && style.height === undefined ? \"auto\" : undefined,\n }}\n style={{\n height,\n backgroundColor: style.backgroundColor,\n ...picture.style,\n border: style.border,\n borderRadius: style.borderRadius,\n // Its corners cut the child over the image too, as a page's do.\n overflow: style.borderRadius !== undefined ? \"hidden\" : undefined,\n }}\n >\n {picture.open}\n {alt && (\n <NotOutlook>\n <div class={hiding(base, \"block\").class} role=\"img\" aria-label={alt} />\n </NotOutlook>\n )}\n {over && render(over, { fill: style.justifyItems === \"stretch\" && !sized(over) })}\n {picture.close}\n </td>\n </tr>\n </Table>\n );\n};\n","/**\n * A Section: a band across the window, a row of the email's body table. Its\n * background and border on a full-width cell, its content at the content\n * width inside its padding.\n */\nimport { h, NotOutlook } from \"../jsx\";\nimport { px } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { Stack } from \"./layout\";\nimport { bgcolor, OutlookWidth, Table } from \"./markup\";\nimport { hiding } from \"./styles\";\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\n\nexport const Section: Component = ({ node, style, mobile, parent: root, rtl, render }) => {\n const width = root.width ?? 600;\n const padding = (style.padding as Sides | undefined) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n const phonePadding = mobile.padding as Sides | undefined;\n // The sides phones set, where they're other than desktop's: on the cell that holds the side padding.\n const phoneSides =\n phonePadding && (phonePadding.left !== padding.left || phonePadding.right !== padding.right) ? { paddingLeft: phonePadding.left, paddingRight: phonePadding.right } : undefined;\n const hidden = hiding(node, \"table-row\");\n\n const row = (\n <tr class={hidden.class} style={hidden.style}>\n <td\n id={node.id}\n align=\"center\"\n bgcolor={bgcolor(style.backgroundColor)}\n phone={{ paddingTop: phonePadding?.top, paddingBottom: phonePadding?.bottom, border: mobile.border, backgroundColor: mobile.backgroundColor }}\n style={{ paddingTop: padding.top || undefined, paddingBottom: padding.bottom || undefined, backgroundColor: style.backgroundColor, border: style.border }}\n >\n <OutlookWidth width={width}>\n {padding.left || padding.right || phoneSides ? (\n // The side padding on a cell around the content, and phones' own sides on it.\n <Table width=\"100%\" style={{ maxWidth: width }}>\n <tr>\n <td phone={phoneSides} style={padding.left || padding.right ? { padding: `0 ${px(padding.right)} 0 ${px(padding.left)}` } : undefined}>\n <Stack node={node} rtl={rtl} render={render} />\n </td>\n </tr>\n </Table>\n ) : (\n <Stack node={node} rtl={rtl} render={render} style={{ maxWidth: width }} />\n )}\n </OutlookWidth>\n </td>\n </tr>\n );\n // What's hidden on desktop isn't Outlook's at all.\n return node.hidden?.desktop ? <NotOutlook>{row}</NotOutlook> : row;\n};\n","/**\n * A Span: styled text inside text, only what differs from the text around it.\n * Raised or lowered, it's a <sup> or <sub> (every client, Word too, raises\n * and lowers those), with no line height of its own, so it doesn't push its\n * line apart.\n */\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { hiding, runText } from \"./styles\";\n\nconst TAGS: Record<string, string> = { super: \"sup\", sub: \"sub\" };\n\nexport const Span: Component = ({ node, style, parent, phoneText, text }) => {\n const hidden = hiding(node, \"inline\");\n const Tag = TAGS[style.verticalAlign as string] ?? \"span\";\n return (\n <Tag\n id={node.id}\n class={hidden.class}\n // Raised or lowered, it keeps no line height on phones either.\n phone={Tag === \"span\" ? phoneText : phoneText.filter(([property]) => property !== \"line-height\")}\n style={[runText(node, parent), { textDecoration: style.textDecoration, backgroundColor: style.backgroundColor, lineHeight: Tag === \"span\" ? undefined : \"0\" }, hidden.style]}\n >\n {text()}\n </Tag>\n );\n};\n","/**\n * A Table: a data table (no `role=\"presentation\"`), its columns' widths in a\n * colgroup as shares of its width (fixed layout), in its box. Header rows at\n * its top are its `<thead>`, footer rows at its end its `<tfoot>`.\n */\nimport { h } from \"../jsx\";\nimport { columnWidth } from \"../shared/css\";\nimport { isNode, shown, type Component } from \"./context\";\nimport { Box } from \"./layout\";\nimport { TABLE } from \"./markup\";\n\nexport const Table: Component = ({ node, style, fill, render }) => {\n const rows = node.children.filter(isNode).filter(shown);\n const columns = node.columns ?? [];\n const total = columns.reduce((sum, width) => sum + width, 0) || 1;\n const head = rows.findIndex((row) => !row.props.header);\n const [header, rest] = head < 0 ? [rows, []] : [rows.slice(0, head), rows.slice(head)];\n const foot = rest.findIndex((row) => row.props.footer);\n const [body, footer] = foot < 0 ? [rest, []] : [rest.slice(0, foot), rest.slice(foot)];\n return (\n <Box node={node} fill={fill}>\n <table cellpadding={TABLE.cellpadding} cellspacing={TABLE.cellspacing} border={TABLE.border} width=\"100%\" style={{ tableLayout: \"fixed\", borderCollapse: style.borderCollapse ?? \"separate\" }}>\n <colgroup>\n {columns.map((width, index) => (\n <col width={width} style={{ width: columnWidth(node, width, index, total) }} />\n ))}\n </colgroup>\n {header.length > 0 && <thead>{header.map((row) => render(row))}</thead>}\n {body.length > 0 && <tbody>{body.map((row) => render(row))}</tbody>}\n {footer.length > 0 && <tfoot>{footer.map((row) => render(row))}</tfoot>}\n </table>\n </Box>\n );\n};\n","/**\n * A TableCell: `<th>` in a header row, else `<td>`; its width in px for Word\n * and as a share of the row elsewhere (padding and border inside it), all of\n * its text styles on it (Outlook doesn't carry styles down through tables).\n */\nimport { h } from \"../jsx\";\nimport { share } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { bgcolor } from \"./markup\";\nimport { fullText } from \"./styles\";\n\nexport const TableCell: Component = ({ node, style, mobile, parent: row, phoneText, text }) => {\n const Cell = row.props.header ? \"th\" : \"td\";\n const span = Number(node.props.colSpan);\n return (\n <Cell\n id={node.id}\n scope={row.props.header ? \"col\" : undefined}\n colspan={span > 1 ? span : undefined}\n dir={node.props.dir as string | undefined}\n width={node.width ?? undefined}\n valign={(style.verticalAlign as string | undefined) ?? \"top\"}\n bgcolor={bgcolor(style.backgroundColor)}\n phone={[phoneText, { padding: mobile.padding, backgroundColor: mobile.backgroundColor }]}\n style={[\n // A header cell is bold of its own: its weight is always written.\n fullText(node, { weight: Cell === \"th\" }),\n {\n // Beside a column that keeps its own px, a free one takes what's left: Word's attribute isn't its width.\n width: node.width !== null && row.width ? (row.columnSizes && typeof style.width !== \"string\" ? (style.width ?? \"auto\") : share(node.width, row.width)) : undefined,\n boxSizing: \"border-box\",\n padding: style.padding,\n backgroundColor: style.backgroundColor,\n border: style.border,\n textDecoration: style.textDecoration,\n },\n ]}\n >\n {text()}\n </Cell>\n );\n};\n","/** A TableRow: its background on the row (and its cells, for Word); its text styles are its cells'. */\nimport { h, NotOutlook } from \"../jsx\";\nimport { isNode, type Component } from \"./context\";\nimport { bgcolor } from \"./markup\";\nimport { hiding } from \"./styles\";\n\nexport const TableRow: Component = ({ node, style, render }) => {\n const hidden = hiding(node, \"table-row\");\n const row = (\n <tr id={node.id} class={hidden.class} height={style.height as number | undefined} bgcolor={bgcolor(style.backgroundColor)} style={[{ backgroundColor: style.backgroundColor, height: style.height }, hidden.style]}>\n {node.children.filter(isNode).map((cell) => render(cell))}\n </tr>\n );\n // What's hidden on desktop isn't Outlook's at all.\n return node.hidden?.desktop ? <NotOutlook>{row}</NotOutlook> : row;\n};\n","/**\n * A Video: in an email, which can't play one, its thumbnail linked to it, as wide as its place (a YouTube video's own\n * thumbnail where it has none); its title is the image's alternate text. Without a thumbnail, a link with its title.\n */\nimport { assetParts, videoParts, type Asset } from \"../../kinds\";\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\nimport { fluidImage } from \"./layout\";\n\nexport const Video: Component = ({ node, style, mobile, fill }) => {\n const url = String(node.props.src);\n const title = String(node.props.title);\n const thumbnail = node.props.thumbnail !== undefined ? assetParts(node.props.thumbnail as Asset).src : videoParts(url)?.thumbnail;\n if (!thumbnail) {\n return (\n <a id={node.id} href={url}>\n {title}\n </a>\n );\n }\n const fluid = fluidImage(node, style, mobile, fill);\n return (\n <a id={node.id} href={url} title={title}>\n <img phone={fluid.phone} src={thumbnail} alt={title} width={node.width ?? undefined} border=\"0\" style={{ display: \"block\", ...fluid.style, height: \"auto\", border: \"0\" }} />\n </a>\n );\n};\n","/**\n * Email HTML from a laid-out template. Email clients are the hard target:\n * classic Outlook lays out with Word (no flexbox, no sizes on divs, no\n * padding on inline elements), and Gmail drops `<style>` for some accounts.\n * So:\n *\n * 1. Right without `<style>`: layout at desktop width, colors, fonts, sizes\n * and spacing are inline. The stylesheet only adds phone overrides,\n * hiding, hover and client resets.\n * 2. Widths are the resolver's, in px: Word sizes tables, cells and images by\n * their attributes and ignores the sizes of divs.\n * 3. Tables for layout (`role=\"presentation\"`, no spacing or borders),\n * spacing as cell padding, never margins.\n * 4. Outlook-only markup only inside `<!--[if mso]>`.\n *\n * Each component is written by its own file here (Button.tsx, Row.tsx, …), in\n * JSX that writes strings (../jsx.ts), from one props object (context.ts);\n * `markup.tsx`, `layout.tsx` and `styles.tsx` are what they share. What email\n * can't do as asked is found in one pass (support.ts).\n *\n * What the editor's email has, which has a record in real inboxes, it has too: the document's doctype and head, the\n * `border-collapse` reset, and a table of the content's width that only Outlook reads.\n *\n * Choices measured against captures of real classic Outlook: a 100% table with a px `max-width` is that width in\n * Word, so a box with its own width is `width=\"100%\" style=\"max-width:…\"`,\n * fluid elsewhere; a cell's width includes its padding; line heights are px\n * with `mso-line-height-rule: exactly` (Word drops unitless ones). Buttons\n * are tables, not VML: Word draws a VML button's label in its own font,\n * wrapped inside the shape's fixed size.\n */\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport type { EmailClient } from \"../../email-clients\";\nimport type { ResolvedDocument, ResolvedNode } from \"../../resolve\";\nimport { Fragment, h, raw, withStylesheet, type Html } from \"../jsx\";\nimport { BLOCK_MAP_VERSION, BlockMarks, MARK_PAIRS, markBlock, readMarks, withBlockMarks, type BlockMap } from \"../shared/block-map\";\nimport { utf8Bytes } from \"../shared/bytes\";\nimport { Stylesheet } from \"../shared/classes\";\nimport { attrs, css, escapeText, styleAttr } from \"../shared/css\";\nimport { fontFaces } from \"../shared/fonts\";\nimport { shown, type EmailOptions, type Props, type Component } from \"./context\";\nimport { Button } from \"./Button\";\nimport { Column } from \"./Column\";\nimport { Divider } from \"./Divider\";\nimport { Email } from \"./Email\";\nimport { Heading } from \"./Heading\";\nimport { HtmlBlock } from \"./Html\";\nimport { Image } from \"./Image\";\nimport { LineBreak } from \"./LineBreak\";\nimport { Link } from \"./Link\";\nimport { List } from \"./List\";\nimport { ListItem } from \"./ListItem\";\nimport { MergeTag } from \"./MergeTag\";\nimport { Text } from \"./Text\";\nimport { Row } from \"./Row\";\nimport { Layer } from \"./Layer\";\nimport { Section } from \"./Section\";\nimport { Span } from \"./Span\";\nimport { Table } from \"./Table\";\nimport { TableCell } from \"./TableCell\";\nimport { TableRow } from \"./TableRow\";\nimport { Video } from \"./Video\";\nimport { mobileTextOf, phoneText, type MobileText } from \"./styles\";\n\nexport type { EmailOptions } from \"./context\";\n\n/** The components, by where they go: in a stack or a Row, or inside text. (The root, `Email`, is called on its own.) */\nconst BLOCKS: Record<string, Component> = {\n Section,\n Row,\n Layer,\n Column,\n Text,\n Heading,\n Button,\n Link,\n Image,\n Divider,\n List,\n ListItem,\n Table,\n TableRow,\n TableCell,\n Video,\n Html: HtmlBlock,\n};\nconst INLINES: Record<string, Component> = {\n Span,\n Link,\n Image,\n LineBreak,\n MergeTag,\n};\n\n/** Where a node is written: its parent, whether it fills its cell, the phone text styles it inherits, inside text or not. */\ninterface Place {\n parent: ResolvedNode;\n fill: boolean;\n mobile: MobileText;\n inline: boolean;\n /** The parent's text runs right to left. */\n rtl: boolean;\n}\n\n/** What a node's component gets. */\nfunction propsOf(node: ResolvedNode, place: Place, options: EmailOptions): Props {\n const mobileText = mobileTextOf(node, place.mobile);\n // Inside text, CSS carries the text's phone styles down to its runs: a run writes only its own, its line\n // height from the text's phone line height where it has one (as on desktop, the run's size times the text's).\n const ownText = mobileTextOf(node, {});\n if (ownText.fontSize !== undefined && mobileText.lineHeight !== undefined) ownText.lineHeight = mobileText.lineHeight;\n const rtl = node.props.dir === \"rtl\" || (place.rtl && node.props.dir !== \"ltr\");\n const render: Props[\"render\"] = (child, how = {}) => write(child, { parent: node, fill: how.fill ?? false, mobile: mobileText, inline: how.inline ?? false, rtl }, options);\n return {\n node,\n style: node.style,\n mobile: node.mobile ?? {},\n parent: place.parent,\n fill: place.fill,\n inline: place.inline,\n phoneText: phoneText(node, place.inline ? ownText : mobileText),\n text: () => <>{node.children.map((child) => (typeof child === \"string\" ? child : render(child, { inline: true })))}</>,\n rtl,\n render,\n options,\n };\n}\n\n/** What writes no element of its own, so has no place in the block map: a line break, and a merge tag (its markup is the template's). */\nconst UNMAPPED = new Set([\"LineBreak\", \"MergeTag\"]);\n\nfunction write(node: ResolvedNode, place: Place, options: EmailOptions): Html {\n if (place.inline) {\n if (!shown(node)) return raw(\"\");\n const component = INLINES[node.type];\n if (!component) throw new Error(`[Elements] The email exporter can't render a ${node.type} inside text`);\n const html = component(propsOf(node, place, options));\n return UNMAPPED.has(node.type) ? html : markBlock(html, node);\n }\n const component = BLOCKS[node.type];\n if (!component) throw new Error(`[Elements] The email exporter can't render a ${node.type} here (in a ${place.parent.type})`);\n return markBlock(component(propsOf(node, place, options)), node);\n}\n\nexport interface EmailHtml {\n /** The whole email, from `<!DOCTYPE html>`. */\n html: string;\n /** What goes in `<head>`: meta tags, Outlook's settings, the title, the stylesheet. */\n head: string;\n /** What goes in `<body>`: the preview text and the email. */\n body: string;\n /** The `<body>`'s own style. */\n bodyStyle: string;\n /** What only the written email shows: its size against Gmail's limits. (What email can't do as asked is `emailSupport`'s, found before writing.) */\n diagnostics: Diagnostic[];\n /** With `blockMap`, where each block is in `html`. */\n blocks?: BlockMap;\n}\n\n/** An email is on a phone below its content width plus this. */\nexport const EMAIL_PHONE_MARGIN = 20;\n/** Gmail clips a message at this many bytes of HTML (\"[Message clipped]\"). */\nexport const GMAIL_CLIP_BYTES = 102_400;\n/** Gmail reads this much of a `<style>`. */\nexport const GMAIL_STYLE_BYTES = 16_384;\n\nexport function renderEmail(resolved: ResolvedDocument, options: EmailOptions & { blockMap?: boolean } = {}): EmailHtml {\n const root = resolved.root;\n // What email can't do as asked is found before writing (prepareTemplate: emailSupport); here, only what needs the written email.\n const d = new Diagnostics();\n const fonts = fontFaces(root, { swap: false });\n const width = root.width ?? 600;\n const write = (marks: BlockMarks | null) => {\n const sheet = new Stylesheet(options.classPrefix);\n const markup = withStylesheet(sheet, () => withBlockMarks(marks, () => String(markBlock(Email(propsOf(root, { parent: root, fill: false, mobile: {}, inline: false, rtl: false }, options)), root))));\n return { sheet, markup };\n };\n // With a block map, written with marks (again with another pair where the template's text holds one), which come out again.\n let written = options.blockMap ? null : write(null);\n let marked: ReturnType<typeof readMarks> = null;\n for (let pair = 0; !written; pair++) {\n if (pair === MARK_PAIRS) throw new Error(\"[Elements] blockMap can't mark this email: its text holds every pair of the noncharacters U+FDD0 to U+FDEF\");\n const marks = new BlockMarks(pair);\n const attempt = write(marks);\n marked = readMarks(marks, attempt.markup);\n if (marked) written = { sheet: attempt.sheet, markup: marked.text };\n }\n const { sheet, markup: email } = written;\n\n const background = root.style.backgroundColor as string | undefined;\n const lang = root.props.lang as string | undefined;\n const dir = root.props.dir as string | undefined;\n const title = typeof root.props.title === \"string\" ? root.props.title : undefined;\n const preview = typeof root.props.previewText === \"string\" && root.props.previewText ? root.props.previewText : undefined;\n\n const resets =\n \"table,td{mso-table-lspace:0pt;mso-table-rspace:0pt;border-collapse:collapse}img{-ms-interpolation-mode:bicubic}a[x-apple-data-detectors]{color:inherit!important;text-decoration:none!important}\";\n const phoneQuery = `@media (max-width: ${width + EMAIL_PHONE_MARGIN}px)`;\n const stylesheet = resets + sheet.css(phoneQuery, `@media (min-width: ${width + EMAIL_PHONE_MARGIN + 1}px)`, options.hideBelow ? `@media (max-width: ${options.hideBelow}px)` : phoneQuery);\n const head = [\n '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">',\n '<meta name=\"x-apple-disable-message-reformatting\">',\n '<!--[if !mso]><!--><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"><!--<![endif]-->',\n '<meta name=\"format-detection\" content=\"telephone=no,address=no,email=no,date=no,url=no\">',\n '<meta name=\"color-scheme\" content=\"light\">',\n '<meta name=\"supported-color-schemes\" content=\"light\">',\n \"<!--[if mso]><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml><![endif]-->\",\n title !== undefined ? `<title>${escapeText(title)}</title>` : \"\",\n // Web fonts where classic Outlook doesn't read them: it then draws the next font in each stack (seen in captures of it), where a face it can't load could leave it a default.\n fonts.length ? `<!--[if !mso]><!--><style>${fonts.join(\"\")}</style><!--<![endif]-->` : \"\",\n `<style>${stylesheet}</style>`,\n ].join(\"\");\n\n // Preview text: shown after the subject in inbox lists, hidden in the email; the filler keeps\n // clients from adding the email's first words after it. `data-skip-in-text` marks it as the preview for tools that\n // read the HTML (React Email's and today's components mark theirs so; plain text made from the HTML leaves it out).\n const preheader = preview\n ? `<div style=\"display:none;max-height:0;overflow:hidden;mso-hide:all\" aria-hidden=\"true\" data-skip-in-text=\"true\">${escapeText(preview)}${\"͏‌ \".repeat(30)}</div>`\n : \"\";\n // Gmail drops <html>'s attributes and <body>: the language, direction and background are kept on the email too. A word\n // too long for its line (a long link) breaks onto the next rather than widening the email past a phone's screen: in a\n // table cell too, whose width its longest word would set (word-break: break-word, as legacy's cells have it).\n const opening = `<div${attrs({ role: \"article\", \"aria-roledescription\": \"email\", \"aria-label\": title, lang, dir })}${styleAttr([[\"background-color\", background], [\"overflow-wrap\", \"break-word\"], [\"word-break\", \"break-word\"]])}>`;\n const body = `${preheader}${opening}${email}</div>`;\n const bodyDeclarations: Array<[string, string | undefined]> = [\n [\"margin\", \"0\"],\n [\"padding\", \"0\"],\n [\"-webkit-text-size-adjust\", \"100%\"],\n [\"background-color\", background],\n ];\n const bodyStyle = css(bodyDeclarations);\n const shell =\n `<!DOCTYPE HTML PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional //EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html${attrs({ lang, dir, xmlns: \"http://www.w3.org/1999/xhtml\", \"xmlns:v\": \"urn:schemas-microsoft-com:vml\", \"xmlns:o\": \"urn:schemas-microsoft-com:office:office\" })}>` +\n `<head>${head}</head><body${styleAttr(bodyDeclarations)}>`;\n const html = `${shell}${body}</body></html>`;\n\n const bytes = utf8Bytes(html);\n // Measured in Gmail on the web; the apps are likely the same.\n const gmails: EmailClient[] = [\"gmail\", \"gmail-app\", \"gmail-app-other\"];\n if (bytes > GMAIL_CLIP_BYTES) {\n d.warning(\"email/size\", `The email is ${Math.round(bytes / 1024)} KB; Gmail clips a message after ${GMAIL_CLIP_BYTES / 1024} KB (\"[Message clipped]\")`, \"root\", undefined, {\n clients: gmails,\n fix: \"shorten the email, or move long sections to a page: what follows the clip is behind a link\",\n });\n }\n const styleBytes = utf8Bytes(stylesheet);\n if (styleBytes > GMAIL_STYLE_BYTES) {\n d.warning(\"email/style-size\", `The stylesheet is ${Math.round(styleBytes / 1024)} KB; Gmail reads ${GMAIL_STYLE_BYTES / 1024} KB of a <style>`, \"root\", undefined, {\n clients: gmails,\n fix: \"use fewer phone and hover styles: each one adds a rule\",\n });\n }\n return { html, head, body, bodyStyle, diagnostics: d.list, ...(marked ? { blocks: blockMap(resolved, marked.found, email, utf8Bytes(shell + preheader + opening)) } : {}) };\n}\n\n/** Each mark's block, at its offset in UTF-8 bytes: `start` bytes before the email's markup, and its markup up to the mark. */\nfunction blockMap(resolved: ResolvedDocument, found: Array<{ node: ResolvedNode; at: number }>, email: string, start: number): BlockMap {\n const templatePath = resolved.templatePath ?? ((path: string) => path);\n let offset = start;\n let from = 0;\n const entries = found.map(({ node, at }) => {\n offset += utf8Bytes(email.slice(from, at));\n from = at;\n return { path: templatePath(node.path), ...(node.id ? { nodeId: node.id } : {}), offset };\n });\n return { version: BLOCK_MAP_VERSION, unit: \"utf8\", entries };\n}\n","/**\n * What an output can't do as a template asks, from the components'\n * definitions: each style and prop says, for each output it renders to, how\n * that output shows it (`support`), and so does each condition (conditions.ts)\n * and each style inside one. One pass reads it for every output, for what the\n * author set (not a component's own defaults): `none` is a warning\n * (`<output>/unsupported`), `partial` a note (`<output>/degraded`), `outlook`\n * a note (`email/outlook-degraded`), each naming the email clients it's about\n * where the rule does (declared.ts). Each output adds what no single style or\n * prop says (email: `email/support.ts`).\n */\nimport { blockOf, CONDITIONS, shownAnywhere } from \"../../conditions\";\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport type { Target } from \"../../define\";\nimport { reportDeclared } from \"../../declared\";\n\nconst isNode = (child: ResolvedNode | string): child is ResolvedNode => typeof child !== \"string\";\nconst same = (a: Json | undefined, b: Json | undefined) => JSON.stringify(a) === JSON.stringify(b);\n\nexport function support(root: ResolvedNode, target: Target): Diagnostic[] {\n const d = new Diagnostics();\n const visit = (node: ResolvedNode) => {\n const { definition } = node;\n const byProp = definition.defaultStyleBy ? (definition.defaultStyleBy.values[String(node.props[definition.defaultStyleBy.prop])] as Record<string, Json> | undefined) : undefined;\n for (const [key, value] of Object.entries(node.style)) {\n const fallback = byProp?.[key] ?? (definition.defaultStyle as Record<string, Json> | undefined)?.[key];\n if (same(value, fallback)) continue;\n reportDeclared(d, node, `${node.path}.style.${key}`, key, value, definition.style[key]?.support?.[target], target);\n }\n for (const [key, value] of Object.entries(node.props)) {\n if (same(value, definition.props[key]?.default as Json | undefined)) continue;\n reportDeclared(d, node, `${node.path}.props.${key}`, key, value, definition.props[key]?.support?.[target], target);\n }\n for (const condition of CONDITIONS) {\n const block = blockOf(node, condition);\n if (!block || (condition.hiddenKey && node.hidden?.[condition.hiddenKey])) continue;\n const own = condition.support[target];\n // The block itself, once: what this output does with it.\n reportDeclared(d, node, `${node.path}.${condition.name}`, condition.name, block, own, target);\n // Where it doesn't apply at all, what's in it doesn't either.\n if (!own || own.level === \"none\") continue;\n for (const [key, value] of Object.entries(block)) {\n const rules = condition.styles?.[key]?.[target] ?? definition.style[key]?.support?.[target];\n reportDeclared(d, node, `${node.path}.${condition.name}.${key}`, key, value, rules, target, condition.outlookApplies);\n }\n }\n for (const child of node.children) if (isNode(child) && shownAnywhere(child)) visit(child);\n };\n visit(root);\n return d.list;\n}\n","/**\n * What email can't do as a template asks, found in one pass before the\n * email is written: what each style and prop declares for email (the shared\n * pass, `shared/support.ts`), and what no single style or prop says: a Row\n * child whose size isn't known, a wrapped Row's gap between its lines, an image\n * without a width, a hidden table cell, a font stack that ends on a web font,\n * phone styles where a client doesn't apply them, an image format a client\n * doesn't show, CSS in an Html block that an email client removes.\n * Size budgets are checked on the written email (index.tsx).\n */\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport { COMPONENTS } from \"../../components\";\nimport { caniemail, type EmailClient } from \"../../email-clients\";\nimport { assetParts, fontStack, videoParts, type Asset, type FontFace } from \"../../kinds\";\nimport { NO_WEB_FONTS } from \"../../roots\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport { support } from \"../shared/support\";\nimport { wrapsPastIts, wrapsWithGap } from \"../shared/estimate\";\nimport { isNode, shown } from \"./context\";\nimport { layerShape } from \"./layout\";\n\n/** `templatePath`: a node's place in the template (inside the component that made it, where one did). */\nexport function emailSupport(root: ResolvedNode, templatePath: (path: string) => string = (path) => path): Diagnostic[] {\n const d = new Diagnostics();\n d.list.push(...support(root, \"email\"));\n const webFonts = new Set(((root.props.fonts as FontFace[] | undefined) ?? []).map((face) => face.family.toLowerCase()));\n const phone = { styled: false, phoneHidden: false, desktopHidden: false };\n const visit = (node: ResolvedNode) => {\n structure(node, d);\n fallback(node, webFonts, d);\n if (node.type === \"Html\") htmlBlock(node, d);\n if (node.type === \"Image\") imageFormat(node, \"src\", d);\n if (node.type === \"Video\" && node.props.thumbnail !== undefined) imageFormat(node, \"thumbnail\", d);\n // What a built-in component hides itself (a Menu's separators on phones) is its own, not the author's to change.\n if (node.mobile && Object.keys(node.mobile).length) phone.styled = true;\n if (node.hidden?.mobile && !builtIn(templatePath(node.path))) phone.phoneHidden = true;\n if (node.hidden?.desktop && !builtIn(templatePath(node.path))) phone.desktopHidden = true;\n for (const child of node.children) if (isNode(child) && shown(child)) visit(child);\n };\n visit(root);\n phoneStyles(root, phone, d);\n return d.list;\n}\n\n/** Whether a node was made by a built-in component's expansion: its place in the template is inside one, `…(Menu)…`. */\nfunction builtIn(place: string): boolean {\n const made = [...place.matchAll(/\\((\\w+)\\)/g)].pop()?.[1];\n return !!made && Object.prototype.hasOwnProperty.call(COMPONENTS, made);\n}\n\n/**\n * The clients that show an email on a phone without its phone styles (caniemail's css-at-media and html-style): with\n * another account in the Gmail app, and in some webmail, the email's <style> or its media queries are removed. What\n * Elements does without them (a Row stacks) still happens.\n */\nexport const NO_PHONE_STYLES: readonly EmailClient[] = [\"gmail-app-other\", \"sfr\", \"laposte\", \"gmx\", \"web-de\", \"rainloop\"];\n\n/**\n * Said once for the email: a warning where it hides something on desktop (shown only on phones, it then shows\n * nowhere), a note otherwise (what's hidden on phones shows, its phone styles change nothing).\n */\nfunction phoneStyles(root: ResolvedNode, phone: { styled: boolean; phoneHidden: boolean; desktopHidden: boolean }, d: Diagnostics): void {\n const parts = [phone.desktopHidden && \"what's hidden on desktop shows nowhere\", phone.phoneHidden && \"what's hidden on phones shows\", phone.styled && \"it keeps its desktop styles\"].filter(Boolean);\n if (!parts.length) return;\n d.add(\"email/phone-styles\", phone.desktopHidden ? \"warning\" : \"info\", `On phones, the email's phone styles don't apply: ${parts.join(\", \")} (Rows still stack)`, root.path, root.id, {\n clients: NO_PHONE_STYLES,\n fix: phone.desktopHidden ? \"show what a reader needs on desktop too, and hide on phones only what they can do without\" : undefined,\n see: caniemail(\"css-at-media\"),\n });\n}\n\n/**\n * Image formats some clients don't show (caniemail's image-webp, image-avif, image-svg): by the file's extension, its\n * data: type, or the format an image CDN is asked for (`?fm=webp`, `?format=avif`, Cloudinary's `f_webp`).\n */\nexport const IMAGE_FORMATS: Readonly<Record<string, { clients: readonly EmailClient[]; feature: string; name: string }>> = {\n webp: { clients: [\"outlook\"], feature: \"image-webp\", name: \"a WebP\" },\n avif: { clients: [\"outlook\", \"fastmail\", \"gmx\", \"web-de\", \"orange\", \"sfr\", \"mail-ru\", \"ionos\"], feature: \"image-avif\", name: \"an AVIF\" },\n svg: { clients: [\"mail-ru\"], feature: \"image-svg\", name: \"an SVG\" },\n};\n\n/**\n * Where an image's format is said, first to last: its data: type, then the format an image CDN is asked for (which it\n * serves whatever the file's extension), then its extension. The first found is the format, even one every client shows.\n */\nconst FORMAT_IN = [/^data:image\\/([a-z]+)/i, /[?&](?:fm|format|f)=(webp|avif|svg|png|jpe?g|gif)\\b/i, /\\/f_(webp|avif|svg|png|jpe?g|gif)[,/]/i, /\\.([a-z]+)(?:[?#]|$)/i];\n\nfunction imageFormat(node: ResolvedNode, key: \"src\" | \"thumbnail\", d: Diagnostics): void {\n const src = assetParts(node.props[key] as Asset).src;\n const format = FORMAT_IN.map((pattern) => pattern.exec(src)?.[1]).find(Boolean)?.toLowerCase();\n const known = format && Object.prototype.hasOwnProperty.call(IMAGE_FORMATS, format) ? IMAGE_FORMATS[format] : undefined;\n if (!known) return;\n const what = key === \"src\" ? \"This Image is\" : \"This Video's thumbnail is\";\n d.warning(\"email/image-format\", `${what} ${known.name} file, which these email clients don't show`, `${node.path}.props.${key}`, node.id, {\n clients: known.clients,\n fix: \"use a PNG, JPEG or GIF file\",\n see: caniemail(known.feature),\n });\n}\n\n/** A stack that ends on a web font leaves the client to choose a font where that one doesn't load. */\nfunction fallback(node: ResolvedNode, webFonts: Set<string>, d: Diagnostics): void {\n const stack = node.style.fontFamily;\n if (typeof stack !== \"string\" || !webFonts.size) return;\n const families = fontStack(stack);\n const last = families[families.length - 1];\n if (!last || !webFonts.has(last.toLowerCase())) return;\n d.warning(\n \"email/font-fallback\",\n `This font stack ends with the web font \"${last}\": where it doesn't load, the email client picks its own font`,\n `${node.path}.style.fontFamily`,\n node.id,\n { clients: NO_WEB_FONTS, fix: `end it with a font the client has: \"${stack}, Arial, sans-serif\"`, see: caniemail(\"css-at-font-face\") }\n );\n}\n\n/** What email can't do that no single style or prop says. */\nfunction structure(node: ResolvedNode, d: Diagnostics): void {\n const { path, id } = node;\n if (node.type === \"Row\") {\n // A Row kept side by side wraps its children in every client but classic Outlook (a Menu's links): said where they\n // look too wide for one line.\n const past = node.props.stackOnMobile === false ? wrapsPastIts(node) : null;\n if (past !== null) {\n d.add(\n \"email/outlook-degraded\",\n \"info\",\n `What it holds looks about ${past}px wide on one line, wider than its ${node.contentWidth}px (an estimate: text isn't measured yet): classic Outlook can't wrap it onto another line as other clients do, and draws it wider`,\n path,\n id,\n { clients: [\"outlook\"], fix: \"put less in it, or let it stack on phones (stackOnMobile)\" }\n );\n }\n // Its children wrap as inline-blocks, whose lines touch: anything between them but no space around them takes a\n // negative margin or flex-wrap, neither of which Gmail or Yahoo reads.\n const lines = wrapsWithGap(node);\n if (lines !== null) {\n d.add(\n \"email/degraded\",\n \"info\",\n `What it holds looks too wide for one line on ${lines} (an estimate), and an email can't keep its gap between the lines it wraps onto: they touch. Give what's in it padding, or put each line in a Row of its own`,\n `${path}.style.gap`,\n id\n );\n }\n // A Link or a line of text in a Text is as wide as its text in a cell of its own, in Outlook too (today's Menu writes its\n // links so): only a box whose size isn't known needs a width.\n for (const child of node.children.filter(isNode).filter(shown)) {\n if (child.width === null && child.type !== \"Link\" && child.type !== \"Text\") {\n d.warning(\"email/width\", `This ${child.type} takes its own size in a Row, and its size isn't known: give it a width, so Outlook can lay the Row out`, `${child.path}.style.width`, child.id);\n }\n }\n }\n if (node.type === \"Layer\") {\n const shape = layerShape(node);\n if (\"problem\" in shape) d.error(\"email/layer\", shape.problem, shape.path, id);\n // Where its image is hidden on phones, it's as tall as what's over it there, as on a page.\n else if (node.style.height === undefined && !shape.base.hidden?.mobile) {\n d.add(\"email/layer-phone\", \"info\", \"On phones, the email keeps this Layer's height and cuts its image at the sides (a page scales it): give the Layer a height to draw both the same\", `${path}.style.height`, id);\n }\n }\n if (node.type === \"TableCell\" && node.hidden) {\n d.warning(\"email/unsupported\", \"A TableCell can't be hidden in email (its row would lose a column): hide its TableRow\", `${path}.hidden`, id);\n }\n if (node.type === \"Video\" && node.props.thumbnail === undefined && !videoParts(String(node.props.src))?.thumbnail) {\n d.warning(\"email/video-thumbnail\", \"A Vimeo video's thumbnail can't be found without the network: give this Video a thumbnail, or the email shows a link with its title\", `${path}.props.thumbnail`, id);\n }\n if (node.type === \"Image\" && node.width === null) {\n d.warning(\"email/image-width\", \"This Image has no width: Outlook shows it at the size of its file, however wide that is. Give it a width, or the file's width in src\", `${path}.props.src`, id);\n }\n}\n\n/**\n * CSS in an Html block's markup that an email client removes, found by pattern (the markup isn't parsed, so each is a\n * note that it may): what captures of Gmail and Outlook.com on the web showed them removing, and what caniemail's\n * tables say (`feature`, checked against them with what the captures add: test/caniemail.test.ts). Elements writes\n * none of these itself.\n */\nexport const HTML_CSS: ReadonlyArray<{ pattern: RegExp; clients: readonly EmailClient[]; removes: string; fix: string; feature?: string; use?: string }> = [\n { pattern: /!\\s*(?!important\\b)[iI][mM][pP][oO][rR][tT][aA][nN][tT]\\b/, clients: [\"gmail\"], removes: \"!important not written in lowercase: Gmail removes the whole style attribute, or the whole <style>, that holds it\", fix: \"write !important in lowercase\" },\n { pattern: /margin[a-z-]*\\s*:([^;\"'}]*\\s)?-\\d/i, clients: [\"gmail\", \"outlook-com\"], removes: \"a negative margin: the client removes the whole margin declaration\", fix: \"move it with padding on what holds it instead\" },\n {\n pattern: /(^|[\\s;{\"'])position\\s*:\\s*absolute\\b/i,\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"yahoo\", \"aol\", \"hey\", \"sfr\", \"laposte\", \"mail-ru\", \"gmx\", \"web-de\"],\n removes: \"position: absolute: the client removes it\",\n fix: \"lay it out without position (a Layer puts content over an image)\",\n feature: \"css-position\",\n },\n {\n // Outlook.com removes every position (captures); the others not named keep relative.\n pattern: /(^|[\\s;{\"'])position\\s*:\\s*relative\\b/i,\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"mail-ru\", \"gmx\", \"web-de\"],\n removes: \"position: relative: the client removes it, and what it moves stays where it is\",\n fix: \"move it with padding instead\",\n feature: \"css-position\",\n use: \"relative\",\n },\n {\n pattern: /var\\(\\s*--|(^|[\\s;{\"'])--[\\w-]+\\s*:/i,\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"yahoo\", \"aol\", \"orange\", \"mail-ru\", \"fastmail\", \"gmx\", \"web-de\"],\n removes: \"CSS variables: the client removes var() and their declarations\",\n fix: \"write the values themselves\",\n feature: \"css-variables\",\n },\n {\n pattern: /gradient\\(/i,\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail-app\", \"gmail-app-other\", \"yahoo\", \"aol\", \"orange\", \"gmx\", \"web-de\"],\n removes: \"a gradient: the client removes it\",\n fix: \"give it a solid background color too, or use an image\",\n feature: \"css-linear-gradient\",\n },\n { pattern: /\\b(oklch|oklab|lch|lab|hwb|color-mix|color)\\(/i, clients: [\"gmail\", \"outlook-com\"], removes: \"a newer color syntax: Outlook.com removes the declaration, and Gmail every inline style on its element\", fix: \"write the color as hex or rgb()\" },\n { pattern: /rgba?\\(\\s*[\\d.]+%?\\s+[\\d.]/i, clients: [\"gmail\"], removes: \"rgb() with spaces between its numbers: Gmail removes the whole style attribute, or the whole <style>\", fix: \"separate them with commas: rgb(8, 121, 161)\" },\n {\n pattern: /<style[\\s>]/i,\n clients: [\"gmail\", \"gmail-app\", \"gmail-app-other\", \"protonmail\", \"gmx\", \"web-de\", \"sfr\", \"laposte\", \"rainloop\"],\n removes: \"a <style> in the email's body: the client removes it, and what it styles shows without it\",\n fix: \"write the styles inline, on the elements they're for\",\n feature: \"html-style\",\n },\n { pattern: /box-shadow\\s*:/i, clients: [\"outlook\", \"gmail\", \"gmail-app\", \"yahoo\", \"aol\", \"orange\", \"gmx\", \"web-de\"], removes: \"box-shadow: the client removes it\", fix: \"draw it with a border, or leave it out\", feature: \"css-box-shadow\" },\n { pattern: /text-shadow\\s*:/i, clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\"], removes: \"text-shadow: the client removes it\", fix: \"leave it out, and keep the text readable without it\", feature: \"css-text-shadow\" },\n { pattern: /display\\s*:\\s*flex\\b/i, clients: [\"outlook\", \"gmail-app-other\", \"orange\", \"gmx\", \"web-de\"], removes: \"display: flex: the client lays it out as blocks\", fix: \"lay it out with a Row\", feature: \"css-display-flex\" },\n {\n pattern: /display\\s*:\\s*inline-flex\\b/i,\n clients: [\"outlook\", \"gmail-app-other\", \"yahoo\", \"aol\", \"orange\", \"gmx\", \"web-de\"],\n removes: \"display: inline-flex: the client lays it out without flex\",\n fix: \"lay it out with a Row\",\n feature: \"css-display-flex\",\n use: \"inline\",\n },\n { pattern: /display\\s*:\\s*(inline-)?grid\\b/i, clients: [\"outlook\", \"gmail-app-other\", \"orange\", \"gmx\", \"web-de\"], removes: \"display: grid: the client lays it out as blocks\", fix: \"lay it out with a Row or a Grid\", feature: \"css-display-grid\" },\n { pattern: /(^|[\\s;{\"'])opacity\\s*:/i, clients: [\"outlook\", \"aol\", \"orange\", \"mail-ru\", \"gmx\", \"web-de\"], removes: \"opacity: the client shows it opaque\", fix: \"use a lighter color instead\", feature: \"css-opacity\" },\n {\n pattern: /object-fit\\s*:/i,\n clients: [\"outlook\", \"gmail-app-other\", \"yahoo\", \"aol\", \"orange\", \"gmx\", \"web-de\"],\n removes: \"object-fit: the client stretches the image to its box\",\n fix: \"crop the image file to the size it's shown at\",\n feature: \"css-object-fit\",\n },\n {\n pattern: /(^|[\\s;{\"'])aspect-ratio\\s*:/i,\n clients: [\"outlook\", \"outlook-com\", \"outlook-mac\", \"outlook-app\", \"gmail\", \"gmail-app\", \"gmail-app-other\", \"yahoo\", \"aol\", \"samsung-email\", \"thunderbird\", \"fastmail\", \"gmx\", \"web-de\", \"orange\"],\n removes: \"aspect-ratio: the client removes it\",\n fix: \"give it a width and a height\",\n feature: \"css-aspect-ratio\",\n },\n];\n\n/** What only classic Outlook reads (`<!--[if mso]>…<![endif]-->`): the others never see it. */\nconst OUTLOOK_ONLY = /<!--\\[if\\s+(?:(?:gte?|lte?)\\s+)?mso[^\\]]*\\]>[\\s\\S]*?<!\\[endif\\]-->/gi;\n\nfunction htmlBlock(node: ResolvedNode, d: Diagnostics): void {\n if (typeof node.props.html !== \"string\") return;\n const markup = node.props.html.replace(OUTLOOK_ONLY, \"\");\n for (const check of HTML_CSS) {\n if (check.pattern.test(markup)) {\n d.add(\"email/html-css\", \"info\", `This Html block's markup may have ${check.removes}`, `${node.path}.props.html`, node.id, { clients: check.clients, fix: check.fix, see: check.feature && caniemail(check.feature) });\n }\n }\n}\n","/**\n * What a PDF (a Document's) and an image (a Canvas's) can't show as a template asks, that the page writer's checks\n * don't see: a page's checks are a browser's, and a PDF or an image has no pointer and no player (phone styles are\n * already an error in a Document or a Canvas). Each\n * output's own adds what no single style or prop says, as email/support.ts does for email; the styles and props that\n * declare how a PDF or an image shows them (`support`) join when every one of them does (test/support.test.ts).\n *\n * And content that can't fit: a Document's page and a Canvas are a fixed size, and what doesn't fit is cut off. Text\n * isn't measured yet (RFC 0002), so its height is an estimate from its length and size, and only content that looks\n * clearly taller is said, as an estimate.\n */\nimport { blockOf, CONDITIONS, shownAnywhere } from \"../../conditions\";\nimport { assetParts, type Asset } from \"../../kinds\";\nimport { documentPages, pageBox } from \"../../document\";\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport { toPx, type ResolvedNode } from \"../../resolve\";\nimport { CHARACTER, characters, wrapsPastIts } from \"./estimate\";\n\nconst isNode = (child: ResolvedNode | string): child is ResolvedNode => typeof child !== \"string\";\nconst OUTPUT = { pdf: \"a PDF\", image: \"an image\" } as const;\n\n/** What a PDF or an image can't show of a template, as warnings that say what it shows instead. */\nexport function pagedSupport(root: ResolvedNode, output: \"pdf\" | \"image\"): Diagnostic[] {\n const d = new Diagnostics();\n const where = OUTPUT[output];\n const visit = (node: ResolvedNode) => {\n if (!shownAnywhere(node)) return;\n for (const condition of CONDITIONS) {\n if (condition.paged && blockOf(node, condition)) d.warning(`${output}/unsupported`, condition.paged(node, where), `${node.path}.${condition.name}`, node.id);\n }\n if (node.type === \"Video\") {\n const shows = output === \"pdf\" ? \"its thumbnail (where its file is given) or its title, linked to it\" : \"its title\";\n d.warning(`${output}/unsupported`, `A Video isn't possible in ${where}: it has no player. It shows ${shows}`, node.path, node.id);\n }\n if (node.type === \"Html\") {\n d.warning(`${output}/unsupported`, `Markup isn't possible in ${where}: it has no browser. The Html block shows its plain text`, node.path, node.id);\n }\n const past = wrapsPastIts(node);\n if (past !== null) {\n d.warning(\n `${output}/unsupported`,\n `What it holds looks about ${past}px wide on one line, wider than its ${node.contentWidth}px (an estimate: text isn't measured yet), and ${where} can't wrap it onto another line: it goes past the edge`,\n node.path,\n node.id\n );\n }\n node.children.filter(isNode).forEach(visit);\n };\n visit(root);\n return d.list;\n}\n\n// ─── Fitting ───────────────────────────────────────────────────────────────\n\n/** How much taller than its room content must look before it's said: the estimate is rough. */\nconst CLEARLY = 1.25;\n\nconst sides = (value: unknown) => {\n const s = (value ?? {}) as Partial<Record<\"top\" | \"right\" | \"bottom\" | \"left\", number>>;\n return { top: s.top ?? 0, bottom: s.bottom ?? 0 };\n};\nconst lineWidth = (line: unknown) => (line && typeof line === \"object\" && typeof (line as { width?: unknown }).width === \"number\" ? (line as { width: number }).width : 0);\n/** The padding and borders above and below a node's content. */\nconst frame = (node: ResolvedNode) => {\n const padding = sides(node.style.padding);\n const border = (node.style.border ?? {}) as Record<string, unknown>;\n return padding.top + padding.bottom + lineWidth(border.top) + lineWidth(border.bottom) + lineWidth(node.style.borderTop) + lineWidth(node.style.borderBottom);\n};\n/** Laid out side by side: a Row's children (a Grid's, a Menu's and a Social's, as laid out), a table row's cells, a Layer's on each other. */\nconst SIDE_BY_SIDE = new Set([\"Row\", \"TableRow\", \"Layer\"]);\n\n/** A node's height, estimated: its text's lines at its width, an image's at its ratio, its children stacked or side by side. */\nfunction heightOf(node: ResolvedNode, available: number): number {\n if (node.hidden?.desktop) return 0;\n const set = toPx(node.style.height, null);\n if (set !== null) return set;\n const width = node.contentWidth ?? node.width ?? available;\n if (node.children.some((child) => typeof child === \"string\" && child.trim())) {\n const perLine = Math.max(1, Math.floor(width / (node.text.fontSize * CHARACTER)));\n return Math.ceil(characters(node) / perLine) * node.text.lineHeightPx + frame(node);\n }\n if (node.type === \"Image\" && node.props.src !== undefined) {\n const { width: w, height: h } = assetParts(node.props.src as Asset);\n return (w && h ? ((node.width ?? w) * h) / w : 0) + frame(node);\n }\n const children = node.children.filter(isNode).filter((child) => !child.hidden?.desktop);\n if (SIDE_BY_SIDE.has(node.type)) return Math.max(0, ...children.map((child) => heightOf(child, width))) + frame(node);\n const gap = toPx(node.style.gap, null) ?? 0;\n return children.reduce((sum, child) => sum + heightOf(child, width), 0) + gap * Math.max(0, children.length - 1) + frame(node);\n}\n\n/** Content that looks clearly taller than the page or canvas it's on: cut off where it ends. */\nexport function overflow(root: ResolvedNode): Diagnostic[] {\n const d = new Diagnostics();\n const say = (code: string, height: number, room: number, path: string, what: string) => {\n if (room <= 0 || height <= room * CLEARLY) return;\n d.warning(code, `${what} looks about ${Math.round((height / room) * 100)}% as tall as its room (an estimate: text isn't measured yet). What doesn't fit is cut off`, path);\n };\n if (root.type === \"Document\") {\n const box = pageBox(root.props);\n const { pages, header, footer } = documentPages(root);\n const room = box.contentHeight - (header ? heightOf(header, box.contentWidth) : 0) - (footer ? heightOf(footer, box.contentWidth) : 0);\n pages.forEach(({ page, children }, i) => {\n const holder = page ?? root;\n const gap = toPx(holder.style.gap, null) ?? 0;\n const height = children.reduce((sum, child) => sum + heightOf(child, box.contentWidth), 0) + gap * Math.max(0, children.length - 1) + (page ? frame(page) : 0);\n say(\"document/overflow\", height, room, page?.path ?? children[0]?.path ?? \"root\", `Page ${i + 1}'s content (split it with a PageBreak, or into pages)`);\n });\n } else if (root.type === \"Canvas\") {\n const room = Number(root.props.height) - frame(root);\n say(\"canvas/overflow\", heightOf(root, Number(root.props.width)) - frame(root), room, \"root\", \"The Canvas's content\");\n }\n return d.list;\n}\n","/**\n * What the page components get: one props object per node, with\n * where its parent's layout places it, its classes, and its children\n * written, so components don't import each other.\n */\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport type { Html } from \"../jsx\";\nimport type { Declarations } from \"../shared/css\";\n\nexport interface PageOptions {\n /** How a merge tag is written (default `{{name}}`): into the HTML as it is, the name in it escaped. */\n mergeTag?: (name: string) => string;\n /** What every class name in the stylesheet starts with (default \"e\"), for HTML embedded where other CSS is. */\n classPrefix?: string;\n}\n\nexport interface Props {\n node: ResolvedNode;\n /** Its styles, its component's defaults included. */\n style: Record<string, Json>;\n parent: ResolvedNode;\n /** What its parent's layout adds to its style: a Row's flex, a stack's `align-self`. */\n placement: Declarations;\n /** Its classes: its phone styles, hiding, hover, a Row's stacking on phones. */\n classes(): string | undefined;\n /** Its children: its text and the runs in it, or the nodes it lays out. */\n children(): Html;\n /** Whether its text runs right to left: its own `dir`, else its parent's (the root's `dir` to start with). */\n rtl: boolean;\n /** Writes a child with what this node's layout adds to it. */\n render(child: ResolvedNode, placement: Declarations): Html;\n options: PageOptions;\n}\n\n/** A component's markup in this output, from its props. */\nexport type Component = (props: Props) => Html;\n\nexport const isNode = (child: ResolvedNode | string): child is ResolvedNode => typeof child !== \"string\";\n","/**\n * Page layout: flexbox. Where a child sits in a stack or a Row, a box's\n * styles, and a stack's own.\n */\nimport type { ResolvedNode } from \"../../resolve\";\nimport type { Style } from \"../jsx\";\nimport { length, type Declarations } from \"../shared/css\";\n\nexport const FLEX_ALIGN: Record<string, string> = { start: \"flex-start\", center: \"center\", end: \"flex-end\", stretch: \"stretch\" };\nconst TEXT_ALIGN: Record<string, string> = { left: \"flex-start\", justify: \"flex-start\", center: \"center\", right: \"flex-end\" };\n/** The same in a stack whose text runs right to left, where a stack starts on its right. */\nconst TEXT_ALIGN_RTL: Record<string, string> = { left: \"flex-end\", justify: \"flex-start\", center: \"center\", right: \"flex-start\" };\nexport const JUSTIFY: Record<string, string> = { start: \"flex-start\", center: \"center\", end: \"flex-end\", \"space-between\": \"space-between\" };\n\n/**\n * Where a child sits across a stack (root, Section, Column): one that fills\n * the width (a Text, a Row) fills it; one with its own size (a Button, an\n * Image, a box with a width) sits where the stack's `align` says, else where\n * its text alignment says, as in email. `rtl`: the stack's text runs right to left.\n */\nexport function alignSelf(child: ResolvedNode, stack: ResolvedNode, rtl = false): Declarations {\n if (child.type === \"Divider\") return [];\n const sized = child.style.width !== undefined || child.style.maxWidth !== undefined;\n if (child.definition.sizing !== \"shrink\" && !sized) return [];\n const align = (child.style.alignSelf ?? stack.style.alignItems) as string | undefined;\n if (align === \"stretch\") return [];\n // A box that fills the width up to a maximum still fills it: placed, not shrunk to its content.\n const fill: Declarations = child.definition.sizing === \"stretch\" && child.style.width === undefined ? [[\"width\", \"100%\"]] : [];\n const place = align ? FLEX_ALIGN[align] : (rtl ? TEXT_ALIGN_RTL : TEXT_ALIGN)[stack.text.textAlign];\n // With its padding on top of its width, it may be wider than its place: it runs past the end, as a line of text does.\n const safe: Declarations = child.style.boxSizing === \"content-box\" && place !== \"flex-start\" ? [[\"align-self\", `safe ${place}`]] : [];\n return [[\"align-self\", place], ...safe, ...fill];\n}\n\n/**\n * A Layer's child: in its one cell, over the ones before it. One that fills the width (a Column, a Text) fills it, as\n * in a stack and in email; the Layer's justifyItems places those with their own size.\n */\nexport function layerPlacement(child: ResolvedNode): Declarations {\n const sized = child.style.width !== undefined || child.style.maxWidth !== undefined;\n const fills = child.definition.sizing === \"stretch\" && !sized;\n return [[\"grid-area\", \"1 / 1\"], [\"min-width\", \"0\"], ...(fills ? ([[\"justify-self\", \"stretch\"]] as Declarations) : [])];\n}\n\n/** A Row's child: its width as a flex basis, or its share of what's left. */\nexport function rowPlacement(child: ResolvedNode, row: ResolvedNode): Declarations {\n const out: Declarations = [];\n const width = length(child.style.width);\n if (width !== undefined) out.push([\"flex\", `0 1 ${width}`]);\n else if (child.style.flex === \"none\" || child.style.flex === 0) out.push([\"flex\", \"0 0 auto\"]);\n else out.push([\"flex\", `${typeof child.style.flex === \"number\" ? child.style.flex : 1} 1 0%`]);\n if (child.style.minWidth === undefined) out.push([\"min-width\", \"0\"]);\n // Content with its own size keeps it, not the Row's height.\n if (child.definition.sizing === \"shrink\" && child.type !== \"Link\") out.push([\"align-self\", FLEX_ALIGN[(row.style.alignItems as string) ?? \"start\"]]);\n return out;\n}\n\n/** A box's styles; `withWidth` false where its parent's layout sets its width (in a Row). */\nexport function box(node: ResolvedNode, withWidth = true): Style {\n const { style } = node;\n const framed = style.padding !== undefined || style.border !== undefined;\n return {\n boxSizing: framed || (withWidth && style.width !== undefined) ? \"border-box\" : undefined,\n width: withWidth ? style.width : undefined,\n minWidth: style.minWidth,\n maxWidth: style.maxWidth,\n height: style.height,\n padding: style.padding,\n backgroundColor: style.backgroundColor,\n border: style.border,\n borderRadius: style.borderRadius,\n overflow: style.overflow === \"hidden\" ? \"hidden\" : undefined,\n };\n}\n\n/** A stack's own styles: a flex column with its gap. */\nexport function stackOf(node: ResolvedNode): Style {\n return {\n display: \"flex\",\n flexDirection: \"column\",\n gap: node.style.gap,\n justifyContent: node.style.justifyContent ? JUSTIFY[node.style.justifyContent as string] : undefined,\n };\n}\n","/** What inline styles can't do, as classes in the stylesheet: phone overrides, hiding, hover, a Row stacking on phones. */\nimport { HOVER, MOBILE } from \"../../conditions\";\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport { rule } from \"../jsx\";\nimport { border, css, insets, length, textValue, type Declarations } from \"../shared/css\";\nimport { phoneWidthInRow } from \"../shared/phone-width\";\nimport { FLEX_ALIGN } from \"./layout\";\n\nconst OVERRIDE: Record<string, (value: Json) => Declarations> = {\n width: (v) => [[\"width\", length(v)]],\n maxWidth: (v) => [[\"max-width\", length(v)]],\n padding: (v) => [[\"padding\", insets(v)]],\n border: (v) => border(v),\n gap: (v) => [[\"gap\", length(v)]],\n backgroundColor: (v) => [[\"background-color\", v as string]],\n textDecoration: (v) => [[\"text-decoration\", v as string]],\n alignSelf: (v) => [[\"align-self\", FLEX_ALIGN[v as string]]],\n};\n\nfunction declarationsOf(values: Record<string, Json>): Declarations {\n const out: Declarations = [];\n for (const [key, value] of Object.entries(values)) {\n const textual = textValue(key, value);\n if (textual !== undefined) out.push([key.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`), textual]);\n else if (OVERRIDE[key]) out.push(...OVERRIDE[key](value));\n }\n return out;\n}\n\n/** The classes of the stylesheet's rules for the node (phone styles, hiding, hover, stacking), if any. */\nexport function classesFor(node: ResolvedNode, parent: ResolvedNode): string | undefined {\n const classes: string[] = [];\n if (node.mobile) {\n // A Divider's length is its line's.\n const { width, ...rest } = node.mobile;\n if (Object.keys(rest).length) classes.push(rule(MOBILE.sheet.media, `${MOBILE.sheet.selector}{${css(declarationsOf(rest), true)}}`));\n const line = node.type === \"Divider\" && node.style.padding !== undefined ? \">hr\" : \"\";\n if (width !== undefined) classes.push(rule(MOBILE.sheet.media, `${MOBILE.sheet.selector}${line}{${css(declarationsOf({ width }), true)}}`));\n // In a Row kept side by side its flex basis wins over a width (rowPlacement), but where it's of its own size and has none.\n const own = node.style.width === undefined && (node.style.flex === \"none\" || node.style.flex === 0);\n const basis = own ? undefined : length(phoneWidthInRow(node, parent));\n if (basis !== undefined) classes.push(rule(\"phone\", `&{flex:0 1 ${basis}!important}`));\n }\n classes.push(...hidingClasses(node.hidden));\n if (node.hover) classes.push(rule(HOVER.sheet.media, `${HOVER.sheet.selector}{${css(declarationsOf(node.hover), true)}}`, HOVER.sheet.level));\n if (node.type === \"Row\" && node.props.stackOnMobile !== false) {\n classes.push(\n rule(\"phone\", \"&{flex-direction:column!important;align-items:stretch!important}&>*{flex:0 0 auto!important;width:auto!important;max-width:100%!important;align-self:stretch!important}\", \"layout\")\n );\n }\n return classes.length ? classes.join(\" \") : undefined;\n}\n\n/** The classes that hide something on phones or on desktop. */\nexport function hidingClasses(hidden: ResolvedNode[\"hidden\"]): string[] {\n const classes: string[] = [];\n if (hidden?.mobile) classes.push(rule(\"phone\", \"&{display:none!important}\"));\n if (hidden?.desktop) classes.push(rule(\"desktop\", \"&{display:none!important}\"));\n return classes;\n}\n","/** A Button: a link drawn as a box. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { link } from \"../shared/link\";\nimport type { Component } from \"./context\";\nimport { box } from \"./layout\";\n\nexport const Button: Component = ({ node, parent, placement, classes, children }) => {\n const { class: own, ...attributes } = link(node.props);\n const boxed = box(node, parent.type !== \"Row\");\n return (\n <a\n id={node.id}\n class={[classes(), own]}\n {...attributes}\n style={[placement, { display: \"inline-block\", textDecoration: node.style.textDecoration ?? \"none\" }, textDeclarations(node.text, parent.text, [\"color\"]), { ...boxed, boxSizing: (node.style.boxSizing as string | undefined) ?? boxed.boxSizing }]}\n >\n {children()}\n </a>\n );\n};\n","/** A Column: a flex column with its gap, in its box. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { box, stackOf } from \"./layout\";\n\nexport const Column: Component = ({ node, parent, placement, classes, children }) => (\n <div id={node.id} class={classes()} style={[placement, stackOf(node), box(node, parent.type !== \"Row\"), textDeclarations(node.text, parent.text)]}>\n {children()}\n </div>\n);\n","/** A Divider: an `<hr>` drawn by its top border, in a padded div where it has padding; placed by its parent's text alignment. */\nimport { h, type Style } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nconst MARGIN: Record<string, string> = { center: \"0 auto\", right: \"0 0 0 auto\" };\n\nexport const Divider: Component = ({ node, style, parent, placement, classes }) => {\n const line: Style = {\n margin: MARGIN[({ center: \"center\", end: \"right\" } as Record<string, string>)[parent.style.alignItems as string] ?? parent.text.textAlign] ?? \"0\",\n border: \"0\",\n borderTop: style.borderTop,\n width: style.width,\n };\n if (style.padding === undefined) return <hr id={node.id} class={classes()} style={[placement, line]} />;\n return (\n <div id={node.id} class={classes()} style={[placement, { boxSizing: \"border-box\", padding: style.padding }]}>\n <hr style={line} />\n </div>\n );\n};\n","/**\n * A Text: a `<p>` with the text styles that differ from its parent's. A\n * Heading is the same with its own tag.\n */\nimport type { ResolvedText } from \"../../resolve\";\nimport { h, type Html } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Props, Component } from \"./context\";\nimport { box } from \"./layout\";\n\n/**\n * A block of text as `Tag`; `always`: the text styles written even where inherited (a heading's size and weight: the\n * browser has its own).\n */\nexport const textBlock = ({ node, style, parent, placement, classes, children }: Props, Tag: string, always: ReadonlyArray<keyof ResolvedText> = []): Html => (\n <Tag\n id={node.id}\n class={classes()}\n dir={node.props.dir as string | undefined}\n style={[placement, { margin: 0 }, textDeclarations(node.text, parent.text, always), { textDecoration: style.textDecoration }, box(node, parent.type !== \"Row\")]}\n >\n {children()}\n </Tag>\n);\n\nexport const Text: Component = (props) => textBlock(props, \"p\");\n","/** A Heading: `<h1>`–`<h6>` without margins, its size and weight always written (the browser has its own). */\nimport type { Component } from \"./context\";\nimport { textBlock } from \"./Text\";\n\nexport const Heading: Component = (props) => textBlock(props, `h${props.node.props.level}`, [\"fontSize\", \"fontWeight\"]);\n","/** An Html block: its markup written as it is, in one div, so a stack's gap goes around the block and not between what's in it, as in an email. */\nimport { h, raw } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const HtmlBlock: Component = ({ node, placement, classes }) => {\n return (\n <div id={node.id} class={classes()} style={placement}>\n {raw(String(node.props.html))}\n </div>\n );\n};\n","/** An Image: a block, no wider than its parent; its width attribute in px where it's known. */\nimport { assetParts, type Asset } from \"../../kinds\";\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const Image: Component = ({ node, style, parent, placement, classes }) => {\n // Under the children of a Layer with a height, it covers the Layer, cut at its sides or its top and bottom.\n const covers = parent.type === \"Layer\" && parent.style.height !== undefined && parent.children.find((c) => typeof c !== \"string\") === node;\n return (\n <img\n id={node.id}\n class={classes()}\n src={assetParts(node.props.src as Asset).src}\n alt={(node.props.alt as string) ?? \"\"}\n title={node.props.title as string | undefined}\n // A percentage is a share of its parent, not a size of its own.\n width={typeof style.width !== \"string\" && node.width !== null ? node.width : undefined}\n style={[\n placement,\n {\n display: \"block\",\n maxWidth: style.maxWidth ?? \"100%\",\n width: parent.type === \"Row\" ? undefined : style.width,\n height: style.height ?? \"auto\",\n alignSelf: style.alignSelf,\n verticalAlign: style.verticalAlign,\n border: style.border,\n borderRadius: style.borderRadius,\n },\n covers && { width: \"100%\", height: \"100%\", maxWidth: \"none\", objectFit: \"cover\" },\n ]}\n />\n );\n};\n","/** A LineBreak: `<br>`. */\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const LineBreak: Component = () => <br />;\n","/** A Link: inside text, or as a block (around an image); its color always written (the browser has its own). */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { link } from \"../shared/link\";\nimport type { Component } from \"./context\";\n\nexport const Link: Component = ({ node, style, parent, placement, classes, children }) => (\n <a\n id={node.id}\n class={classes()}\n {...link(node.props)}\n style={[placement, textDeclarations(node.text, parent.text, [\"color\"]), { textDecoration: style.textDecoration, backgroundColor: style.backgroundColor }]}\n >\n {children()}\n </a>\n);\n","/** A List: `<ul>` or `<ol>`, its markers in its indent (its padding on the side its text starts), in its box. */\nimport { toPx } from \"../../resolve\";\nimport type { Insets } from \"../../kinds\";\nimport { h } from \"../jsx\";\nimport { px, textDeclarations } from \"../shared/css\";\nimport { isNode, type Component } from \"./context\";\n\nconst NONE: Insets = { top: 0, right: 0, bottom: 0, left: 0 };\n\nexport const List: Component = ({ node, style, parent, placement, classes, rtl, render }) => {\n const Tag = node.props.type === \"number\" ? \"ol\" : \"ul\";\n const padding = (style.padding as Insets | undefined) ?? NONE;\n const indent = toPx(style.indent, null) ?? 0;\n const start = Number(node.props.start);\n return (\n <Tag\n id={node.id}\n class={classes()}\n start={Tag === \"ol\" && start !== 1 ? start : undefined}\n style={[\n placement,\n {\n margin: 0,\n padding: `${px(padding.top)} ${px(padding.right + (rtl ? indent : 0))} ${px(padding.bottom)} ${px(padding.left + (rtl ? 0 : indent))}`,\n listStyleType: Tag === \"ol\" ? \"decimal\" : \"disc\",\n boxSizing: \"border-box\",\n width: parent.type === \"Row\" ? undefined : style.width,\n maxWidth: style.maxWidth,\n backgroundColor: style.backgroundColor,\n border: style.border,\n },\n textDeclarations(node.text, parent.text),\n ]}\n >\n {node.children.filter(isNode).map((item) => render(item, []))}\n </Tag>\n );\n};\n","/** A ListItem: `<li>`, the List's gap above it where an item before it shows (on desktop inline, on phones by a class where that differs). */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { gapsBefore } from \"../shared/gaps\";\nimport { isNode, type Component } from \"./context\";\n\nexport const ListItem: Component = ({ node, style, parent: list, classes, children }) => {\n const items = list.children.filter(isNode);\n const at = gapsBefore(items)[items.indexOf(node)];\n const gap = at.desktop ? list.style.gap : undefined;\n const phoneGap = at.phone ? (list.mobile?.gap ?? list.style.gap) : undefined;\n return (\n <li\n id={node.id}\n class={classes()}\n dir={node.props.dir as string | undefined}\n phone={phoneGap !== gap ? { marginTop: phoneGap ?? 0 } : undefined}\n style={[{ margin: 0, marginTop: gap }, textDeclarations(node.text, list.text), { textDecoration: style.textDecoration }]}\n >\n {children()}\n </li>\n );\n};\n","/**\n * A MergeTag: the sending service's syntax for the value. The default, `{{name}}`, is text; the options' syntax is\n * written as it is (`<%= name %>`, `{{ name | default: \"a & b\" }}`), with the name in it escaped for text and for an\n * attribute's value alike.\n */\nimport { Fragment, h, raw } from \"../jsx\";\nimport { escapeAttr } from \"../shared/css\";\nimport type { Component } from \"./context\";\n\nexport const MergeTag: Component = ({ node, options }) => {\n const name = node.props.name as string;\n return options.mergeTag ? raw(options.mergeTag(escapeAttr(name))) : <>{`{{${name}}}`}</>;\n};\n","/**\n * The page's body: a `<main>` stacking its children at the content width,\n * centered; with Sections, the Sections span the window and the content\n * between them is kept to the content width.\n */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { h, type Style } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { runHidden } from \"../shared/gaps\";\nimport { isNode, type Component } from \"./context\";\nimport { alignSelf } from \"./layout\";\nimport { hidingClasses } from \"./styles\";\n\nexport const Page: Component = ({ node: root, style, rtl, render }) => {\n const width = root.width ?? 0;\n // A word too long for its line (a long link) breaks onto the next rather than widening the page past a phone's screen.\n const stack: Style = { display: \"flex\", flexDirection: \"column\", gap: style.gap };\n const wrap: Style = { overflowWrap: \"break-word\" };\n // The root's phone gap, between its children and in each run of them.\n const phone = root.mobile?.gap !== undefined ? { gap: root.mobile.gap } : undefined;\n const content = (children: ResolvedNode[]) => children.map((child) => render(child, alignSelf(child, root, rtl)));\n const nodes = root.children.filter(isNode);\n if (!nodes.some((node) => node.type === \"Section\")) {\n return (\n <main phone={phone} style={[{ maxWidth: width, margin: \"0 auto\" }, stack, wrap, textDeclarations(root.text, undefined)]}>\n {content(nodes)}\n </main>\n );\n }\n\n // Sections span the window: the other children are kept to the content width, in runs between them. A run\n // hides where all of its children do, so the gap beside it goes too.\n const parts: Array<ResolvedNode | ResolvedNode[]> = [];\n for (const node of nodes) {\n const last = parts[parts.length - 1];\n if (node.type === \"Section\") parts.push(node);\n else if (Array.isArray(last)) last.push(node);\n else parts.push([node]);\n }\n return (\n <main phone={phone} style={[stack, wrap, textDeclarations(root.text, undefined)]}>\n {parts.map((part) =>\n Array.isArray(part) ? (\n <div class={hidingClasses(runHidden(part))} phone={phone} style={[{ width: \"100%\", maxWidth: width, margin: \"0 auto\" }, stack]}>\n {content(part)}\n </div>\n ) : (\n render(part, [])\n )\n )}\n </main>\n );\n};\n","/** A Row: a flex row, each child placed by its width or share (`rowPlacement`); stacked on phones by a class, unless `stackOnMobile` is false. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { box, FLEX_ALIGN, JUSTIFY } from \"./layout\";\n\nexport const Row: Component = ({ node, style, parent, placement, classes, children }) => (\n <div\n id={node.id}\n class={classes()}\n dir={node.props.dir as string | undefined}\n style={[\n placement,\n {\n display: \"flex\",\n gap: style.gap,\n alignItems: FLEX_ALIGN[style.alignItems as string],\n justifyContent: JUSTIFY[style.justifyContent as string],\n flexWrap: style.flexWrap === \"wrap\" || style.flexWrap === \"words\" ? \"wrap\" : undefined,\n },\n box(node, parent.type !== \"Row\"),\n textDeclarations(node.text, parent.text),\n ]}\n >\n {children()}\n </div>\n);\n","/** A Layer: a CSS grid of one cell, each child in it over the ones before (`layerPlacement`), placed by its alignment. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { box } from \"./layout\";\n\nexport const Layer: Component = ({ node, style, parent, placement, classes, children }) => (\n <div\n id={node.id}\n class={classes()}\n style={[\n placement,\n {\n display: \"grid\",\n gridTemplate: \"minmax(0, 1fr) / minmax(0, 1fr)\",\n alignItems: style.alignItems,\n justifyItems: style.justifyItems,\n // Its corners cut what's in it, as an email's background is cut.\n overflow: style.borderRadius !== undefined ? \"hidden\" : undefined,\n },\n box(node, parent.type !== \"Row\"),\n textDeclarations(node.text, parent.text),\n ]}\n >\n {children()}\n </div>\n);\n","/** A PageNumber: the number of the page the Document writer is writing (`numbering`), or how many pages there are. */\nimport { Fragment, h } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nlet current = { page: 1, total: 1 };\n\n/** Writes what `write` writes with `numbers` as the page a PageNumber is on. */\nexport function numbering<T>(numbers: { page: number; total: number }, write: () => T): T {\n const before = current;\n current = numbers;\n try {\n return write();\n } finally {\n current = before;\n }\n}\n\nexport const PageNumber: Component = ({ node }) => <>{String(node.props.total ? current.total : current.page)}</>;\n","/**\n * A Document as print HTML: each page a box of the paper's size, its margins as padding, a page break after each but\n * the last; its PageHeader at the top of each, its PageFooter at the bottom, the page's content between them. CSS's\n * @page gives the paper its size (its margins none: they're the boxes'); on a screen the pages sit on a grey desk.\n */\nimport { documentPages, pageBox } from \"../../document\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport { h } from \"../jsx\";\nimport { px, textDeclarations } from \"../shared/css\";\nimport { isNode, type Component } from \"./context\";\nimport { alignSelf, stackOf } from \"./layout\";\nimport { numbering } from \"./PageNumber\";\n\n/** The print stylesheet: the paper's size, backgrounds printed, and the desk the pages sit on on a screen. */\nexport function documentCss(root: ResolvedNode): string {\n const box = pageBox(root.props);\n return (\n `@page{size:${box.css};margin:0}` +\n \"body{-webkit-print-color-adjust:exact;print-color-adjust:exact}\" +\n \"@media screen{body{background:#e5e7eb;padding:24px 0}.elements-page{box-shadow:0 1px 4px rgba(0,0,0,.2)}.elements-page+.elements-page{margin-top:24px!important}}\"\n );\n}\n\nexport const Document: Component = ({ node: root, style, rtl, render }) => {\n const box = pageBox(root.props);\n const { margin } = box;\n const { pages, header, footer } = documentPages(root);\n return (\n <main style={textDeclarations(root.text, undefined)}>\n {pages.map(({ page, children }, index) =>\n numbering({ page: index + 1, total: pages.length }, () => (\n <section\n id={page?.id}\n class=\"elements-page\"\n style={{\n boxSizing: \"border-box\",\n width: box.width,\n height: box.height,\n margin: \"0 auto\",\n padding: `${px(margin.top)} ${px(margin.right)} ${px(margin.bottom)} ${px(margin.left)}`,\n display: \"flex\",\n flexDirection: \"column\",\n backgroundColor: page?.style.backgroundColor ?? style.backgroundColor,\n overflow: \"hidden\",\n breakAfter: index < pages.length - 1 ? \"page\" : undefined,\n }}\n >\n {header && render(header, [])}\n <div style={[{ flex: \"1 1 auto\", minHeight: 0 }, stackOf(page ?? root), page ? textDeclarations(page.text, root.text) : {}]}>\n {children.filter(isNode).map((child) => render(child, alignSelf(child, page ?? root, rtl)))}\n </div>\n {footer && render(footer, [])}\n </section>\n ))\n )}\n </main>\n );\n};\n","/** A Canvas as HTML, to look at: a box of its size, its content laid out in it as on a page, what's past it cut. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { isNode, type Component } from \"./context\";\nimport { alignSelf, box, stackOf } from \"./layout\";\n\nexport const Canvas: Component = ({ node: root, rtl, render }) => (\n <main\n style={[\n { width: root.props.width as number, height: root.props.height as number, overflow: \"hidden\", boxSizing: \"border-box\" },\n stackOf(root),\n box(root, false),\n textDeclarations(root.text, undefined),\n ]}\n >\n {root.children.filter(isNode).map((child) => render(child, alignSelf(child, root, rtl)))}\n </main>\n);\n","/** An Svg as inline SVG, and its shapes as SVG's: \"transparent\" paint as SVG's none. */\nimport type { ResolvedNode } from \"../../resolve\";\nimport { h } from \"../jsx\";\nimport { isNode, type Component } from \"./context\";\nimport { box } from \"./layout\";\n\nconst paint = (value: unknown) => (value === \"transparent\" ? \"none\" : (value as string | undefined));\n\n/** A shape's attributes: its props, and how it's painted. */\nexport function shapeAttributes(node: ResolvedNode): Record<string, string | number | undefined> {\n const { style, props } = node;\n return {\n ...(props as Record<string, string | number | undefined>),\n fill: paint(style.fill),\n stroke: paint(style.stroke),\n \"stroke-width\": style.strokeWidth as number | undefined,\n opacity: style.opacity as number | undefined,\n };\n}\n\nconst TAGS: Record<string, string> = { Rect: \"rect\", Circle: \"circle\", Ellipse: \"ellipse\", Line: \"line\", Polygon: \"polygon\", Path: \"path\" };\n\nexport const Svg: Component = ({ node, parent, placement, classes }) => {\n const { width, height, viewBox, title } = node.props as { width: number; height: number; viewBox?: string; title?: string };\n return (\n <svg\n id={node.id}\n class={classes()}\n xmlns=\"http://www.w3.org/2000/svg\"\n width={width}\n height={height}\n viewBox={viewBox ?? `0 0 ${width} ${height}`}\n role={title ? \"img\" : undefined}\n aria-label={title}\n aria-hidden={title ? undefined : \"true\"}\n // Its padding and border around the drawing, as the resolver counts them (a framed box is border-box elsewhere).\n style={[placement, { display: \"block\", flex: \"none\" }, { ...box(node, parent.type !== \"Row\"), boxSizing: undefined }]}\n >\n {node.children.filter(isNode).map((shape) => h(TAGS[shape.type], shapeAttributes(shape)))}\n </svg>\n );\n};\n","/**\n * A Section: one element across the window, its content kept to the content\n * width by its inline padding, however wide the window is.\n */\nimport { h } from \"../jsx\";\nimport { px, textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\nimport { stackOf } from \"./layout\";\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\n\nexport const Section: Component = ({ node, style, parent: root, classes, children }) => {\n const { top, right, bottom, left } = (style.padding as Sides | undefined) ?? { top: 0, right: 0, bottom: 0, left: 0 };\n // The side padding: at least as given, more where the window is wider than the content. Inside calc()\n // and max() every length has its unit (a bare 0 there makes the whole declaration invalid).\n const length = (value: number) => `${Math.round(value * 100) / 100}px`;\n const side = (padding: number) => `max(${length(padding)}, calc((100% - ${length(root.width ?? 0)}) / 2 + ${length(padding)}))`;\n return (\n <section\n id={node.id}\n class={classes()}\n style={[stackOf(node), { padding: `${px(top)} ${side(right)} ${px(bottom)} ${side(left)}`, backgroundColor: style.backgroundColor, border: style.border }, textDeclarations(node.text, root.text)]}\n >\n {children()}\n </section>\n );\n};\n","/** A Span: styled text inside text. Raised or lowered, a <sup> or <sub> with no line height of its own, so it doesn't push its line apart. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\n\nconst TAGS: Record<string, string> = { super: \"sup\", sub: \"sub\" };\n\nexport const Span: Component = ({ node, style, parent, classes, children }) => {\n const Tag = TAGS[style.verticalAlign as string] ?? \"span\";\n return (\n <Tag\n id={node.id}\n class={classes()}\n style={[textDeclarations(node.text, parent.text), { textDecoration: style.textDecoration, backgroundColor: style.backgroundColor, lineHeight: Tag === \"span\" ? undefined : \"0\" }]}\n >\n {children()}\n </Tag>\n );\n};\n","/**\n * A Table: its columns' widths in a colgroup as shares of its width (fixed\n * layout), no spacing between cells. Header rows at its top are its `<thead>`,\n * footer rows at its end its `<tfoot>`.\n */\nimport { h } from \"../jsx\";\nimport { columnWidth, textDeclarations } from \"../shared/css\";\nimport { isNode, type Component } from \"./context\";\nimport { box } from \"./layout\";\n\nexport const Table: Component = ({ node, style, parent, placement, classes, render }) => {\n const rows = node.children.filter(isNode);\n const columns = node.columns ?? [];\n const total = columns.reduce((sum, width) => sum + width, 0) || 1;\n const head = rows.findIndex((row) => !row.props.header);\n const [header, rest] = head < 0 ? [rows, []] : [rows.slice(0, head), rows.slice(head)];\n const foot = rest.findIndex((row) => row.props.footer);\n const [body, footer] = foot < 0 ? [rest, []] : [rest.slice(0, foot), rest.slice(foot)];\n return (\n <table\n id={node.id}\n class={classes()}\n style={[\n placement,\n { borderCollapse: style.borderCollapse ?? \"separate\", borderSpacing: 0, tableLayout: \"fixed\" },\n box(node, parent.type !== \"Row\"),\n // A table is as wide as its content unless told: this one fills its parent.\n { width: style.width === undefined && parent.type !== \"Row\" ? \"100%\" : undefined },\n textDeclarations(node.text, parent.text),\n ]}\n >\n <colgroup>\n {columns.map((width, index) => (\n <col style={{ width: columnWidth(node, width, index, total) }} />\n ))}\n </colgroup>\n {header.length > 0 && <thead>{header.map((row) => render(row, []))}</thead>}\n {body.length > 0 && <tbody>{body.map((row) => render(row, []))}</tbody>}\n {footer.length > 0 && <tfoot>{footer.map((row) => render(row, []))}</tfoot>}\n </table>\n );\n};\n","/** A TableCell: `<th>` in a header row, else `<td>`; its padding and border inside its width; its weight and alignment always written (a header cell's own are bold and centered). */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport type { Component } from \"./context\";\n\nexport const TableCell: Component = ({ node, style, parent: row, classes, children }) => {\n const Cell = row.props.header ? \"th\" : \"td\";\n const span = Number(node.props.colSpan);\n return (\n <Cell\n id={node.id}\n class={classes()}\n scope={row.props.header ? \"col\" : undefined}\n colspan={span > 1 ? span : undefined}\n dir={node.props.dir as string | undefined}\n style={[\n // No padding is none: browsers give a cell 1px of their own.\n { boxSizing: \"border-box\", padding: style.padding ?? 0, backgroundColor: style.backgroundColor, border: style.border, verticalAlign: style.verticalAlign ?? \"top\" },\n textDeclarations(node.text, row.text, Cell === \"th\" ? [\"fontWeight\", \"textAlign\"] : []),\n { textDecoration: style.textDecoration },\n ]}\n >\n {children()}\n </Cell>\n );\n};\n","/** A TableRow: `<tr>` with its background and the text styles its cells inherit. */\nimport { h } from \"../jsx\";\nimport { textDeclarations } from \"../shared/css\";\nimport { isNode, type Component } from \"./context\";\n\nexport const TableRow: Component = ({ node, style, parent: table, classes, render }) => (\n <tr id={node.id} class={classes()} style={[{ backgroundColor: style.backgroundColor, height: style.height }, textDeclarations(node.text, table.text)]}>\n {node.children.filter(isNode).map((cell) => render(cell, []))}\n </tr>\n);\n","/** A Video: its player, as wide as its place (its width and maximum where it has them), 16:9. */\nimport { videoParts } from \"../../kinds\";\nimport { h } from \"../jsx\";\nimport type { Component } from \"./context\";\n\nexport const Video: Component = ({ node, style, placement, classes }) => (\n <div\n id={node.id}\n class={classes()}\n style={[placement, { width: style.width, maxWidth: style.maxWidth }]}\n >\n <div style={{ position: \"relative\", height: \"0\", paddingBottom: \"56.25%\", overflow: \"hidden\" }}>\n <iframe\n src={videoParts(String(node.props.src))?.embed}\n title={String(node.props.title)}\n allow=\"autoplay; encrypted-media; picture-in-picture\"\n allowfullscreen=\"\"\n loading=\"lazy\"\n style={{ position: \"absolute\", top: \"0\", left: \"0\", width: \"100%\", height: \"100%\", border: \"0\" }}\n />\n </div>\n </div>\n);\n","/**\n * Page HTML (`<Page>`) from a laid-out template: one element per node, its\n * styles inline, flexbox for the root, Rows and Columns. The only stylesheet\n * is what inline styles can't do: phone overrides, hiding, hover, and fonts.\n *\n * Each component is written by its own file here (Button.tsx, Row.tsx, …), in\n * JSX that writes strings (../jsx.ts), from one props object (context.ts);\n * `layout.tsx` and `styles.tsx` are what they share.\n */\nimport type { Diagnostic } from \"../../diagnostics\";\nimport type { ResolvedDocument, ResolvedNode } from \"../../resolve\";\nimport { Fragment, h, withStylesheet, type Html } from \"../jsx\";\nimport { Stylesheet } from \"../shared/classes\";\nimport { attrs, css, escapeText, styleAttr, type Declarations } from \"../shared/css\";\nimport { fontFaces } from \"../shared/fonts\";\nimport { isNode, type PageOptions, type Props, type Component } from \"./context\";\nimport { alignSelf, layerPlacement, rowPlacement } from \"./layout\";\nimport { classesFor } from \"./styles\";\nimport { Button } from \"./Button\";\nimport { Column } from \"./Column\";\nimport { Divider } from \"./Divider\";\nimport { Heading } from \"./Heading\";\nimport { HtmlBlock } from \"./Html\";\nimport { Image } from \"./Image\";\nimport { LineBreak } from \"./LineBreak\";\nimport { Link } from \"./Link\";\nimport { List } from \"./List\";\nimport { ListItem } from \"./ListItem\";\nimport { MergeTag } from \"./MergeTag\";\nimport { Page } from \"./Page\";\nimport { Text } from \"./Text\";\nimport { Row } from \"./Row\";\nimport { Layer } from \"./Layer\";\nimport { Document, documentCss } from \"./Document\";\nimport { PageNumber } from \"./PageNumber\";\nimport { Canvas } from \"./Canvas\";\nimport { Svg } from \"./Svg\";\nimport { Section } from \"./Section\";\nimport { Span } from \"./Span\";\nimport { Table } from \"./Table\";\nimport { TableCell } from \"./TableCell\";\nimport { TableRow } from \"./TableRow\";\nimport { Video } from \"./Video\";\n\nexport type { PageOptions } from \"./context\";\n\nexport interface PageHtml {\n /** The whole document, from `<!DOCTYPE html>`. */\n html: string;\n /** What goes in `<head>`: meta tags, the title, the stylesheet. */\n head: string;\n /** What goes in `<body>`. */\n body: string;\n /** The `<body>`'s own style (the window's background), for a page that embeds `body`. */\n bodyStyle: string;\n}\n\n/** At and below this window width a Page is on a phone, unless its `breakpoints` say otherwise. */\nexport const PAGE_PHONE_WIDTH = 480;\n\n/** The window width at and below which a Page's phone styles apply: its `breakpoints.mobile`, or 480. */\nexport function pagePhoneWidth(root: ResolvedNode): number {\n const mobile = (root.props.breakpoints as { mobile?: number } | undefined)?.mobile;\n return typeof mobile === \"number\" ? mobile : PAGE_PHONE_WIDTH;\n}\n\n/** A Page whose phone width is at or above its content width: its phone styles apply to windows the content fills. */\nexport function pageBreakpoints(root: ResolvedNode): Diagnostic[] {\n const mobile = (root.props.breakpoints as { mobile?: number } | undefined)?.mobile;\n const width = typeof root.props.width === \"number\" ? root.props.width : undefined;\n if (root.type !== \"Page\" || typeof mobile !== \"number\" || width === undefined || mobile < width) return [];\n return [\n {\n code: \"page/phone-width\",\n severity: \"warning\",\n message: `Its phone styles apply to every window up to ${mobile}px, wider than its ${width}px content: on those, the content is at its full width with its phone styles. Set breakpoints.mobile below ${width}`,\n path: \"root.props.breakpoints\",\n },\n ];\n}\n\n/** The components. (The root, `Page`, is called on its own.) */\nconst COMPONENTS: Record<string, Component> = {\n Section,\n Row,\n Column,\n Layer,\n // A Document's header and footer, and a page, are stacks in their box.\n PageHeader: Column,\n PageFooter: Column,\n DocumentPage: Column,\n PageNumber,\n Svg,\n Text,\n Heading,\n Span,\n Link,\n Button,\n Image,\n Divider,\n LineBreak,\n MergeTag,\n List,\n ListItem,\n Table,\n TableRow,\n TableCell,\n Video,\n Html: HtmlBlock,\n};\n\n/** What a node's component gets. `inRtl`: its parent's text runs right to left. */\nfunction propsOf(node: ResolvedNode, parent: ResolvedNode, placement: Declarations, options: PageOptions, inRtl = false): Props {\n const rtl = node.props.dir === \"rtl\" || (inRtl && node.props.dir !== \"ltr\");\n const render: Props[\"render\"] = (child, childPlacement) => write(child, node, childPlacement, options, rtl);\n return {\n node,\n style: node.style,\n parent,\n placement,\n classes: () => classesFor(node, parent),\n children: () => {\n // Text and the runs in it; else the nodes it lays out, each placed by its layout.\n if (node.definition.children.text) return <>{node.children.map((child) => (typeof child === \"string\" ? child : render(child, [])))}</>;\n const place = (child: ResolvedNode) => (node.type === \"Row\" ? rowPlacement(child, node) : node.type === \"Layer\" ? layerPlacement(child) : alignSelf(child, node, rtl));\n return <>{node.children.filter(isNode).map((child) => render(child, place(child)))}</>;\n },\n rtl,\n render,\n options,\n };\n}\n\nfunction write(node: ResolvedNode, parent: ResolvedNode, placement: Declarations, options: PageOptions, inRtl: boolean): Html {\n const component = COMPONENTS[node.type];\n if (!component) throw new Error(`[Elements] The page exporter can't render a ${node.type}`);\n return component(propsOf(node, parent, placement, options, inRtl));\n}\n\nexport function renderPage(resolved: ResolvedDocument, options: PageOptions = {}): PageHtml {\n const root = resolved.root;\n const sheet = new Stylesheet(options.classPrefix);\n const fonts = fontFaces(root, { swap: true });\n const document = root.type === \"Document\";\n const writer = document ? Document : root.type === \"Canvas\" ? Canvas : Page;\n const body = withStylesheet(sheet, () => String(writer(propsOf(root, root, [], options))));\n\n // A Canvas and a Document are of a fixed size, whatever the window: no phone layout.\n const fixed = !root.definition.responsive;\n const phoneWidth = pagePhoneWidth(root);\n const stylesheet = [...fonts, sheet.css(fixed ? null : `@media (max-width: ${phoneWidth}px)`, fixed ? null : `@media (min-width: ${phoneWidth + 1}px)`), document ? documentCss(root) : \"\"].join(\"\");\n const head = [\n '<meta charset=\"utf-8\">',\n '<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">',\n typeof root.props.title === \"string\" ? `<title>${escapeText(root.props.title)}</title>` : \"\",\n typeof root.props.description === \"string\" ? `<meta${attrs({ name: \"description\", content: root.props.description })}>` : \"\",\n stylesheet ? `<style>${stylesheet}</style>` : \"\",\n ].join(\"\");\n // A Document's background is its pages', not the window's.\n const background = document ? undefined : (root.style.backgroundColor as string | undefined);\n const bodyStyle = css([\n [\"margin\", \"0\"],\n [\"background-color\", background],\n ]);\n const html = `<!DOCTYPE html><html${attrs({ lang: root.props.lang as string | undefined, dir: root.props.dir as string | undefined })}><head>${head}</head><body${styleAttr([[\"margin\", \"0\"], [\"background-color\", background]])}>${body}</body></html>`;\n return { html, head, body, bodyStyle };\n}\n","/**\n * The plain-text version of a template (emails send it beside the HTML: spam\n * filters count against HTML-only mail), written from the tree rather than\n * read back out of the HTML. Same conventions as Elements 0.2's\n * renderToPlainText: large headings in capitals, a link as \"text (url)\", an\n * image as \"[alt]\", a divider as \"---\", blocks apart by a blank line; list\n * items as \"- \" or \"1. \" (nested ones indented), a table's rows a line each,\n * its cells apart by \" | \"; a Row that wraps (a Menu) a line of what's in it.\n */\nimport { shownAnywhere } from \"../conditions\";\nimport { htmlText } from \"../markup\";\nimport { linkParts, type LinkValue } from \"../kinds\";\nimport type { ResolvedDocument, ResolvedNode } from \"../resolve\";\n\nexport interface TextOptions {\n /** How a merge tag is written (default `{{name}}`). */\n mergeTag?: (name: string) => string;\n}\n\nexport function renderText(resolved: ResolvedDocument, options: TextOptions = {}): string {\n const tag = options.mergeTag ?? ((name: string) => `{{${name}}}`);\n\n // `upper`: a large heading's words in capitals. Only its words: a merge tag or a URL in it is written as it is.\n const inline = (node: ResolvedNode, upper = false): string =>\n node.children\n .map((child) => {\n if (typeof child === \"string\") return upper ? child.toUpperCase() : child;\n if (!shownAnywhere(child)) return \"\";\n switch (child.type) {\n case \"LineBreak\":\n return \"\\n\";\n case \"MergeTag\":\n return tag(child.props.name as string);\n case \"Link\":\n return withHref(child, upper);\n case \"Image\":\n return image(child, upper);\n default:\n return inline(child, upper);\n }\n })\n .join(\"\");\n\n /** A link as \"text (url)\", or its URL alone where that's its text. */\n const withHref = (node: ResolvedNode, upper = false): string => {\n const { href } = linkParts(node.props.href as LinkValue);\n const clean = tidy(inline(node));\n return !clean || clean === href ? href : `${upper ? tidy(inline(node, true)) : clean} (${href})`;\n };\n\n const image = (node: ResolvedNode, upper = false): string => {\n const alt = (node.props.alt as string | undefined)?.trim();\n return alt ? `[${upper ? alt.toUpperCase() : alt}]` : \"\";\n };\n\n const blocks = (node: ResolvedNode): string[] =>\n node.children.flatMap((child): string[] => {\n if (typeof child === \"string\" || !shownAnywhere(child)) return [];\n switch (child.type) {\n case \"Heading\":\n return [tidy(inline(child, Number(child.props.level) <= 2))];\n case \"Text\":\n return [tidy(inline(child))];\n case \"Button\":\n return [withHref(child)];\n case \"Link\":\n return [withHref(child)];\n case \"Image\":\n return [image(child)];\n case \"Divider\":\n return [\"---\"];\n case \"List\":\n return [list(child, \"\")];\n case \"Table\":\n return [table(child)];\n case \"Video\":\n return [`${tidy(String(child.props.title))} (${child.props.src})`];\n case \"Svg\":\n return child.props.title ? [`[${tidy(String(child.props.title))}]`] : [];\n case \"Row\": {\n // A Row that wraps its children as words wrap (a Menu's links and separators) is a line of them.\n const parts = blocks(child);\n return child.style.flexWrap === \"wrap\" && parts.every((part) => !part.includes(\"\\n\")) ? [parts.filter(Boolean).join(\" \")] : parts;\n }\n // A Document's header and footer are on every page: its text is its pages' content, once.\n case \"PageHeader\":\n case \"PageFooter\":\n return [];\n case \"Html\": {\n const words = htmlText(child);\n return words ? [words] : [];\n }\n default:\n return blocks(child);\n }\n });\n\n const shown = (node: ResolvedNode) => shownAnywhere(node);\n\n const list = (node: ResolvedNode, indent: string): string =>\n node.children\n .filter((child): child is ResolvedNode => typeof child !== \"string\" && shown(child))\n .map((item, index) => {\n const marker = node.props.type === \"number\" ? `${Number(node.props.start) + index}. ` : \"- \";\n // The item's text and the Lists in it, in their order: text after a List goes under it, lined up with the first.\n const lines: string[] = [];\n let run: ResolvedNode[\"children\"] = [];\n const flush = () => {\n const text = tidy(inline({ ...item, children: run }));\n if (text) lines.push(`${indent}${lines.length ? \" \".repeat(marker.length) : marker}${text}`);\n run = [];\n };\n for (const child of item.children) {\n if (typeof child === \"string\" || child.type !== \"List\") {\n run.push(child);\n continue;\n }\n flush();\n if (!lines.length) lines.push(`${indent}${marker}`.trimEnd());\n if (shown(child)) lines.push(list(child, `${indent} `));\n }\n flush();\n return (lines.length ? lines : [`${indent}${marker}`.trimEnd()]).join(\"\\n\");\n })\n .join(\"\\n\");\n\n const table = (node: ResolvedNode): string =>\n node.children\n .filter((row): row is ResolvedNode => typeof row !== \"string\" && shown(row))\n .map((row) =>\n row.children\n .filter((cell): cell is ResolvedNode => typeof cell !== \"string\" && shown(cell))\n .map((cell) => tidy(inline(cell)))\n .join(\" | \")\n )\n .join(\"\\n\");\n\n return blocks(resolved.root)\n .filter((block) => block.length > 0)\n .join(\"\\n\\n\");\n}\n\n/** Spaces collapsed and each line trimmed, as a reader of plain text expects. */\nfunction tidy(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => line.replace(/[^\\S\\n]+/g, \" \").trim())\n .join(\"\\n\")\n .trim();\n}\n","/**\n * The writers' HTML indented, for reading it: a new line, indented by depth,\n * only between two tags where at least one is structural (the document's\n * head, tables and their rows and cells, a page's main and sections), never\n * inside text or between inline elements, where white space would show.\n * Chromium lays the result out as it does the compact HTML\n * (test/browser/pretty.test.ts); it's for reading, not for sending: some\n * email clients (Word) may treat the white space differently.\n */\n\nconst STRUCTURAL = new Set([\"html\", \"head\", \"body\", \"meta\", \"title\", \"style\", \"link\", \"table\", \"thead\", \"tbody\", \"tr\", \"td\", \"th\", \"colgroup\", \"col\", \"main\", \"section\"]);\nconst VOID = new Set([\"meta\", \"link\", \"col\", \"img\", \"br\", \"hr\", \"wbr\"]);\n\ntype Token = { text: string; tag?: string; closing?: boolean };\n\nfunction tokens(html: string): Token[] {\n const out: Token[] = [];\n for (const match of html.matchAll(/<!--[\\s\\S]*?-->|<![^>]*>|<\\/?([a-zA-Z][a-zA-Z0-9]*)[^>]*>|[^<]+/g)) {\n const text = match[0];\n const tag = match[1]?.toLowerCase();\n out.push(tag ? { text, tag, closing: text.startsWith(\"</\") } : { text });\n }\n return out;\n}\n\nexport function prettyHtml(html: string): string {\n const parts = tokens(html);\n let depth = 0;\n let out = \"\";\n parts.forEach((token, index) => {\n const previous = parts[index - 1];\n if (token.tag && token.closing) depth = Math.max(0, depth - 1);\n const between = previous && (previous.tag || previous.text.startsWith(\"<!\")) && (token.tag || token.text.startsWith(\"<!\"));\n const structural = (previous?.tag && STRUCTURAL.has(previous.tag)) || (token.tag && STRUCTURAL.has(token.tag));\n if (index > 0 && between && structural) out += `\\n${\" \".repeat(depth)}`;\n out += token.text;\n if (token.tag && !token.closing && !VOID.has(token.tag) && !token.text.endsWith(\"/>\")) depth++;\n });\n return out;\n}\n","import { checkDocument } from \"../normalize\";\nimport { checkTargetExpanded, resolveExpanded, type ResolvedDocument, type ResolvedNode } from \"../resolve\";\nimport { ElementsError, type Diagnostic } from \"../diagnostics\";\nimport { checkEmailClients, forEmailClients, type EmailClient } from \"../email-clients\";\nimport { expandDocument } from \"../expand\";\nimport { registryOf, type ComponentsOption } from \"../registry\";\nimport type { Target } from \"../define\";\nimport { renderEmail, type EmailOptions } from \"./email\";\nimport { emailSupport } from \"./email/support\";\nimport { overflow, pagedSupport } from \"./shared/paged\";\nimport { support } from \"./shared/support\";\nimport { pageBreakpoints, renderPage, type PageOptions } from \"./page\";\nimport { renderText } from \"./plain-text\";\nimport { prettyHtml } from \"./shared/pretty\";\nimport type { BlockMap } from \"./shared/block-map\";\n\nexport { renderEmail, EMAIL_PHONE_MARGIN, GMAIL_CLIP_BYTES, GMAIL_STYLE_BYTES, type EmailHtml, type EmailOptions } from \"./email\";\nexport { renderPage, PAGE_PHONE_WIDTH, pagePhoneWidth, type PageHtml, type PageOptions } from \"./page\";\nexport { renderText, type TextOptions } from \"./plain-text\";\nexport { emailSupport } from \"./email/support\";\nexport { support } from \"./shared/support\";\nexport { overflow, pagedSupport } from \"./shared/paged\";\nexport { Stylesheet, CLASS_PREFIX, type Media } from \"./shared/classes\";\nexport { BLOCK_MAP_VERSION, type BlockMap, type BlockMapEntry } from \"./shared/block-map\";\n\nexport interface EmailClientsOption {\n /**\n * For an Email, the email clients to report problems for (default: `DEFAULT_EMAIL_CLIENTS`, the ones most email is\n * read in: classic Outlook, Outlook.com, Outlook for Mac, the Outlook and Gmail apps, Gmail, Apple Mail, Yahoo, AOL\n * and Samsung Email). A problem about other clients is left out; `[]` leaves out every email client problem, not the\n * problems of the email itself.\n */\n emailClients?: readonly EmailClient[];\n}\n\nexport interface RenderOptions extends PageOptions, EmailOptions, EmailClientsOption {\n /** The HTML indented, for reading it; for sending, the compact HTML (white space may change how some email clients show it). */\n pretty?: boolean;\n /**\n * For tools that preview an Email: also return `blocks`, where each block is in `html` (its template path and the\n * UTF-8 byte offset just after its outermost element's tag name). The HTML is the same either way. Not with `pretty`.\n */\n blockMap?: boolean;\n}\n\nexport interface RenderResult {\n /** The whole document, from `<!DOCTYPE html>`. */\n html: string;\n /** The plain-text version. */\n text: string;\n /** What goes in `<head>` and in `<body>`, and the body's own style: to embed the output in a page of your own. */\n head: string;\n body: string;\n bodyStyle: string;\n /** Warnings and notes (errors are thrown). */\n diagnostics: Diagnostic[];\n /** With `blockMap`, for an Email: where each block is in `html`. */\n blocks?: BlockMap;\n}\n\n/** The output each root renders to, and whether its writer exists yet. */\nconst OUTPUTS: Record<string, { target: Target; ready: boolean; later?: string }> = {\n Page: { target: \"web\", ready: true },\n // Print HTML: a page writer's, each page a box of the paper's size.\n Document: { target: \"web\", ready: true },\n // A Canvas as HTML, to look at (@hyper-elements/react/image writes the image).\n Canvas: { target: \"web\", ready: true },\n Email: { target: \"email\", ready: true },\n};\n\nexport interface Prepared {\n /** The template laid out, its custom components expanded; null where it has errors. */\n resolved: ResolvedDocument | null;\n /** The output its root renders to. */\n target: Target | null;\n /** Everything found: errors, warnings and notes. */\n diagnostics: Diagnostic[];\n}\n\n/**\n * What both validating and rendering do, once: the template checked, its\n * custom components expanded (each rendered once), checked against the output\n * its root says, laid out, and what that output can't do as asked found.\n * Only what needs the written output (an email's size against Gmail's limits)\n * is left to rendering.\n */\nexport function prepareTemplate(input: unknown, options: ComponentsOption & EmailClientsOption = {}): Prepared {\n checkEmailClients(options.emailClients);\n const registry = registryOf(options);\n const checked = checkDocument(input, registry);\n const diagnostics = [...checked.diagnostics];\n const failed = () => diagnostics.some((d) => d.severity === \"error\");\n if (!checked.document || failed()) return { resolved: null, target: null, diagnostics };\n const root = checked.document.root.type;\n /** What it found, an Email's problems with email clients for the clients asked for (expansion's too: a condition's notes). */\n const done = (resolved: ResolvedDocument | null, target: Target | null): Prepared => {\n if (root !== \"Email\" && options.emailClients) diagnostics.push({ code: \"email/clients-ignored\", severity: \"info\", message: `emailClients is for an Email; a ${root} isn't checked for email clients`, path: \"root\" });\n return { resolved, target, diagnostics: root === \"Email\" ? forEmailClients(diagnostics, options.emailClients) : diagnostics };\n };\n const output = OUTPUTS[root];\n if (!output?.ready) {\n diagnostics.push({ code: \"output/unavailable\", severity: \"error\", message: output?.later ?? `A ${root} can't be rendered yet`, path: \"root\" });\n return done(null, null);\n }\n const expanded = expandDocument(checked.document, registry, output.target);\n diagnostics.push(...expanded.diagnostics);\n if (failed()) return done(null, output.target);\n diagnostics.push(...checkTargetExpanded(expanded.document, output.target, registry, expanded.paths));\n if (failed()) return done(null, output.target);\n const resolved = resolveExpanded(expanded.document, registry, expanded.paths);\n diagnostics.push(...resolved.diagnostics);\n const found = output.target === \"email\" ? emailSupport(resolved.root, resolved.templatePath) : support(resolved.root, output.target);\n // A Document's page and a Canvas are a fixed size: content that can't fit is cut off.\n if (root === \"Document\" || root === \"Canvas\") found.push(...overflow(resolved.root));\n found.push(...pageBreakpoints(resolved.root));\n diagnostics.push(...inTemplate(resolved, found));\n return done(failed() ? null : resolved, output.target);\n}\n\n/** Diagnostics found on the tree as laid out, at their places in the template (a Grid's children, a custom component's). */\nexport function inTemplate(resolved: ResolvedDocument, diagnostics: Diagnostic[]): Diagnostic[] {\n const { templatePath } = resolved;\n return templatePath ? diagnostics.map((diagnostic) => ({ ...diagnostic, path: templatePath(diagnostic.path) })) : diagnostics;\n}\n\n/**\n * A template's problems, without writing it: errors make it invalid, warnings and notes don't. A Document's are its\n * PDF's too, and a Canvas's its image's (what they can't show that its HTML can).\n */\nexport function validateTemplate(input: unknown, options: ComponentsOption & EmailClientsOption = {}): { valid: boolean; diagnostics: Diagnostic[] } {\n const { diagnostics, resolved } = prepareTemplate(input, options);\n const root = resolved?.root;\n const paged = root?.type === \"Document\" ? pagedSupport(root, \"pdf\") : root?.type === \"Canvas\" ? pagedSupport(root, \"image\") : [];\n const all = [...diagnostics, ...(resolved ? inTemplate(resolved, paged) : paged)];\n return { valid: !all.some((d) => d.severity === \"error\"), diagnostics: all };\n}\n\n/**\n * A template (Elements' internal tree, with the custom components it uses)\n * rendered to the output its root says: prepared (`prepareTemplate`), then\n * written. Throws an `ElementsError` listing the errors if there are any.\n */\nexport function renderTemplate(input: unknown, options: RenderOptions & ComponentsOption = {}): RenderResult {\n // Indenting rewrites the HTML after it's written, which would move every offset.\n if (options.blockMap && options.pretty) throw new ElementsError([{ code: \"render/block-map-pretty\", severity: \"error\", message: \"blockMap gives offsets in the compact HTML; leave pretty off\", path: \"root\" }]);\n const { resolved, target, diagnostics } = prepareTemplate(input, options);\n if (!resolved) throw new ElementsError(diagnostics);\n const text = renderText(resolved, options);\n const written = target === \"email\" ? renderEmail(resolved, options) : { ...renderPage(resolved, options), diagnostics: [] };\n const shown = (html: string) => (options.pretty ? prettyHtml(html) : html);\n const blocks = \"blocks\" in written ? written.blocks : undefined;\n return {\n html: shown(written.html),\n head: shown(written.head),\n body: shown(written.body),\n bodyStyle: written.bodyStyle,\n text,\n diagnostics: [...diagnostics, ...inTemplate(resolved, forEmailClients(written.diagnostics, options.emailClients))],\n ...(blocks ? { blocks } : {}),\n };\n}\n","/**\n * What the render that collects a template (src/primitives/collect.tsx) shares with every copy of Elements a process\n * loads: the stack of collecting renders under way (which server-renderer.ts reads to choose a module of react-dom's;\n * an Elements 0.2 copy's collecting render pushes onto it too), each render's nonce, and how an async component is\n * told. A stack, not React context: Server Components have no context, and a collecting render can start inside\n * another.\n */\n\n// Shared by every copy of Elements a process loads (a project's ESM and CommonJS builds, a tool's own).\nconst SHARED = Symbol.for(\"@hyper-elements/react/collecting\");\nconst frames: Array<object | null> = ((globalThis as Record<symbol, unknown>)[SHARED] ??= []) as Array<object | null>;\n\n/** The collecting render under way, if any (and not a render of Elements' own inside it). */\nexport function collecting(): object | undefined {\n return frames[frames.length - 1] ?? undefined;\n}\n\n/** Runs `run` with `frame` collecting (or, with `null`, nothing collecting). */\nexport function within<T>(frame: object | null, run: () => T): T {\n frames.push(frame);\n try {\n return run();\n } finally {\n frames.pop();\n }\n}\n\n// Shared by every copy of Elements a process loads, as the collecting stack is: no two renders get one nonce.\nconst RENDERS = Symbol.for(\"@hyper-elements/react/renders\");\n\n/**\n * A collection's nonce, so markup a template's data holds can't name it: letters, digits and \"_\", from the count of\n * the process's renders and its high-resolution clock (when it started, and the time since to a fraction of a\n * millisecond), which data written before the render can't know. Not random numbers: a framework that prerenders\n * pages takes `crypto.getRandomValues()` and `Math.random()` for a value that changes the page, and Next.js's Cache\n * Components (its new apps' default) fail the build on one, but the nonce never reaches the output. `performance` is\n * what Next.js leaves for timing, and every runtime Elements supports has it.\n */\nexport function nonce(): string {\n const shared = globalThis as Record<symbol, number>;\n const clock = globalThis.performance;\n return [(shared[RENDERS] = (shared[RENDERS] ?? 0) + 1), (clock?.timeOrigin ?? 0) * 1e3, (clock?.now() ?? 0) * 1e6].map((n) => Math.floor(n).toString(36)).join(\"_\");\n}\n\n/** React's marks on a `memo` and a `forwardRef` component. */\nconst MEMO = Symbol.for(\"react.memo\");\nconst FORWARD_REF = Symbol.for(\"react.forward_ref\");\n\n/** A component declared `async`: it can't render synchronously, so it isn't called at all. */\nexport function isAsyncComponent(type: any): boolean {\n while (type?.$$typeof === MEMO) type = type.type;\n return (type?.$$typeof === FORWARD_REF ? type.render : type)?.[Symbol.toStringTag] === \"AsyncFunction\";\n}\n","/**\n * The server renderer Elements renders with: react-dom/server, loaded as an app loads it and doing nothing when it\n * loads.\n *\n * react-dom keeps a render's hook state in its module, so a render started inside another one with the same module\n * breaks the hooks the outer component calls after it (a page rendered with `renderToString` that computes\n * `useMemo(() => toDesign(<T />))` and then calls `useState`). Apps mostly render with react-dom's streaming\n * renderers, another module than the one renderToString is in, so it's rare; where it happens, Elements renders\n * with a second module of react-dom's (React 19's Bun build, the browser one, or Node's when react-dom/server is the\n * browser one), loaded then, only where a synchronous `require` can load it with the same React (Node, Jest, a\n * CommonJS bundle); elsewhere (a bundled module, a browser) it says to render first.\n * Which module a render is under way with is told by React's hooks dispatcher (each module has its own), read in a\n * class component's render: that doesn't touch the hook state of a render it's in.\n */\nimport * as defaultBuild from \"react-dom/server\";\n\nimport React from \"react\";\nimport { collecting } from \"./collect\";\n\ntype Build = typeof defaultBuild;\n\n// The builds rendering (an Elements render, or the app's render one is called in), innermost last, shared by every\n// copy of Elements a process loads (they share react-dom).\nconst SHARED = Symbol.for(\"@hyper-elements/react/render-builds\");\nconst using = ((globalThis as Record<symbol, unknown>)[SHARED] ??= []) as Build[];\n\n/** The same module (a bundler can wrap one in two objects). */\nconst same = (a: Build, b: Build) => a.renderToString === b.renderToString;\n\n/** The hooks dispatcher of the React render under way (React sets it while a component renders), or null. */\nfunction dispatcher(): unknown {\n // Each step can be missing (React Server Components' React has neither).\n const internals = React as unknown as Record<string, { H?: unknown; ReactCurrentDispatcher?: { current?: unknown } } | undefined>;\n return internals.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE?.H ?? internals.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED?.ReactCurrentDispatcher?.current ?? null;\n}\n\n/** The dispatcher a build renders with, from a render of a class component (no hooks: safe inside its own render). */\nconst dispatchers = new Map<Build, unknown>();\nfunction dispatcherOf(build: Build): unknown {\n if (!dispatchers.has(build)) {\n let seen: unknown = null;\n try {\n // (React Server Components' React has no Component: none of react-dom's renders is under way there.)\n class Probe extends React.Component {\n render() {\n seen = dispatcher();\n return null;\n }\n }\n build.renderToStaticMarkup(React.createElement(Probe));\n } catch {\n // It can't render here: no dispatcher.\n }\n dispatchers.set(build, seen);\n }\n return dispatchers.get(build);\n}\n\ndeclare const module: { require(id: string): unknown } | undefined;\n/** Whether this is the CommonJS build (set when it's built; undefined in the sources). */\ndeclare const __UNLAYER_CJS__: boolean | undefined;\n\n/**\n * Another module of react-dom's than react-dom/server, loaded the first time one's needed, with a synchronous\n * `require`: the one CommonJS loads this module with (Jest's registry gives the test's React), then Node's for a\n * module (a module a bundler bundles has neither that gives its React). One that renders with this React (its\n * dispatcher is one this React sets, and not `outer`'s). React 19's Bun build first: its browser one opens a\n * MessageChannel when it loads, which keeps Node from exiting. Undefined where there's none.\n */\nlet second: Build | null | undefined;\nfunction secondBuild(outer: unknown): Build | undefined {\n if (second === undefined) {\n second = null;\n const node = (globalThis as any).process;\n const requirers = [\n // (`module`'s, read so that a bundler doesn't take it for a require of a path worked out when it runs.)\n () => {\n const own = (typeof __UNLAYER_CJS__ === \"boolean\" ? __UNLAYER_CJS__ : true) && typeof module === \"object\" ? Reflect.get(module ?? {}, \"require\") : undefined;\n return typeof own === \"function\" ? (id: string) => own.call(module, id) : undefined;\n },\n // From this module's URL (as a stack names it: webpack 4 can't parse the syntax for it), the app's script, then\n // the folder Node started in; only where `react` is this React. Another React's isn't loaded (React 19's browser\n // build keeps Node running).\n ...[/file:\\/\\/\\S+?(?=:\\d+:\\d+)/.exec(String(new Error().stack))?.[0], node?.argv?.[1], `${node?.cwd?.()}/`].map((from) => () => {\n const required = node?.getBuiltinModule?.(\"module\")?.createRequire(from);\n return (required?.(\"react\") as typeof React | undefined)?.createElement === React.createElement ? required : undefined;\n }),\n ];\n // React 19's browser build opens a MessageChannel when it loads, which keeps Node running: its Bun build instead.\n const ids = [\"react-dom/server.bun\", ...(Number.parseInt(React.version) >= 19 ? [] : [\"react-dom/server.browser\"]), \"react-dom/server.node\"];\n search: for (const id of ids) {\n for (const requirer of requirers) {\n try {\n const build = requirer()?.(id) as Build | undefined;\n if (build?.renderToStaticMarkup && !same(build, defaultBuild) && ![null, outer].includes(dispatcherOf(build))) {\n second = build;\n break search;\n }\n } catch {\n // Not there, or it can't load here: the next one.\n }\n }\n }\n }\n return second ?? undefined;\n}\n\n/** The build whose render is under way, of the ones Elements has: react-dom/server's, or the second one if loaded. */\nconst buildOf = (outer: unknown): Build | undefined => (outer === null ? undefined : [defaultBuild, second].find((b): b is Build => !!b && dispatcherOf(b) === outer));\n\n/**\n * Runs one Elements render with a build that isn't rendering; every render it makes uses that one. Called from the\n * user's code in a render with a build it has (the app's renderToString, or a component a collecting render on the\n * stack in collect.ts renders), it takes another one, which mustn't be rendering either (a third level: it can't).\n * Otherwise (no render under way, the app's streaming render or a client one) it keeps the one it's in.\n */\nexport function withBuild<T>(render: () => T): T {\n const outer = dispatcher();\n let build = current();\n const theirs = using.length === 0 || collecting() !== undefined ? buildOf(outer) : undefined;\n const busy: Build[] = [];\n if (theirs) {\n const free = (b: Build) => !same(b, theirs) && !using.some((u) => same(u, b));\n const other = free(defaultBuild) ? defaultBuild : secondBuild(outer);\n // Where none renders with this React (a bundle, Next.js's own react-dom, a test runner's module registry): the\n // module it's in. The component calling it then can't call a hook after the call (React throws).\n if (other && free(other)) {\n busy.push(theirs);\n build = other;\n } else build = theirs;\n }\n using.push(...busy, build);\n try {\n return render();\n } catch (error) {\n // React Server Components' React (Next.js's edge runtime), which react-dom can't render with at all. (Not checked\n // in a render of the same module, whose hooks a check would disturb.)\n if (build !== theirs && !rendersHere(build)) throw Object.assign(new Error(\"[Unlayer] react-dom can't render with this React (React Server Components', as in Next.js's edge runtime): render emails in the Node.js runtime.\"), { cause: error });\n throw error;\n } finally {\n using.length -= busy.length + 1;\n }\n}\n\n/** Whether `build` can render a component here (one that isn't rendering, so its render disturbs none). */\nfunction rendersHere(build: Build): boolean {\n try {\n build.renderToStaticMarkup(React.createElement(() => null));\n return true;\n } catch {\n return false;\n }\n}\n\nfunction current(): Build {\n return using[using.length - 1] ?? defaultBuild;\n}\n\nexport const renderToString: Build[\"renderToString\"] = (element, options) => current().renderToString(element, options);\n","/**\n * One render's scope (the render that collects a template for render(), validate(), outline(), prepare() and\n * toDesign()): it runs with a module of react-dom's that isn't rendering, apart from any template being collected\n * around it.\n */\nimport { within } from \"./collect\";\nimport { withBuild } from \"./server-renderer\";\n\n/**\n * Runs one render, apart from a template being collected: called inside a component of one, it renders what it's\n * given.\n */\nexport function withRenderScope<T>(render: () => T): T {\n // Called in a render (a component of the user's own calling toDesign() in its useMemo, while the app renders it),\n // it renders with a server build that isn't rendering (see server-renderer.ts). The build is chosen first: whether a\n // template is being collected tells who calls it.\n return withBuild(() => within(null, render));\n}\n","/**\n * JSX → Elements document. One React render: each primitive records its props\n * and renders markers around its children, and React renders everything else\n * (the user's components, hooks, Context, Fragments, arrays), so the document\n * holds what React would show. The markers and the text between them are then\n * read back into nodes, and the result is checked like any JSON document.\n *\n * A stack shared by every copy of Elements in a process, not React context:\n * Server Components have no context.\n */\nimport React from \"react\";\nimport { checkDocument, Registry, type CheckResult, type CustomDefinition, type Diagnostic } from \"@unlayer-internal/elements-core\";\nimport { isAsyncComponent, nonce, within } from \"../utils/collect\";\nimport { renderToString } from \"../utils/server-renderer\";\nimport { withRenderScope } from \"../utils/render-scope\";\n\ninterface Recorded {\n type: string;\n props: Record<string, unknown>;\n}\n\ninterface PrimitiveCollection {\n nonce: string;\n recorded: Recorded[];\n /** The custom components the JSX used. */\n components: Map<string, CustomDefinition<any>>;\n /** Types two different custom components were both made with. */\n clashes: Set<string>;\n /** An async component was left out (not called: React would drop the promise it returns, unhandled). */\n async?: boolean;\n}\n\nconst SHARED = Symbol.for(\"@hyper-elements/react/primitives/collecting\");\nconst frames = ((globalThis as Record<symbol, unknown>)[SHARED] ??= []) as PrimitiveCollection[];\n\nexport function collectingPrimitives(): PrimitiveCollection | undefined {\n return frames[frames.length - 1];\n}\n\nconst MARK = \"elements-node\";\n\nfunction marker(collection: PrimitiveCollection, at: number, edge: \"o\" | \"c\"): React.ReactElement {\n return React.createElement(MARK, { key: `${at}${edge}`, \"data-n\": collection.nonce, \"data-i\": at, \"data-e\": edge });\n}\n\n/** A custom component the JSX being collected uses. */\nexport function registerUsed(collection: PrimitiveCollection, definition: CustomDefinition<any>): void {\n const known = collection.components.get(definition.type);\n // (A frame made by an older copy of Elements has no clashes.)\n if (known && known !== definition) (collection.clashes ??= new Set()).add(definition.type);\n else collection.components.set(definition.type, definition);\n}\n\n/** What a primitive renders while JSX is collected: its props recorded, markers around its children. */\nexport function recordPrimitive(collection: PrimitiveCollection, type: string, props: Record<string, unknown>): React.ReactElement {\n const { children, ...rest } = props;\n const at = collection.recorded.push({ type, props: rest }) - 1;\n return React.createElement(React.Fragment, null, marker(collection, at, \"o\"), withoutAsync(children as React.ReactNode, collection), marker(collection, at, \"c\"));\n}\n\nconst PROVIDER = Symbol.for(\"react.provider\");\nconst CONTEXT = Symbol.for(\"react.context\");\n\n/**\n * React's own wrappers, which render their children as they are: Fragment, Suspense, StrictMode, Profiler, a\n * context's provider (a consumer's child is a function, called with the value).\n */\nfunction wraps(element: React.ReactElement): boolean {\n const type = element.type as unknown;\n if (typeof (element.props as { children?: unknown }).children === \"function\") return false;\n const kind = (type as { $$typeof?: symbol } | null)?.$$typeof;\n return typeof type === \"symbol\" || kind === PROVIDER || kind === CONTEXT;\n}\n\nconst childrenOf = (element: React.ReactElement) => (element.props as { children?: React.ReactNode }).children;\n\n/** Whether children hold an async component, directly or in React's own wrappers. */\nfunction holdsAsync(children: React.ReactNode): boolean {\n let found = false;\n React.Children.forEach(children, (child) => {\n if (!found && React.isValidElement(child)) found = isAsyncComponent(child.type) || (wraps(child) && holdsAsync(childrenOf(child)));\n });\n return found;\n}\n\n/**\n * A primitive's children with the async components among them (in React's own wrappers too) left out, and\n * noted: React would call them and drop the promise they return, whose rejection would then go unhandled.\n * Children without one stay as they are (rebuilt, they'd move useId's ids). One inside a component of the\n * user's own is called by React, and reported as React fails on it.\n */\nfunction withoutAsync(children: React.ReactNode, collection: PrimitiveCollection): React.ReactNode {\n if (!holdsAsync(children)) return children;\n collection.async = true;\n return React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child;\n if (isAsyncComponent(child.type)) return null;\n return wraps(child) ? React.cloneElement(child, undefined, withoutAsync(childrenOf(child), collection)) : child;\n });\n}\n\nconst ENTITIES: Record<string, string> = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", \""\": '\"', \"'\": \"'\" };\nconst unescape = (text: string) => text.replace(/&|<|>|"|'/g, (entity) => ENTITIES[entity]);\n\n/**\n * Where a node's own keys go: the rest of its JSX props are its semantic props. Phone and hover styles are blocks of its\n * style; a mobile={…} or hover={…} prop is an unknown prop, whose message says so.\n */\nconst NODE_KEYS = new Set([\"id\", \"style\", \"hidden\"]);\n\nexport interface JsonNode {\n type: string;\n [key: string]: unknown;\n children: Array<JsonNode | string>;\n}\n\nfunction toJsonNode({ type, props }: Recorded, diagnostics: Diagnostic[]): JsonNode {\n const node: JsonNode = { type, children: [] };\n const semantic: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n if (value === undefined) continue;\n // What Elements 0.2's components gave the writers as they lowered into the tree (markup and CSS): the engine has\n // none now, and a template never had a say in it.\n if (key === \"compat\") diagnostics.push({ code: \"jsx/compat\", severity: \"warning\", message: `A <${type}>'s compat isn't a prop of a template: it's left out`, path: \"jsx\" });\n else if (NODE_KEYS.has(key)) node[key] = value;\n else semantic[key] = value;\n }\n if (Object.keys(semantic).length) node.props = semantic;\n return node;\n}\n\n/** The markers and text of a collected render, as JSON nodes; markup that isn't a primitive is reported. */\nfunction read(html: string, collection: PrimitiveCollection, diagnostics: Diagnostic[]): Array<JsonNode | string> {\n const pattern = new RegExp(`<${MARK} data-n=\"${collection.nonce}\" data-i=\"(\\\\d+)\" data-e=\"([oc])\"></${MARK}>`, \"g\");\n const top: Array<JsonNode | string> = [];\n const open: Array<{ node: JsonNode | null; children: Array<JsonNode | string> }> = [{ node: null, children: top }];\n let last = 0;\n const text = (between: string) => {\n if (!between) return;\n const into = open[open.length - 1];\n // What an Html block holds is its markup, as React writes it.\n if (into.node?.type === \"Html\") {\n const props = (into.node.props ??= {}) as Record<string, unknown>;\n props.html = `${typeof props.html === \"string\" ? props.html : \"\"}${between}`;\n return;\n }\n if (/<[a-zA-Z!/]/.test(between)) {\n const where = into.node ? `in a ${into.node.type}` : \"around the root\";\n diagnostics.push({\n code: \"jsx/markup\",\n severity: \"error\",\n message: `HTML ${where} isn't part of an Elements document: use the primitives (Text, Link, Image, …) instead of ${JSON.stringify(between.slice(0, 60))}. Every component: @hyper-elements/react/GUIDE.md`,\n path: \"jsx\",\n });\n return;\n }\n into.children.push(unescape(between));\n };\n for (const match of html.matchAll(pattern)) {\n text(html.slice(last, match.index));\n last = match.index! + match[0].length;\n if (match[2] === \"o\") {\n const node = toJsonNode(collection.recorded[Number(match[1])], diagnostics);\n open[open.length - 1].children.push(node);\n open.push({ node, children: node.children });\n } else open.pop();\n }\n text(html.slice(last));\n return top;\n}\n\n/**\n * React's own comments in renderToString's output (between text nodes, around Suspense and Activity boundaries).\n * The template's content never holds one: React escapes text and attributes.\n */\nconst COMMENTS = /<!--[\\s\\S]*?-->/g;\n/** What React throws for an async component, or one that suspends outside a <Suspense> (its own words, or its production code's). */\nconst ASYNC_ERROR =\n /^(?:Objects are not valid as a React child \\(found: \\[object Promise\\]\\)|A component suspended while responding to synchronous input|Minified React error #426\\b|Minified React error #31\\b.*%5Bobject%20Promise%5D)/;\nconst ASYNC_MESSAGE =\n \"A component is async or suspends (an async function, React.lazy, use()): render() doesn't wait for it yet. Load its data first and pass it in as props\";\n/** Why React didn't finish a Suspense boundary, when it says (development builds): it was waiting for something. */\nconst SUSPENDED = /does not support Suspense|did not finish this Suspense boundary/;\n\n/**\n * The Suspense boundaries React didn't finish (`<!--$!-->` … `<!--/$-->`, its fallback in place of the content)\n * taken out, with the reason React gives for each in development (`<template data-msg>`), else \"\".\n */\nfunction unfinished(html: string): { html: string; reasons: string[] } {\n const reasons: string[] = [];\n let [out, at] = [\"\", 0];\n for (let start = html.indexOf(\"<!--$!-->\"); start >= 0; start = html.indexOf(\"<!--$!-->\", at)) {\n out += html.slice(at, start);\n reasons.push(unescape(/^<!--\\$!--><template[^>]*?\\bdata-msg=\"([^\"]*)\"/.exec(html.slice(start))?.[1] ?? \"\"));\n // To the boundary's own end: boundaries can nest.\n const marks = /<!--(\\$[!?]?|\\/\\$)-->/g;\n marks.lastIndex = start;\n let depth = 0;\n for (let mark = marks.exec(html); mark; mark = marks.exec(html)) {\n depth += mark[1] === \"/$\" ? -1 : 1;\n if (depth === 0) break;\n }\n at = depth === 0 ? marks.lastIndex : html.length;\n }\n return { html: out + html.slice(at), reasons };\n}\n\n/** A boundary that didn't finish: something in it was async or suspended, or threw (React says which in development). */\nfunction unfinishedDiagnostic(reason: string): Diagnostic {\n const said = reason.replace(/^Switched to client rendering because the server rendering errored:\\s*/, \"\");\n // (What React threw there can be its own words for an async component inside a component of the user's.)\n const thrown = reason && !SUSPENDED.test(reason) && !ASYNC_ERROR.test(said) ? said : \"\";\n if (thrown) return { code: \"jsx/error\", severity: \"error\", message: `A component inside <Suspense> threw: ${thrown}`, path: \"jsx\" };\n const message = reason ? ASYNC_MESSAGE : `${ASYNC_MESSAGE}. (With React's production build, a component that threw inside <Suspense> looks the same: check it too.)`;\n return { code: \"jsx/async\", severity: \"error\", message, path: \"jsx\" };\n}\n\n/** JSX rendered once, read back as JSON nodes, with the custom components it used. */\nexport function collectNodes(element: React.ReactElement): {\n nodes: Array<JsonNode | string>;\n components: CustomDefinition<any>[];\n diagnostics: Diagnostic[];\n /** Nothing was collected, for a reason already said: React couldn't render it, or all of it suspended. */\n aborted?: boolean;\n} {\n const diagnostics: Diagnostic[] = [];\n const collection: PrimitiveCollection = { nonce: nonce(), recorded: [], components: new Map(), clashes: new Set() };\n let html: string;\n try {\n html = withRenderScope(() => {\n frames.push(collection);\n try {\n // On the shared stack too: a component that renders another template inside this one (toDesign() in a\n // useMemo) renders it with another module of react-dom's, so the hooks after it keep theirs (withBuild).\n return within(collection, () => renderToString(element));\n } finally {\n frames.pop();\n }\n });\n } catch (error) {\n // An async component's promise isn't a child React can render; React 18 and 19 say so in their own words.\n if (!ASYNC_ERROR.test(String((error as Error | undefined)?.message))) throw error;\n diagnostics.push({ code: \"jsx/async\", severity: \"error\", message: ASYNC_MESSAGE, path: \"jsx\" });\n return { nodes: [], components: [...collection.components.values()], diagnostics, aborted: true };\n }\n if (collection.async) diagnostics.push({ code: \"jsx/async\", severity: \"error\", message: ASYNC_MESSAGE, path: \"jsx\" });\n // A Suspense boundary that didn't finish: React wrote its fallback in place of the content. Neither is read.\n const done = unfinished(html);\n for (const reason of done.reasons) {\n const diagnostic = unfinishedDiagnostic(reason);\n // The same problem in several places is said once.\n if (!diagnostics.some((d) => d.code === diagnostic.code && d.message === diagnostic.message)) diagnostics.push(diagnostic);\n }\n const nodes = read(done.html.replace(COMMENTS, \"\"), collection, diagnostics).filter((child) => typeof child !== \"string\" || child.trim());\n for (const type of collection.clashes) {\n diagnostics.push({\n code: \"custom/duplicate\",\n severity: \"error\",\n message: `Two different custom components are named ${type}. If component() ran more than once (inside a function or a component, or in a module loaded twice), call it once, at the top of a module; if they're different components, give each its own type`,\n path: \"jsx\",\n });\n }\n // All of it was in a boundary that didn't finish: that says why there's no root.\n return { nodes, components: [...collection.components.values()], diagnostics, aborted: nodes.length === 0 && done.reasons.length > 0 };\n}\n\n\n/** A template collected from JSX: its tree (internal: never part of the API), the problems, the custom components it uses. */\nexport interface CollectedTemplate extends CheckResult {\n components: CustomDefinition<any>[];\n /**\n * The root as collected, before it's read: every component the JSX gave, those an error leaves out of `document`\n * too, at the paths diagnostics name (reading merges text and drops what's left out, so `document`'s may differ).\n */\n collected: JsonNode | null;\n}\n\n/** JSX collected into Elements' internal tree and checked, never throwing for what's in it. */\nexport function collectTemplate(element: React.ReactElement): CollectedTemplate {\n const { nodes: top, components, diagnostics, aborted } = collectNodes(element);\n if (top.length !== 1 || typeof top[0] === \"string\") {\n // (A render React couldn't do has already said why nothing was collected.)\n if (!aborted) {\n diagnostics.push({\n code: \"jsx/root\",\n severity: \"error\",\n message: top.length ? \"A template renders one root (an Email or a Page) and nothing beside it\" : \"The JSX rendered no Elements root (an Email or a Page)\",\n path: \"jsx\",\n });\n }\n return { document: null, diagnostics, components, collected: null };\n }\n const result = checkDocument({ root: top[0] }, new Registry(components));\n return { document: result.document, diagnostics: [...diagnostics, ...result.diagnostics], components, collected: top[0] };\n}\n","/**\n * A template's tree as JSX source in the new components, and as an element to render: what fromDesign() gives back.\n * Text runs are written on one line (JSX keeps spaces there); blocks one under another.\n */\nimport type { Child, Node } from \"@unlayer-internal/elements-core\";\nimport React from \"react\";\nimport * as primitives from \"../primitives/components\";\n\nconst PRIMITIVE = primitives.PRIMITIVE;\n\n/** Each primitive's component, by its type. */\nconst COMPONENTS = new Map<string, React.ComponentType<any>>();\nfor (const value of Object.values(primitives)) {\n const type = typeof value === \"function\" ? (value as unknown as Record<symbol, string>)[PRIMITIVE] : undefined;\n if (type) COMPONENTS.set(type, value as React.ComponentType<any>);\n}\nCOMPONENTS.set(\"DocumentPage\", primitives.Document.Page);\n\n/** The JSX name of a type. */\nconst tagName = (type: string) => (type === \"DocumentPage\" ? \"Document.Page\" : type);\n\n/** The props of a node as its component takes them. */\nfunction propsOf(node: Node): Record<string, unknown> {\n return {\n ...(node.id !== undefined ? { id: node.id } : {}),\n ...node.props,\n // Phone and hover styles inside the style, as a template writes them now.\n ...(node.style && Object.keys(node.style).length) || node.mobile || node.hover ? { style: { ...node.style, ...(node.mobile ? { mobile: node.mobile } : {}), ...(node.hover ? { hover: node.hover } : {}) } } : {},\n ...(node.hidden ? { hidden: node.hidden } : {}),\n };\n}\n\n/** The tree as an element. A component of the template's own needs passing in `components`, by its name. */\nexport function toElement(node: Node, components: Record<string, React.ComponentType<any>> = {}, key?: number): React.ReactElement {\n const component = COMPONENTS.get(node.type) ?? components[node.type];\n if (!component) throw new Error(`[Elements] fromDesign: <${node.type}> is a component of the template's own: pass it in the components option`);\n const children = (node.children ?? []).map((child, i) => (typeof child === \"string\" ? child : toElement(child, components, i)));\n return React.createElement(component, { ...propsOf(node), key }, ...children);\n}\n\nconst IDENTIFIER = /^[A-Za-z_$][\\w$]*$/;\n/** A prop's name JSX can hold as one (`aria-label` too); a design could hold any other text where one goes. */\nconst PROP_NAME = /^[A-Za-z_$][\\w$]*(?:-[\\w$]+)*$/;\n/** A component's name as JSX writes it: a built-in's, or a custom component's (`acme.ProductCard`). */\nconst TYPE_NAME = /^(?:[A-Z][\\w$]*|[a-z][a-z0-9-]*\\.[A-Z][\\w$]*)$/;\n\n/** A value as JavaScript source: objects with bare keys where they can be. */\n/** Keys of `value` exactly `keys`, each a number (`top`, `right`, …). */\nconst shaped = (value: object, keys: string[], test: (v: unknown) => boolean) => {\n const own = Object.keys(value);\n return own.length === keys.length && keys.every((key) => own.includes(key) && test((value as Record<string, unknown>)[key]));\n};\nconst SIDES = [\"top\", \"right\", \"bottom\", \"left\"];\nconst LINE = [\"width\", \"style\", \"color\"];\nconst isLine = (v: unknown) => !!v && typeof v === \"object\" && shaped(v as object, LINE, (x) => typeof x === \"number\" || typeof x === \"string\");\n/** A line as CSS says one (\"1px solid #ccc\"), where its color holds no space. */\nconst cssLine = (v: { width: number; style: string; color: string }) => (/\\s/.test(v.color) ? undefined : `${v.width}px ${v.style} ${v.color}`);\n\n/**\n * A value as the template would write it: sides as a number (all the same) or `[top, right, bottom, left]`, a line\n * as \"1px solid #ccc\", a border of four equal lines as one.\n */\nfunction compact(value: object): unknown {\n if (shaped(value, SIDES, (v) => typeof v === \"number\")) {\n const s = value as Record<string, number>;\n return s.top === s.right && s.right === s.bottom && s.bottom === s.left ? s.top : [s.top, s.right, s.bottom, s.left];\n }\n if (isLine(value)) return cssLine(value as never) ?? value;\n const sides = Object.keys(value);\n if (sides.length && sides.every((side) => SIDES.includes(side) && isLine((value as Record<string, unknown>)[side]))) {\n const lines = Object.values(value).map((line) => cssLine(line as never));\n if (lines.every((line) => line !== undefined)) return sides.length === 4 && new Set(lines).size === 1 ? lines[0] : Object.fromEntries(sides.map((side, i) => [side, lines[i]]));\n }\n return value;\n}\n\nfunction js(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(js).join(\", \")}]`;\n if (value && typeof value === \"object\") {\n const short = compact(value);\n if (short !== value) return js(short);\n const entries = Object.entries(value).filter(([, v]) => v !== undefined);\n return entries.length ? `{ ${entries.map(([k, v]) => `${IDENTIFIER.test(k) ? k : JSON.stringify(k)}: ${js(v)}`).join(\", \")} }` : \"{}\";\n }\n return JSON.stringify(value);\n}\n\nfunction attribute(name: string, value: unknown): string {\n if (value === true) return name;\n if (typeof value === \"string\" && /^[^\"&\\n\\\\{}]*$/.test(value)) return `${name}=\"${value}\"`;\n return `${name}={${js(value)}}`;\n}\n\n/**\n * Text as JSX children: as it is where JSX keeps it so, else a string expression (spaces at its ends, which JSX can\n * drop; braces, angle brackets, line breaks).\n */\nfunction text(value: string, flat: boolean): string {\n const kept = /^[^{}<>&\\n\\u2028\\u2029]+$/.test(value) && !/^\\s|\\s$/.test(value) && (flat || !/\\s{2,}/.test(value));\n return kept ? value : `{${JSON.stringify(value)}}`;\n}\n\n/** Whether a node holds a run of text (written on one line). */\nconst inline = (node: Node) => (node.children ?? []).some((child) => typeof child === \"string\" || [\"Span\", \"Link\", \"LineBreak\", \"MergeTag\", \"PageNumber\"].includes(child.type));\n\n/**\n * A node as JSX. A name the design holds that isn't one JSX can write (a prop's, a component's) is left out and\n * said, never written as code: the design's data stays data.\n */\nfunction element(node: Node, indent: string, flat: boolean, path: string, report: string[]): string {\n if (!TYPE_NAME.test(node.type)) {\n report.push(`${path}: ${JSON.stringify(node.type)} isn't a component's name: it's left out of the code`);\n return flat ? \"\" : \"{/* left out: not a component's name */}\";\n }\n const name = tagName(node.type);\n const attributes = Object.entries(propsOf(node))\n .filter(([key]) => PROP_NAME.test(key) || (report.push(`${path}: a prop named ${JSON.stringify(key)} isn't one JSX can write: it's left out of the code`), false))\n .map(([key, value]) => ` ${attribute(key, value)}`)\n .join(\"\");\n const children: Child[] = node.children ?? [];\n const child = (c: Child, i: number, inner: string, oneLine: boolean) => (typeof c === \"string\" ? text(c, oneLine) : element(c, inner, oneLine, `${path}.children[${i}]`, report));\n if (!children.length) return `<${name}${attributes} />`;\n if (flat || inline(node)) return `<${name}${attributes}>${children.map((c, i) => child(c, i, indent, true)).join(\"\")}</${name}>`;\n const inner = `${indent} `;\n return `<${name}${attributes}>\\n${children.map((c, i) => `${inner}${child(c, i, inner, false)}`).join(\"\\n\")}\\n${indent}</${name}>`;\n}\n\n/** The tree as a module: the components it uses imported, a component returning it. What it leaves out goes in `report`. */\nexport function printTemplate(root: Node, name = \"Template\", report: string[] = []): string {\n if (!IDENTIFIER.test(name)) {\n report.push(`the component's name ${JSON.stringify(name)} isn't one JavaScript can write: it's named Template`);\n name = \"Template\";\n }\n const used = new Set<string>();\n const own = new Set<string>();\n const visit = (node: Node) => {\n const base = node.type === \"DocumentPage\" ? \"Document\" : node.type;\n if (TYPE_NAME.test(node.type)) (COMPONENTS.has(node.type) ? used : own).add(base);\n for (const child of node.children ?? []) if (typeof child !== \"string\") visit(child);\n };\n visit(root);\n const imports = [`import { ${[...used].sort().join(\", \")} } from \"@hyper-elements/react\";`];\n if (own.size) imports.push(`// The template's own components: ${[...own].sort().join(\", \")} (import them from where they're defined).`);\n return `${imports.join(\"\\n\")}\\n\\nexport default function ${name}() {\\n return (\\n ${element(root, \" \", false, \"root\", report)}\\n );\\n}\\n`;\n}\n","/**\n * Each tool's default values and the schema version of the design JSON, as the Unlayer builder's editor defines them:\n * what toDesign() writes a part's values over (design.ts), and what fromDesign() reads a value an item doesn't have as. Plain data, in the editor's\n * key order (a design's JSON keeps it).\n */\n\n/** The version of the editor's design schema these values are from. */\nexport const schemaVersion = 27;\n\nexport const BodyDefaults: Record<string, any> = {\n _styleGuide: null,\n popupPosition: \"center\",\n popupDisplayDelay: 0,\n popupWidth: \"600px\",\n popupHeight: \"auto\",\n borderRadius: \"10px\",\n contentAlign: \"center\",\n contentVerticalAlign: \"middle\",\n contentWidth: \"500px\",\n fontFamily: {\n label: \"Arial\",\n value: \"arial,helvetica,sans-serif\"\n },\n textColor: \"#000000\",\n popupBackgroundColor: \"#FFFFFF\",\n popupBackgroundImage: {\n url: \"\",\n fullWidth: true,\n repeat: \"no-repeat\",\n size: \"cover\",\n position: \"center\"\n },\n popupOverlay_backgroundColor: \"rgba(0, 0, 0, 0.1)\",\n popupCloseButton_position: \"top-right\",\n popupCloseButton_backgroundColor: \"#DDDDDD\",\n popupCloseButton_iconColor: \"#000000\",\n popupCloseButton_borderRadius: \"0px\",\n popupCloseButton_margin: \"0px\",\n popupCloseButton_action: {\n name: \"close_popup\",\n attrs: {\n onClick: \"document.querySelector('.u-popup-container').style.display = 'none';\"\n }\n },\n language: {},\n backgroundColor: \"#F7F8F9\",\n documentSize: \"A4\",\n documentOrientation: \"portrait\",\n documentMargin: \"96px\",\n preheaderText: \"\",\n linkStyle: {\n body: true,\n linkColor: \"#0000ee\",\n linkHoverColor: \"#0000ee\",\n linkUnderline: true,\n linkHoverUnderline: true\n },\n backgroundImage: {\n url: \"\",\n fullWidth: true,\n repeat: \"no-repeat\",\n size: \"custom\",\n position: \"center\"\n },\n accessibilityTitle: \"\",\n _meta: {}\n};\n\nexport const RowDefaults: Record<string, any> = {\n displayCondition: null,\n columns: false,\n _styleGuide: null,\n backgroundColor: \"\",\n columnsBackgroundColor: \"\",\n backgroundImage: {\n url: \"\",\n fullWidth: true,\n repeat: \"no-repeat\",\n size: \"custom\",\n position: \"center\"\n },\n padding: \"0px\",\n anchor: \"\",\n noStackMobile: false,\n _meta: {},\n selectable: true,\n draggable: true,\n duplicatable: true,\n deletable: true,\n hideable: true,\n locked: false\n};\n\nexport const ColumnDefaults: Record<string, any> = {\n backgroundColor: \"\",\n padding: \"0px\",\n border: {},\n borderRadius: \"0px\",\n _meta: {},\n deletable: true,\n locked: false\n};\n\nexport const ButtonDefaults: Record<string, any> = {\n href: {\n name: \"web\",\n values: {\n href: \"\",\n target: \"_blank\"\n }\n },\n buttonColors: {\n color: \"#FFFFFF\",\n backgroundColor: \"#0879A1\",\n hoverColor: \"#FFFFFF\",\n hoverBackgroundColor: \"#0879A1\"\n },\n size: {\n autoWidth: true,\n width: \"100%\"\n },\n fontSize: \"14px\",\n lineHeight: \"120%\",\n textAlign: \"center\",\n padding: \"10px 20px\",\n border: {},\n borderRadius: \"4px\"\n};\n\nexport const DividerDefaults: Record<string, any> = {\n width: \"100%\",\n border: {\n borderTopWidth: \"1px\",\n borderTopStyle: \"solid\",\n borderTopColor: \"#BBBBBB\"\n },\n textAlign: \"center\"\n};\n\nexport const HeadingDefaults: Record<string, any> = {\n headingType: \"h1\",\n fontSize: \"22px\",\n textAlign: \"left\",\n lineHeight: \"140%\",\n linkStyle: {\n inherit: true,\n linkColor: \"#0000ee\",\n linkHoverColor: \"#0000ee\",\n linkUnderline: true,\n linkHoverUnderline: true\n }\n};\n\nexport const HtmlDefaults: Record<string, any> = {\n html: \"<strong>Hello, world!</strong>\"\n};\n\nexport const ImageDefaults: Record<string, any> = {\n src: {\n url: \"https://cdn.tools.unlayer.com/image/placeholder.png\",\n width: 1600,\n height: 400\n },\n textAlign: \"center\",\n altText: \"\",\n action: {\n name: \"web\",\n values: {\n href: \"\",\n target: \"_blank\"\n }\n }\n};\n\nexport const MenuDefaults: Record<string, any> = {\n menu: {\n items: []\n },\n fontSize: \"14px\",\n textColor: \"#444444\",\n linkColor: \"#0068A5\",\n align: \"center\",\n layout: \"horizontal\",\n separator: \"\",\n padding: \"5px 15px\"\n};\n\nexport const ParagraphDefaults: Record<string, any> = {\n fontSize: \"14px\",\n textAlign: \"left\",\n lineHeight: \"140%\",\n linkStyle: {\n inherit: true,\n linkColor: \"#0000ee\",\n linkHoverColor: \"#0000ee\",\n linkUnderline: true,\n linkHoverUnderline: true\n }\n};\n\nexport const SocialDefaults: Record<string, any> = {\n icons: {\n iconType: \"circle\",\n icons: []\n },\n align: \"center\",\n iconSize: 32,\n spacing: 5\n};\n\nexport const TextDefaults: Record<string, any> = {\n fontSize: \"14px\",\n textAlign: \"left\",\n lineHeight: \"140%\",\n linkStyle: {\n inherit: true,\n linkColor: \"#0000ee\",\n linkHoverColor: \"#0000ee\",\n linkUnderline: true,\n linkHoverUnderline: true\n }\n};\n\nexport const VideoDefaults: Record<string, any> = {\n video: {}\n};\n","/**\n * A design's values as Elements 0.2's components read them, which is how the builder draws them: lengths, sides, colors,\n * borders, line heights, weights, fonts, alignments and links (as the new engine's), email services' tags, the id an\n * author gave a part, where it's hidden, and a text tool's link style. fromDesign() reads designs with these; today's\n * components' lowering (src/compat) reads them with the same.\n */\nimport type { Json } from \"@unlayer-internal/elements-core\";\nimport type { Run } from \"./read-runs\";\n\nexport type Values = Record<string, any>;\nexport type Sides = { top: number; right: number; bottom: number; left: number };\n\n/** px from 12, \"12\" or \"12px\"; undefined for anything else. */\nexport const px = (value: unknown): number | undefined => {\n if (typeof value === \"number\") return Number.isFinite(value) ? value : undefined;\n const match = typeof value === \"string\" ? /^\\s*(-?[\\d.]+)\\s*(px)?\\s*$/.exec(value) : null;\n return match && Number.isFinite(Number(match[1])) ? Number(match[1]) : undefined;\n};\n\n/** \"10px 20px\" (1 to 4 values in px) as four sides; undefined for anything else. */\nexport function sides(value: unknown): Sides | undefined {\n if (value === undefined || value === null || value === \"\") return undefined;\n if (typeof value === \"number\") return { top: value, right: value, bottom: value, left: value };\n const parts = String(value).trim().split(/\\s+/).map(px);\n if (parts.length > 4 || parts.some((part) => part === undefined)) return undefined;\n const [top, right = top, bottom = top, left = right] = parts as number[];\n return { top, right, bottom, left };\n}\n\nexport const color = (value: unknown) => (typeof value === \"string\" && value !== \"\" && value !== \"transparent\" ? value : undefined);\nexport const some = (s: Sides | undefined) => (s && (s.top || s.right || s.bottom || s.left) ? s : undefined);\n\n/**\n * A legacy border (`borderTopWidth`, …) as the new engine's, side by side; sides of no width left out. A side with no\n * color is in `color`: legacy's column draws it transparent, a button in its text's color (CSS's own).\n */\nexport function border(values: Values = {}, color = \"transparent\"): Json | undefined {\n const out: Record<string, Json> = {};\n for (const side of [\"Top\", \"Right\", \"Bottom\", \"Left\"]) {\n const width = px(values[`border${side}Width`]);\n if (!width) continue;\n out[side.toLowerCase()] = { width, style: values[`border${side}Style`] || \"solid\", color: values[`border${side}Color`] || color };\n }\n return Object.keys(out).length ? out : undefined;\n}\n\n/** A legacy line height (\"140%\", 1.4, \"1.4\", \"24px\") as the new engine's; undefined for anything else. */\nexport function lineHeight(value: unknown): number | string | undefined {\n if (typeof value === \"number\") return value > 0 ? value : undefined;\n if (typeof value !== \"string\") return undefined;\n const text = value.trim();\n if (/^\\d*\\.?\\d+(px|%)$/.test(text)) return text;\n const multiple = /^(\\d*\\.?\\d+)(em)?$/.exec(text);\n return multiple && Number(multiple[1]) > 0 ? Number(multiple[1]) : undefined;\n}\n\n/** A legacy font weight (400, \"700\", \"bold\") as the new engine's: 100 to 900 in hundreds; undefined for others. */\nexport function fontWeight(value: unknown): number | undefined {\n if (value === \"bold\") return 700;\n if (value === \"normal\") return 400;\n const number = typeof value === \"number\" ? value : typeof value === \"string\" && value.trim() ? Number(value) : NaN;\n return Number.isInteger(number) && number >= 100 && number <= 900 && number % 100 === 0 ? number : undefined;\n}\n\n/** A font: legacy's `{ label, value }`, or a stack. */\nexport const font = (value: unknown): string | undefined =>\n typeof value === \"string\" ? value || undefined : value && typeof value === \"object\" && typeof (value as { value?: unknown }).value === \"string\" ? (value as { value: string }).value || undefined : undefined;\n\n/** Letter spacing in px: legacy's em of the font size, or px. */\nexport function letterSpacing(value: unknown, fontSize: number | undefined): number | undefined {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\" || !value.trim()) return undefined;\n const text = value.trim();\n if (/em$/.test(text)) return fontSize === undefined || !Number.isFinite(parseFloat(text)) ? undefined : Math.round(parseFloat(text) * fontSize * 1000) / 1000;\n return px(text);\n}\n\n/** Legacy's alignment (left, center, right) as a Column's alignItems. */\nexport const ALIGN: Record<string, \"start\" | \"center\" | \"end\"> = { left: \"start\", center: \"center\", right: \"end\" };\n\n/**\n * A legacy link as the new engine's, read as legacy's exporters read it (normalizeLinkValue: a URL, the builder's\n * `{ name, values: { href, target }, attrs }`, or `{ url, target }`), its quotes and angle brackets encoded as legacy\n * encodes them: null where it has no URL (legacy writes no link, or `href=\"\"`), undefined where it holds what a link\n * here can't (a target other than _blank or _self, a class or attributes of its own, a click handler).\n */\nexport function webLink(value: unknown): Json | null | undefined {\n const link = normalizeLinkValue(value);\n if (!link) return value === undefined || value === null ? null : undefined;\n // What legacy writes on a link besides its URL and target (its other keys, such as the builder's, it doesn't read).\n const { url, target, class: names, onClick, customAttrs } = link;\n const own = customAttrs && typeof customAttrs === \"object\" ? Object.values(customAttrs).some((v) => typeof v === \"string\" && v.trim()) : false;\n if (names || onClick || own) return undefined;\n if (url === undefined || url === null || url === \"\") return null;\n if (typeof url !== \"string\" || (target !== undefined && target !== \"_blank\" && target !== \"_self\")) return undefined;\n const href = encodedUrl(url);\n return target ? { href, target } : href;\n}\n\n/** A URL with its quotes and angle brackets encoded as legacy encodes them, an email service's tag left as it is. */\nexport const encodedUrl = (url: string) => url.replace(/<%[\\w.]+%>|[\"<>]/g, (c) => (c.length > 1 ? c : encodeURIComponent(c)));\n\n/**\n * A link in the render-value shape today's exporters read (`{ url, target, ...customAttrs }`), from any of the three\n * shapes they take: a URL, `{ url, target }`, or the builder's `{ name, values: { href, target }, attrs }` (its href and\n * target in `values` first, then in `attrs`, whose other keys are the link's own attributes). Undefined for another.\n */\nfunction normalizeLinkValue(value: unknown): Record<string, any> | undefined {\n if (value == null) return undefined;\n if (typeof value === \"string\") return { url: value, target: \"_blank\" };\n if (typeof value !== \"object\") return undefined;\n const v = value as Record<string, any>;\n if (\"url\" in v) return v;\n if (\"name\" in v && ((v.values && typeof v.values === \"object\") || (v.attrs && typeof v.attrs === \"object\"))) {\n const inner = v.values && typeof v.values === \"object\" ? (v.values as Record<string, any>) : {};\n const attrs = v.attrs && typeof v.attrs === \"object\" ? (v.attrs as Record<string, any>) : {};\n const { href: attrsHref, target: attrsTarget, ...customAttrs } = attrs;\n // `||`, not `??`: the builder's default is `values: { href: \"\" }`, which `attrs`' href is read past.\n return { url: inner.href || attrsHref || \"\", target: inner.target || attrsTarget || \"_blank\", ...customAttrs };\n }\n return undefined;\n}\n\n/**\n * Whether text holds an email service's tag that the new engine would write otherwise than legacy: <%name%>, a Liquid\n * tag ({% if orders > 1 %}), or a merge tag holding what it escapes ({{ a > b }}, {{ name | default: \"x\" }}). A plain\n * merge tag ({{name}}) is written as it is.\n */\nexport function serviceTag(text: string): boolean {\n return text.includes(\"<%\") || text.includes(\"{%\") || /\\{\\{[^}]*[<>&\"'][^}]*\\}\\}/.test(text);\n}\n\n/**\n * Whether text holds what Elements 0.2's lowering kept of an email service's tag, a mark it wrote as `\\uFDD0<n>\\uFDD1`:\n * a value holding one is only known once the tag is filled in.\n */\nexport const holdsKept = (text: string): boolean => text.includes(\"\\uFDD0\");\n\n/**\n * An id its author gave a row, column or block (legacy writes it; the ids it numbers itself aren't written), without\n * what would end its attribute.\n */\nexport function givenId(values: Values): string | undefined {\n const id = values._meta?.htmlID;\n return typeof id === \"string\" && id && !/^u_(row|column|body|content_[a-z0-9_]+)_?\\d*$/.test(id) ? id.replace(/[\"'<>&`\\s\\u0000-\\u001f\\u007f]/g, \"\") || undefined : undefined;\n}\n\n/**\n * Where a block, column or row is hidden: on desktop, or on phones, by its overrides (legacy reads only these: a flat\n * `hideDesktop` or `hideMobile` in its values hides nothing).\n */\nexport function hidden(values: Values): { mobile?: boolean; desktop?: boolean } | undefined {\n const desktop = !!values._override?.desktop?.hideDesktop;\n const mobile = !!values._override?.mobile?.hideMobile;\n return desktop || mobile ? { ...(desktop ? { desktop } : {}), ...(mobile ? { mobile } : {}) } : undefined;\n}\n\n/**\n * The style legacy gives a block's links where it doesn't take the body's: their color, and no underline where it\n * says none. Null on a page where its hover style is another: for what has no place for that (a text tool read back).\n */\nexport function linkStyleOf(values: Values, mode: \"email\" | \"web\" | \"document\"): Record<string, Json> | undefined | null {\n const style = values.linkStyle;\n if (!style || style.inherit !== false) return undefined;\n const color = typeof style.linkColor === \"string\" && style.linkColor ? style.linkColor : undefined;\n const underline = style.linkUnderline !== false;\n if (mode === \"web\" && (style.linkHoverColor !== style.linkColor || (style.linkHoverUnderline !== false) !== underline)) return null;\n return { ...(color ? { color } : {}), ...(underline ? {} : { textDecoration: \"none\" }) };\n}\n\n/** The links among runs in the block's link style (in what a link doesn't set itself), and under the pointer. */\nexport function styled(runs: Run[], style: Record<string, Json> | undefined, hover: Record<string, Json> = {}): Run[] {\n if (!Object.keys(style ?? {}).length && !Object.keys(hover).length) return runs;\n return runs.map((run) => {\n if (typeof run === \"string\") return run;\n const children = run.children && styled(run.children, style, hover);\n if (run.type === \"Link\") return { ...run, style: { ...style, ...run.style }, ...(Object.keys(hover).length ? { hover } : {}), ...(children ? { children } : {}) };\n return children ? { ...run, children } : run;\n });\n}\n","/**\n * Every key toDesign() writes in a builder item's values, by tool: the builder's own (its fields, which it shows and\n * edits, from @unlayer/types and the designs it saves), and the hidden properties: a style or prop of the template\n * that the tool has no field for, kept in the item's values under its Elements name and drawn by Elements, with no\n * editor in the builder until it gets one. A hidden key is prefixed only where the tool already uses the name for\n * something else, and says why. A test holds toDesign()'s output to this list, so a new key, or a collision, is a\n * reviewed change here.\n *\n * Phone values go in `_override.mobile` under the same keys as on desktop. A block's share of a Row (`flex`) is its\n * column's width in the builder (`cells`), never hidden.\n */\n\n/** A hidden property: the template's path it holds, its key in the item's values, and why it's prefixed, where it is. */\nexport interface Hidden {\n path: string;\n key: string;\n prefixed?: string;\n}\n\nconst own = (...paths: string[]): Hidden[] => paths.map((path) => ({ path, key: path.slice(path.indexOf(\".\") + 1) }));\n\n/** A text block's box and the text styles its tool has no field for: its phone values (paint.ts writes the rest in its markup). */\nconst TEXT_BOX = own(\"style.fontStyle\", \"style.textTransform\", \"style.textDecoration\", \"style.backgroundColor\", \"style.border\", \"style.borderRadius\", \"style.width\", \"style.maxWidth\", \"style.padding\");\n\nexport const HIDDEN: Readonly<Record<string, readonly Hidden[]>> = {\n // The root's title is the builder's accessibility title (accessibilityTitle), a field; its `language` holds a design's\n // translations, not the language its text is in, so a root's `lang` is hidden.\n body: own(\"props.lang\", \"props.fonts\", \"props.description\", \"props.margin\"),\n // A Section's border, the part of it around this row; the rest of a Row's box.\n row: [\n { path: \"style.border\", key: \"sectionBorder\", prefixed: \"today's image writer takes a row's border as room its columns lose; a Section's is around its band\" },\n ...own(\"style.borderRadius\", \"style.width\", \"style.minWidth\", \"style.maxWidth\", \"style.height\", \"style.overflow\", \"style.justifyContent\", \"style.flexWrap\"),\n ],\n column: [...own(\"style.justifyContent\", \"style.minWidth\", \"style.maxWidth\", \"style.height\", \"style.overflow\"), { path: \"hidden.desktop\", key: \"hideDesktop\" }, { path: \"hidden.mobile\", key: \"hideMobile\" }],\n // A List's indent and gap are its too: the builder's rich text has no place for them.\n paragraph: [...TEXT_BOX, ...own(\"style.indent\", \"style.gap\")],\n heading: TEXT_BOX,\n button: [\n { path: \"style.textAlign\", key: \"buttonTextAlign\", prefixed: \"the button's textAlign places the button; the Button's aligns its label\" },\n ...own(\"style.fontStyle\", \"style.textTransform\", \"style.textDecoration\", \"style.maxWidth\", \"props.title\", \"props.aria-label\"),\n ],\n image: [\n { path: \"style.border\", key: \"imageBorder\", prefixed: \"today's image writer takes an image's border as room the image loses, and draws none\" },\n ...own(\"props.title\", \"style.maxWidth\", \"style.height\", \"style.borderRadius\"),\n ],\n divider: [],\n menu: own(\"style.lineHeight\", \"style.textTransform\"),\n social: [],\n video: own(\"props.thumbnail\", \"props.title\", \"style.width\", \"style.maxWidth\"),\n html: own(\"props.text\"),\n page_break: [],\n};\n\n/** What every content item has in the builder. */\nconst CONTENT = [\"containerPadding\", \"anchor\", \"displayCondition\", \"_styleGuide\", \"_meta\", \"selectable\", \"draggable\", \"duplicatable\", \"deletable\", \"hideable\", \"locked\", \"hideDesktop\", \"hideMobile\", \"_override\", \"synced\", \"suggestions\", \"ai_banner\"];\n\n/** The builder's own keys, by tool (its fields, and what it writes for its own use). */\nexport const BUILDER_KEYS: Readonly<Record<string, readonly string[]>> = {\n body: [\n \"_styleGuide\", \"contentWidth\", \"contentAlign\", \"contentVerticalAlign\", \"fontFamily\", \"fontWeight\", \"textColor\", \"backgroundColor\", \"backgroundImage\", \"preheaderText\", \"linkStyle\", \"language\",\n \"accessibilityTitle\", \"textDirection\", \"borderRadius\", \"documentSize\", \"documentOrientation\", \"documentMargin\", \"_meta\",\n \"popupPosition\", \"popupDisplayDelay\", \"popupWidth\", \"popupHeight\", \"popupBackgroundColor\", \"popupBackgroundImage\", \"popupOverlay_backgroundColor\", \"popupCloseButton_position\",\n \"popupCloseButton_backgroundColor\", \"popupCloseButton_iconColor\", \"popupCloseButton_borderRadius\", \"popupCloseButton_margin\", \"popupCloseButton_action\",\n ],\n row: [\n \"displayCondition\", \"columns\", \"_styleGuide\", \"backgroundColor\", \"columnsBackgroundColor\", \"backgroundImage\", \"padding\", \"anchor\", \"noStackMobile\", \"alignItems\", \"_meta\", \"selectable\", \"draggable\",\n \"duplicatable\", \"deletable\", \"hideable\", \"locked\", \"hideDesktop\", \"hideMobile\", \"_override\", \"cells\", \"sync\",\n // Not a field, but today's image writer reads it (see sectionBorder).\n \"border\",\n ],\n column: [\"backgroundColor\", \"padding\", \"border\", \"borderRadius\", \"_meta\", \"deletable\", \"locked\", \"_override\"],\n paragraph: [...CONTENT, \"text\", \"textJson\", \"color\", \"textAlign\", \"fontFamily\", \"fontWeight\", \"fontSize\", \"lineHeight\", \"letterSpacing\", \"linkStyle\", \"textDirection\"],\n heading: [...CONTENT, \"text\", \"textJson\", \"color\", \"textAlign\", \"fontFamily\", \"fontWeight\", \"fontSize\", \"lineHeight\", \"letterSpacing\", \"linkStyle\", \"textDirection\", \"headingType\"],\n button: [...CONTENT, \"text\", \"textJson\", \"href\", \"size\", \"fontFamily\", \"fontWeight\", \"buttonColors\", \"fontSize\", \"lineHeight\", \"letterSpacing\", \"border\", \"padding\", \"textAlign\", \"borderRadius\", \"textDirection\"],\n // An image's border isn't a field, but today's image writer reads it (see imageBorder).\n image: [...CONTENT, \"src\", \"textAlign\", \"altText\", \"action\", \"border\"],\n divider: [...CONTENT, \"width\", \"border\", \"textAlign\"],\n menu: [...CONTENT, \"menu\", \"linkColor\", \"padding\", \"fontFamily\", \"fontWeight\", \"textColor\", \"fontSize\", \"letterSpacing\", \"layout\", \"align\", \"separator\"],\n social: [...CONTENT, \"icons\", \"spacing\", \"align\", \"iconSize\"],\n // A video's alignment isn't in @unlayer/types, but legacy reads it (and centers one without it).\n video: [...CONTENT, \"video\", \"href\", \"textAlign\"],\n html: [...CONTENT, \"html\"],\n page_break: [...CONTENT, \"color\"],\n};\n\n/** The phone values the builder has (in `_override.mobile`), by tool. */\nexport const BUILDER_PHONE_KEYS: Readonly<Record<string, readonly string[]>> = {\n body: [],\n row: [\"padding\", \"hideMobile\", \"noStackMobile\", \"backgroundColor\", \"columnsBackgroundColor\"],\n column: [\"padding\", \"border\", \"backgroundColor\"],\n paragraph: [\"containerPadding\", \"fontSize\", \"lineHeight\", \"textAlign\", \"letterSpacing\", \"hideMobile\"],\n heading: [\"containerPadding\", \"fontSize\", \"lineHeight\", \"textAlign\", \"letterSpacing\", \"hideMobile\"],\n button: [\"containerPadding\", \"fontSize\", \"lineHeight\", \"textAlign\", \"padding\", \"letterSpacing\", \"size\", \"hideMobile\"],\n image: [\"containerPadding\", \"src\", \"textAlign\", \"hideMobile\"],\n divider: [\"containerPadding\", \"width\", \"textAlign\", \"hideMobile\"],\n menu: [\"containerPadding\", \"fontSize\", \"padding\", \"align\", \"layout\", \"hideMobile\"],\n social: [\"containerPadding\", \"iconSize\", \"spacing\", \"align\", \"hideMobile\"],\n video: [\"containerPadding\", \"textAlign\", \"hideMobile\"],\n html: [\"containerPadding\", \"hideMobile\"],\n page_break: [\"hideMobile\"],\n};\n","/**\n * Values both ways between the template and the builder, as the builder's editors store them: a length as \"8px\",\n * sides as \"10px 20px\", a border side by side (`borderTopWidth`, …), a line height as \"150%\", a font as\n * `{ label, value }`, a link as `{ name: \"web\", values: { href, target } }`. A hidden property is written by its kind\n * (from the component's definition), so it's what the builder's own editor for it would write; read back, it's parsed\n * by the same kind, and one that doesn't parse is left out and said.\n */\nimport { definitionOf, linkParts, type Border, type Insets, type Json, type LinkValue } from \"@unlayer-internal/elements-core\";\nimport { border as legacyBorder, px, sides, type Values } from \"./read-values\";\n\nexport type { Values };\n\nconst round = (n: number) => Math.round(n * 100) / 100;\nexport const cssPx = (n: number) => `${round(n)}px`;\n\n/** Sides as CSS, in as few values as say them (\"10px\", \"10px 20px\"). */\nexport function cssSides(s: Insets): string {\n const [t, r, b, l] = [s.top, s.right, s.bottom, s.left].map(cssPx);\n if (t === r && r === b && b === l) return t;\n if (t === b && r === l) return `${t} ${r}`;\n if (r === l) return `${t} ${r} ${b}`;\n return `${t} ${r} ${b} ${l}`;\n}\n\n/** A border as the builder's (`borderTopWidth`, `borderTopStyle`, `borderTopColor`, …), sides it has only. */\nexport function builderBorder(value: Border | undefined): Values {\n const out: Values = {};\n for (const side of [\"top\", \"right\", \"bottom\", \"left\"] as const) {\n const line = value?.[side];\n if (!line) continue;\n const name = side[0].toUpperCase() + side.slice(1);\n out[`border${name}Width`] = line.style === \"none\" ? \"0px\" : cssPx(line.width);\n out[`border${name}Style`] = line.style === \"none\" ? \"solid\" : line.style;\n out[`border${name}Color`] = line.color;\n }\n return out;\n}\n\n/** The builder's border as Elements', sides of no width left out (a side with no color is black, as CSS draws one). */\nexport const readBorder = (value: unknown): Json | undefined => legacyBorder((value && typeof value === \"object\" ? value : {}) as Values, \"#000000\");\n\n/** A line height as the builder's: a multiple as a percentage (\"150%\"), px as it is. */\nexport const cssLineHeight = (value: Json) => (typeof value === \"number\" ? `${round(value * 100)}%` : String(value));\n/**\n * A line height as the builder's field: a whole percentage, rounded up. Chromium draws a percentage's whole part only\n * (184.62% as 184%), and a line a little too short moves its words up a pixel, where one a little too tall doesn't.\n */\nexport const fieldLineHeight = (ratio: number) => `${Math.ceil(ratio * 100 - 1e-9)}%`;\n\n/** A font stack as the builder's `{ label, value }`: its first family the label. */\nexport const builderFont = (stack: string) => ({ label: stack.split(\",\")[0].replace(/[\"']/g, \"\").trim(), value: stack });\n\n/** A link as the builder's: in the same window where the template gives no target, where the builder's own default is a new one. */\nexport const builderLink = (value: LinkValue) => {\n const { href, target } = linkParts(value);\n return { name: \"web\", values: { href, target: target ?? \"_self\" } };\n};\n\n/** A style or prop as its tool's editor would store it, by its kind. */\nexport function encode(kind: string, value: Json): unknown {\n switch (kind) {\n case \"length\":\n return typeof value === \"number\" ? cssPx(value) : value;\n case \"insets\":\n return cssSides(value as Insets);\n case \"border\":\n return builderBorder(value as Border);\n case \"line\":\n return builderBorder({ top: value as Border[\"top\"] });\n case \"radius\":\n return typeof value === \"number\" ? cssPx(value) : [value as Record<string, number>].map((c) => [c.topLeft, c.topRight, c.bottomRight, c.bottomLeft].map(cssPx).join(\" \"))[0];\n case \"lineHeight\":\n return cssLineHeight(value);\n case \"fontFamily\":\n return builderFont(String(value));\n case \"link\":\n return builderLink(value as LinkValue);\n case \"asset\": {\n const asset = typeof value === \"string\" ? { src: value } : (value as { src: string; width?: number; height?: number });\n return { url: asset.src, ...(asset.width ? { width: asset.width } : {}), ...(asset.height ? { height: asset.height } : {}) };\n }\n default:\n return value;\n }\n}\n\n/** The builder's value as the template's input for a kind (what the kind's own parser takes). */\nexport function decode(kind: string, value: unknown): unknown {\n switch (kind) {\n case \"border\":\n return readBorder(value);\n case \"line\": {\n const lines = readBorder(value) as Border | undefined;\n return lines?.top;\n }\n case \"radius\":\n return typeof value === \"string\" && /\\s/.test(value.trim()) ? value.trim().split(/\\s+/) : value;\n case \"fontFamily\":\n return value && typeof value === \"object\" ? (value as { value?: unknown }).value : value;\n case \"link\": {\n const link = value as { values?: { href?: unknown; target?: unknown } } | undefined;\n if (!link || typeof link !== \"object\" || !link.values) return value;\n const { href, target } = link.values;\n // (\"_self\" is what a link does with no target.)\n return target === \"_blank\" ? { href, target } : href;\n }\n case \"asset\": {\n const asset = value as { url?: unknown; width?: unknown; height?: unknown };\n if (!asset || typeof asset !== \"object\") return value;\n // A URL alone where its size isn't known, as the template gives one.\n return asset.width || asset.height ? { src: asset.url, ...(asset.width ? { width: asset.width } : {}), ...(asset.height ? { height: asset.height } : {}) } : asset.url;\n }\n case \"length\":\n return typeof value === \"string\" && px(value) !== undefined && !value.trim().endsWith(\"%\") ? px(value) : value;\n case \"insets\":\n return typeof value === \"string\" ? sides(value) ?? value : value;\n default:\n return value;\n }\n}\n\n/** The kind of a component's style or prop (`style.padding`), or undefined where it has none. */\nexport function kindOf(type: string, path: string): { name: string; parse(value: unknown): { ok: true; value: Json } | { ok: false; message: string } } | undefined {\n const definition = definitionOf(type);\n const [part, key] = [path.slice(0, path.indexOf(\".\")), path.slice(path.indexOf(\".\") + 1)];\n const specs = (part === \"props\" ? definition?.props : definition?.style) as Record<string, { kind: { name: string; parse(value: unknown): any } }> | undefined;\n return specs && Object.hasOwn(specs, key) ? specs[key].kind : undefined;\n}\n","/**\n * An item's hidden properties: what of a template's node its tool has no field for (manifest.ts), written in its\n * values as the builder's editor for it would write it (values.ts), its phone values in `_override.mobile`. What a\n * node has that's neither written to a field, folded into another value (its place's spacing), nor a hidden property\n * is left out, and said.\n */\nimport type { Json, Node } from \"@unlayer-internal/elements-core\";\nimport { HIDDEN } from \"./manifest\";\nimport { decode, encode, kindOf, type Values } from \"./values\";\n\n/** Values merged: `_override`'s devices key by key. */\nexport function merge(into: Values, more: Values): Values {\n const out: Values = { ...into };\n for (const [key, value] of Object.entries(more)) {\n if (key === \"_override\" && out._override && typeof value === \"object\") {\n const override: Values = { ...out._override };\n for (const [device, values] of Object.entries(value as Values)) override[device] = { ...override[device], ...(values as Values) };\n out._override = override;\n } else out[key] = value;\n }\n return out;\n}\n\n/**\n * A node's hidden properties for a tool: each the manifest lists that the node has (its own, or `extra`'s: a text\n * style it inherits), but those in `skip` (written to a field or folded).\n */\nexport function hiddenOf(tool: string, node: Node, skip: readonly string[] = [], extra: Record<string, Json> = {}): Values {\n const out: Values = {};\n const phone: Values = {};\n for (const { path, key } of HIDDEN[tool] ?? []) {\n if (skip.includes(path)) continue;\n if (path.startsWith(\"hidden.\")) {\n // A column's hiding, which the builder has for rows and blocks only.\n const device = path.slice(7) as \"mobile\" | \"desktop\";\n if (node.hidden?.[device]) out._override = merge(out._override ?? {}, { [device]: { [key]: true } });\n continue;\n }\n const [part, name] = [path.slice(0, path.indexOf(\".\")), path.slice(path.indexOf(\".\") + 1)];\n const value = part === \"props\" ? node.props?.[name] : (node.style?.[name] ?? (Object.hasOwn(extra, name) ? extra[name] : undefined));\n const kind = kindOf(node.type, path);\n if (value !== undefined && kind) out[key] = encode(kind.name, value);\n const mobile = part === \"style\" ? node.mobile?.[name] : undefined;\n if (mobile !== undefined && kind) phone[key] = encode(kind.name, mobile);\n }\n if (Object.keys(phone).length) out._override = merge(out._override ?? {}, { mobile: phone });\n return out;\n}\n\n/** What of a node has no place in the builder's design: not a field (`fields`), folded, nor a hidden property of its tool. */\nexport function leftOut(tool: string, node: Node, fields: readonly string[]): string[] {\n const hidden = new Set((HIDDEN[tool] ?? []).map((entry) => entry.path));\n const out: string[] = [];\n for (const part of [\"props\", \"style\", \"mobile\", \"hover\"] as const) {\n for (const key of Object.keys(node[part] ?? {})) {\n const path = `${part}.${key}`;\n // A phone value that's hidden on desktop is hidden on phones too.\n // A share of a Row is its column's width (`cells`).\n if (fields.includes(path) || hidden.has(path) || (part === \"mobile\" && hidden.has(`style.${key}`)) || path === \"style.flex\") continue;\n out.push(path);\n }\n }\n return out;\n}\n\n/** A node's parts that hidden properties set. */\nexport interface HiddenParts {\n props: Record<string, Json>;\n style: Record<string, Json>;\n mobile: Record<string, Json>;\n hidden: { mobile?: boolean; desktop?: boolean };\n}\n\n/**\n * An item's hidden properties read back for a node of `type`: each the manifest lists for its tool, parsed by the\n * kind its component gives it. One that doesn't parse (the design was edited by hand) is left out and said.\n */\nexport function readHidden(tool: string, type: string, values: Values, say: (message: string) => void): HiddenParts {\n const out: HiddenParts = { props: {}, style: {}, mobile: {}, hidden: {} };\n const phone = (values._override?.mobile ?? {}) as Values;\n for (const { path, key } of HIDDEN[tool] ?? []) {\n if (path.startsWith(\"hidden.\")) {\n const device = path.slice(7) as \"mobile\" | \"desktop\";\n if ((values._override?.[device] as Values | undefined)?.[key] === true) out.hidden[device] = true;\n continue;\n }\n const kind = kindOf(type, path);\n const [part, name] = [path.slice(0, path.indexOf(\".\")), path.slice(path.indexOf(\".\") + 1)];\n for (const [where, from] of [[part, values], [\"mobile\", phone]] as const) {\n if (!Object.hasOwn(from, key) || from[key] === undefined || from[key] === null || from[key] === \"\") continue;\n if (where === \"mobile\" && part !== \"style\") continue;\n if (!kind) {\n say(`its ${key} is no ${type}'s: left out`);\n continue;\n }\n const parsed = kind.parse(decode(kind.name, from[key]));\n if (!parsed.ok) {\n say(`its ${key} can't be read (${parsed.message}): left out`);\n continue;\n }\n out[where as \"props\" | \"style\" | \"mobile\"][name] = parsed.value;\n }\n }\n return out;\n}\n","/**\n * A design's values that would throw where they're read: an object with a `toString` or `valueOf` of its own that isn't\n * a function (JSON can hold one, `{\"toString\": null}`), which a value parser turning it into text can't. Each is left\n * out of a copy of the design, and said; a design without one is read as it is.\n */\n\n/** How deep values are looked at: deeper than any the reader reads. */\nconst DEPTH = 32;\n\nconst coerces = (value: object) => ([\"toString\", \"valueOf\"] as const).some((key) => Object.hasOwn(value, key) && typeof (value as Record<string, unknown>)[key] !== \"function\");\n\n/** The design with each value that can't be read as text left out, each said in `report`. */\nexport function withoutMalformed(design: unknown, report: string[]): unknown {\n const found: string[][] = [];\n const walk = (value: unknown, path: string[]) => {\n if (!value || typeof value !== \"object\" || path.length > DEPTH) return;\n for (const key of Object.keys(value)) {\n const child = (value as Record<string, unknown>)[key];\n if (child && typeof child === \"object\" && !Array.isArray(child) && coerces(child)) found.push([...path, key]);\n else walk(child, [...path, key]);\n }\n };\n walk(design, []);\n if (!found.length) return design;\n const copy = JSON.parse(JSON.stringify(design)) as Record<string, unknown>;\n for (const path of found) {\n const holder = path.slice(0, -1).reduce<unknown>((at, key) => (at as Record<string, unknown> | undefined)?.[key], copy) as Record<string, unknown> | unknown[] | undefined;\n const last = path[path.length - 1];\n if (Array.isArray(holder)) holder[Number(last)] = null;\n else if (holder) delete holder[last];\n report.push(`${path.map((key, i) => (/^\\d+$/.test(key) ? `[${key}]` : i ? `.${key}` : key)).join(\"\")}: a value whose own toString or valueOf isn't a function can't be read: left out`);\n }\n return copy;\n}\n","/** What every tool's reader shares (blocks.ts, text-tool.ts): where a block is, how its values are read, and how it's placed. */\nimport type { Json, Node } from \"@unlayer-internal/elements-core\";\nimport { ALIGN, color, fontWeight, font, letterSpacing, lineHeight as legacyLineHeight, px, some, type Sides, type Values } from \"./read-values\";\nimport type { HiddenParts } from \"./hide\";\n\n/** Where a block is, as today's image writer works out its room: the body, its row and column, the column's share. */\nexport interface Slot {\n body: Values;\n row: Values;\n column: Values;\n cells: number[];\n index: number;\n /** Whether the row's columns stack on phones. */\n stacks: boolean;\n}\n\n/** What a block is read in: the root's text styles (what a block inherits) and where to say what's left out. */\nexport interface Context {\n inherited: { color: string; fontFamily: string; fontWeight: number };\n /** The builder's display mode the design is read in. */\n mode: \"email\" | \"web\" | \"document\";\n /** The root's direction, which a block without one of its own takes. */\n dir: string;\n /** A design's markup through the app's sanitizer (fromDesign()'s `toSafeHtml`), where it gave one. */\n safe(html: string): string;\n document: boolean;\n say(message: string): void;\n}\n\nexport const ZERO: Sides = { top: 0, right: 0, bottom: 0, left: 0 };\nexport const obj = (value: unknown): Values => (value && typeof value === \"object\" && !Array.isArray(value) ? (value as Values) : {});\nexport const str = (value: unknown) => (typeof value === \"string\" ? value : undefined);\n/** Two values the same, colors in either case (\"#BBBBBB\" is \"#bbbbbb\"). */\nexport const same = (a: unknown, b: unknown) => JSON.stringify(a)?.toLowerCase() === JSON.stringify(b)?.toLowerCase();\n/** A style set where it isn't what the node takes anyway. */\nexport const unless = (value: Json | undefined, taken: Json | undefined) => (value === undefined || same(value, taken) ? undefined : value);\n/** A line height as Elements': a percentage as the multiple it is (\"150%\" is 1.5), px as it is. */\nexport const lineHeight = (value: unknown): Json | undefined => {\n const read = legacyLineHeight(value);\n return typeof read === \"string\" && read.endsWith(\"%\") ? Math.round(parseFloat(read) * 100) / 10000 : read;\n};\n/** A radius as the builder writes it, in px: one, or CSS's corners (\"1px 2px 3px 4px\"). Undefined for what Elements doesn't draw (a %). */\nexport const readRadius = (value: unknown): Json | undefined => {\n if (typeof value === \"number\") return value;\n if (typeof value !== \"string\" || !value.trim()) return undefined;\n const parts = value.trim().split(/\\s+/).map(px);\n if (parts.length > 4 || parts.some((part) => part === undefined)) return undefined;\n if (parts.length === 1) return parts[0] as number;\n const [topLeft, topRight = topLeft, bottomRight = topLeft, bottomLeft = topRight] = parts as number[];\n return { topLeft, topRight, bottomRight, bottomLeft };\n};\n/** The builder's alignment (left, center, right) as Elements' (start, center, end); undefined for anything else. */\nexport const alignOf = (value: unknown) => (typeof value === \"string\" && Object.hasOwn(ALIGN, value) ? ALIGN[value] : undefined);\nexport const defined = (record: Record<string, Json | undefined>) => Object.fromEntries(Object.entries(record).filter(([, v]) => v !== undefined)) as Record<string, Json>;\n\n/** A node with its parts, empty ones left out. */\nexport function make(type: string, parts: { id?: string; props?: Record<string, Json>; style?: Record<string, Json>; mobile?: Record<string, Json>; hover?: Record<string, Json>; hidden?: { mobile?: boolean; desktop?: boolean }; children?: Node[\"children\"] }): Node {\n const node: Node = { type };\n if (parts.id) node.id = parts.id;\n for (const key of [\"props\", \"style\", \"mobile\", \"hover\"] as const) if (parts[key] && Object.keys(parts[key]!).length) node[key] = parts[key];\n if (parts.hidden && (parts.hidden.mobile || parts.hidden.desktop)) node.hidden = defined(parts.hidden as never) as never;\n if (parts.children) node.children = parts.children;\n return node;\n}\n\n/** Whether hidden properties give a block a box of its own (its padding inside it). */\nexport const boxOf = (hidden: HiddenParts) => [\"backgroundColor\", \"border\", \"borderRadius\", \"width\", \"maxWidth\", \"padding\"].some((key) => key in hidden.style);\n\n/** A block in its place: a Column around it with the place's padding and alignment, where it has either. */\nexport function placed(node: Node, padding: Sides | undefined, align: string | undefined, phonePadding: Sides | undefined, hiddenOn: Node[\"hidden\"]): Node {\n const alignItems = align && align !== \"left\" ? alignOf(align) : undefined;\n const visible = !hiddenOn || (!hiddenOn.mobile && !hiddenOn.desktop);\n if (!some(padding) && !alignItems && !phonePadding) return visible ? node : { ...node, hidden: { ...node.hidden, ...hiddenOn } };\n return make(\"Column\", { style: defined({ padding: some(padding), alignItems }), mobile: phonePadding ? { padding: phonePadding } : undefined, hidden: hiddenOn, children: [node] });\n}\n\n/** A block's text styles from its fields, those it takes anyway left out. */\nexport function textStyle(values: Values, taken: Record<string, Json>, context: Context): Record<string, Json> {\n const size = px(values.fontSize);\n return defined({\n fontFamily: unless(font(values.fontFamily), taken.fontFamily ?? context.inherited.fontFamily),\n fontSize: unless(size, taken.fontSize ?? 16),\n fontWeight: unless(fontWeight(values.fontWeight), taken.fontWeight ?? context.inherited.fontWeight),\n color: unless(color(values.color), taken.color ?? context.inherited.color),\n lineHeight: unless(lineHeight(values.lineHeight), taken.lineHeight ?? 1.5),\n letterSpacing: unless(letterSpacing(values.letterSpacing, size) || undefined, taken.letterSpacing),\n textAlign: unless(str(values.textAlign), taken.textAlign ?? \"left\"),\n });\n}\n\n/** Phone values the builder has fields for (a text's size, line height, alignment, letter spacing). */\nexport function phoneText(values: Values): Record<string, Json> {\n const m = obj(obj(values._override).mobile);\n return defined({ fontSize: px(m.fontSize), lineHeight: lineHeight(m.lineHeight), textAlign: str(m.textAlign), letterSpacing: px(m.letterSpacing) });\n}\n","/**\n * A text block's HTML (a heading's, a text's, a button's `text`) as the runs of a Text, a Heading or a Button:\n * words, Span, Link and LineBreak, drawn as the browser draws the HTML. Paragraphs (`<p>` with no margins, as legacy's\n * own are written, and `<div>`) are lines one under another; a paragraph holding only a line break is an empty line, an\n * empty one nothing. It fails closed: anything it doesn't read exactly as the browser does (markup no run holds, a\n * comment, an entity it doesn't know, a `<p>` with the browser's margins, white space between paragraphs, a link's\n * target or an attribute a run doesn't take) is said in `left`, and the block keeps its legacy HTML.\n */\nimport type { Json } from \"@unlayer-internal/elements-core\";\nimport { holdsKept } from \"./read-values\";\n\n/** A run that isn't words: a Span, a Link or a LineBreak, as the new engine's node. */\nexport interface RunNode {\n type: string;\n props?: Record<string, Json>;\n style?: Record<string, Json>;\n hover?: Record<string, Json>;\n children?: Run[];\n}\n\nexport type Run = RunNode | string;\n\n/** A tag as the browser reads one: `<` straight before its name or its `/`. (Before anything else `<` is text: `a < b`.) */\nconst TAG = /<(\\/?)([a-zA-Z][a-zA-Z0-9]*)([^>]*?)\\/?\\s*>/g;\nconst ATTRIBUTE = /([a-zA-Z-]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/g;\n/**\n * The named entities read (as HTML names them: case matters), each the character the browser draws. Another is said in\n * `left`, as is one without its semicolon (which the browser may read as an entity, or not).\n */\nconst ENTITIES: Record<string, string> = {\n amp: \"&\", AMP: \"&\", lt: \"<\", LT: \"<\", gt: \">\", GT: \">\", quot: '\"', QUOT: '\"', apos: \"'\", nbsp: \" \",\n copy: \"©\", COPY: \"©\", reg: \"®\", REG: \"®\", trade: \"™\", mdash: \"—\", ndash: \"–\", hellip: \"…\",\n lsquo: \"‘\", rsquo: \"’\", sbquo: \"‚\", ldquo: \"“\", rdquo: \"”\", bdquo: \"„\", laquo: \"«\", raquo: \"»\",\n lsaquo: \"‹\", rsaquo: \"›\", euro: \"€\", pound: \"£\", yen: \"¥\", cent: \"¢\", sect: \"§\", para: \"¶\",\n middot: \"·\", bull: \"•\", deg: \"°\", plusmn: \"±\", times: \"×\", divide: \"÷\", frac12: \"½\",\n frac14: \"¼\", frac34: \"¾\", iexcl: \"¡\", iquest: \"¿\", shy: \"\", ensp: \" \", emsp: \" \",\n thinsp: \" \", zwnj: \"\", zwj: \"\", lrm: \"\", rlm: \"\", dagger: \"†\", Dagger: \"‡\",\n permil: \"‰\", larr: \"←\", rarr: \"→\", uarr: \"↑\", darr: \"↓\", harr: \"↔\",\n};\nconst ENTITY = /&(#[xX][0-9a-fA-F]+|#\\d+|[a-zA-Z][a-zA-Z0-9]*);/g;\n/** The names HTML reads without their semicolon (\"© 2024\"): another & followed by letters is text (\"S&P 500\"). */\nconst NO_SEMICOLON = (\n \"AElig AMP Aacute Acirc Agrave Aring Atilde Auml COPY Ccedil ETH Eacute Ecirc Egrave Euml GT Iacute Icirc Igrave Iuml LT \" +\n \"Ntilde Oacute Ocirc Ograve Oslash Otilde Ouml QUOT REG THORN Uacute Ucirc Ugrave Uuml Yacute aacute acirc acute aelig \" +\n \"agrave amp aring atilde auml brvbar ccedil cedil cent copy curren deg divide eacute ecirc egrave eth euml frac12 frac14 \" +\n \"frac34 gt iacute icirc iexcl igrave iquest iuml laquo lt macr micro middot nbsp not ntilde oacute ocirc ograve ordf ordm \" +\n \"oslash otilde ouml para plusmn pound quot raquo reg sect shy sup1 sup2 sup3 szlig thorn times uacute ucirc ugrave uml \" +\n \"uuml yacute yen yuml\"\n).split(\" \");\n\n/**\n * Text with its entities decoded. One it doesn't read as the browser does is said in `left`: an unknown name, a name\n * without its semicolon, a number the browser reads otherwise (none, a surrogate, past Unicode, or 128 to 159, which\n * it reads as Windows-1252), or a noncharacter.\n */\nfunction decode(text: string, left: string[]): string {\n const out = text.replace(ENTITY, (match, name: string) => {\n if (name[0] === \"#\") {\n const code = name[1] === \"x\" || name[1] === \"X\" ? parseInt(name.slice(2), 16) : parseInt(name.slice(1), 10);\n // (Nor a noncharacter, which is no text: see values.ts's marks.)\n if (code > 0 && code <= 0x10ffff && !(code >= 0x80 && code <= 0x9f) && !(code >= 0xd800 && code <= 0xdfff) && !(code >= 0xfdd0 && code <= 0xfdef)) return String.fromCodePoint(code);\n } else if (Object.prototype.hasOwnProperty.call(ENTITIES, name)) return ENTITIES[name];\n left.push(`the entity ${match}`);\n return match;\n });\n // An & the browser may read as an entity without its semicolon: a number, or one of the names it reads so.\n const rest = text.replace(ENTITY, \"\");\n if (/&#(\\d|[xX][0-9a-fA-F])/.test(rest) || [...rest.matchAll(/&([a-zA-Z]+)/g)].some((m) => NO_SEMICOLON.some((name) => m[1].startsWith(name)))) {\n left.push(\"an entity without its semicolon\");\n }\n return out;\n}\n\nfunction attributes(text: string, left: string[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const match of text.matchAll(ATTRIBUTE)) out[match[1].toLowerCase()] = decode(match[2] ?? match[3] ?? \"\", left);\n // An attribute with no value (`hidden`), or one written without quotes, is one too.\n for (const name of text.replace(ATTRIBUTE, \" \").match(/[a-zA-Z][\\w:-]*/g) ?? []) out[name.toLowerCase()] ??= \"\";\n return out;\n}\n\nconst pxOf = (value: string) => (/^-?[\\d.]+px$/.test(value.trim()) ? parseFloat(value) : undefined);\nconst WEIGHTS: Record<string, number> = { normal: 400, bold: 700 };\n\n/** A `style` attribute as a run's style: the properties a Span or a Link takes; the others are said in `left`. */\nfunction runStyle(css: string | undefined, left: string[], fonts = false): Record<string, Json> {\n const out: Record<string, Json> = {};\n for (const declaration of (css ?? \"\").split(\";\")) {\n const [property, ...rest] = declaration.split(\":\");\n const name = property?.trim().toLowerCase();\n const value = rest.join(\":\").trim();\n if (!name || !value) continue;\n // An email service's tag as a value: it's only known once it's filled in.\n if (holdsKept(value)) {\n left.push(`${name} from an email service's tag`);\n continue;\n }\n const weight = WEIGHTS[value] ?? (/^[1-9]00$/.test(value) ? Number(value) : undefined);\n if (name === \"color\" && !/[!;]/.test(value)) out.color = value;\n else if (name === \"background-color\" && !/[!;]/.test(value)) out.backgroundColor = value;\n else if (name === \"font-weight\" && weight !== undefined) out.fontWeight = weight;\n else if (name === \"font-style\" && (value === \"italic\" || value === \"normal\")) out.fontStyle = value;\n else if ((name === \"text-decoration\" || name === \"text-decoration-line\") && [\"none\", \"underline\", \"line-through\"].includes(value)) out.textDecoration = value;\n else if (name === \"text-transform\" && [\"none\", \"uppercase\", \"lowercase\", \"capitalize\"].includes(value)) out.textTransform = value;\n else if (name === \"font-size\" && pxOf(value) !== undefined) out.fontSize = pxOf(value)!;\n else if (name === \"letter-spacing\" && pxOf(value) !== undefined) out.letterSpacing = pxOf(value)!;\n else if (name === \"font-family\" && fonts && !/[!;<>]/.test(value)) out.fontFamily = value.replace(/'/g, '\"');\n else left.push(`${name}: ${value}`);\n }\n return out;\n}\n\n/** What a tag adds to the style of the text in it (`<b>` its weight: the browser's bolder than the text around it). */\nfunction tagStyle(tag: string, weight: number, raised = false): Record<string, Json> | undefined {\n switch (tag) {\n case \"sup\":\n case \"sub\":\n return raised ? { verticalAlign: tag === \"sup\" ? \"super\" : \"sub\" } : undefined;\n case \"b\":\n case \"strong\":\n return { fontWeight: weight < 400 ? 400 : weight < 600 ? 700 : 900 };\n case \"i\":\n case \"em\":\n return { fontStyle: \"italic\" };\n case \"u\":\n return { textDecoration: \"underline\" };\n case \"s\":\n case \"strike\":\n return { textDecoration: \"line-through\" };\n case \"span\":\n return {};\n }\n return undefined;\n}\n\ntype Frame = { tag: string; node: RunNode | null; children: Run[]; weight: number };\n\n/**\n * The HTML as runs, and what in it no run holds. `weight` is the block's font weight, which a `<b>` makes bolder;\n * `links` says whether text may hold links (a button's can't: it's one). `builder` reads what the builder adapter\n * writes in a text tool's HTML besides (a run's font, `<sup>` and `<sub>`, a link's title and label), which legacy draws\n * as the browser does.\n */\nexport function parseRuns(html: string, { weight = 400, links = true, builder = false }: { weight?: number; links?: boolean; builder?: boolean } = {}): { children: Run[]; left: string[] } {\n const left: string[] = [];\n // A comment, a processing instruction or a declaration (`<!-- -->`, `<?php ?>`, `<![CDATA[`, and to the browser `</ b>`\n // too): the browser doesn't show it, or shows it otherwise; it's not read.\n if (/<[!?]|<\\/(?![a-zA-Z])/.test(html)) left.push(\"a comment or a processing instruction\");\n const lines: Run[][] = [];\n let current: Frame = { tag: \"\", node: null, children: [], weight };\n const stack: Frame[] = [current];\n const top = () => stack[stack.length - 1];\n /** A paragraph ends: its runs are a line (or none, where it's empty). */\n const endParagraph = (last = false) => {\n if (stack.length > 1) left.push(\"a paragraph inside text that's styled\");\n const runs = tidy(current.children);\n // A line break that ends a paragraph doesn't start another line (unless it's all the paragraph has). Read for the\n // builder, the last paragraph's is kept: the runs end a block, which drops it again where they're written.\n if (runs.length > 1 && isBreak(runs[runs.length - 1]) && !(builder && last)) runs.pop();\n if (runs.length) lines.push(runs.length === 1 && isBreak(runs[0]) ? [] : runs);\n current = { tag: \"\", node: null, children: [], weight };\n stack.splice(0, stack.length, current);\n };\n let last = 0;\n /** Whether the last tag read was a paragraph's (opening or closing). */\n let afterParagraph = false;\n const text = (raw: string, beforeParagraph: boolean) => {\n // White space between paragraphs: the browser may draw it as a line of its own (in a run of text), or not.\n if (raw && !raw.trim() && (afterParagraph || beforeParagraph)) left.push(\"white space between paragraphs\");\n // A tag that never ends (`a <b c`): the browser takes what's left for it.\n if (/<\\/?[a-zA-Z]/.test(raw)) left.push(\"a tag that never ends\");\n // White space as written: the browser shows it as it shows legacy's, and its plain text keeps its line breaks.\n const value = decode(raw, left);\n if (value) top().children.push(value);\n };\n for (const match of html.matchAll(TAG)) {\n const tag = match[2].toLowerCase();\n text(html.slice(last, match.index), tag === \"p\" || tag === \"div\");\n last = match.index! + match[0].length;\n const closing = match[1] === \"/\";\n const attrs = attributes(match[3], left);\n afterParagraph = tag === \"p\" || tag === \"div\";\n if (tag === \"br\") {\n top().children.push({ type: \"LineBreak\" });\n continue;\n }\n if (tag === \"p\" || tag === \"div\") {\n endParagraph();\n // A paragraph's own style (its alignment, its spacing) isn't a run's; margins of 0 are legacy's own.\n const declarations = (attrs.style ?? \"\").split(\";\").map((d) => d.trim()).filter(Boolean);\n const zero = (d: string, side = \"(-block-start|-block-end|-top|-bottom)?\") => new RegExp(`^margin${side}\\\\s*:\\\\s*0(px)?$`, \"i\").test(d);\n const own = declarations.filter((d) => !zero(d));\n if (!closing && (own.length || Object.keys(attrs).some((name) => name !== \"style\"))) left.push(`<${tag}> with its own attributes`);\n // A <p> without margins of 0 above and below has the browser's (1em each): lines aren't spaced so.\n const both = declarations.some((d) => zero(d, \"\")) || [\"(-top|-block-start)\", \"(-bottom|-block-end)\"].every((side) => declarations.some((d) => zero(d, side)));\n if (!closing && tag === \"p\" && !both) left.push(\"a <p> with the browser's margins\");\n continue;\n }\n if (closing) {\n const at = stack.map((frame) => frame.tag).lastIndexOf(tag);\n if (at <= 0) continue;\n while (stack.length > at) {\n const frame = stack.pop()!;\n if (frame.node) top().children.push({ ...frame.node, children: frame.children });\n else top().children.push(...frame.children);\n }\n continue;\n }\n const weightHere = top().weight;\n if (tag === \"a\" && links) {\n const style = runStyle(attrs.style, left, builder);\n const href = attrs.href ?? \"\";\n const target = attrs.target;\n // A Link writes its href, where it opens (a new window, \"_blank\", or its own, \"_self\") and its style (and, read\n // for the builder, its title and label): another target, or another attribute (its rel), isn't written. Read for\n // the builder, a rel of noopener and noreferrer only (the builder's editor writes one) is dropped: Elements\n // writes `noopener noreferrer` on a link opening a new window, and on one opening in its own they change nothing\n // a reader sees.\n const safeRel = builder && attrs.rel !== undefined && /^\\s*(noopener|noreferrer)(\\s+(noopener|noreferrer))*\\s*$/i.test(attrs.rel);\n const taken = [\"href\", \"target\", \"style\", ...(builder ? [\"title\", \"aria-label\"] : []), ...(safeRel ? [\"rel\"] : [])];\n if (!href || Object.keys(attrs).some((name) => !taken.includes(name))) left.push(\"a link with no href, or with attributes a Link doesn't take\");\n if (target !== undefined && target !== \"_blank\" && target !== \"_self\") left.push(`a link opening in ${JSON.stringify(target)}`);\n const labels = builder ? Object.fromEntries(([\"title\", \"aria-label\"] as const).filter((name) => attrs[name] !== undefined).map((name) => [name, attrs[name]])) : {};\n stack.push({ tag, node: { type: \"Link\", props: { href: target === \"_blank\" || target === \"_self\" ? { href, target } : href, ...labels }, ...(Object.keys(style).length ? { style } : {}) }, children: [], weight: (style.fontWeight as number | undefined) ?? weightHere });\n continue;\n }\n const own = tagStyle(tag, weightHere, builder);\n if (!own || Object.keys(attrs).some((name) => name !== \"style\")) {\n left.push(`<${tag}>`);\n stack.push({ tag, node: null, children: [], weight: weightHere });\n continue;\n }\n const style = { ...own, ...runStyle(attrs.style, left, builder) };\n stack.push({ tag, node: Object.keys(style).length ? { type: \"Span\", style } : null, children: [], weight: (style.fontWeight as number | undefined) ?? weightHere });\n }\n text(html.slice(last), false);\n while (stack.length > 1) {\n const frame = stack.pop()!;\n if (frame.node) top().children.push({ ...frame.node, children: frame.children });\n else top().children.push(...frame.children);\n }\n endParagraph(true);\n const children: Run[] = [];\n lines.forEach((line, index) => {\n if (index) children.push({ type: \"LineBreak\" });\n children.push(...line);\n });\n // An empty line last: a line break there would end the line before it, so it's one more.\n if (lines.length > 1 && !lines[lines.length - 1].length) children.push({ type: \"LineBreak\" });\n return { children, left };\n}\n\nconst isBreak = (run: Run | undefined) => typeof run === \"object\" && run.type === \"LineBreak\";\n\n/** Runs as one writes them: words side by side as one, a Span holding only a Span as one Span, empty Spans left out. */\nfunction tidy(children: Run[]): Run[] {\n const out: Run[] = [];\n for (const child of children) {\n if (typeof child === \"string\") {\n if (typeof out[out.length - 1] === \"string\") out[out.length - 1] = (out[out.length - 1] as string) + child;\n else if (child) out.push(child);\n continue;\n }\n const inner = child.children ? tidy(child.children) : undefined;\n // (Not where both set one property, as an underline around a strike: the browser draws both.)\n const overlap = (a: Record<string, Json> = {}, b: Record<string, Json> = {}) => Object.keys(a).some((key) => key in b);\n if (child.type === \"Span\" && inner?.length === 1 && typeof inner[0] !== \"string\" && inner[0].type === \"Span\" && !overlap(child.style, inner[0].style)) {\n out.push({ ...inner[0], style: { ...child.style, ...inner[0].style } });\n } else if (child.type === \"Span\" && inner && !inner.length) continue;\n else out.push(inner ? { ...child, children: inner } : child);\n }\n return out;\n}\n","/**\n * Image display-width resolution.\n *\n * In Unlayer's value model an image's display size is `autoWidth` + `maxWidth`,\n * kept separate from the natural `src.width`/`height`. A fixed display size is\n * `autoWidth: false` with `maxWidth` as a PERCENT of the column's content slot\n * (e.g. `\"50%\"`) — not the natural-size field. Encoding a fixed width that way\n * keeps it stable when the design JSON is opened in an editor, which treats\n * `src.width`/`height` as the intrinsic dimensions and may refresh them.\n *\n * A design's image is read (blocks.ts) with the same available-width geometry the\n * editor's renderers use: contentWidth × column share, minus paddings and borders.\n */\n\n// NOTE: the geometry parsers below use parseFloat on each token, intentionally\n// mirroring the renderer's explodePaddingsOrMargins / explodeBorder (which the\n// image exporter subtracts from the available width). The renderer reads a token\n// like \"10%\" as its numeric value (10), so the slot math must too — switching to\n// strict px parsing here would make the slot diverge from what the editor\n// actually renders.\n\n/** Left/right edge sizes from a CSS box shorthand (padding/margin), parsed the\n * same way the renderer's explodePaddingsOrMargins does (parseFloat per token). */\nfunction edges(value: unknown): { left: number; right: number } {\n if (value == null) return { left: 0, right: 0 };\n if (typeof value === \"number\") return { left: value, right: value };\n const parts = String(value)\n .trim()\n .split(/\\s+/)\n .map((p) => parseFloat(p) || 0);\n // CSS order: 1 = all; 2 = [v h]; 3 = [t h b]; 4 = [t r b l].\n if (parts.length === 1) return { left: parts[0], right: parts[0] };\n if (parts.length === 2 || parts.length === 3)\n return { left: parts[1], right: parts[1] };\n return { left: parts[3] || 0, right: parts[1] || 0 };\n}\n\n/** Left/right border widths from a per-side border object, parsed the same way\n * the renderer's explodeBorder does (parseFloat per width). */\nfunction borderEdges(border: unknown): { left: number; right: number } {\n if (!border || typeof border !== \"object\") return { left: 0, right: 0 };\n const b = border as Record<string, unknown>;\n const width = (v: unknown) => parseFloat(`${v ?? \"\"}`) || 0;\n return {\n left: width(b.borderLeftWidth),\n right: width(b.borderRightWidth),\n };\n}\n\n/** A body `contentWidth` is \"fixed px\" only when it's a number or a numeric\n * string with an optional px unit (`600`, `\"600px\"`, or `\"600\"`). Percentages\n * and keywords like `\"auto\"` are NOT fixed → `undefined`. */\nfunction fixedContentWidth(contentWidth: unknown): number | undefined {\n if (typeof contentWidth === \"number\")\n return Number.isFinite(contentWidth) ? contentWidth : undefined;\n if (typeof contentWidth === \"string\") {\n const m = /^(\\d+(?:\\.\\d+)?)(?:px)?$/.exec(contentWidth.trim());\n if (m) return parseFloat(m[1]);\n }\n return undefined;\n}\n\n/** Unlayer's body content width fallback when `contentWidth` isn't fixed px. */\nconst FALLBACK_BODY_CONTENT_WIDTH = 500;\n/** Unlayer's default content-block padding when a block sets none. */\nconst DEFAULT_CONTAINER_PADDING = \"10px\";\n\n/**\n * A body `contentWidth` resolved to px: the fixed px value, or `fallback`\n * (500, Unlayer's base width) for non-px values like `\"50%\"` / `\"auto\"`.\n *\n * A non-px `contentWidth` collapses to that base instead of being `parseInt`-ed\n * into a bogus px value (e.g. `\"50%\"` → 50).\n */\nexport function bodyContentWidthPx(\n contentWidth: unknown,\n fallback: number = FALLBACK_BODY_CONTENT_WIDTH\n): number {\n return fixedContentWidth(contentWidth) ?? fallback;\n}\n\nexport interface SlotContext {\n bodyValues?: { contentWidth?: number | string; padding?: unknown; border?: unknown };\n rowValues?: { padding?: unknown; border?: unknown };\n rowCells?: number[];\n columnIndex?: number;\n columnValues?: { padding?: unknown; border?: unknown };\n /** The image block's own containerPadding (defaults to 10px like the editor). */\n containerPadding?: unknown;\n}\n\n/**\n * Width in px available to a content block, mirroring the renderers'\n * available-width math: contentWidth, minus body/row/column/container paddings\n * and borders, scaled by the column's share of the row.\n */\nexport function contentSlotWidth(ctx: SlotContext): number {\n const { bodyValues = {}, rowValues = {}, columnValues = {} } = ctx;\n const rowCells = ctx.rowCells && ctx.rowCells.length ? ctx.rowCells : [1];\n const columnIndex = ctx.columnIndex ?? 0;\n\n const bodyWidth = bodyContentWidthPx(bodyValues.contentWidth);\n\n const bp = edges(bodyValues.padding);\n const bb = borderEdges(bodyValues.border);\n const bodyAvail = bodyWidth - bp.left - bp.right - bb.left - bb.right;\n\n const rp = edges(rowValues.padding);\n const rb = borderEdges(rowValues.border);\n const rowAvail = bodyAvail - rp.left - rp.right - rb.left - rb.right;\n\n const rowSpan = rowCells.reduce((a, b) => a + b, 0) || 1;\n const colSpan = rowCells[columnIndex] || 1;\n const colWidth = (colSpan / rowSpan) * rowAvail;\n\n const cp = edges(columnValues.padding);\n const cb = borderEdges(columnValues.border);\n const colAvail = colWidth - cp.left - cp.right - cb.left - cb.right;\n\n const ip = edges(ctx.containerPadding ?? DEFAULT_CONTAINER_PADDING);\n return colAvail - ip.left - ip.right;\n}\n","/**\n * The builder's rich text (its editor's Lexical JSON, `textJson`) as HTML, walking the JSON with no editor or DOM: the\n * generator Elements 0.2's components wrote a Text's text with (the shared package's lexical-helpers.ts, until 0.3.0), which text-json.ts\n * reads a design's rich text through. Kept as it is: what it writes is what fromDesign() reads.\n */\n\n// ── Lexical format bitmask → HTML tag mapping ────────────────────────────────\n// Lexical encodes inline formatting in a numeric `format` bitmask on text nodes.\nconst FORMAT_TAGS: Array<[number, string, string]> = [\n [1, \"<strong>\", \"</strong>\"], // bold\n [2, \"<em>\", \"</em>\"], // italic\n [4, \"<s>\", \"</s>\"], // strikethrough\n [8, \"<u>\", \"</u>\"], // underline\n [16, \"<code>\", \"</code>\"], // code\n [32, \"<sub>\", \"</sub>\"], // subscript\n [64, \"<sup>\", \"</sup>\"], // superscript\n];\n\n/**\n * Escape HTML special characters in text content.\n */\nfunction escapeHtml(text: string): string {\n return text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\");\n}\n\n/**\n * Convert a Lexical text node to HTML, applying format bitmask.\n */\nfunction textNodeToHtml(node: any): string {\n let html = escapeHtml(node.text || \"\");\n\n // Apply inline style attribute if present\n const style = node.style;\n\n // Wrap in format tags (innermost first)\n const format = node.format || 0;\n let openTags = \"\";\n let closeTags = \"\";\n for (const [bit, open, close] of FORMAT_TAGS) {\n if (format & bit) {\n openTags += open;\n closeTags = close + closeTags;\n }\n }\n html = openTags + html + closeTags;\n\n // Wrap in <span> if inline style is present\n if (style) {\n html = `<span style=\"${escapeHtml(style)}\">${html}</span>`;\n }\n\n return html;\n}\n\n// Lexical serializes element-node alignment either as a string (\"center\")\n// or, in older payloads, as the in-memory numeric format code.\nconst NUMERIC_ALIGN: Record<number, string> = {\n 1: \"left\",\n 2: \"center\",\n 3: \"right\",\n 4: \"justify\",\n};\n\n/**\n * Build a ` dir=\"...\"` attribute chunk from a node's direction. Only \"ltr\"\n * and \"rtl\" are valid — the editor ignores anything else, and whitelisting\n * also keeps untrusted Lexical JSON from injecting attribute markup.\n */\nfunction dirAttribute(direction: unknown): string {\n return direction === \"ltr\" || direction === \"rtl\"\n ? ` dir=\"${direction}\"`\n : \"\";\n}\n\n/**\n * Resolve a paragraph node's text-align value from its `format` field.\n */\nfunction paragraphAlign(format: unknown): string | undefined {\n if (typeof format === \"string\") {\n return [\"left\", \"center\", \"right\", \"justify\"].includes(format)\n ? format\n : undefined;\n }\n if (typeof format === \"number\") {\n return NUMERIC_ALIGN[format];\n }\n return undefined;\n}\n\n/**\n * Convert a Lexical paragraph node to HTML, matching the markup the\n * Unlayer editor exports for paragraphs.\n */\nfunction paragraphNodeToHtml(node: any, childrenHtml: string): string {\n // Heading/Button textJson from editor round-trips marks its paragraphs as\n // inline tools; those export as <span> with no block styling.\n const isInlineTool = !!node.isInlineTool;\n const tag = isInlineTool ? \"span\" : \"p\";\n\n const dir = dirAttribute(node.direction);\n\n const styleParts: string[] = [];\n\n // Custom paragraph styles (e.g. background-color) come first so the\n // resets below win if they overlap.\n if (node.style) {\n styleParts.push(String(node.style).replace(/;+\\s*$/, \"\"));\n }\n\n if (!isInlineTool) {\n // Reset the browser's default <p> margins so multiple paragraph lines\n // don't gain extra vertical spacing in email clients that strip head\n // resets. Zero both the physical shorthand and the logical block\n // longhands so the reset wins regardless of how a client resolves the\n // logical-vs-physical cascade.\n styleParts.push(\n \"margin: 0px\",\n \"margin-block-start: 0px\",\n \"margin-block-end: 0px\"\n );\n }\n\n const indent = Number(node.indent) || 0;\n if (indent > 0) {\n styleParts.push(`padding-inline-start: ${indent * 40}px`);\n }\n\n const align = paragraphAlign(node.format);\n if (align) {\n styleParts.push(`text-align: ${align}`);\n }\n\n const style =\n styleParts.length > 0\n ? ` style=\"${escapeHtml(styleParts.join(\"; \") + \";\")}\"`\n : \"\";\n\n // Empty paragraphs get a <br> for consistency with the editor\n return `<${tag}${dir}${style}>${childrenHtml || \"<br>\"}</${tag}>`;\n}\n\n/**\n * Convert a Lexical JSON node (and its children) to HTML.\n * Handles: root, paragraph, heading, text, link, list, listitem, linebreak.\n */\nfunction nodeToHtml(node: any): string {\n if (!node || typeof node !== \"object\") return \"\";\n\n const type = node.type;\n\n // Leaf: text node\n if (type === \"text\" || type === \"extended-text\") {\n return textNodeToHtml(node);\n }\n\n // Leaf: line break\n if (type === \"linebreak\") {\n return \"<br>\";\n }\n\n // Recurse into children\n const childrenHtml = (node.children || []).map(nodeToHtml).join(\"\");\n\n switch (type) {\n case \"root\":\n return childrenHtml;\n\n case \"paragraph\":\n case \"extended-paragraph\":\n return paragraphNodeToHtml(node, childrenHtml);\n\n case \"heading\": {\n // Whitelist the tag — it's interpolated into markup\n const tag = /^h[1-6]$/.test(node.tag) ? node.tag : \"h1\";\n const dir = dirAttribute(node.direction);\n return `<${tag}${dir}>${childrenHtml}</${tag}>`;\n }\n\n case \"link\": {\n const href = node.url ? ` href=\"${escapeHtml(node.url)}\"` : \"\";\n const target = node.target ? ` target=\"${escapeHtml(node.target)}\"` : \"\";\n const rel = node.rel ? ` rel=\"${escapeHtml(node.rel)}\"` : \"\";\n return `<a${href}${target}${rel}>${childrenHtml}</a>`;\n }\n\n case \"list\": {\n const tag = node.listType === \"number\" ? \"ol\" : \"ul\";\n return `<${tag}>${childrenHtml}</${tag}>`;\n }\n\n case \"listitem\":\n return `<li>${childrenHtml}</li>`;\n\n default:\n // Unknown node type — pass through children\n return childrenHtml;\n }\n}\n\n/**\n * Convert Lexical JSON to HTML.\n *\n * Walks the JSON tree directly — no Lexical headless editor or DOM required.\n * Works identically in Node.js and browser environments.\n *\n * @param textJson - Lexical JSON string\n * @returns HTML string\n *\n * @example\n * ```ts\n * const html = generateHtmlFromTextJson('{\"root\":...}');\n * ```\n */\nexport function generateHtmlFromTextJson(textJson: string): string {\n if (!textJson) return \"\";\n\n try {\n const parsed = JSON.parse(textJson);\n\n // Raw HTML passthrough (produced by htmlToTextJson); else walk the Lexical JSON tree and produce HTML. A JSON escape\n // can write a Unicode noncharacter, which is no text: what reads text may use them for its own marks.\n const html = parsed.__html || nodeToHtml(parsed.root);\n return typeof html === \"string\" ? html.replace(/[\\uFDD0-\\uFDEF]/g, \"\\uFFFD\") : html;\n } catch {\n return \"\";\n }\n}\n","/**\n * A tool's rich text (its editor's Lexical JSON, `textJson`) as HTML, for reading it back: the generator's\n * (lexical.ts, as Elements 0.2's components write it), with each node the builder's editor saves written as the editor's own export writes it. The\n * generator knows Lexical's nodes (text, paragraph, heading, list, list item, link, line break); the editor saves\n * its own, which it writes as their words only, or not at all. Each is turned into the generator's node, and what the\n * generator doesn't write of it but the editor does is added to its tag:\n *\n * - a link (`extended-link`, an `autolink`): a `link` with its URL, target and rel, and its title, style, class, click\n * handler, download and own attributes; an automatic link its writer unlinked is its words;\n * - a merge tag (`merge_tag`): its text, the tag as the editor writes it (`{{first_name}}`), in its format and style;\n * - a list (`extended-list`) and its items (`extended-listitem`): a `list` of its type with its start, marker and\n * direction, and `listitem`s with their direction and alignment (one holding only a nested list shows no marker);\n * - a heading in text (`extended-heading`): its tag with its style; a heading's or a button's line\n * (`heading-paragraph`): a `<span>`, as a paragraph of theirs;\n * - a node with attributes of its own (`custom_node`): its element as the editor writes it, which the run parser\n * keeps as markup.\n *\n * Any other node is said in `unread`. Pure: the JSON isn't changed.\n */\nimport { generateHtmlFromTextJson } from \"./lexical\";\n\n/** What isn't Lexical's JSON or an HTML passthrough, as `unread` says it. */\nconst NOT_RICH_TEXT = \"rich text that isn't the editor's\";\n\ntype Item = Record<string, unknown>;\n\n/** The nodes the generator writes. */\nconst KNOWN = new Set([\"root\", \"paragraph\", \"extended-paragraph\", \"heading\", \"text\", \"extended-text\", \"linebreak\", \"link\", \"list\", \"listitem\"]);\nconst ALIGNS: Record<string, string> = { \"1\": \"left\", \"2\": \"center\", \"3\": \"right\", \"4\": \"justify\", left: \"left\", center: \"center\", right: \"right\", justify: \"justify\" };\n/** The tags a node of the editor's own (custom_node) is written in. */\nconst TAGS = new Set([\"span\", \"p\", \"a\", \"strong\", \"b\", \"em\", \"i\", \"u\", \"s\", \"mark\", \"small\", \"sub\", \"sup\", \"label\", \"abbr\", \"cite\", \"code\", \"kbd\", \"samp\", \"var\", \"time\", \"q\", \"dfn\", \"ins\", \"del\"]);\n/** Where a custom node's markup goes in the generator's HTML (characters no text holds: Unicode's private use). */\nconst MARK = (i: number) => `${i}`;\n\n/** The generator's HTML: a passthrough of something other than a string (`{\"__html\": 42}`) is none. */\nconst generated = (json: string): TextJsonHtml => {\n const html: unknown = generateHtmlFromTextJson(json);\n return typeof html === \"string\" ? { html, unread: [] } : { html: \"\", unread: [NOT_RICH_TEXT] };\n};\nconst text = (value: unknown) => (typeof value === \"string\" && value ? value : undefined);\nconst escape = (value: string) => value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\nconst attribute = (name: string, value: unknown) => (text(value) && /^[A-Za-z_:][\\w:.-]*$/.test(name) ? ` ${name}=\"${escape(text(value)!)}\"` : \"\");\nconst attributes = (pairs: Array<[string, unknown]>) => pairs.map(([name, value]) => attribute(name, value)).join(\"\");\nconst own = (value: unknown): Array<[string, unknown]> => (value && typeof value === \"object\" && !Array.isArray(value) ? Object.entries(value as Item) : []);\n\nexport interface TextJsonHtml {\n html: string;\n /** The node types the editor's export writes that this doesn't, left out. */\n unread: string[];\n}\n\n/** The rich text as HTML, each node the editor saves as its export writes it. */\nexport function textJsonHtml(textJson: string): TextJsonHtml {\n const unread = new Set<string>();\n try {\n const parsed = JSON.parse(textJson) as unknown;\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed) || \"__html\" in parsed || textJson.includes(\"\")) return generated(textJson);\n // What the generator won't write, by the tag it writes (in the order those tags come: a tag holding another\n // comes first, and links don't nest), and each custom node's markup.\n const added: Record<\"a\" | \"list\" | \"li\" | \"h\", string[]> = { a: [], list: [], li: [], h: [] };\n const custom: string[] = [];\n const walk = (node: unknown): unknown => {\n if (!node || typeof node !== \"object\" || Array.isArray(node)) return node;\n const item = node as Item;\n const type = String(item.type);\n if (type === \"merge_tag\") {\n // Its text in its bold, italic, underline and strike (its export writes those), and its style.\n return { type: \"extended-text\", text: text(item.text) ?? text(own(item.properties).find(([key]) => key === \"value\")?.[1]) ?? \"\", format: Number(item.format) & 15, style: item.style };\n }\n if (type === \"custom_node\") {\n const tag = typeof item.tagName === \"string\" && TAGS.has(item.tagName) ? item.tagName : \"span\";\n custom.push(`<${tag}${attributes(own(item.attributes))}${attribute(\"style\", item.style)}>${escape(text(item.text) ?? \"\")}</${tag}>`);\n return { type: \"extended-text\", text: MARK(custom.length - 1) };\n }\n // Its own nodes the generator writes otherwise, or not; what they add, kept for their tags.\n const linked = (type === \"link\" || type === \"extended-link\" || type === \"autolink\") && item.isUnlinked !== true;\n if (linked) added.a.push(attributes([[\"title\", item.title], [\"style\", item.style], [\"class\", item.className], [\"onclick\", item.onClick], [\"download\", item.download], ...own(item.customAttrs)]));\n const listed = type === \"list\" || type === \"extended-list\";\n if (listed) {\n const start = item.listType === \"number\" && typeof item.start === \"number\" && item.start !== 1 ? String(item.start) : undefined;\n added.list.push(attributes([[\"start\", start], [\"style\", text(item.listStyleType) && `list-style-type: ${item.listStyleType}`], [\"dir\", item.direction === \"rtl\" ? \"rtl\" : undefined]]));\n }\n const itemized = type === \"listitem\" || type === \"extended-listitem\";\n if (itemized) {\n // An item holding a nested list shows no marker (the editor's export hides it).\n const nested = Array.isArray(item.children) && item.children.some((child) => String((child as Item | undefined)?.type).includes(\"list\"));\n const css = [ALIGNS[String(item.format)] && `text-align: ${ALIGNS[String(item.format)]}`, nested && \"list-style-type: none\"].filter(Boolean).join(\"; \");\n added.li.push(attributes([[\"dir\", item.direction === \"rtl\" ? \"rtl\" : undefined], [\"style\", css]]));\n }\n if (type === \"extended-heading\" || type === \"heading\") added.h.push(attribute(\"style\", item.style));\n const children = Array.isArray(item.children) ? item.children.map(walk) : [];\n if (itemized) return { ...item, type: \"listitem\", children };\n if (type === \"extended-heading\") return { ...item, type: \"heading\", children };\n if (type === \"heading-paragraph\") return { ...item, type: \"paragraph\", isInlineTool: true, children };\n if (linked) return { ...item, type: \"link\", url: text(item.url) ?? \"\", target: text(item.target), rel: text(item.rel), children };\n if (listed) return { ...item, type: \"list\", children };\n // An automatic link its writer unlinked is its words (the generator writes a root's children as they are).\n if (type === \"autolink\") return { type: \"root\", children };\n if (!KNOWN.has(type)) unread.add(type);\n return { ...item, children };\n };\n let html = generateHtmlFromTextJson(JSON.stringify({ ...parsed, root: walk((parsed as Item).root) }));\n const at = { a: 0, list: 0, li: 0, h: 0 };\n html = html.replace(/<(a|ul|ol|li|h[1-6])(?=[\\s>])/g, (open, tag: string) => {\n const kind = tag === \"a\" || tag === \"li\" ? tag : tag[0] === \"h\" ? \"h\" : \"list\";\n return `${open}${added[kind][at[kind]++] ?? \"\"}`;\n });\n html = html.replace(/(\\d+)/g, (_, i: string) => custom[Number(i)] ?? \"\");\n return { html, unread: [...unread] };\n } catch {\n // JSON that isn't, or nested too deep to walk: as the generator reads it.\n return generated(textJson);\n }\n}\n","/**\n * A text tool's HTML read back as blocks of runs, as the builder draws it. Runs are Elements 0.2's components' run parser's\n * (read-runs.ts: it fails closed), with merge tags as MergeTags. A `<p>` is a block of its own: the builder's export\n * resets a paragraph's margins (`p { margin: 0 }`, and its editor writes `margin: 0px` on each), so one has none unless\n * its own style gives it some, which are its padding. A `<ul>` or `<ol>` is a List, its padding its indent and its items' margin its gap.\n * What isn't read exactly is said in `left`, and the block is kept as its markup.\n */\nimport type { Child, Json, Node } from \"@unlayer-internal/elements-core\";\nimport { parseRuns, type Run } from \"./read-runs\";\nimport { color, fontWeight, px } from \"./read-values\";\nimport { textJsonHtml } from \"./text-json\";\n\nexport interface TextPart {\n /** A Text's runs, or a List. */\n node: Node;\n /** Its margins above and below, in px. */\n margin: { top: number; bottom: number };\n /** A paragraph's indent (its `padding-inline-start`), in px. */\n indent?: number;\n}\n\nconst TAG = /<\\s*(\\/?)\\s*([a-zA-Z][a-zA-Z0-9]*)([^>]*?)(\\/?)\\s*>/g;\nexport const styleOf = (attrs: string) => /\\bstyle\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/i.exec(attrs)?.slice(1).find((v) => v !== undefined) ?? \"\";\nexport const declarations = (css: string) => Object.fromEntries(css.split(\";\").map((d) => d.split(\":\")).filter((p) => p.length >= 2 && p[0].trim()).map(([name, ...rest]) => [name.trim().toLowerCase(), rest.join(\":\").trim()]));\n/** A tag's attributes, its quoted values whole. */\nconst ATTRIBUTES = `(?:[^>\"']|\"[^\"]*\"|'[^']*')*`;\n/**\n * Markup in pieces, so a `<p>` is read only where it starts a tag: a comment, an element whose text isn't markup\n * (with its text), a `<p>` (its attributes), any other tag, and from a tag that never closes, the rest.\n */\nconst PIECES = new RegExp(\n `<!--[\\\\s\\\\S]*?(?:-->|$)|<(script|style|textarea|title|xmp|iframe|noembed|noframes|noscript|plaintext)\\\\b${ATTRIBUTES}>[\\\\s\\\\S]*?(?:<\\\\/\\\\1\\\\s*>|$)|<p(?=[\\\\s/>])(${ATTRIBUTES})>|<[a-zA-Z/!?]${ATTRIBUTES}>|<[a-zA-Z/!?][\\\\s\\\\S]*$`,\n \"gi\",\n);\n\n/**\n * Markup's paragraphs with the margin they draw with, where markup crosses between the builder and an Html block: the\n * builder's stylesheet has `p{margin:0}`, a browser's own is 1em above and below. `css` (no spaces or quotes) goes\n * first in a paragraph's style, so its own declarations still win over it, as they do over a stylesheet; a `margin`\n * of its own needs nothing. Only a tag that is a paragraph changes, and what's added has no quote to end a value\n * with. Where markup is sanitized, this comes before it.\n */\nexport function withParagraphMargin(html: string, css: string): string {\n return html.replace(PIECES, (piece, _raw, attrs: string | undefined) => {\n if (attrs === undefined) return piece;\n const own = /(?:^|[\\s/])style\\s*=\\s*([\"']?)/i.exec(attrs);\n if (!own) return `<p style=${css}${attrs.startsWith(\"/\") ? \" \" : \"\"}${attrs}>`;\n if (!own[1] || declarations(styleOf(attrs)).margin !== undefined) return piece;\n const at = own.index + own[0].length;\n return `<p${attrs.slice(0, at)}${css};${attrs.slice(at)}>`;\n });\n}\n\n/** The attributes of a tag (their names), but its style. */\nconst attributeNames = (attrs: string) => [...attrs.matchAll(/([a-zA-Z][\\w-]*)\\s*=/g)].map((m) => m[1].toLowerCase()).filter((name) => name !== \"style\");\n\n/** A margin's length in px (0, px, or ems of the text's size); undefined for anything else. */\nconst length = (value: string, fontSize: number): number | undefined => {\n const em = /^(\\d*\\.?\\d+)em$/.exec(value.trim());\n if (em) return Number(em[1]) * fontSize;\n const read = px(value);\n return read !== undefined && read >= 0 ? read : undefined;\n};\n\n/** The margins above and below that a block's declarations give it (`given` where they don't), or null where one isn't read (a side margin, a length it doesn't take). */\nfunction margins(d: Record<string, string>, given: number, fontSize: number): { top: number; bottom: number } | null {\n const out = { top: given, bottom: given };\n for (const [name, value] of Object.entries(d)) {\n if (!name.startsWith(\"margin\")) continue;\n const values = value.split(/\\s+/).map((v) => length(v, fontSize));\n if (values.some((v) => v === undefined) || !values.length) return null;\n const [a, b = a, c = a, e = b] = values as number[];\n if (name === \"margin\") {\n if (values.length > 4 || b !== 0 || e !== 0) return null;\n out.top = a;\n out.bottom = c;\n } else if (name === \"margin-block\") {\n if (values.length > 2) return null;\n out.top = a;\n out.bottom = b;\n } else if (name === \"margin-top\" || name === \"margin-block-start\") out.top = a;\n else if (name === \"margin-bottom\" || name === \"margin-block-end\") out.bottom = a;\n else if (values.length > 1 || a !== 0) return null;\n }\n return out;\n}\n\n/** Text with merge tags (`{{name}}`) as MergeTags; a Document's page tokens as PageNumbers, where `pages`. */\nexport function mergeTags(runs: Run[], pages: boolean): Child[] {\n return runs.flatMap((run): Child[] => {\n if (typeof run !== \"string\") return [{ ...(run as Node), ...(run.children ? { children: mergeTags(run.children, pages) } : {}) }];\n const out: Child[] = [];\n let last = 0;\n for (const match of run.matchAll(/\\{\\{\\s*([\\w.-]+)\\s*\\}\\}/g)) {\n if (match.index! > last) out.push(run.slice(last, match.index));\n const name = match[1];\n if (pages && (name === \"page_number\" || name === \"page_count\")) out.push({ type: \"PageNumber\", ...(name === \"page_count\" ? { props: { total: true } } : {}) });\n else out.push({ type: \"MergeTag\", props: { name } });\n last = match.index! + match[0].length;\n }\n if (last < run.length) out.push(run.slice(last));\n return out;\n });\n}\n\n/** The builder's tools with text. */\nexport type TextToolName = \"text\" | \"paragraph\" | \"heading\" | \"button\";\n\n/**\n * A tool's text as the builder's exporter writes it. A paragraph (its rich-text tool), a heading and a button are\n * written from their rich text (`textJson`, what its editor saves) where they have one, through text-json.ts; a text\n * (its older tool) from its `text`, which the editor writes from the rich text each time it saves a design, and from\n * its rich text only where it has no `text`. A heading's or a button's lines are each a `<span>` in its direction (its\n * alignment nothing on a span): unwrapped where that's the block's own.\n */\nexport function richText(values: Record<string, unknown>, tool: TextToolName, dir: string): RichText {\n const text = typeof values.text === \"string\" ? values.text : undefined;\n if (typeof values.textJson !== \"string\" || (tool === \"text\" && text)) return { html: text ?? \"\" };\n const { html, unread } = textJsonHtml(values.textJson);\n // A node the editor saves that isn't read is never dropped: its `text` (the editor's own export of it), else its\n // markup as written, without that node.\n const nodes = unread.join(\", \");\n if (unread.length && text) return { html: text, said: `its rich text has nodes Elements doesn't read (${nodes}): its text, the builder's export of it, is read` };\n return { html: tool === \"heading\" || tool === \"button\" ? unwrapLines(html, dir) : html, ...(unread.length ? { markup: `rich text nodes Elements doesn't read (${nodes}), left out of it` } : {}) };\n}\n\n/** A tool's text as HTML, what's said about it, and why it's kept as markup, where it is. */\nexport interface RichText {\n html: string;\n said?: string;\n markup?: string;\n}\n\n/** Spans each holding a line in the block's direction, their words in a row (as inline spans are drawn); the HTML as it is otherwise. */\nfunction unwrapLines(html: string, dir: string): string {\n let out = \"\";\n let at = 0;\n const OPEN = /<span dir=\"(ltr|rtl|auto)\"(?: style=\"text-align: (?:left|center|right|justify|start|end);\")?>/y;\n while (at < html.length) {\n OPEN.lastIndex = at;\n const open = OPEN.exec(html);\n if (!open || open[1] !== dir) return html;\n const end = closing(html, \"span\", OPEN.lastIndex);\n if (!end) return html;\n out += html.slice(OPEN.lastIndex, end.start);\n at = end.end;\n }\n return out;\n}\n\n/** How deep markup may nest to be read as runs: deeper than any text's, shallow enough to read and draw. */\nexport const DEEPEST = 64;\nconst VOID = new Set([\"br\", \"img\", \"hr\", \"input\", \"meta\", \"link\", \"wbr\", \"source\", \"area\", \"col\", \"embed\", \"param\", \"track\"]);\n\n/** Whether markup nests deeper than DEEPEST (reading it as runs, and drawing them, would run out of stack). */\nexport function tooDeep(html: string): boolean {\n let depth = 0;\n for (const match of html.matchAll(TAG)) {\n if (match[1]) depth = Math.max(0, depth - 1);\n else if (!match[4] && !VOID.has(match[2].toLowerCase()) && ++depth > DEEPEST) return true;\n }\n return false;\n}\n\n/** Whether the HTML has blocks of its own (a `<p>`, a list) rather than lines. */\nconst blocky = (html: string) => /<\\s*(p|ul|ol|h[1-6])\\b/i.test(html);\nconst P_STYLES = new Set([\"line-height\", \"text-align\", \"padding-inline-start\"]);\n\n/** The HTML as parts, each a block, and what isn't read. */\nexport function readText(html: string, { weight = 400, pages = false, links = true, fontSize = 16, lineHeight = 1.5 as Json } = {}): { parts: TextPart[]; left: string[] } {\n const left: string[] = [];\n if (tooDeep(html)) return { parts: [], left: [`markup nested more than ${DEEPEST} deep`] };\n const runs = (inner: string, bold = weight): Child[] => {\n const read = parseRuns(inner, { weight: bold, links, builder: true });\n left.push(...read.left);\n return mergeTags(read.children, pages);\n };\n const NONE = { top: 0, bottom: 0 };\n if (!blocky(html)) return { parts: [{ node: { type: \"Text\", children: runs(html) }, margin: NONE }], left };\n const parts: TextPart[] = [];\n let inline = \"\";\n const flush = () => {\n if (inline.trim()) parts.push({ node: { type: \"Text\", children: runs(inline) }, margin: NONE });\n inline = \"\";\n };\n // The top level: `<p>`s, headings and lists as blocks, what's between them as lines.\n let at = 0;\n for (const match of [...html.matchAll(TAG)]) {\n if (match.index! < at) continue;\n const tag = match[2].toLowerCase();\n if (match[1] || !/^(p|ul|ol|h[1-6])$/.test(tag)) continue;\n inline += html.slice(at, match.index);\n const end = closing(html, tag, match.index! + match[0].length);\n if (end === null) {\n left.push(`a <${tag}> that isn't closed`);\n return { parts, left };\n }\n const inner = html.slice(match.index! + match[0].length, end.start);\n flush();\n if (tag === \"p\") {\n const part = readParagraph(match[3], inner, runs, fontSize, left);\n if (part) parts.push(part);\n } else if (tag[0] === \"h\") parts.push(readHeading(Number(tag[1]), match[3], inner, runs, fontSize, lineHeight, left));\n else parts.push(readList(tag, match[3], inner, runs, fontSize, left));\n at = end.end;\n }\n inline += html.slice(at);\n flush();\n return { parts, left };\n}\n\n/** A heading's size and margins in the browser's stylesheet, in ems of its parent's size and of its own, h1 to h6. */\nconst HEADING_SIZES = [2, 1.5, 1.17, 1, 0.83, 0.67];\nconst HEADING_MARGINS = [0.67, 0.83, 1, 1.33, 1.67, 2.33];\nconst HEADING_STYLES = new Set([\"font-size\", \"font-weight\", \"line-height\", \"text-align\", \"color\"]);\nconst round = (value: number) => Math.round(value * 100) / 100;\n\n/**\n * An `<h1>` to `<h6>` in text (the builder's editor writes one in its own style) as a Heading of its level, drawn as the\n * browser draws it there: in bold, its size its level's share of the text's, its margins its level's, its line as tall\n * as the text's (a percentage is the text's size's, inherited as a length), but where its style says otherwise.\n */\nfunction readHeading(level: number, attrs: string, inner: string, runs: (html: string, weight?: number) => Child[], fontSize: number, lineHeight: Json, left: string[]): TextPart {\n const d = declarations(styleOf(attrs));\n const size = d[\"font-size\"] === undefined ? round(HEADING_SIZES[level - 1] * fontSize) : length(d[\"font-size\"], fontSize);\n if (size === undefined) left.push(`a heading's font size ${d[\"font-size\"]}`);\n const own = size ?? fontSize;\n const weight = d[\"font-weight\"] === undefined ? 700 : fontWeight(d[\"font-weight\"]);\n if (weight === undefined) left.push(`a heading's font weight ${d[\"font-weight\"]}`);\n const css: Record<string, Json> = { fontSize: own, fontWeight: weight ?? 700 };\n const height = d[\"line-height\"];\n if (height !== undefined) {\n const share = /^(\\d*\\.?\\d+)%$/.exec(height);\n if (share) css.lineHeight = Number(share[1]) / 100;\n else if (px(height) !== undefined) css.lineHeight = `${px(height)}px`;\n else left.push(`a heading's line height ${height}`);\n } else css.lineHeight = typeof lineHeight === \"number\" ? `${round(lineHeight * fontSize)}px` : lineHeight;\n if (d[\"text-align\"] !== undefined) css.textAlign = d[\"text-align\"];\n if (d.color !== undefined) {\n const value = color(d.color);\n if (value) css.color = value;\n else left.push(`a heading's color ${d.color}`);\n }\n const margin = margins(d, round(HEADING_MARGINS[level - 1] * own), own);\n if (!margin) left.push(\"a heading's margins\");\n const dir = /\\bdir\\s*=\\s*\"?(ltr|rtl|auto)\\b/i.exec(attrs)?.[1].toLowerCase();\n if (Object.keys(d).some((name) => !HEADING_STYLES.has(name) && !name.startsWith(\"margin\")) || attributeNames(attrs).some((name) => name !== \"dir\")) left.push(\"a heading with attributes of its own\");\n return { node: { type: \"Heading\", props: { level, ...(dir ? { dir } : {}) }, style: css, children: runs(inner, weight ?? 700) }, margin: margin ?? { top: 0, bottom: 0 } };\n}\n\n/** A `<p>` as a Text: its line height, alignment, direction and indent its own, its margins none but its style's. */\nfunction readParagraph(attrs: string, inner: string, runs: (html: string) => Child[], fontSize: number, left: string[]): TextPart | undefined {\n const d = declarations(styleOf(attrs));\n const own: Record<string, Json> = {};\n if (d[\"line-height\"] !== undefined) {\n const height = /^(\\d*\\.?\\d+)%$/.exec(d[\"line-height\"]);\n if (height) own.lineHeight = Number(height[1]) / 100;\n else if (px(d[\"line-height\"]) !== undefined) own.lineHeight = `${px(d[\"line-height\"])}px`;\n else left.push(`a paragraph's line height ${d[\"line-height\"]}`);\n }\n if (d[\"text-align\"] !== undefined) own.textAlign = d[\"text-align\"];\n const indent = d[\"padding-inline-start\"] === undefined ? 0 : length(d[\"padding-inline-start\"], fontSize);\n if (indent === undefined) left.push(`a paragraph's indent ${d[\"padding-inline-start\"]}`);\n const margin = margins(d, 0, fontSize);\n if (!margin) left.push(\"a paragraph's margins\");\n const dir = /\\bdir\\s*=\\s*\"?(ltr|rtl|auto)\\b/i.exec(attrs)?.[1].toLowerCase();\n const other = Object.keys(d).filter((name) => !P_STYLES.has(name) && !name.startsWith(\"margin\"));\n if (other.length || attributeNames(attrs).some((name) => name !== \"dir\") || (/\\bdir\\s*=/.test(attrs) && !dir)) left.push(\"a paragraph with attributes of its own\");\n const children = runs(inner);\n // An empty paragraph is nothing; one with only a line break, a line of its height.\n if (!children.length && !/<\\s*br\\b/i.test(inner)) return undefined;\n const node: Node = { type: \"Text\", ...(dir ? { props: { dir } } : {}), ...(Object.keys(own).length ? { style: own } : {}), children: children.length ? children : [\"\\u200b\"] };\n return { node, margin: margin ?? { top: 0, bottom: 0 }, ...(indent ? { indent } : {}) };\n}\n\n/** Where the element opened before `from` closes (nested ones of its kind skipped), or null. */\nexport function closing(html: string, tag: string, from: number): { start: number; end: number } | null {\n const re = new RegExp(`<\\\\s*(\\\\/?)\\\\s*${tag}\\\\b[^>]*>`, \"gi\");\n re.lastIndex = from;\n let depth = 1;\n for (let match = re.exec(html); match; match = re.exec(html)) {\n depth += match[1] ? -1 : 1;\n if (!depth) return { start: match.index, end: match.index + match[0].length };\n }\n return null;\n}\n\n/**\n * A `<ul>` or `<ol>` as a List: its padding its indent (the browser's 40px), its items' margin above its gap, its\n * margins the browser's but where its style says otherwise; an item's direction and alignment its own. An item\n * showing no marker that holds only a list (how the builder's editor nests one) is that list, in the item before it.\n * What a List doesn't hold (other markers, a direction of its own, other attributes) is said in `left`.\n */\nfunction readList(tag: string, attrs: string, inner: string, runs: (html: string) => Child[], fontSize: number, left: string[]): TextPart {\n const d = declarations(styleOf(attrs));\n const indent = px(d[\"padding-left\"] ?? d.padding ?? \"40px\");\n if (indent === undefined) left.push(`a list's indent ${d[\"padding-left\"]}`);\n const marker = d[\"list-style-type\"];\n if (marker !== undefined && marker !== (tag === \"ol\" ? \"decimal\" : \"disc\")) left.push(`a list's markers ${marker}`);\n if (Object.keys(d).some((name) => ![\"padding-left\", \"padding\", \"list-style-type\"].includes(name) && !name.startsWith(\"margin\")) || attributeNames(attrs).some((name) => name !== \"start\" || tag !== \"ol\")) left.push(\"a list with attributes of its own\");\n const start = /\\bstart\\s*=\\s*\"?(\\d+)/.exec(attrs)?.[1];\n const items: Node[] = [];\n let gap: number | undefined;\n let at = 0;\n for (const match of [...inner.matchAll(TAG)]) {\n if (match.index! < at || match[1] || match[2].toLowerCase() !== \"li\") continue;\n const end = closing(inner, \"li\", match.index! + match[0].length);\n if (end === null) {\n left.push(\"a list item that isn't closed\");\n break;\n }\n at = end.end;\n const body = inner.slice(match.index! + match[0].length, end.start);\n const li = declarations(styleOf(match[3]));\n const dir = /\\bdir\\s*=\\s*\"?(ltr|rtl)\\b/i.exec(match[3])?.[1].toLowerCase();\n if (Object.keys(li).some((name) => ![\"margin-top\", \"text-align\", \"list-style-type\"].includes(name)) || attributeNames(match[3]).some((name) => name !== \"dir\")) left.push(\"a list item with attributes of its own\");\n // Its words and the lists in it, in their order.\n const children: Child[] = [];\n let rest = body;\n for (let nested = /<\\s*(ul|ol)\\b([^>]*)>/i.exec(rest); nested; nested = /<\\s*(ul|ol)\\b([^>]*)>/i.exec(rest)) {\n children.push(...runs(rest.slice(0, nested.index)));\n const tag = nested[1].toLowerCase();\n const close = closing(rest, tag, nested.index + nested[0].length);\n if (!close) {\n left.push(\"a list that isn't closed\");\n rest = \"\";\n break;\n }\n children.push(readList(tag, nested[2], rest.slice(nested.index + nested[0].length, close.start), runs, fontSize, left).node);\n rest = rest.slice(close.end);\n }\n if (rest) children.push(...runs(rest));\n if (li[\"list-style-type\"] !== undefined) {\n // An item with no marker holding only a list: that list, nested in the item before it.\n const only = children.filter((child) => typeof child !== \"string\" || child.trim());\n const before = items[items.length - 1];\n if (li[\"list-style-type\"] === \"none\" && only.length === 1 && typeof only[0] !== \"string\" && only[0].type === \"List\" && before) {\n before.children = [...(before.children ?? []), only[0]];\n continue;\n }\n left.push(`a list item's marker ${li[\"list-style-type\"]}`);\n }\n const space = px(li[\"margin-top\"] ?? \"0px\") ?? 0;\n if (items.length) gap ??= space;\n const align = li[\"text-align\"];\n items.push({ type: \"ListItem\", ...(dir === \"rtl\" ? { props: { dir } } : {}), ...(align ? { style: { textAlign: align } } : {}), children });\n }\n const own: Record<string, Json> = {};\n if (indent !== undefined && indent !== 24) own.indent = indent;\n if (gap) own.gap = gap;\n const props: Record<string, Json> = {};\n if (tag === \"ol\") props.type = \"number\";\n if (tag === \"ol\" && start && Number(start) !== 1) props.start = Number(start);\n const node: Node = { type: \"List\", ...(Object.keys(props).length ? { props } : {}), ...(Object.keys(own).length ? { style: own } : {}), children: items };\n // A list has the browser's margins (1em above and below) but where its style says otherwise.\n const margin = margins(d, fontSize, fontSize);\n if (!margin) left.push(\"a list's margins\");\n return { node, margin: margin ?? { top: fontSize, bottom: fontSize } };\n}\n","/**\n * What a text block's tool has no field for, drawn by the builder anyway: in the style of its own paragraph (a span\n * around a heading), which its editor draws, keeps through an edit (a new line's paragraph takes a copy) and exports.\n * Read back, each is what its hidden property would hold, so nothing after that knows the difference. Phone values\n * can't be in markup: those stay hidden properties. Styles a block's paragraphs don't share aren't read here: they're\n * left to read as its markup.\n */\nimport { closing, declarations, styleOf } from \"./text\";\nimport type { Values } from \"./values\";\n\nconst CSS: Record<string, string> = {\n fontStyle: \"font-style\",\n textTransform: \"text-transform\",\n textDecoration: \"text-decoration\",\n backgroundColor: \"background-color\",\n borderRadius: \"border-radius\",\n width: \"width\",\n maxWidth: \"max-width\",\n padding: \"padding\",\n};\nconst KEYS = Object.fromEntries(Object.entries(CSS).map(([key, name]) => [name, key]));\nconst SIDES = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n/** A tag's attributes, its quoted values whole. */\nconst PARAGRAPH = /<p\\b((?:[^>\"']|\"[^\"]*\"|'[^']*')*)>/gi;\nconst STYLE = /\\bstyle\\s*=\\s*(?:\"[^\"]*\"|'[^']*')/i;\n\n/** What of a text block's values its markup can draw, as a style, and its values without them. */\nexport function intoMarkup(values: Values): { style: string; values: Values } {\n const out: Values = { ...values };\n const css = Object.entries(CSS).flatMap(([key, name]) => {\n const value = out[key];\n delete out[key];\n return value === undefined ? [] : [`${name}:${value}`];\n });\n const border = (out.border ?? {}) as Values;\n delete out.border;\n for (const side of SIDES) {\n if (border[`border${side}Width`] !== undefined) css.push(`border-${side.toLowerCase()}:${border[`border${side}Width`]} ${border[`border${side}Style`]} ${border[`border${side}Color`]}`);\n }\n return { style: css.join(\";\"), values: out };\n}\n\n/** A border's one line as the builder's values (`1px solid #000`), or undefined where it isn't one. */\nfunction line(value: string, side: string): Values | undefined {\n const match = /^(\\d*\\.?\\d+px)\\s+(solid|dashed|dotted|double)\\s+(.+)$/.exec(value.trim());\n return match ? { [`border${side}Width`]: match[1], [`border${side}Style`]: match[2], [`border${side}Color`]: match[3] } : undefined;\n}\n\n/** What a style says that its tool has no field for, as values, and the rest of it as written. */\nfunction painted(css: string): { values: Values; rest: string } {\n const values: Values = {};\n const rest: string[] = [];\n for (const piece of css.split(\";\")) {\n const [name, value] = Object.entries(declarations(piece))[0] ?? [];\n if (name === undefined) continue;\n const side = /^border(?:-(top|right|bottom|left))?$/.exec(name);\n const lines = side && (side[1] ? [side[1][0].toUpperCase() + side[1].slice(1)] : SIDES).map((s) => line(value, s));\n if (KEYS[name]) values[KEYS[name]] = value;\n else if (lines?.every(Boolean)) values.border = Object.assign({ ...values.border }, ...(lines as Values[]));\n else rest.push(piece.trim());\n }\n return { values, rest: rest.join(\";\") };\n}\n\n/** What a text block's markup draws (intoMarkup) as the values its hidden properties would hold, and its markup without it. */\nexport function outOfMarkup(html: string): { values: Values; html: string } {\n // A heading's: one span around all of it, a block.\n const open = /^\\s*<span\\b((?:[^>\"']|\"[^\"]*\"|'[^']*')*)>/i.exec(html);\n if (open && declarations(styleOf(open[1])).display === \"block\") {\n const end = closing(html, \"span\", open[0].length);\n const { values, rest } = painted(styleOf(open[1]));\n if (end && !html.slice(end.end).trim() && /^display\\s*:\\s*block$/i.test(rest.trim())) return { values, html: html.slice(open[0].length, end.start) };\n }\n // A Text's: each paragraph's the same, or they aren't read here.\n const read = [...html.matchAll(PARAGRAPH)].map((match) => painted(styleOf(match[1])).values);\n if (!read.length || !Object.keys(read[0]).length || read.some((one) => JSON.stringify(one) !== JSON.stringify(read[0]))) return { values: {}, html };\n const plain = html.replace(PARAGRAPH, (_, attrs: string) => {\n const { rest } = painted(styleOf(attrs));\n return `<p${attrs.replace(STYLE, rest ? `style=\"${rest.replace(/\"/g, \"'\")}\"` : \"\").trimEnd()}>`;\n });\n return { values: read[0], html: plain };\n}\n","/**\n * A text or heading tool read back: a Text or Heading in the styles its fields give (those it takes anyway left\n * out) and its hidden properties, its place's spacing its padding (or, where its box has its own, a Column's around\n * it). A `<p>`, or a list, is a block of its own, its margins and indent its padding; text with what no run holds is an\n * Html block of its markup.\n */\nimport { Heading as HeadingDefinition, type Json, type Node } from \"@unlayer-internal/elements-core\";\nimport { color, fontWeight, font, givenId, hidden as hiddenOn, linkStyleOf, serviceTag, sides, some, styled, type Sides, type Values } from \"./read-values\";\nimport { readHidden } from \"./hide\";\nimport { outOfMarkup } from \"./paint\";\nimport { boxOf, defined, make, obj, phoneText, placed, str, textStyle, ZERO, type Context } from \"./reading\";\nimport { readText, richText, type TextToolName, withParagraphMargin } from \"./text\";\n\n/** A text or heading tool: a Text or Heading (a `<p>`, or a list, each a block of its own). */\nexport function textTool(tool: \"paragraph\" | \"heading\", given: Values, context: Context, builderTool: TextToolName = tool): Node[] {\n // A heading the builder saved with no weight of its own, it draws at 400, not as a heading's bold.\n const fields = tool === \"heading\" && !given.fontWeight ? { ...given, fontWeight: 400 } : given;\n const rich = richText(fields, builderTool, str(fields.textDirection) ?? context.dir);\n const { values: painted, html: plain } = outOfMarkup(rich.html);\n const values = { ...fields, ...painted };\n const listed = /^\\s*<(ul|ol)\\b/i.test(plain);\n const level = tool === \"heading\" ? Number(/^h([1-6])$/.exec(String(values.headingType ?? \"h1\"))?.[1] ?? 1) : undefined;\n const type = tool === \"heading\" ? \"Heading\" : \"Text\";\n const hidden = readHidden(tool, listed ? \"List\" : type, values, context.say);\n const taken: Record<string, Json> = tool === \"heading\" ? { ...(HeadingDefinition.defaultStyle as Record<string, Json>), ...(HeadingDefinition.defaultStyleBy!.values as Record<string, Record<string, Json>>)[String(level)] } : {};\n const style = { ...textStyle(values, taken, context), ...hidden.style };\n const mobile = { ...phoneText(values), ...hidden.mobile };\n if (rich.said) context.say(rich.said);\n const html = context.safe(plain);\n const weight = fontWeight(values.fontWeight) ?? (tool === \"heading\" ? 700 : context.inherited.fontWeight);\n const fontSize = (style.fontSize as number | undefined) ?? (taken.fontSize as number | undefined) ?? 16;\n const { parts, left } = readText(html, { weight, pages: context.document, fontSize, lineHeight: (style.lineHeight as Json | undefined) ?? (taken.lineHeight as Json | undefined) ?? 1.5 });\n if (rich.markup) left.push(rich.markup);\n // An email service's tag ({% if %}, <%name%>) is written as it is for the service to fill in, as today's writers do.\n if (serviceTag(html)) left.push(\"an email service's tag, kept as written\");\n const containerPadding = sides(values.containerPadding ?? \"10px\") ?? ZERO;\n const phonePadding = sides(obj(obj(values._override).mobile).containerPadding);\n const id = givenId(values);\n const props = defined({ ...(level && level !== 1 ? { level } : {}), dir: str(values.textDirection), ...hidden.props });\n const visibility = { ...hiddenOn(values), ...hidden.hidden };\n // Its links' style where it's its own (the builder's link style), as Elements 0.2's components read it; a hover style a page draws, said.\n const linkStyle = linkStyleOf(values, context.mode);\n if (linkStyle === null) context.say(\"its links' hover style, which a page draws, has no place: left out\");\n const links = linkStyle ?? linkStyleOf(values, \"email\");\n if (left.length) {\n if (links && Object.keys(links).length) context.say(\"its links' style isn't kept in its markup: left out\");\n context.say(`its text has what a ${type} doesn't hold (${[...new Set(left)].join(\", \")}): it's an Html block of its markup`);\n // What its markup can't hold: its values on phones, its hidden properties.\n const lost = [...Object.keys(phoneText(values)).map((key) => `${key} on phones`), ...Object.keys(hidden.style).filter((key) => !(key in painted))];\n if (lost.length) context.say(`its ${lost.join(\", \")} aren't kept in its markup: left out`);\n return [placed(make(\"Html\", { id, props: { html: markup(context.safe(withParagraphMargin(rich.html, \"margin:0\")), values, level) } }), containerPadding, undefined, phonePadding, visibility)];\n }\n const boxed = boxOf(hidden);\n // A list's indent and gap, which the builder's rich text doesn't hold, over what its markup is drawn with.\n const listSpace = defined({ indent: hidden.style.indent, gap: hidden.style.gap });\n const blockDir = str(values.textDirection) ?? context.dir;\n // A list toDesign() wrote has no margins of its own: its rich text can't say so.\n const margined = parts.map((part) => (part.node.type === \"List\" && listSpace.indent !== undefined ? { ...part, margin: { top: 0, bottom: 0 } } : part));\n const nodes = margined.map((part, i) => {\n // A list takes the block's text styles, as a heading in text does its own; a heading's part beside one is a\n // Text in its styles.\n const own = part.node.type === \"List\" || part.node.type === \"Heading\" ? part.node.type : type;\n // A paragraph in a direction of its own is aligned as its block is (its block's alignment is the one it inherits).\n const dir = own === \"List\" ? undefined : (part.node.props?.dir as string | undefined);\n const turned: Record<string, Json> = dir && dir !== blockDir && part.node.style?.textAlign === undefined ? { textAlign: (style.textAlign as string | undefined) ?? (taken.textAlign as string | undefined) ?? \"left\" } : {};\n const partStyle = { ...style, ...turned, ...part.node.style, ...(own === \"List\" && type === \"Heading\" ? headingAsText(taken, style) : {}), ...(own === \"List\" ? listSpace : {}) };\n // The margins between parts collapse into one: the larger, above the part below.\n const above = i === 0 ? part.margin.top : Math.max(part.margin.top, margined[i - 1].margin.bottom);\n const below = i === margined.length - 1 ? part.margin.bottom : 0;\n // A paragraph's indent is at the side its line starts.\n const start = (dir ?? blockDir) === \"rtl\" ? \"right\" : \"left\";\n const space = { top: above, bottom: below, [start]: part.indent ?? 0 } as Partial<Sides>;\n const partProps = own === \"List\" ? part.node.props : defined({ ...props, ...(part.node.type === \"Heading\" ? { level: part.node.props!.level } : {}), dir: dir && dir !== blockDir ? dir : props.dir });\n return { node: make(own, { id: i === 0 ? id : undefined, props: partProps, style: partStyle, mobile, children: part.node.children && (styled(part.node.children as never, links ?? undefined) as Node[\"children\"]) }), space };\n });\n if (boxed) {\n // Its box's padding is its own (an indent inside it); its place's spacing is a Column's around it.\n return nodes.map(({ node, space }, i) => {\n const around = { ...containerPadding, top: i === 0 ? containerPadding.top + (space.top ?? 0) : (space.top ?? 0), bottom: i === nodes.length - 1 ? containerPadding.bottom + (space.bottom ?? 0) : 0 };\n const indented = space.left || space.right ? { ...node, style: { ...node.style, padding: add((node.style?.padding as Sides | undefined) ?? ZERO, { ...ZERO, left: space.left ?? 0, right: space.right ?? 0 }) as Json } } : node;\n return placed(indented, around, undefined, phonePadding, visibility);\n });\n }\n return nodes.map(({ node, space }, i) => {\n const padding = some({ top: (i === 0 ? containerPadding.top : 0) + (space.top ?? 0), right: containerPadding.right + (space.right ?? 0), bottom: (i === nodes.length - 1 ? containerPadding.bottom : 0) + (space.bottom ?? 0), left: containerPadding.left + (space.left ?? 0) });\n return make(node.type, { ...node, style: defined({ ...node.style, padding }), mobile: defined({ ...node.mobile, padding: phonePadding }), hidden: visibility });\n });\n}\n\nconst add = (a: Sides, b: Sides): Sides => ({ top: a.top + b.top, right: a.right + b.right, bottom: a.bottom + b.bottom, left: a.left + b.left });\n\n/** A heading's text styles for a list in it (which has no heading defaults of its own). */\nconst headingAsText = (taken: Record<string, Json>, style: Record<string, Json>) => defined({ fontSize: style.fontSize ?? taken.fontSize, fontWeight: style.fontWeight ?? taken.fontWeight, lineHeight: style.lineHeight ?? taken.lineHeight });\n\n/** A text block's markup with the styles its tool draws it in, for an Html block: a heading's in its tag (h1 to h6), without its margins. */\nfunction markup(html: string, values: Values, level: number | undefined): string {\n const css = defined({\n margin: level ? \"0\" : undefined,\n \"font-family\": font(values.fontFamily),\n \"font-size\": str(values.fontSize),\n \"font-weight\": values.fontWeight === undefined ? undefined : String(fontWeight(values.fontWeight) ?? \"\"),\n color: color(values.color),\n \"line-height\": str(values.lineHeight),\n \"text-align\": str(values.textAlign),\n \"letter-spacing\": str(values.letterSpacing),\n });\n const declarations = Object.entries(css).filter(([, v]) => v !== \"\").map(([k, v]) => `${k}:${String(v).replace(/\"/g, \"'\")}`).join(\";\");\n const tag = level ? `h${level}` : \"div\";\n const dir = [\"ltr\", \"rtl\", \"auto\"].includes(values.textDirection) ? ` dir=\"${values.textDirection}\"` : \"\";\n return `<${tag}${dir} style=\"${declarations}\">${html}</${tag}>`;\n}\n","/**\n * What of an item's values fromDesign() doesn't read, said, as Elements 0.2's components' lowering failed closed on a value it doesn't read: one that\n * isn't empty, isn't its tool's default (what the builder fills in), and is neither read nor one that draws nothing (the\n * editor's own flags, a popup's settings) draws something the template won't (a row's background image, an anchor, a\n * display condition, a phone value Elements has no place for).\n */\nimport { BodyDefaults, ColumnDefaults, RowDefaults } from \"./tool-defaults\";\nimport type { Values } from \"./read-values\";\nimport { HIDDEN } from \"./manifest\";\nimport { same } from \"./reading\";\n\n/** What draws nothing: the editor's own flags, and the earlier adapter's payload (`_elements`). */\nconst NOTHING = [\"_meta\", \"_styleGuide\", \"_elements\", \"selectable\", \"draggable\", \"duplicatable\", \"deletable\", \"hideable\", \"locked\", \"synced\", \"sync\", \"suggestions\", \"ai_banner\", \"hideDesktop\", \"hideMobile\", \"_override\"];\nconst TEXT = [\"text\", \"textJson\", \"color\", \"textAlign\", \"fontFamily\", \"fontWeight\", \"fontSize\", \"lineHeight\", \"letterSpacing\", \"linkStyle\", \"textDirection\", \"containerPadding\"];\nconst TEXT_PHONE = [\"containerPadding\", \"fontSize\", \"lineHeight\", \"textAlign\", \"letterSpacing\", \"hideMobile\"];\n\n/** The values each reader reads (or that draw nothing), by tool: on desktop, and on phones (`_override.mobile`). */\nconst READ: Record<string, { values: string[]; phone: string[] }> = {\n body: {\n // A popup's settings (its corners, its content's vertical alignment) draw nothing in an email, a page or a document.\n values: [\"textDirection\", \"contentWidth\", \"fontFamily\", \"fontWeight\", \"textColor\", \"backgroundColor\", \"preheaderText\", \"accessibilityTitle\", \"documentSize\", \"documentOrientation\", \"documentMargin\", \"contentVerticalAlign\", \"borderRadius\"],\n phone: [],\n },\n row: { values: [\"columns\", \"cells\", \"backgroundColor\", \"columnsBackgroundColor\", \"padding\", \"noStackMobile\", \"alignItems\"], phone: [\"padding\", \"hideMobile\", \"noStackMobile\"] },\n column: { values: [\"backgroundColor\", \"padding\", \"border\", \"borderRadius\"], phone: [\"padding\", \"border\", \"hideMobile\"] },\n text: { values: TEXT, phone: TEXT_PHONE },\n heading: { values: [...TEXT, \"headingType\"], phone: TEXT_PHONE },\n // Its alignment on phones is said where it's read.\n button: { values: [...TEXT, \"href\", \"size\", \"buttonColors\", \"border\", \"padding\", \"borderRadius\", \"calculatedWidth\", \"calculatedHeight\"], phone: [...TEXT_PHONE, \"padding\", \"size\"] },\n image: { values: [\"src\", \"textAlign\", \"altText\", \"action\", \"containerPadding\"], phone: [\"containerPadding\", \"src\", \"textAlign\", \"hideMobile\"] },\n divider: { values: [\"width\", \"border\", \"textAlign\", \"containerPadding\"], phone: [\"containerPadding\", \"width\", \"hideMobile\"] },\n menu: { values: [\"menu\", \"linkColor\", \"padding\", \"fontFamily\", \"fontWeight\", \"textColor\", \"fontSize\", \"letterSpacing\", \"layout\", \"align\", \"separator\", \"containerPadding\"], phone: [\"containerPadding\", \"fontSize\", \"hideMobile\"] },\n social: { values: [\"icons\", \"spacing\", \"align\", \"iconSize\", \"containerPadding\"], phone: [\"containerPadding\", \"hideMobile\"] },\n video: { values: [\"video\", \"textAlign\", \"containerPadding\"], phone: [\"containerPadding\", \"hideMobile\"] },\n html: { values: [\"html\", \"containerPadding\"], phone: [\"containerPadding\", \"hideMobile\"] },\n};\n\n/** The builder's defaults for a frame (a tool's are merged in before it's read). */\nconst FRAMES: Record<string, Values> = { body: BodyDefaults, row: RowDefaults, column: ColumnDefaults };\n\n/** Whether a value draws nothing on its own: none, empty, or an image without its URL. */\nfunction empty(value: unknown): boolean {\n if (value === undefined || value === null || value === \"\" || value === false) return true;\n if (Array.isArray(value)) return !value.length;\n if (typeof value === \"object\") {\n const keys = Object.keys(value);\n // A background image without its URL is none.\n return !keys.length || (keys.includes(\"url\") && empty((value as Values).url));\n }\n return false;\n}\n\n/** What a value of these is called in a line of the report. */\nconst WHAT: Record<string, string> = {\n displayCondition: \"display condition, which the builder's exporters keep for the email service to apply, isn't read: it's shown to everyone\",\n anchor: \"anchor isn't read: links to it go nowhere\",\n backgroundImage: \"background image isn't one Elements draws: left out\",\n linkStyle: \"link style, the body's own, isn't one Elements draws for every link: left out\",\n contentAlign: \"content alignment isn't one Elements' root takes: its content is centered\",\n language: \"translations aren't read: only its own text is\",\n};\n\n/** Says each value of the item (by its tool, `paragraph` a text's) that isn't read, and draws something. */\nexport function sayUnread(tool: string, values: Values, defaults: Values | undefined, say: (message: string) => void): void {\n const read = READ[tool === \"paragraph\" ? \"text\" : tool];\n if (!read) return;\n const hidden = (HIDDEN[tool === \"text\" ? \"paragraph\" : tool] ?? []).map((entry) => entry.key);\n const given = defaults ?? FRAMES[tool] ?? {};\n const known = new Set([...NOTHING, ...read.values, ...hidden]);\n for (const [key, value] of Object.entries(values)) {\n if (known.has(key) || (tool === \"body\" && key.startsWith(\"popup\")) || empty(value) || (Object.hasOwn(given, key) && same(value, given[key]))) continue;\n say(Object.hasOwn(WHAT, key) ? `its ${WHAT[key]}` : `its ${key} ${JSON.stringify(value) ?? \"\"} isn't read: left out`);\n }\n const override = values._override && typeof values._override === \"object\" ? (values._override as Values) : {};\n const phone = override.mobile && typeof override.mobile === \"object\" ? (override.mobile as Values) : {};\n const phoneKnown = new Set([...read.phone, ...hidden]);\n for (const [key, value] of Object.entries(phone)) {\n if (phoneKnown.has(key) || empty(value) || same(value, values[key])) continue;\n say(`its ${key} on phones ${JSON.stringify(value) ?? \"\"} isn't read: left out`);\n }\n for (const device of Object.keys(override)) {\n if (device === \"mobile\" || device === \"desktop\") continue;\n if (!empty(override[device])) say(`its settings for ${device === \"tablet\" ? \"tablets\" : JSON.stringify(device)} aren't read: left out`);\n }\n const desktop = override.desktop && typeof override.desktop === \"object\" ? Object.keys(override.desktop as Values).filter((key) => key !== \"hideDesktop\" && !empty((override.desktop as Values)[key])) : [];\n if (desktop.length) say(`its settings for desktop windows (${desktop.join(\", \")}) aren't read: left out`);\n}\n","/**\n * Each of the builder's tools read back from its values alone, as the codemod writes Elements 0.2's components: its\n * component with the styles its fields give, but those equal to what it would take anyway (its defaults, what it\n * inherits from the root), and its hidden properties; a block whose spacing or alignment is its place's in a `Column`\n * around it with that padding and `alignItems`. Values are read as Elements 0.2's components read them (read-values.ts: what\n * they, and so the builder, draw), and a tool that isn't one of Elements' is left out, and said.\n */\nimport { Button as ButtonDefinition, Menu as MenuDefinition, Social as SocialDefinition, videoParts, type Json, type Node } from \"@unlayer-internal/elements-core\";\nimport { ButtonDefaults, DividerDefaults, HeadingDefaults, HtmlDefaults, ImageDefaults, MenuDefaults, ParagraphDefaults, SocialDefaults, TextDefaults, VideoDefaults } from \"./tool-defaults\";\nimport { parseRuns } from \"./read-runs\";\nimport { color, fontWeight, font, givenId, hidden as hiddenOn, letterSpacing, px, serviceTag, sides, some, webLink, type Values } from \"./read-values\";\nimport { contentSlotWidth } from \"./image-sizing\";\nimport { readHidden } from \"./hide\";\nimport { alignOf, defined, make, obj, phoneText, placed, readRadius, str, textStyle, unless, type Context, type Slot } from \"./reading\";\nimport { DEEPEST, mergeTags, richText, tooDeep, withParagraphMargin } from \"./text\";\nimport { textTool } from \"./text-tool\";\nimport { sayUnread } from \"./unread\";\nimport { readBorder } from \"./values\";\n\nexport type { Context, Slot };\n\n/**\n * A link as Elements', read as Elements 0.2's components read one (every shape their writers read: a URL, the builder's\n * `{ name, values, attrs }`, an email's or a phone's link with its URL in `attrs`, `{ url, target }`): its target\n * where it says a new window, the URL alone otherwise. None where it has no URL; where it holds what a link here\n * can't (a class, attributes of its own, a click handler, another target), that's said and it's left out.\n */\nfunction link(value: unknown, say: (message: string) => void, what = \"its link\"): Json | undefined {\n const read = webLink(value);\n if (read === undefined) say(`${what} ${JSON.stringify(value) ?? String(typeof value)} holds what a link in Elements can't (a class, attributes or a target of its own, a click handler): left out`);\n if (!read) return undefined;\n const href = typeof read === \"string\" ? read : String((read as { href: unknown }).href);\n const given = obj(value);\n const target = str(obj(given.values).target) || str(obj(given.attrs).target) || (\"url\" in given ? str(given.target) : undefined);\n return target === \"_blank\" ? { href, target: \"_blank\" } : href;\n}\n\nfunction button(values: Values, context: Context): Node[] {\n const defaults = ButtonDefinition.defaultStyle as Record<string, Json>;\n const hidden = readHidden(\"button\", \"Button\", values, context.say);\n const colors = obj(values.buttonColors);\n const base = { color: color(colors.color) ?? \"transparent\", backgroundColor: color(colors.backgroundColor) ?? \"transparent\" };\n const width = sizeOf(values.size);\n const phone = obj(obj(values._override).mobile);\n // Its width on phones: a width of its own; its own size there where it has a width on desktop can't be.\n const phoneWidth = sizeOf(phone.size);\n if (phone.size !== undefined && phoneWidth === undefined && width !== undefined && obj(phone.size).autoWidth !== false) context.say(\"its own size on phones, beside a width on desktop, isn't one Elements' Button takes: left out\");\n // Its alignment on phones places the button (today's writers' `.v-text-align`), which a Column's can't on phones.\n const phoneAlign = str(phone.textAlign);\n if (phoneAlign !== undefined && phoneAlign !== (str(values.textAlign) ?? \"center\")) context.say(`its alignment on phones (${phoneAlign}) places the button there, which Elements can't: left out`);\n const style = defined({\n ...textStyle({ ...values, textAlign: undefined, color: undefined }, defaults, context),\n color: unless(base.color, defaults.color),\n backgroundColor: unless(base.backgroundColor, defaults.backgroundColor),\n width,\n padding: unless(sides(values.padding ?? \"10px 20px\"), defaults.padding),\n border: readBorder(values.border),\n borderRadius: unless(radiusOf(values.borderRadius ?? \"4px\", context.say), defaults.borderRadius),\n ...hidden.style,\n });\n const hover = defined({ color: unless(color(colors.hoverColor), base.color), backgroundColor: unless(color(colors.hoverBackgroundColor), base.backgroundColor) });\n const href = link(values.href, context.say);\n if (!href && webLink(values.href) === null) context.say('its link is empty in the builder: it\\'s \"#\" until one is set');\n const rich = richText(values, \"button\", str(values.textDirection) ?? context.dir);\n if (rich.said) context.say(rich.said);\n const labelHtml = context.safe(rich.html);\n const label = tooDeep(labelHtml) ? { children: [], left: [`markup nested more than ${DEEPEST} deep`] } : parseRuns(labelHtml, { weight: fontWeight(values.fontWeight) ?? 400, links: false, builder: true });\n if (rich.markup) label.left.push(rich.markup);\n if (label.left.length) context.say(`its label has what a Button doesn't hold (${[...new Set(label.left)].join(\", \")}): left out`);\n tagged(rich.html, \"its label\", context.say);\n const { textAlign: _label, ...phoneLabel } = phoneText(values);\n const mobile = { ...phoneLabel, ...phonePadding(values, \"padding\"), ...(phoneWidth !== undefined && phoneWidth !== width ? { width: phoneWidth } : {}), ...hidden.mobile };\n const node = make(\"Button\", { id: givenId(values), props: { href: href ?? \"#\", ...hidden.props }, style, mobile, hover, children: mergeTags(label.children, false) });\n return [placed(node, sides(values.containerPadding ?? \"10px\"), str(values.textAlign) ?? \"center\", sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\n/** Says where text holds an email service's tag (<%name%>, {% if %}), which Elements writes escaped: the service can't fill it in. */\nfunction tagged(text: string, what: string, say: (message: string) => void): void {\n if (serviceTag(text)) say(`${what} has an email service's tag, which the builder's exporters keep as written and Elements writes escaped: the service won't fill it in`);\n}\n\n/** A button's width (its `size`): px or a share, where it isn't its own size. */\nfunction sizeOf(value: unknown): Json | undefined {\n const size = obj(value);\n if (size.autoWidth !== false || size.width === undefined) return undefined;\n return px(size.width) ?? (typeof size.width === \"string\" && size.width.trim().endsWith(\"%\") ? size.width.trim() : undefined);\n}\n\nconst phonePadding = (values: Values, key: string) => defined({ padding: sides(obj(obj(values._override).mobile)[key]) });\n\nfunction image(values: Values, context: Context, slot?: Slot): Node[] {\n const src = obj(values.src);\n const url = str(src.url);\n if (!url) {\n context.say(\"an image with no URL in the builder: left out\");\n return [];\n }\n const hidden = readHidden(\"image\", \"Image\", values, context.say);\n const asset = typeof src.width === \"number\" && src.width > 0 && typeof src.height === \"number\" && src.height > 0 ? { src: url, width: src.width, height: src.height } : url;\n const style = defined({ ...imageWidth(src), ...phoneCap(src, values, slot), ...hidden.style });\n const phone = obj(obj(obj(values._override).mobile).src);\n const mobile = defined({ ...(Object.keys(phone).length ? imageWidth({ ...src, ...phone }) : {}), ...hidden.mobile });\n const phoneAlign = str(obj(obj(values._override).mobile).textAlign);\n if (phoneAlign !== undefined && phoneAlign !== (str(values.textAlign) ?? \"center\")) context.say(`its alignment on phones (${phoneAlign}) isn't one Elements can place it in there: left out`);\n const alt = str(values.altText) ?? \"\";\n const node = make(\"Image\", { props: defined({ src: asset, ...(alt ? { alt } : {}), ...hidden.props }), style, mobile });\n const href = link(values.action, context.say);\n const linked = href ? make(\"Link\", { props: { href }, children: [node] }) : node;\n const withId = givenId(values) ? { ...linked, id: givenId(values) } : linked;\n return [placed(withId, sides(values.containerPadding ?? \"10px\"), str(values.textAlign) ?? \"center\", sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\n/**\n * Where a row's columns stack, today's image writer keeps an image with a share of its place no wider on phones than\n * that share of its place on desktop (its maximum is in px): the template's maximum, so it's no wider there either.\n */\nfunction phoneCap(src: Values, values: Values, slot: Slot | undefined): Record<string, Json> {\n const share = typeof src.maxWidth === \"string\" && /^\\s*\\d*\\.?\\d+%\\s*$/.test(src.maxWidth) ? parseFloat(src.maxWidth) : undefined;\n if (src.autoWidth !== false || share === undefined || !slot || slot.cells.length < 2 || !slot.stacks) return {};\n const border = obj(values.imageBorder);\n const borders = (px(border.borderLeftWidth) ?? 0) + (px(border.borderRightWidth) ?? 0);\n const room = contentSlotWidth({ bodyValues: slot.body, rowValues: slot.row, rowCells: slot.cells, columnIndex: slot.index, columnValues: slot.column, containerPadding: values.containerPadding ?? \"10px\" }) - borders;\n return room > 0 ? { maxWidth: Math.round(((room * share) / 100) * 100) / 100 } : {};\n}\n\n/** An image's width: none where it takes its own size, else its share of its place. */\nfunction imageWidth(src: Values): Record<string, Json> {\n // (Without its size, the builder draws one as wide as its place, Elements at its own size: toDesign() says so.)\n if (src.autoWidth !== false) return {};\n const given = typeof src.maxWidth === \"string\" && src.maxWidth.trim().endsWith(\"%\") ? src.maxWidth.trim() : px(src.maxWidth);\n return given === undefined ? {} : { width: given };\n}\n\n/** A divider's width: px, or a share of its place. */\nconst lineWidth = (value: unknown): Json | undefined => px(value) ?? (typeof value === \"string\" && /^\\s*\\d*\\.?\\d+%\\s*$/.test(value) ? value.trim() : undefined);\n\nfunction divider(values: Values, context: Context): Node[] {\n const hidden = readHidden(\"divider\", \"Divider\", values, context.say);\n const line = obj(values.border);\n const borderTop = { width: px(line.borderTopWidth) ?? 1, style: str(line.borderTopStyle) ?? \"solid\", color: str(line.borderTopColor) ?? \"#BBBBBB\" };\n const width = values.width === undefined || values.width === \"100%\" ? undefined : lineWidth(values.width);\n const node = make(\"Divider\", {\n id: givenId(values),\n style: defined({ borderTop: unless(borderTop, { width: 1, style: \"solid\", color: \"#bbbbbb\" }), width, padding: some(sides(values.containerPadding ?? \"10px\")), ...hidden.style }),\n mobile: defined({ padding: sides(obj(obj(values._override).mobile).containerPadding), width: unless(lineWidth(obj(obj(values._override).mobile).width), width ?? \"100%\"), ...hidden.mobile }),\n hidden: { ...hiddenOn(values), ...hidden.hidden },\n });\n // A line shorter than its place sits where its parent's text is aligned.\n const align = str(values.textAlign) ?? \"center\";\n return [width !== undefined && align !== \"left\" ? make(\"Column\", { style: { textAlign: align }, children: [node] }) : node];\n}\n\nfunction menu(values: Values, context: Context): Node[] {\n const defaults = MenuDefinition.defaultStyle as Record<string, Json>;\n const hidden = readHidden(\"menu\", \"Menu\", values, context.say);\n const items = (Array.isArray(obj(values.menu).items) ? (obj(values.menu).items as unknown[]) : []).map(obj).map((item, i) => ({ text: str(item.text) ?? \"\", href: link(item.link, context.say, `its item ${i + 1}'s link`), empty: webLink(item.link) === null }));\n if (!items.length || items.some((item) => item.empty)) context.say(\"a menu item with no link in the builder: it's \\\"#\\\" until one is set\");\n for (const item of items) tagged(item.text, \"a menu item's text\", context.say);\n const size = px(values.fontSize ?? \"14px\");\n const style = defined({\n color: unless(color(values.linkColor), defaults.color),\n separatorColor: unless(color(values.textColor), defaults.separatorColor),\n fontFamily: unless(font(values.fontFamily), context.inherited.fontFamily),\n fontSize: unless(size, defaults.fontSize),\n fontWeight: unless(fontWeight(values.fontWeight), context.inherited.fontWeight),\n letterSpacing: letterSpacing(values.letterSpacing, size) || undefined,\n padding: unless(sides(values.padding ?? \"5px 15px\"), defaults.padding),\n justifyContent: unless(alignOf(values.align ?? \"center\"), defaults.justifyContent),\n ...hidden.style,\n });\n const props = defined({ items: items.map((item) => ({ text: item.text, href: item.href ?? \"#\" })) as Json, separator: str(values.separator) || undefined, layout: values.layout === \"vertical\" ? \"vertical\" : undefined, ...hidden.props });\n const phoneSize = px(obj(obj(values._override).mobile).fontSize);\n const node = make(\"Menu\", { id: givenId(values), props, style, mobile: { ...(phoneSize !== undefined && phoneSize !== size ? { fontSize: phoneSize } : {}), ...hidden.mobile } });\n return [placed(node, sides(values.containerPadding ?? \"10px\"), undefined, sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\nfunction social(values: Values, context: Context): Node[] {\n const defaults = SocialDefinition.defaultStyle as Record<string, Json>;\n const hidden = readHidden(\"social\", \"Social\", values, context.say);\n const icons = (Array.isArray(obj(values.icons).icons) ? (obj(values.icons).icons as unknown[]) : []).map(obj).filter((icon) => str(icon.name) && /[A-Za-z0-9]/.test(String(icon.name)));\n if (!icons.length) {\n context.say(\"a social block with no icons in the builder: left out\");\n return [];\n }\n const iconType = obj(values.icons).iconType;\n if (iconType !== undefined && iconType !== \"circle\" && iconType !== \"rounded\" && iconType !== \"squared\") context.say(`its icon set ${JSON.stringify(iconType)} isn't one a Social has: its circle icons`);\n const props = defined({ icons: icons.map((icon) => ({ name: String(icon.name), href: str(icon.url) ? String(icon.url) : { href: \"\" } })) as Json, iconType: iconType === \"rounded\" || iconType === \"squared\" ? iconType : undefined, size: unless(px(values.iconSize), 32), ...hidden.props });\n const style = defined({ gap: unless(px(values.spacing), defaults.gap), justifyContent: unless(alignOf(values.align ?? \"center\"), defaults.justifyContent), ...hidden.style });\n const node = make(\"Social\", { id: givenId(values), props, style, mobile: hidden.mobile });\n return [placed(node, sides(values.containerPadding ?? \"10px\"), undefined, sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\nconst VIDEO_URLS: Record<string, (id: string) => string> = { youtube: (id) => `https://www.youtube.com/watch?v=${id}`, vimeo: (id) => `https://vimeo.com/${id}` };\n\nfunction video(values: Values, context: Context): Node[] {\n const value = obj(values.video);\n const url = typeof value.videoId === \"string\" && /^[\\w-]+$/.test(value.videoId) ? (typeof value.type === \"string\" && Object.hasOwn(VIDEO_URLS, value.type) ? VIDEO_URLS[value.type](value.videoId) : undefined) : str(value.url);\n if (!url) {\n context.say(\"a video with no YouTube or Vimeo URL in the builder: left out\");\n return [];\n }\n const hidden = readHidden(\"video\", \"Video\", values, context.say);\n // Its picture, where it isn't the one a video of its kind takes anyway.\n const thumbnail: Record<string, Json> = str(value.thumbnail) && value.thumbnail !== videoParts(url)?.thumbnail ? { thumbnail: value.thumbnail as string } : {};\n const node = make(\"Video\", { id: givenId(values), props: { src: url, ...thumbnail, ...hidden.props }, style: hidden.style, mobile: hidden.mobile });\n return [placed(node, sides(values.containerPadding ?? \"10px\"), str(values.textAlign) ?? \"center\", sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\n/** A radius the builder holds; one Elements doesn't draw is said, and left out. */\nfunction radiusOf(value: unknown, say: (message: string) => void): Json | undefined {\n const read = readRadius(value);\n if (read === undefined && value !== undefined && value !== \"\") say(`its border radius ${JSON.stringify(value)} isn't one Elements draws: left out`);\n return read;\n}\n\n/** What toDesign() wraps markup in where only the default line height needs saying: the builder's HTML block takes none, and an Html block takes it from around it. */\nconst DEFAULT_LINE = '<div style=\"line-height:1.5\">';\nfunction withoutDefaultLine(html: string): string {\n if (!html.startsWith(DEFAULT_LINE) || !html.endsWith(\"</div>\")) return html;\n const inner = html.slice(DEFAULT_LINE.length, -\"</div>\".length);\n let depth = 0;\n for (const [tag] of inner.matchAll(/<\\/?div\\b/g)) {\n depth += tag === \"</div\" ? -1 : 1;\n if (depth < 0) return html;\n }\n return depth === 0 ? inner : html;\n}\n\nfunction html(values: Values, context: Context): Node[] {\n const hidden = readHidden(\"html\", \"Html\", values, context.say);\n const node = make(\"Html\", { id: givenId(values), props: { html: context.safe(withParagraphMargin(typeof values.html === \"string\" ? withoutDefaultLine(values.html) : \"\", \"margin:0\")), ...hidden.props } });\n return [placed(node, sides(values.containerPadding ?? \"10px\"), undefined, sides(obj(obj(values._override).mobile).containerPadding), { ...hiddenOn(values), ...hidden.hidden })];\n}\n\n/** Each tool's reader. */\nconst READERS = new Map<string, (values: Values, context: Context, slot?: Slot) => Node[]>([\n [\"text\", (values, context) => textTool(\"paragraph\", values, context, \"text\")],\n [\"paragraph\", (values, context) => textTool(\"paragraph\", values, context)],\n [\"heading\", (values, context) => textTool(\"heading\", values, context)],\n [\"button\", button],\n [\"image\", image],\n [\"divider\", divider],\n [\"menu\", menu],\n [\"social\", social],\n [\"video\", video],\n [\"html\", html],\n]);\n\n/** Each tool's defaults, which the builder gives a value its item doesn't have. */\nconst DEFAULTS = new Map<string, Values>([\n [\"text\", TextDefaults],\n [\"paragraph\", ParagraphDefaults],\n [\"heading\", HeadingDefaults],\n [\"button\", ButtonDefaults],\n [\"image\", ImageDefaults],\n [\"divider\", DividerDefaults],\n [\"menu\", MenuDefaults],\n [\"social\", SocialDefaults],\n [\"video\", VideoDefaults],\n [\"html\", HtmlDefaults],\n]);\n\n/** A builder block as nodes: its component, in a Column for its place where it needs one; none for a tool Elements has no component for. */\nexport function readBlock(type: unknown, values: Values, context: Context, slot?: Slot): Node[] {\n const read = typeof type === \"string\" ? READERS.get(type) : undefined;\n if (!read) {\n context.say(type === \"table\" ? \"a table of the builder's isn't read into a Table yet: left out\" : `a ${typeof type === \"string\" ? type : \"block\"} of the builder's has no component in Elements: left out`);\n return [];\n }\n sayUnread(type as string, values, DEFAULTS.get(type as string), context.say);\n return read({ ...DEFAULTS.get(type as string), ...values }, context, slot);\n}\n","/**\n * A builder row as the template's nodes. A row with a band (a background across the width, or a Section's border\n * hidden on it) is a `Section` (a box, in a header or a footer, which hold none); a row of several columns, or with a\n * look of its own, a `Row` of `Column`s with their shares; a one-column row its column's blocks, the row's and the\n * column's space folded into them, or a `Column` where the column has a box. A page break among a column's blocks\n * splits the row there (in a Document).\n */\nimport type { Json, Node } from \"@unlayer-internal/elements-core\";\nimport { ColumnDefaults, RowDefaults } from \"./tool-defaults\";\nimport { color, givenId, hidden as hiddenOn, sides, some, type Sides, type Values } from \"./read-values\";\nimport { readRadius } from \"./reading\";\nimport { readBlock, type Context, type Slot } from \"./blocks\";\nimport { readHidden } from \"./hide\";\nimport { sayUnread } from \"./unread\";\nimport { readBorder } from \"./values\";\n\nconst ZERO: Sides = { top: 0, right: 0, bottom: 0, left: 0 };\nconst obj = (value: unknown): Values => (value && typeof value === \"object\" && !Array.isArray(value) ? (value as Values) : {});\nconst arr = (value: unknown): unknown[] => (Array.isArray(value) ? Array.from(value) : []);\nconst add = (a: Sides, b: Sides): Sides => ({ top: a.top + b.top, right: a.right + b.right, bottom: a.bottom + b.bottom, left: a.left + b.left });\nconst defined = (record: Record<string, Json | undefined>) => Object.fromEntries(Object.entries(record).filter(([, v]) => v !== undefined)) as Record<string, Json>;\nconst ALIGN_ITEMS: Record<string, string> = { \"flex-start\": \"start\", center: \"center\", \"flex-end\": \"end\", stretch: \"stretch\" };\n/** Styles a box keeps its own padding inside: a block holding one isn't padded by its place. */\nconst BOX = [\"backgroundColor\", \"border\", \"borderRadius\", \"width\", \"maxWidth\", \"minWidth\", \"height\", \"overflow\", \"justifyContent\"];\n\nexport interface Where {\n context(where: string): Context;\n /** The body's values (its content width, which an image's place is a share of). */\n body: Values;\n /** In a Document: page breaks are its. */\n document: boolean;\n /** In a Document's header or footer, which hold no Section. */\n part: boolean;\n}\n\n/** A column's blocks, page breaks among them where it's a Document's. */\nfunction blocksOf(column: Values, where: string, at: Where, slot: Omit<Slot, \"column\">): Node[] {\n return arr(column.contents).flatMap((content, i) => {\n const path = `${where}.contents[${i}]`;\n const { type, values } = obj(content);\n if (type === \"page_break\") {\n if (at.document && !at.part) return [{ type: \"PageBreak\" }];\n at.context(path).say(\"a page break is a Document's, between its pages: left out\");\n return [];\n }\n return readBlock(type, obj(values), at.context(path), { ...slot, column: obj(column.values) });\n });\n}\n\n/** Space folded into blocks: above the first, below the last, at the sides of each. */\nfunction fold(blocks: Node[], space: Sides): Node[] {\n if (!some(space)) return blocks;\n return blocks.map((block, i) => {\n const s = { top: i === 0 ? space.top : 0, right: space.right, bottom: i === blocks.length - 1 ? space.bottom : 0, left: space.left };\n if (!some(s)) return block;\n // A block that holds its place's padding (a Text, a Divider, a Column around a block) takes it; one with a box\n // of its own, or another, is in a Column of it.\n const holds = [\"Text\", \"Heading\", \"Divider\", \"Column\"].includes(block.type) && !BOX.some((key) => block.style?.[key] !== undefined);\n if (holds) return { ...block, style: { ...block.style, padding: add((block.style?.padding as Sides | undefined) ?? ZERO, s) } };\n const { hidden, ...shown } = block;\n return { type: \"Column\", style: { padding: s }, ...(hidden ? { hidden } : {}), children: [shown] };\n });\n}\n\n/** A column's phone padding and border. */\nfunction phoneOf(columnValues: Values): Record<string, Json> {\n const phone = obj(obj(columnValues._override).mobile);\n return defined({ padding: sides(phone.padding), border: phone.border === undefined ? undefined : readBorder(phone.border) });\n}\n\n/** A column as a Column: its id, its share, its box and padding, its phone values and hiding. */\nfunction columnOf(columnValues: Values, children: Node[], share: string | undefined, say: (message: string) => void): Node {\n const hidden = readHidden(\"column\", \"Column\", columnValues, say);\n const phone = { ...phoneOf(columnValues), ...hidden.mobile };\n const id = givenId(columnValues);\n const radius = readRadius(columnValues.borderRadius);\n if (radius === undefined && columnValues.borderRadius) say(`a column's border radius ${JSON.stringify(columnValues.borderRadius)} isn't one Elements draws: left out`);\n const style = defined({\n width: share,\n padding: some(sides(columnValues.padding) ?? ZERO),\n backgroundColor: color(columnValues.backgroundColor),\n border: readBorder(columnValues.border),\n borderRadius: radius || undefined,\n ...hidden.style,\n });\n return {\n type: \"Column\",\n ...(id ? { id } : {}),\n ...(Object.keys(style).length ? { style } : {}),\n ...(Object.keys(phone).length ? { mobile: phone } : {}),\n ...(hidden.hidden.mobile || hidden.hidden.desktop ? { hidden: hidden.hidden } : {}),\n children,\n };\n}\n\n/**\n * What the builder draws as tall as its row, a Row's: its columns are stretched to the row's height, so a background\n * every column has, and a line along the top or the bottom of each, are one across the row (the new email's columns\n * end with their content), taken off the columns. Where the columns stack on phones, each draws the lines again\n * there, as the builder's do, and the Row none (as today's rows were drawn).\n */\nfunction stretched(columns: Node[], stacks: boolean): { style: Record<string, Json>; mobile?: Record<string, Json> } {\n if (columns.length < 2) return { style: {} };\n const style = (column: Node) => (column.style ?? {}) as Record<string, any>;\n const same = (values: unknown[]) => values[0] !== undefined && values.every((value) => JSON.stringify(value) === JSON.stringify(values[0]));\n const out: Record<string, Json> = {};\n const backgrounds = columns.map((column) => style(column).backgroundColor);\n if (same(backgrounds) && columns.every((column) => style(column).borderRadius === undefined)) out.backgroundColor = backgrounds[0];\n const lines: Record<string, Json> = {};\n for (const side of [\"top\", \"bottom\"] as const) {\n const each = columns.map((column) => style(column).border?.[side]);\n if (same(each)) lines[side] = each[0];\n }\n if (!out.backgroundColor && !Object.keys(lines).length) return { style: {} };\n for (const column of columns) {\n const { backgroundColor, border, ...rest } = style(column);\n const own = Object.fromEntries(Object.entries(border ?? {}).filter(([side]) => !(side in lines)));\n const kept = { ...rest, ...(out.backgroundColor === undefined && backgroundColor !== undefined ? { backgroundColor } : {}), ...(Object.keys(own).length ? { border: own } : {}) };\n if (Object.keys(kept).length) column.style = kept as Record<string, Json>;\n else delete column.style;\n if (stacks && Object.keys(lines).length && !column.mobile?.border) column.mobile = { ...column.mobile, border: { ...own, ...lines } as Json };\n }\n if (!Object.keys(lines).length) return { style: out };\n return { style: { ...out, border: lines }, ...(stacks ? { mobile: { border: Object.fromEntries(Object.keys(lines).map((side) => [side, \"none\"])) } } : {}) };\n}\n\nexport function readRow(row: Values, where: string, at: Where): Node[] {\n // A value an item doesn't have is its tool's default, as the builder gives it.\n const values = { ...RowDefaults, ...obj(row.values) } as Values;\n const columns = arr(row.columns).map(obj).map((column) => ({ ...column, values: { ...ColumnDefaults, ...obj(column.values) } }));\n const say = at.context(where).say;\n if (!columns.length) {\n say(\"a row with no columns: left out\");\n return [];\n }\n sayUnread(\"row\", obj(row.values), undefined, say);\n arr(row.columns).forEach((column, c) => sayUnread(\"column\", obj(obj(column).values), undefined, at.context(`${where}.columns[${c}]`).say));\n const rowHidden = readHidden(\"row\", \"Row\", values, say);\n const { border: sectionBorder, ...rowOwn } = rowHidden.style;\n const alignItems = typeof values.alignItems === \"string\" && Object.hasOwn(ALIGN_ITEMS, values.alignItems) ? ALIGN_ITEMS[values.alignItems] : undefined;\n const rowStyle = defined({ backgroundColor: color(values.columnsBackgroundColor), ...(alignItems && alignItems !== \"start\" ? { alignItems } : {}), ...rowOwn });\n const layout = columns.length > 1 || Object.keys(rowStyle).length > 0;\n // (A row with an id of its own is a Section, which holds it.)\n const band = !!(givenId(values) && !layout) || color(values.backgroundColor) !== undefined || sectionBorder !== undefined;\n const padding = sides(values.padding) ?? ZERO;\n // Its padding on phones, where it's another.\n const given = sides(obj(obj(values._override).mobile).padding);\n const phonePadding = given && JSON.stringify(given) !== JSON.stringify(padding) ? given : undefined;\n\n const cells = arr(row.cells).map((cell) => (typeof cell === \"number\" && cell > 0 ? cell : 0));\n const stacks = values.noStackMobile !== true && obj(obj(values._override).mobile).noStackMobile !== true;\n const contents = columns.map((column, c) => blocksOf(column, `${where}.columns[${c}]`, at, { body: at.body, row: values, cells: cells.length === columns.length ? cells : columns.map(() => 1), index: c, stacks }));\n if (layout && contents.some((blocks) => blocks.some((node) => node.type === \"PageBreak\"))) {\n say(\"a page break in a column beside others: a page break is the Document's, between its pages: left out\");\n contents.forEach((blocks, c) => (contents[c] = blocks.filter((node) => node.type !== \"PageBreak\")));\n }\n\n /** The row's content: a Row of its columns, a box, or its blocks with its space. */\n const content = (blocks: Node[][]): Node[] => {\n if (layout) {\n const total = cells.reduce((sum, cell) => sum + cell, 0);\n const shares = columns.length > 1 && total > 0 && cells.length === columns.length;\n if (columns.length > 1 && !shares) say(\"its columns' widths can't be read: they share the row equally\");\n const id = givenId(values);\n const children = columns.map((column, c) => columnOf(obj(column.values), blocks[c], shares ? `${Math.round((cells[c] / total) * 10000) / 100}%` : undefined, say));\n const row = stretched(children, stacks);\n const mobile = { ...rowHidden.mobile, ...row.mobile, ...(phonePadding && !band ? { padding: phonePadding } : {}) };\n return [\n {\n type: \"Row\",\n ...(id && !band ? { id } : {}),\n ...(stacks ? {} : { props: { stackOnMobile: false } }),\n style: defined({ ...rowStyle, ...row.style, padding: band ? undefined : some(padding) }),\n ...(Object.keys(mobile).length ? { mobile } : {}),\n children,\n },\n ];\n }\n const column = columnOf(obj(columns[0].values), blocks[0], undefined, say);\n const space = band ? ZERO : padding;\n // The row's padding on phones, where no band holds it.\n const phone = band ? undefined : phonePadding;\n if (BOX.some((key) => column.style?.[key] !== undefined) || column.hidden || column.mobile || column.id) {\n // A box: the row's space around it is a Row's padding, where there's no band to hold it.\n return some(space) || phone ? [{ type: \"Row\", ...(some(space) ? { style: { padding: space } } : {}), ...(phone ? { mobile: { padding: phone } } : {}), children: [column] }] : [column];\n }\n const inner = (column.style?.padding as Sides | undefined) ?? ZERO;\n const own = add(space, inner);\n // Space that's another on phones is a Column's around the blocks, the column's own inside it.\n if (phone) return [{ type: \"Column\", ...(some(own) ? { style: { padding: own } } : {}), mobile: { padding: add(phone, inner) }, ...(blocks[0].length ? { children: blocks[0] } : {}) }];\n // A row with nothing in it but space is that space; with nothing at all, nothing.\n if (!blocks[0].length) return some(own) ? [{ type: \"Column\", style: { padding: own } }] : [];\n return fold(blocks[0], own);\n };\n\n /** The content in the row's band (a Section, or in a header or footer a box), hidden where the row is. */\n const banded = (nodes: Node[]): Node[] => {\n const visibility = hiddenOn(values);\n if (!band) return visibility ? nodes.map((node) => ({ ...node, hidden: { ...node.hidden, ...visibility } })) : nodes;\n const id = givenId(values);\n const style = defined({ backgroundColor: color(values.backgroundColor), border: sectionBorder, padding: some(padding) });\n return [{ type: at.part ? \"Column\" : \"Section\", ...(id ? { id } : {}), style, ...(phonePadding ? { mobile: { padding: phonePadding } } : {}), ...(visibility ? { hidden: visibility } : {}), children: nodes }];\n };\n\n if (!layout && contents[0].some((node) => node.type === \"PageBreak\")) {\n const runs: Node[][] = [[]];\n for (const node of contents[0]) {\n if (node.type === \"PageBreak\") runs.push([]);\n else runs[runs.length - 1].push(node);\n }\n // A row holding only a page break is the Document's page break.\n return runs.flatMap((run, i) => [...(i ? [{ type: \"PageBreak\" }] : []), ...(run.length ? banded(content([run])) : [])]);\n }\n return banded(content(contents));\n}\n","/**\n * The builder's design JSON as a template in the new components, from its values alone: the body is the root (the\n * builder's display mode), with its rows (rows.ts) in it, a Document's header and footer around them. Malformed JSON\n * never throws: what can't be read is left out and said.\n */\nimport type { Child, Json, Node } from \"@unlayer-internal/elements-core\";\nimport { BodyDefaults } from \"./tool-defaults\";\nimport { color, fontWeight, font, px, serviceTag, type Sides, type Values } from \"./read-values\";\nimport type { Context } from \"./blocks\";\nimport { readHidden } from \"./hide\";\nimport { withoutMalformed } from \"./malformed\";\nimport { readRow } from \"./rows\";\nimport { sayUnread } from \"./unread\";\n\nexport type DisplayMode = \"email\" | \"web\" | \"document\";\n\nconst obj = (value: unknown): Values => (value && typeof value === \"object\" && !Array.isArray(value) ? (value as Values) : {});\nconst arr = (value: unknown): unknown[] => (Array.isArray(value) ? Array.from(value) : []);\nconst defined = (record: Record<string, Json | undefined>) => Object.fromEntries(Object.entries(record).filter(([, v]) => v !== undefined)) as Record<string, Json>;\n/** The strings in a design's value, so many levels down at most: malformed JSON can be any depth. */\nconst wordsIn = (value: unknown, depth: number): string[] => (typeof value === \"string\" ? [value] : depth > 0 && value && typeof value === \"object\" ? Object.values(value).flatMap((held) => wordsIn(held, depth - 1)) : []);\nconst ROOTS: Record<DisplayMode, string> = { email: \"Email\", web: \"Page\", document: \"Document\" };\n/** The page sizes a Document takes. */\nconst SIZES = new Set([\"A3\", \"A4\", \"A5\", \"Letter\", \"Legal\", \"Tabloid\"]);\n\nexport function readDesign(given: unknown, displayMode: DisplayMode | undefined, report: string[], toSafeHtml?: (html: string) => string): Node {\n const design = withoutMalformed(given, report);\n const body = obj(obj(design).body);\n if (!Object.keys(body).length) report.push(\"the design has no body: an empty template\");\n // A value the body doesn't have is the builder's default, as it gives it.\n const values = { ...BodyDefaults, ...obj(body.values) } as Values;\n const rowsOf = (key: string) => {\n if (body[key] !== undefined && !Array.isArray(body[key])) report.push(`body.${key} isn't a list of rows: left out`);\n return arr(body[key]);\n };\n const rows = rowsOf(\"rows\");\n const headers = rowsOf(\"headers\");\n const footers = rowsOf(\"footers\");\n // A design made in the builder with no mode given is an Email, or a Document where it has a document's parts.\n const breaks = rows.some((row) => arr(obj(row).columns).some((column) => arr(obj(column).contents).some((content) => obj(content).type === \"page_break\")));\n const mode: DisplayMode = displayMode && Object.hasOwn(ROOTS, displayMode) ? displayMode : headers.length || footers.length || breaks ? \"document\" : \"email\";\n const root = rootOf(mode, values, (message) => report.push(`body: ${message}`));\n sayUnread(\"body\", obj(body.values), undefined, (message) => report.push(`body: ${message}`));\n const context = (where: string): Context => ({\n inherited: { color: (root.style?.color as string | undefined) ?? \"#000000\", fontFamily: (root.style?.fontFamily as string | undefined) ?? \"Arial, Helvetica, sans-serif\", fontWeight: (root.style?.fontWeight as number | undefined) ?? 400 },\n mode,\n dir: (root.props?.dir as string | undefined) ?? \"ltr\",\n safe: (html) => (toSafeHtml ? toSafeHtml(html) : html),\n document: mode === \"document\",\n say: (message) => report.push(`${where}: ${message}`),\n });\n const children: Child[] = [];\n const place = (list: unknown[], part: string) => list.flatMap((row, r) => readRow(obj(row), `${part}[${r}]`, { context, body: values, document: mode === \"document\", part: mode === \"document\" && part !== \"rows\" }));\n if (mode === \"document\") {\n const header = place(headers, \"headers\");\n if (header.length) children.push({ type: \"PageHeader\", children: header.filter((c) => c.type !== \"PageBreak\") });\n children.push(...place(rows, \"rows\"));\n const footer = place(footers, \"footers\");\n if (footer.length) children.push({ type: \"PageFooter\", children: footer.filter((c) => c.type !== \"PageBreak\") });\n } else {\n // Elsewhere the builder draws them as rows, above and below the others.\n children.push(...place(headers, \"headers\"), ...place(rows, \"rows\"), ...place(footers, \"footers\"));\n }\n const all = [...rows, ...headers, ...footers];\n // An older design says it here, which the builder moves to its phone and desktop values when it opens one.\n const items = all.flatMap((row) => [row, ...arr(obj(row).columns).flatMap((column) => [column, ...arr(obj(column).contents)])]).map((item) => obj(obj(item).values));\n if (items.some((held) => held.hideMobile === true || held.hideDesktop === true)) report.push(\"body: what it hides on phones or on desktop is written as an older design's, which the builder moves when it opens one: left out, so it shows. Open it in the builder and save it first\");\n // A web font the builder loads from a stylesheet (a Google Fonts URL); a root's fonts are font files, and a stylesheet\n // toDesign wrote for one of them comes back as that font.\n const ownFonts = new Set(arr(root.props?.fonts).map((face) => obj(face).family));\n const webFonts = [...new Set([values, ...items].map((held) => obj(held.fontFamily)).filter((family) => typeof family.url === \"string\" && family.url && !ownFonts.has(family.label)).map((family) => String(family.label ?? family.value)))];\n if (webFonts.length) report.push(`body: ${webFonts.join(\", \")}: web fonts the builder loads from a stylesheet, which a root doesn't take (its fonts are font files): left out, so text shows in the next font of its stack`);\n const tags = [...new Set(wordsIn(all, 12).flatMap((text) => [...text.matchAll(/\\[\\[\\s*[\\w.-]+\\s*\\]\\]/g)].map((match) => match[0])))];\n if (tags.length) report.push(`body: ${tags.join(\", \")}: design tags are filled in by the builder, from what it's given: written as they are`);\n return { ...root, children };\n}\n\n/** The root, from the body's values. */\nfunction rootOf(mode: DisplayMode, values: Values, say: (message: string) => void): Node {\n const type = ROOTS[mode];\n const hidden = readHidden(\"body\", type, values, say);\n const props: Record<string, Json | undefined> = {};\n if (mode === \"email\" || mode === \"web\") {\n const width = px(values.contentWidth);\n props.width = width !== undefined && width !== (mode === \"email\" ? 600 : 1200) && width >= 200 ? width : undefined;\n if (width !== undefined && width < 200) say(`a content width of ${width}px is narrower than a root's least, 200px: left out`);\n }\n if (mode === \"email\" && typeof values.preheaderText === \"string\" && values.preheaderText.trim()) props.previewText = values.preheaderText;\n // The builder's accessibility title, which its export writes as the page's <title>.\n if (typeof values.accessibilityTitle === \"string\" && values.accessibilityTitle.trim()) props.title = values.accessibilityTitle;\n if (mode === \"email\" && typeof values.preheaderText === \"string\" && serviceTag(values.preheaderText)) say(\"its preview text has an email service's tag, which the builder's exporters keep as written and Elements writes escaped: the service won't fill it in\");\n if ([\"ltr\", \"rtl\", \"auto\"].includes(values.textDirection)) props.dir = values.textDirection;\n if (mode === \"document\") {\n if (SIZES.has(values.documentSize) && values.documentSize !== \"A4\") props.size = values.documentSize;\n if (values.documentOrientation === \"landscape\") props.orientation = \"landscape\";\n // One margin for every side (the builder's preset for the size where it's \"auto\"), or the template's own sides.\n const preset = values.documentSize === \"A5\" ? 48 : 96;\n const one = values.documentMargin === \"auto\" || values.documentMargin === undefined ? preset : px(values.documentMargin);\n const own = hidden.props.margin as Sides | undefined;\n const margin = own && one === Math.max(own.top, own.right, own.bottom, own.left) ? own : one !== undefined ? { top: one, right: one, bottom: one, left: one } : undefined;\n props.margin = margin && !(margin.top === 48 && margin.right === 48 && margin.bottom === 48 && margin.left === 48) ? margin : undefined;\n }\n const { margin: _margin, ...rest } = hidden.props;\n const style = defined({\n backgroundColor: color(values.backgroundColor),\n color: typeof values.textColor === \"string\" && values.textColor && values.textColor.toLowerCase() !== \"#000000\" ? values.textColor : undefined,\n fontFamily: font(values.fontFamily) !== \"Arial, Helvetica, sans-serif\" ? font(values.fontFamily) : undefined,\n fontWeight: fontWeight(values.fontWeight) !== 400 ? fontWeight(values.fontWeight) : undefined,\n });\n const node: Node = { type };\n const allProps = defined({ ...props, ...rest });\n if (Object.keys(allProps).length) node.props = allProps;\n if (Object.keys(style).length) node.style = style;\n return node;\n}\n","/**\n * The template read from a design, checked value by value against the components' definitions before it's given back:\n * a design holds what the builder (or someone editing its JSON) put there, and a value a component doesn't take would\n * make the template fail to render. Such a value is left out and said. A link that isn't one Elements writes (a\n * script's, a file's) is left out alone: a Link's words are kept (in text, as a Span), what it held (an image) in its\n * place; a button's, a menu item's or a social icon's is \"#\". An image or video without a source it can show is left\n * out.\n */\nimport { definitionOf, type Child, type Json, type Node } from \"@unlayer-internal/elements-core\";\n\ntype Kind = { parse(value: unknown): { ok: true; value: Json } | { ok: false; message: string } };\n\n/** What a link is checked by: a Link's href. */\nconst LINK = (definitionOf(\"Link\")!.props as Record<string, { kind: Kind }>).href.kind;\n/** Whether a component holds text (a Link in it is a run). */\nconst holdsText = (type: string) => !!(definitionOf(type)?.children as { text?: boolean } | undefined)?.text;\n\n/** A list of items with links (a Menu's, a Social block's), each link Elements won't write \"#\". */\nfunction itemLinks(value: Json, key: string, path: string, report: string[]): Json {\n if (!Array.isArray(value)) return value;\n return value.map((item, i) => {\n if (!item || typeof item !== \"object\" || Array.isArray(item) || !(\"href\" in item) || LINK.parse(item.href).ok) return item;\n report.push(`${path}: its ${key}[${i}]'s link ${JSON.stringify(item.href)} isn't one Elements writes: it's \"#\"`);\n return { ...item, href: \"#\" };\n });\n}\n\n/** The node with only values its component takes, its children checked; null where it can't be kept, its children where only it can't. */\nfunction checkNode(node: Node, path: string, report: string[], inText = false): Node | Child[] | null {\n const definition = definitionOf(node.type);\n if (!definition) {\n report.push(`${path}: ${JSON.stringify(node.type)} isn't a component: left out`);\n return null;\n }\n const out: Node = { ...node };\n // An id a template takes (the builder's can hold any text).\n if (out.id !== undefined && !/^[A-Za-z][\\w-]*$/.test(out.id)) {\n report.push(`${path}: its id ${JSON.stringify(out.id)} isn't one a template takes: left out`);\n delete out.id;\n }\n for (const part of [\"props\", \"style\", \"mobile\", \"hover\"] as const) {\n const values = node[part];\n if (!values) continue;\n const specs = (part === \"props\" ? definition.props : definition.style) as Record<string, { kind: Kind } | undefined>;\n const kept: Record<string, Json> = {};\n for (const [key, given] of Object.entries(values)) {\n const value = part === \"props\" ? itemLinks(given, key, path, report) : given;\n const spec = Object.hasOwn(specs, key) ? specs[key] : undefined;\n const parsed = spec ? spec.kind.parse(value) : undefined;\n if (parsed?.ok) {\n kept[key] = parsed.value;\n continue;\n }\n // A link Elements won't write: a Link's words without it, a Button's \"#\"; an image or video it can't show, none.\n if (part === \"props\" && (key === \"href\" || key === \"src\")) {\n if (node.type === \"Button\") {\n report.push(`${path}: its link ${JSON.stringify(value)} isn't one Elements writes: it's \"#\"`);\n kept.href = \"#\";\n continue;\n }\n if (node.type !== \"Link\") {\n report.push(`${path}: its ${key} ${JSON.stringify(value)} isn't one Elements writes: left out`);\n return null;\n }\n // In text, its words as a Span; elsewhere (around an image), what it holds, in its place.\n report.push(`${path}: its ${key} ${JSON.stringify(value)} isn't one Elements writes: ${inText ? \"its words\" : \"what it holds\"} without it`);\n const children = checkChildren(node.children ?? [], path, report, true);\n return inText ? { type: \"Span\", children } : children;\n }\n report.push(`${path}: its ${part === \"props\" ? \"\" : `${part} `}${key} ${JSON.stringify(value)}${parsed && !parsed.ok ? ` (${parsed.message})` : \"\"} isn't one a ${node.type} takes: left out`);\n }\n if (Object.keys(kept).length) out[part] = kept;\n else delete out[part];\n }\n if (node.children) out.children = checkChildren(node.children, path, report, holdsText(node.type));\n return out;\n}\n\nfunction checkChildren(children: Child[], path: string, report: string[], inText: boolean): Child[] {\n return children.flatMap((child, i): Child[] => {\n if (typeof child === \"string\") return [child];\n const checked = checkNode(child, `${path}.children[${i}]`, report, inText);\n return Array.isArray(checked) ? checked : checked ? [checked] : [];\n });\n}\n\nexport function checkTemplate(root: Node, report: string[]): Node {\n // A Document has no phones: its phone values and hiding (a design made for email, a Grid's empty cells) aren't its.\n const checked = checkNode(root.type === \"Document\" ? withoutPhones(root) : root, \"root\", report);\n return checked && !Array.isArray(checked) ? checked : { type: root.type };\n}\n\nfunction withoutPhones(node: Node): Node {\n const { mobile: _mobile, hidden: _hidden, ...rest } = node;\n return rest.children ? { ...rest, children: rest.children.map((child) => (typeof child === \"string\" ? child : withoutPhones(child))) } : rest;\n}\n","/** Ids a template can hold: a block duplicated in the builder keeps its id once, the others get the first free number after it. */\nimport type { Node } from \"@unlayer-internal/elements-core\";\n\nexport function uniqueIds(root: Node): Node {\n const taken = new Set<string>();\n const collect = (node: Node) => {\n if (node.id !== undefined) taken.add(node.id);\n for (const child of node.children ?? []) if (typeof child !== \"string\") collect(child);\n };\n collect(root);\n const seen = new Set<string>();\n const visit = (node: Node): Node => {\n let id = node.id;\n if (id !== undefined) {\n if (seen.has(id)) {\n let n = 2;\n while (taken.has(`${id}-${n}`)) n++;\n id = `${id}-${n}`;\n taken.add(id);\n }\n seen.add(id);\n }\n return { ...node, ...(id !== undefined ? { id } : {}), ...(node.children ? { children: node.children.map((child) => (typeof child === \"string\" ? child : visit(child))) } : {}) };\n };\n return visit(root);\n}\n","/**\n * The builder's design JSON from the rows, columns and blocks toDesign() makes of a template (raise.ts): each part's\n * values are its tool's defaults with its own fields written in, numbered as the builder numbers them (`u_row_1`,\n * `u_content_paragraph_2`, the design's `counters`), and then its values from the template merged over them. Key for key,\n * it's the design Elements 0.2's renderToJson() wrote for the same parts, which designs saved in the builder since\n * then hold.\n */\nimport {\n BodyDefaults,\n ButtonDefaults,\n ColumnDefaults,\n DividerDefaults,\n HeadingDefaults,\n HtmlDefaults,\n ImageDefaults,\n MenuDefaults,\n ParagraphDefaults,\n RowDefaults,\n schemaVersion,\n SocialDefaults,\n VideoDefaults,\n} from \"./tool-defaults\";\nimport { merge } from \"./hide\";\nimport type { Values } from \"./values\";\n\n/** The builder's tools toDesign() writes blocks as, by their type in the design. */\nexport type Tool = \"heading\" | \"paragraph\" | \"button\" | \"image\" | \"divider\" | \"menu\" | \"social\" | \"video\" | \"html\" | \"page_break\";\n\n/** Where a row or a block is hidden: the builder's `_override.mobile.hideMobile` and `_override.desktop.hideDesktop`. */\nexport interface Hiding {\n hideOnMobile?: boolean;\n hideOnDesktop?: boolean;\n}\n\n/** A block: its tool, where it's hidden, and its values, merged over the tool's defaults. */\nexport interface Block {\n tool: Tool;\n hiding: Hiding;\n values: Values;\n}\n\n/** A block of a tool, hidden where `hiding` says, its values to come. */\nexport const block = (tool: Tool, hiding: Hiding = {}): Block => ({ tool, hiding, values: {} });\n\n/** A column's own fields: its padding, background, border and corners. */\nexport interface ColumnFields {\n padding: string;\n backgroundColor?: string;\n border?: Values;\n borderRadius?: string;\n}\n\n/** A column: its fields, its values merged over them, and its blocks. */\nexport interface Column {\n fields: ColumnFields;\n values: Values;\n contents: Block[];\n}\n\n/** A column of these fields holding these blocks, its values to come. */\nexport const columnWith = (fields: ColumnFields, contents: Block[]): Column => ({ fields, values: {}, contents });\n\n/** A row's own fields: its padding, its background and its columns', whether they stay side by side on phones, where it's hidden. */\nexport interface RowFields extends Hiding {\n padding: string;\n backgroundColor?: string;\n columnsBackgroundColor?: string;\n noStackMobile?: boolean;\n}\n\n/** A row: its columns' widths (`cells`), its fields, its values merged over them, and its columns. */\nexport interface Row {\n cells: number[];\n fields: RowFields;\n values: Values;\n columns: Column[];\n}\n\n/** A row of these columns, `cells` their widths, its values to come. */\nexport const rowWith = (cells: number[], fields: RowFields, columns: Column[]): Row => ({ cells, fields, values: {}, columns });\n\n/** The body's fields: the content's width, text color and font, its weight and direction, a Document's paper. */\nexport interface BodyFields {\n contentWidth: string;\n textColor?: string;\n fontFamily: { label: string; value: string; url?: string };\n fontWeight?: number;\n textDirection?: string;\n documentSize?: string;\n documentOrientation?: string;\n}\n\n/** A template as the builder's parts: its root, its body's fields and values, its rows, and a Document's header and footer rows. */\nexport interface Body {\n root: \"Email\" | \"Page\" | \"Document\";\n fields: BodyFields;\n /** An Email's preview text, the builder's `preheaderText`. */\n previewText?: string;\n values: Values;\n rows: Row[];\n headers?: Row[];\n footers?: Row[];\n}\n\ntype DesignRow = { cells: number[]; columns: Array<{ contents: Array<{ type: string; values: Values }>; values: Values }>; values: Values };\nexport type Design = { counters?: Record<string, number>; schemaVersion?: number; body: { rows: DesignRow[]; values: Values; headers?: DesignRow[]; footers?: DesignRow[] } };\n\n/** The schema version whose document margin is the one written (an older one's \"96px\" the builder reads as its preset). */\nconst DOCUMENT_SCHEMA = 28;\n\n/** A copy of defaults, so a design's values share nothing with them (or with another design's). */\nconst copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));\n\n/** The body's defaults, but a popup's (a display mode toDesign() doesn't write). */\nconst BODY = Object.fromEntries(Object.entries(BodyDefaults).filter(([key]) => !key.startsWith(\"popup\")));\n\n/** Each tool's values before a block's: the builder's defaults, with what Elements 0.2's components added to them. */\nconst TOOLS: Record<Tool, Values> = {\n heading: { ...HeadingDefaults, color: \"#000000\", fontWeight: 400, text: \"Heading\" },\n paragraph: { ...ParagraphDefaults, color: \"#000000\" },\n button: { ...ButtonDefaults, text: \"Button\" },\n // The placeholder's size without its height, as wide as its column.\n image: { ...ImageDefaults, src: { url: ImageDefaults.src.url, width: ImageDefaults.src.width, autoWidth: true, maxWidth: \"100%\" } },\n divider: DividerDefaults,\n menu: MenuDefaults,\n social: SocialDefaults,\n video: { ...VideoDefaults, video: { type: \"youtube\", videoId: \"\", thumbnail: \"\", loading: false, ...VideoDefaults.video } },\n html: HtmlDefaults,\n page_break: { color: \"#6b7280\" },\n};\n\n/** What the builder lets a user do with a row or a block. */\nconst EDITABLE = { selectable: true, draggable: true, duplicatable: true, deletable: true, hideable: true };\n\n/** A template's parts as the builder's design JSON. */\nexport function writeParts(body: Body): Design {\n const counters: Record<string, number> = {};\n const next = (key: string) => (counters[key] = (counters[key] ?? 0) + 1);\n const rowsOf = (rows: Row[], kind = \"u_row\") => rows.map((row) => designRow(row, `${kind}_${next(kind)}`, kind, next));\n const design: Design = { counters, body: { rows: rowsOf(body.rows), values: merge(bodyValues(body), body.values) }, schemaVersion };\n if (body.headers && body.footers) {\n // A Document's header and footer: the builder's `headers` and `footers`, rows numbered after the body's.\n design.schemaVersion = Math.max(schemaVersion, DOCUMENT_SCHEMA);\n design.body.headers = rowsOf(body.headers, \"u_header\");\n design.body.footers = rowsOf(body.footers, \"u_footer\");\n }\n if (body.root === \"Document\") documentMargin(design.body.values);\n return design;\n}\n\n/** A row, its columns and their blocks, numbered in that order, each part's values from the template over its own. */\nfunction designRow(row: Row, htmlID: string, htmlClassNames: string, next: (key: string) => number): DesignRow {\n const { hideOnMobile, hideOnDesktop, noStackMobile, ...fields } = row.fields;\n const override = hidingOverride({ hideOnMobile, hideOnDesktop });\n // Whether its columns stay side by side on phones is a phone value, as the builder saves it.\n if (noStackMobile) override.mobile = { ...override.mobile, noStackMobile: true };\n const values = {\n ...withFields(RowDefaults, { ...colored(fields), ...(noStackMobile ? { noStackMobile: false } : {}), ...(Object.keys(override).length ? { _override: override } : {}) }),\n cells: row.cells,\n _meta: { htmlID, htmlClassNames },\n ...EDITABLE,\n };\n const columns = row.columns.map((column) => {\n const own = { ...colored(column.fields), ...(column.fields.border ? { border: colored(column.fields.border) } : {}) };\n const values = { ...withFields(ColumnDefaults, own), _meta: { htmlID: `u_column_${next(\"u_column\")}`, htmlClassNames: \"u_column\" } };\n return { contents: column.contents.map((block) => content(block, next)), values: merge(values, column.values) };\n });\n return { cells: row.cells, columns, values: merge(values, row.values) };\n}\n\n/** A block as the builder's item: its tool's defaults, where it's hidden, its id and class. */\nfunction content(block: Block, next: (key: string) => number): { type: string; values: Values } {\n const base = `u_content_${block.tool}`;\n const override = hidingOverride(block.hiding);\n const values = {\n containerPadding: \"10px\",\n ...copy(TOOLS[block.tool]),\n ...(Object.keys(override).length ? { _override: override } : {}),\n _meta: { htmlID: `${base}_${next(base)}`, htmlClassNames: base },\n ...EDITABLE,\n };\n return { type: block.tool, values: merge(values, block.values) };\n}\n\n/** The body's values: its fields over the builder's defaults, an Email's preview text, its id. */\nfunction bodyValues(body: Body): Values {\n const values = withFields(BODY, { ...body.fields, textColor: body.fields.textColor === undefined ? undefined : exportedColor(body.fields.textColor), fontFamily: font(body.fields.fontFamily) });\n // Only ltr, rtl or auto, as in the HTML.\n if (\"textDirection\" in values) {\n const direction = typeof values.textDirection === \"string\" ? values.textDirection.trim().toLowerCase() : \"\";\n if (direction === \"ltr\" || direction === \"rtl\" || direction === \"auto\") values.textDirection = direction;\n else delete values.textDirection;\n }\n if (body.previewText !== undefined) values.preheaderText = body.previewText;\n values._meta = { htmlID: \"u_body\", htmlClassNames: \"u_body\" };\n return values;\n}\n\n/** Fields written over defaults: one the defaults have keeps its place, another goes after them; one not given isn't written. */\nfunction withFields(defaults: Values, fields: Values): Values {\n const out = copy(defaults);\n for (const [key, value] of Object.entries(fields)) if (value !== undefined) out[key] = value;\n return out;\n}\n\n/** Where a part is hidden, as the builder's phone and desktop values. */\nfunction hidingOverride({ hideOnMobile, hideOnDesktop }: Hiding): Values {\n return { ...(hideOnMobile !== undefined ? { mobile: { hideMobile: hideOnMobile } } : {}), ...(hideOnDesktop !== undefined ? { desktop: { hideDesktop: hideOnDesktop } } : {}) };\n}\n\n/** Values with each color (`color`, `…Color`) as the builder's exporters read one (see `exportedColor`). */\nfunction colored(values: Values): Values {\n return Object.fromEntries(Object.entries(values).map(([key, value]) => [key, typeof value === \"string\" && (key === \"color\" || key.endsWith(\"Color\")) ? exportedColor(value) : value]));\n}\n\n/** One digit's reading in a color's channel, which can't backtrack on a long value. */\nconst CHANNEL = /^-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%?$/;\n\n/**\n * A color as the builder's exporters read one: rgb() and rgba() in any CSS syntax as \"#rrggbb\", or \"rgba(r, g, b, a)\"\n * where it's translucent (they write Outlook's `bgcolor` from hex or that form only); any other as it is.\n */\nfunction exportedColor(value: string): string {\n const text = value.trim();\n const open = text.indexOf(\"(\");\n if (!/^rgba?$/i.test(text.slice(0, open)) || !text.endsWith(\")\")) return value;\n const [rgb, slashed, extra] = text.slice(open + 1, -1).split(\"/\");\n const channels = rgb.trim().split(/\\s*,\\s*|\\s+/);\n if (slashed !== undefined) channels.push(slashed.trim());\n if (extra !== undefined || channels.length > 4 || channels.length < (slashed === undefined ? 3 : 4) || !channels.every((c) => CHANNEL.test(c))) return value;\n const num = (part: string, full: number) => (part.endsWith(\"%\") ? (parseFloat(part) / 100) * full : parseFloat(part));\n const [r, g, b] = channels.slice(0, 3).map((part) => Math.max(0, Math.min(255, Math.round(num(part, 255)))));\n const alpha = channels[3] === undefined ? 1 : num(channels[3], 1);\n if (alpha < 1) return `rgba(${r}, ${g}, ${b}, ${Math.max(0, alpha)})`;\n return `#${[r, g, b].map((n) => n.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** A font as the builder's exporters write it into `style=\"\"`: family names quoted with ' (an apostrophe in one escaped). */\nconst fontStack = (stack: string) => stack.replace(/\"([^\"]*)\"?/g, (_, name: string) => `'${name.replace(/'/g, \"\\\\'\")}'`);\nconst font = (value: { label: string; value: string }) => ({ label: fontStack(value.label), value: fontStack(value.value) });\n\n/** A Document's margin: the builder has one for every side, the widest; the template's sides, where they differ, stay hidden. */\nfunction documentMargin(values: Values) {\n const sides = values.margin;\n if (typeof sides !== \"string\") return;\n const widths = sides.split(/\\s+/).map((part) => parseFloat(part) || 0);\n values.documentMargin = `${Math.max(...widths)}px`;\n if (new Set(widths).size === 1) delete values.margin;\n}\n","/**\n * The builder loads a web font from the URL of a stylesheet, given on each font a design names; a template has font\n * files. So each family's @font-face rules are written as a stylesheet, in a data URI. Reading a design, a root's fonts\n * come back from its hidden property, not from these.\n */\nimport type { Design } from \"./design\";\n\n/** A face of a root's `fonts`, as the body's hidden property holds it. */\nexport type Face = { family: string; src: string; format?: string; weight?: number | string | number[]; style?: string };\n\n/** A stylesheet of a family's faces, as a data URI. */\nexport const fontStylesheet = (family: string, faces: Face[]): string => {\n const rules = faces.map(\n (face) => `@font-face{font-family:'${family.replace(/'/g, \"\\\\'\")}';src:url(${face.src})${face.format ? ` format('${face.format}')` : \"\"};font-weight:${[face.weight ?? 400].flat().join(\" \")};font-style:${face.style ?? \"normal\"}}`\n );\n return `data:text/css;charset=utf-8,${encodeURIComponent(rules.join(\"\"))}`;\n};\n\n/** A design with each font the root's `fonts` has carrying its stylesheet. A design with no fonts comes back as it was. */\nexport function withFontStylesheets(design: Design): Design {\n const faces = (design.body.values as { fonts?: Face[] }).fonts;\n if (!faces?.length) return design;\n const urls = new Map(faces.map(({ family }) => [family, fontStylesheet(family, faces.filter((face) => face.family === family))]));\n const walk = (value: unknown, key?: string): unknown => {\n if (Array.isArray(value)) return value.map((item) => walk(item));\n if (!value || typeof value !== \"object\") return value;\n const copy = Object.fromEntries(Object.entries(value).map(([k, v]) => [k, walk(v, k)]));\n const url = key === \"fontFamily\" ? urls.get(String((value as { label?: unknown }).label)) : undefined;\n return url ? { ...copy, url } : copy;\n };\n return walk(design) as Design;\n}\n","/**\n * A text block's runs as the HTML the builder's text tools hold (a heading's, a text's, a button's `text`): words,\n * `<span>` with a run's style, `<sup>`/`<sub>`, `<a>` with its href, target, title and label, `<br>`, merge tags as\n * `{{name}}`. A Text's and a List's are its rich text (`textJson`), what its editor saves, each run a text node\n * in its style. What neither can hold (a link's hover) is said in `lost`.\n */\nimport { linkParts, type Json, type LinkValue, type Node } from \"@unlayer-internal/elements-core\";\nimport { cssPx } from \"./values\";\n\nconst escapeHtml = (text: string) => text.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/\"/g, \""\");\n\n/** CSS of a run's style, in the properties a Span or a Link takes. */\nconst CSS: Record<string, string> = {\n color: \"color\",\n backgroundColor: \"background-color\",\n fontWeight: \"font-weight\",\n fontStyle: \"font-style\",\n textDecoration: \"text-decoration\",\n textTransform: \"text-transform\",\n fontSize: \"font-size\",\n letterSpacing: \"letter-spacing\",\n fontFamily: \"font-family\",\n};\n\nfunction runCss(style: Record<string, Json> | undefined, escaped: (value: string) => string = escapeHtml): string {\n const out: string[] = [];\n for (const [key, value] of Object.entries(style ?? {})) {\n if (value === undefined || value === null || !CSS[key]) continue;\n const written = key === \"fontSize\" || key === \"letterSpacing\" ? cssPx(Number(value)) : key === \"fontFamily\" ? String(value).replace(/\"/g, \"'\") : String(value);\n out.push(`${CSS[key]}:${escaped(written)}`);\n }\n return out.join(\";\");\n}\n\n/** A node's runs as HTML; what it can't hold goes in `lost` (\"a link's hover\"). */\nexport function runsHtml(node: Node, lost: string[] = []): string {\n return (node.children ?? [])\n .map((child) => {\n if (typeof child === \"string\") return escapeHtml(child);\n if (Object.keys(child.mobile ?? {}).length) lost.push(\"phone styles on part of its text\");\n if (child.id) lost.push(\"id on part of its text\");\n if (child.type === \"Link\" && child.props?.attrs) lost.push(\"other attributes on a link\");\n const css = runCss(child.style);\n const style = css ? ` style=\"${css}\"` : \"\";\n switch (child.type) {\n case \"LineBreak\":\n return \"<br>\";\n case \"MergeTag\":\n return `{{${escapeHtml(String(child.props?.name ?? \"\"))}}}`;\n case \"PageNumber\":\n // The builder has no page numbers: its tokens in their place, read back as them in a Document.\n return child.props?.total ? \"{{page_count}}\" : \"{{page_number}}\";\n case \"Link\": {\n if (child.hover && Object.keys(child.hover).length) lost.push(\"a link's hover\");\n const { href, target } = linkParts(child.props?.href as LinkValue);\n const attributes = [`href=\"${escapeHtml(href)}\"`, target ? `target=\"${target}\"` : \"\", ...([\"title\", \"aria-label\"] as const).map((name) => (typeof child.props?.[name] === \"string\" ? `${name}=\"${escapeHtml(String(child.props[name]))}\"` : \"\"))].filter(Boolean);\n return `<a ${attributes.join(\" \")}${style}>${runsHtml(child, lost)}</a>`;\n }\n default: {\n const inner = `<span${style}>${runsHtml(child, lost)}</span>`;\n const raised = child.style?.verticalAlign;\n const { verticalAlign: _, ...rest } = child.style ?? {};\n const plain = runCss(rest);\n if (raised === \"super\" || raised === \"sub\") {\n const tag = raised === \"super\" ? \"sup\" : \"sub\";\n return `<${tag}>${plain ? `<span style=\"${plain}\">${runsHtml(child, lost)}</span>` : runsHtml(child, lost)}</${tag}>`;\n }\n return inner;\n }\n }\n })\n .join(\"\");\n}\n\ntype Item = Record<string, Json | undefined>;\n\n/** Lexical's bitmask for a raised run. */\nconst RAISED: Record<string, number> = { sub: 32, super: 64 };\nconst unescaped = (value: string) => value;\n/** Two styles as one: where both set something, the second's, as an inner style's is over an outer's. */\nconst within = (outer: string, inner: string) => {\n const declared = new Map(`${outer};${inner}`.split(\";\").filter(Boolean).map((declaration) => [declaration.slice(0, declaration.indexOf(\":\")), declaration.slice(declaration.indexOf(\":\") + 1)]));\n return [...declared].map(([name, value]) => `${name}:${value}`).join(\";\");\n};\nconst textItem = (text: string, style: string, format: number): Item => ({ type: \"extended-text\", version: 1, detail: 0, format, mode: \"normal\", style, text });\n\n/** A node's runs as rich text's nodes, each run's text in the style and format of the runs around it. */\nfunction runItems(node: Node, lost: string[], around = \"\", format = 0): Item[] {\n return (node.children ?? []).flatMap((child): Item[] => {\n if (typeof child === \"string\") return [textItem(child, around, format)];\n if (Object.keys(child.mobile ?? {}).length) lost.push(\"phone styles on part of its text\");\n if (child.id) lost.push(\"id on part of its text\");\n if (child.type === \"Link\" && child.props?.attrs) lost.push(\"other attributes on a link\");\n const { verticalAlign, ...style } = child.style ?? {};\n const own = within(around, runCss(style, unescaped));\n switch (child.type) {\n case \"LineBreak\":\n return [{ type: \"linebreak\", version: 1 }];\n case \"MergeTag\":\n return [textItem(`{{${String(child.props?.name ?? \"\")}}}`, own, format)];\n case \"PageNumber\":\n // The builder has no page numbers: its tokens in their place, read back as them in a Document.\n return [textItem(child.props?.total ? \"{{page_count}}\" : \"{{page_number}}\", own, format)];\n case \"Link\": {\n if (child.hover && Object.keys(child.hover).length) lost.push(\"a link's hover\");\n const { href, target } = linkParts(child.props?.href as LinkValue);\n const label = child.props?.[\"aria-label\"];\n return [\n {\n type: \"extended-link\",\n version: 1,\n format: \"\",\n indent: 0,\n direction: null,\n url: href,\n target: target ?? null,\n rel: null,\n title: typeof child.props?.title === \"string\" ? child.props.title : undefined,\n style: runCss(child.style, unescaped) || undefined,\n customAttrs: typeof label === \"string\" ? { \"aria-label\": label } : undefined,\n // Its words take what's around it only under its own style: it's inside the link, where the link's wouldn't win.\n children: runItems(child, lost, around && own, format) as Json[],\n },\n ];\n }\n default:\n return runItems(child, lost, own, format | (RAISED[String(verticalAlign)] ?? 0));\n }\n });\n}\n\nconst richText = (children: Item[]) => JSON.stringify({ root: { type: \"root\", version: 1, format: \"\", indent: 0, direction: null, children } });\n\n/** A node's runs as a Text's rich text (`textJson`), one paragraph in `style`. */\nexport function paragraphJson(node: Node, lost: string[], style: string): string {\n const children = runItems(node, lost);\n return richText(children.length ? [{ type: \"extended-paragraph\", version: 1, format: \"\", indent: 0, direction: null, textFormat: 0, textStyle: \"\", isInlineTool: false, style: style || undefined, children: children as Json[] }] : []);\n}\n\n/** A list's rich text: an item for its words, and one for each list in it, as the builder's editor nests a list. */\nfunction listItem(node: Node, lost: string[]): Item {\n const numbered = node.props?.type === \"number\";\n const items = (node.children ?? []).filter((child): child is Node => typeof child !== \"string\");\n const entry = (children: Item[], value: number): Item => ({ type: \"extended-listitem\", version: 1, format: \"\", indent: 0, direction: null, value, children: children as Json[] });\n let value = 0;\n return {\n type: \"extended-list\",\n version: 1,\n format: \"\",\n indent: 0,\n direction: null,\n listType: numbered ? \"number\" : \"bullet\",\n tag: numbered ? \"ol\" : \"ul\",\n start: numbered && node.props?.start !== undefined ? Number(node.props.start) : 1,\n children: items.flatMap((item) => {\n if (Object.keys(item.style ?? {}).length || item.props?.dir) lost.push(\"style or direction of a list item's own\");\n const parts: Item[] = [];\n let words: Node[\"children\"] = [];\n const flush = () => {\n if (words!.length) parts.push(entry(runItems({ ...item, children: words }, lost), ++value));\n words = [];\n };\n let nested = false;\n for (const child of item.children ?? []) {\n if (typeof child !== \"string\" && child.type === \"List\") {\n flush();\n parts.push(entry([listItem(child, lost)], ++value));\n nested = true;\n } else {\n if (nested && (typeof child !== \"string\" || child.trim())) lost.push(\"words after a list in a list item, which are an item of their own\");\n words.push(child);\n }\n }\n flush();\n return parts;\n }) as Json[],\n };\n}\n\n/** A List as a Text's rich text (`textJson`). */\nexport const listJson = (node: Node, lost: string[]): string => richText([listItem(node, lost)]);\n","/**\n * A block as the builder's tool for it: its fields written exactly as the builder stores them (over the tool's\n * defaults, design.ts), what the tool has no field for as hidden properties, its place's spacing in its\n * `containerPadding` and its place's alignment in its `textAlign`.\n */\nimport { linkParts, Menu as MenuDefinition, Social as SocialDefinition, videoParts, type Json, type LinkValue, type Node, type ResolvedNode } from \"@unlayer-internal/elements-core\";\nimport { block, type Block } from \"./design\";\nimport { hiddenOf, merge } from \"./hide\";\nimport { listJson, paragraphJson, runsHtml } from \"./runs\";\nimport { intoMarkup } from \"./paint\";\nimport { withParagraphMargin } from \"./text\";\nimport { builderBorder, builderFont, builderLink, cssLineHeight, cssPx, cssSides, encode, fieldLineHeight, type Values } from \"./values\";\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\ntype TextAlign = \"left\" | \"center\" | \"right\" | \"justify\";\n\n/** What a block needs from the template it's in. */\n/** What the builder's document mode does with an HTML block. */\nexport const NOT_IN_DOCUMENTS = \"the builder's document mode keeps it but doesn't draw or export it, so what's in it isn't in the builder's PDF\";\n\nexport interface Place {\n at(path: string): ResolvedNode;\n report: string[];\n put<T extends { values: Values }>(made: T, values?: Values): T;\n sayLeftOut(tool: string, node: Node, path: string, fields: readonly string[]): void;\n locked(node: Node, path: string, why: string, around: Sides): Block;\n stack(node: Node, path: string, around: Sides): Block[];\n /** The text styles a block takes from its parents that the root's don't give it. */\n textAround(path: string): Record<string, Json>;\n}\n\nconst ZERO: Sides = { top: 0, right: 0, bottom: 0, left: 0 };\nconst add = (a: Sides, b: Partial<Sides>): Sides => ({ top: a.top + (b.top ?? 0), right: a.right + (b.right ?? 0), bottom: a.bottom + (b.bottom ?? 0), left: a.left + (b.left ?? 0) });\nconst padding = (node: { style?: Record<string, Json> }): Sides => (node.style?.padding as Sides | undefined) ?? ZERO;\nconst ALIGN: Record<string, TextAlign> = { start: \"left\", center: \"center\", end: \"right\", stretch: \"left\" };\n/** Where something of its own size sits in a stack: its alignItems, else its text's alignment. */\nconst alignIn = (stack: ResolvedNode): TextAlign => (stack.style.alignItems ? ALIGN[String(stack.style.alignItems)] : stack.text.textAlign);\nconst length = (value: Json | undefined) => (value === undefined ? undefined : typeof value === \"number\" ? cssPx(value) : String(value));\n\n/** A text block with a box of its own: its padding is inside the box, apart from its place's spacing. */\nconst TEXT_BOX = [\"backgroundColor\", \"border\", \"borderRadius\", \"width\", \"maxWidth\"];\nconst holdsImage = (node: Node): boolean => (node.children ?? []).some((child) => typeof child !== \"string\" && (child.type === \"Image\" || holdsImage(child)));\nconst boxed = (node: Node) => TEXT_BOX.some((key) => node.style?.[key] !== undefined);\n\n/** A block's text styles as the builder's fields, from its node as resolved (inherited ones too). */\nfunction textFields(own: ResolvedNode): Values {\n const text = own.text;\n return {\n fontFamily: builderFont(String(text.fontFamily)),\n fontSize: cssPx(text.fontSize),\n fontWeight: text.fontWeight,\n color: text.color,\n textAlign: text.textAlign,\n lineHeight: fieldLineHeight(text.lineHeightPx / text.fontSize),\n letterSpacing: text.letterSpacing ? cssPx(text.letterSpacing) : \"0px\",\n };\n}\n\n/** Phone text styles the builder has fields for, and the block's phone spacing. */\nfunction phoneText(node: Node, containerPadding?: Sides): Values {\n const m = node.mobile ?? {};\n const out: Values = {};\n if (typeof m.fontSize === \"number\") out.fontSize = cssPx(m.fontSize);\n if (m.lineHeight !== undefined) out.lineHeight = typeof m.lineHeight === \"number\" ? fieldLineHeight(m.lineHeight) : cssLineHeight(m.lineHeight);\n if (typeof m.letterSpacing === \"number\") out.letterSpacing = cssPx(m.letterSpacing);\n if (typeof m.textAlign === \"string\") out.textAlign = m.textAlign;\n if (containerPadding) out.containerPadding = cssSides(containerPadding);\n return Object.keys(out).length ? { _override: { mobile: out } } : {};\n}\n\n/** Inherited text styles a text tool has no field for, where they aren't Elements' own defaults. */\nfunction inheritedHidden(own: ResolvedNode): Record<string, Json> {\n return { ...(own.text.fontStyle !== \"normal\" ? { fontStyle: own.text.fontStyle } : {}), ...(own.text.textTransform !== \"none\" ? { textTransform: own.text.textTransform } : {}) };\n}\n\nconst TEXT_FIELDS = [\"fontFamily\", \"fontSize\", \"fontWeight\", \"color\", \"textAlign\", \"lineHeight\", \"letterSpacing\"].flatMap((key) => [`style.${key}`, `mobile.${key}`]);\n\n/** The tool a block is in the builder, with `around` its space in its column (its stack's gap, padding). */\nexport function blockTool(node: Node, path: string, parent: ResolvedNode, around: Sides, place: Place): Block | Block[] {\n const own = place.at(path);\n const id = meta(node.id, TOOLS[node.type]);\n const hiding = { hideOnMobile: node.hidden?.mobile || undefined, hideOnDesktop: node.hidden?.desktop || undefined };\n const lost: string[] = [];\n const said = () => {\n if (lost.length) place.report.push(`${path}: the builder's text holds no ${[...new Set(lost)].join(\", \")}: left out`);\n };\n switch (node.type) {\n case \"Heading\":\n case \"Text\":\n case \"List\": {\n if (holdsImage(node)) return place.locked(node, path, \"an Image in a run of text isn't something the builder's text holds\", around);\n const box = boxed(node);\n const containerPadding = box ? around : add(padding(node), around);\n const tool = node.type === \"Heading\" ? \"heading\" : \"paragraph\";\n place.sayLeftOut(tool, node, path, [...TEXT_FIELDS, \"style.padding\", \"mobile.padding\", \"props.dir\", \"props.level\", \"props.type\", \"props.start\", \"style.gap\", \"style.indent\"]);\n const values: Values = {\n ...textFields(own),\n containerPadding: cssSides(containerPadding),\n ...(node.type === \"Heading\" ? { headingType: `h${own.props.level ?? 1}` } : {}),\n ...(node.props?.dir ? { textDirection: node.props.dir } : {}),\n ...id,\n };\n const phonePadding = !box && node.mobile?.padding ? add(node.mobile.padding as Sides, around) : undefined;\n const extra = merge(phoneText(node, phonePadding), hiddenOf(tool, node, box ? [] : [\"style.padding\"], inheritedHidden(own)));\n if (node.type === \"List\") {\n // A list's indent and gap are no part of the builder's rich text: hidden properties.\n const space = { indent: cssPx(typeof node.style?.indent === \"number\" ? node.style.indent : 24), gap: cssPx(typeof node.style?.gap === \"number\" ? node.style.gap : 0) };\n const textJson = listJson(node, lost);\n said();\n return place.put(block(tool, hiding), merge(merge(values, extra), { ...space, textJson }));\n }\n const { style, values: rest } = intoMarkup(merge(values, extra));\n const written = tool === \"heading\" ? { text: style ? `<span style=\"display:block;${style.replace(/\"/g, \"'\")}\">${runsHtml(node, lost)}</span>` : runsHtml(node, lost) } : { textJson: paragraphJson(node, lost, style) };\n said();\n return place.put(block(tool, hiding), { ...rest, ...written });\n }\n case \"Button\": {\n const style = own.style;\n const { href, target } = linkParts(own.props.href as LinkValue);\n const color = own.text.color;\n const background = (style.backgroundColor as string | undefined) ?? \"transparent\";\n place.sayLeftOut(\"button\", node, path, [...TEXT_FIELDS.filter((p) => p !== \"style.textAlign\" && p !== \"mobile.textAlign\"), \"props.href\", \"style.backgroundColor\", \"hover.color\", \"hover.backgroundColor\", \"style.width\", \"mobile.width\", \"style.padding\", \"mobile.padding\", \"style.border\", \"style.borderRadius\"]);\n const text = runsHtml(node, lost);\n said();\n // Its colors are the button's own field (buttonColors).\n const { color: _color, ...fields } = textFields(own);\n const values: Values = {\n ...fields,\n textAlign: alignIn(parent),\n href: { name: \"web\", values: { href: href || \"#\", target: target ?? \"_self\" } },\n buttonColors: { color, backgroundColor: background, hoverColor: (own.hover?.color as string | undefined) ?? color, hoverBackgroundColor: (own.hover?.backgroundColor as string | undefined) ?? background },\n size: style.width !== undefined ? { autoWidth: false, width: length(style.width) } : { autoWidth: true, width: \"100%\" },\n padding: cssSides(padding(own)),\n border: builderBorder(style.border as never),\n borderRadius: style.borderRadius !== undefined ? encode(\"radius\", style.borderRadius) : \"0px\",\n containerPadding: cssSides(around),\n text,\n ...id,\n };\n // Its phone values: its text's, its padding and its width (its size there).\n const phoneBox: Values = { ...(node.mobile?.padding ? { padding: cssSides(node.mobile.padding as Sides) } : {}), ...(node.mobile?.width !== undefined ? { size: { autoWidth: false, width: length(node.mobile.width) } } : {}) };\n const phone = merge(phoneText({ ...node, mobile: { ...node.mobile, textAlign: undefined } as never }), Object.keys(phoneBox).length ? { _override: { mobile: phoneBox } } : {});\n // Its label's alignment, where it isn't a button's own (centered).\n const inner = own.style.textAlign !== undefined && own.style.textAlign !== \"center\" ? { buttonTextAlign: own.style.textAlign } : {};\n return place.put(block(\"button\", hiding), merge(merge(values, phone), { ...hiddenOf(\"button\", node, [\"style.textAlign\"], inheritedHidden(own)), ...inner }));\n }\n case \"Image\":\n case \"Link\": {\n // A Link holding only an Image is the builder's image with its link (`action`).\n const linked = node.type === \"Link\";\n const images = linked ? (node.children ?? []).filter((c): c is Node => typeof c !== \"string\") : [];\n if (linked && !images.some((child) => child.type === \"Image\")) {\n // A Link of words on its own: a text block holding it, placed where the Link sits.\n const holder: Node = { type: \"Text\", children: [node] };\n place.sayLeftOut(\"paragraph\", { type: \"Link\", style: { ...node.style, color: undefined, textDecoration: undefined } as never, props: {} }, path, [\"style.flex\"]);\n const textJson = paragraphJson(holder, lost, \"\");\n said();\n const hiddenHolder = { hideOnMobile: node.hidden?.mobile || undefined, hideOnDesktop: node.hidden?.desktop || undefined };\n return place.put(block(\"paragraph\", hiddenHolder), { ...textFields(parent), textAlign: alignIn(parent), textJson, containerPadding: cssSides(around) });\n }\n if (linked && (images.length !== 1 || (node.children ?? []).some((c) => typeof c === \"string\" && c.trim()))) {\n return place.locked(node, path, \"a Link around more than an Image isn't a tool of the builder's\", around);\n }\n const imageNode = linked ? images[0] : node;\n const imagePath = linked ? `${path}.children[${(node.children ?? []).indexOf(imageNode)}]` : path;\n const image = place.at(imagePath);\n if (linked) {\n place.sayLeftOut(\"image\", node, path, [\"props.href\"]);\n if (node.props?.title !== undefined || node.props?.[\"aria-label\"] !== undefined) place.report.push(`${path}: the builder's image link has no title or label: left out`);\n }\n place.sayLeftOut(\"image\", imageNode, imagePath, [\"props.src\", \"props.alt\", \"style.width\", \"mobile.width\"]);\n const src = image.props.src as string | { src: string; width?: number; height?: number };\n const parts = typeof src === \"string\" ? { src } : src;\n if (!parts.width && image.style.width === undefined) place.report.push(`${imagePath}: an image without its size (its src's width and height) takes its own size, and in the builder its column's width`);\n const action = linked ? builderLink(node.props!.href as LinkValue) : { name: \"web\", values: { href: \"\", target: \"_blank\" } };\n const values: Values = {\n src: { url: parts.src, ...(parts.width ? { width: parts.width } : {}), ...(parts.height ? { height: parts.height } : {}), ...imageWidth(image) },\n altText: String(image.props.alt ?? \"\"),\n action,\n textAlign: alignIn(parent),\n containerPadding: cssSides(around),\n ...meta(imageNode.id ?? node.id, \"image\"),\n };\n const phone = phoneImage(imageNode);\n const imageHiding = { hideOnMobile: (node.hidden?.mobile || imageNode.hidden?.mobile) || undefined, hideOnDesktop: (node.hidden?.desktop || imageNode.hidden?.desktop) || undefined };\n return place.put(block(\"image\", imageHiding), merge(merge(values, phone ? { _override: { mobile: { src: phone } } } : {}), hiddenOf(\"image\", imageNode)));\n }\n case \"Divider\": {\n const line = own.style.borderTop as Record<string, Json> | undefined;\n place.sayLeftOut(\"divider\", node, path, [\"style.borderTop\", \"style.width\", \"mobile.width\", \"style.padding\", \"mobile.padding\"]);\n const values: Values = {\n border: builderBorder({ top: (line ?? { width: 1, style: \"solid\", color: \"#bbbbbb\" }) as never }),\n width: length(own.style.width) ?? \"100%\",\n textAlign: parent.text.textAlign,\n containerPadding: cssSides(add(padding(node), around)),\n ...id,\n };\n const phone: Values = {};\n if (node.mobile?.width !== undefined) phone.width = length(node.mobile.width);\n if (node.mobile?.padding) phone.containerPadding = cssSides(add(node.mobile.padding as Sides, around));\n return place.put(block(\"divider\", hiding), merge(merge(values, Object.keys(phone).length ? { _override: { mobile: phone } } : {}), hiddenOf(\"divider\", node)));\n }\n case \"Menu\": {\n // A Menu's own style over its definition's.\n const style = { ...(MenuDefinition.defaultStyle as Record<string, Json>), ...node.style };\n const text = own.text;\n place.sayLeftOut(\"menu\", node, path, [\"props.items\", \"props.separator\", \"props.layout\", \"style.color\", \"style.separatorColor\", \"style.fontFamily\", \"style.fontSize\", \"style.fontWeight\", \"style.letterSpacing\", \"style.padding\", \"style.justifyContent\"]);\n const items = ((node.props?.items as Array<{ text: string; href: LinkValue }>) ?? []).map(({ text: words, href }, i) => ({ key: String(i + 1), text: words, link: builderLink(href) }));\n const values: Values = {\n menu: { items },\n separator: (node.props?.separator as string | undefined) ?? \"\",\n layout: (node.props?.layout as string | undefined) ?? \"horizontal\",\n linkColor: style.color,\n textColor: style.separatorColor,\n fontFamily: builderFont(String(style.fontFamily ?? text.fontFamily)),\n fontSize: cssPx(Number(style.fontSize ?? text.fontSize)),\n fontWeight: Number(style.fontWeight ?? text.fontWeight),\n letterSpacing: cssPx(Number(style.letterSpacing ?? text.letterSpacing ?? 0)),\n padding: cssSides(style.padding as Sides),\n align: ALIGN[String(style.justifyContent ?? \"center\")],\n containerPadding: cssSides(around),\n ...id,\n };\n return place.put(block(\"menu\", hiding), merge(values, hiddenOf(\"menu\", node)));\n }\n case \"Social\": {\n const style = { ...(SocialDefinition.defaultStyle as Record<string, Json>), ...node.style };\n place.sayLeftOut(\"social\", node, path, [\"props.icons\", \"props.iconType\", \"props.size\", \"style.gap\", \"style.justifyContent\"]);\n const icons = ((node.props?.icons as Array<{ name: string; href: LinkValue }>) ?? []).map(({ name, href }) => ({ name, url: linkParts(href).href }));\n if ((node.props?.icons as Array<{ href: LinkValue }> | undefined)?.some((icon) => linkParts(icon.href).target)) place.report.push(`${path}: the builder's social icons have no target: left out`);\n const values: Values = {\n icons: { iconType: (node.props?.iconType as string | undefined) ?? \"circle\", icons },\n iconSize: Number(node.props?.size ?? 32),\n spacing: Number(style.gap ?? 5),\n align: ALIGN[String(style.justifyContent ?? \"center\")],\n containerPadding: cssSides(around),\n ...id,\n };\n return place.put(block(\"social\", hiding), merge(values, hiddenOf(\"social\", node)));\n }\n case \"Video\": {\n const url = String(node.props?.src);\n const parts = videoParts(url);\n place.sayLeftOut(\"video\", node, path, [\"props.src\"]);\n const values: Values = {\n video: parts ? { type: parts.provider, videoId: parts.id, ...(parts.thumbnail ? { thumbnail: parts.thumbnail } : {}), loading: false } : { url },\n // Where a video narrower than its place sits (legacy reads it, centered by default).\n textAlign: alignIn(parent),\n containerPadding: cssSides(around),\n ...id,\n };\n return place.put(block(\"video\", hiding), merge(values, hiddenOf(\"video\", node)));\n }\n case \"Html\":\n place.sayLeftOut(\"html\", node, path, [\"props.html\"]);\n if (place.at(\"root\").type === \"Document\") place.report.push(`${path}: an Html block: ${NOT_IN_DOCUMENTS}`);\n return place.put(block(\"html\", hiding), merge({ html: inText(withParagraphMargin(String(node.props?.html ?? \"\"), \"margin-top:1em;margin-bottom:1em\"), place.textAround(path)), containerPadding: cssSides(around), ...id }, hiddenOf(\"html\", node)));\n case \"PageBreak\":\n return place.put(block(\"page_break\"));\n default:\n // A plain stack (a Column without a box of its own) is its blocks, in the same column.\n if ((node.type === \"Column\" || node.type === \"Section\") && !Object.keys(node.style ?? {}).some((key) => ![\"padding\", \"gap\", \"alignItems\", ...TEXT_STYLES].includes(key)) && !node.hidden) {\n const phone = Object.keys(node.mobile ?? {});\n if (phone.length) place.report.push(`${path}: the builder has no phone values for a plain ${node.type} (${phone.join(\", \")}): left out`);\n return place.stack(node, path, around);\n }\n return place.locked(node, path, `a ${node.type} isn't a tool of the builder's`, around);\n }\n}\n\n/** The tool each block is, for its id's class (`u_content_text`). */\n/** Markup in the text styles it takes from around it: the builder's HTML block has none of its own, and an edit there leaves them. */\nfunction inText(html: string, text: Record<string, Json>): string {\n const px = (value: Json) => (typeof value === \"number\" ? `${value}px` : String(value));\n const css = Object.entries(text).flatMap(([key, value]): string[] => {\n if (value === undefined || value === null) return [];\n if (key === \"fontSize\" || key === \"letterSpacing\") return [`${key === \"fontSize\" ? \"font-size\" : \"letter-spacing\"}:${px(value)}`];\n const property = ({ color: \"color\", fontFamily: \"font-family\", fontWeight: \"font-weight\", fontStyle: \"font-style\", lineHeight: \"line-height\", textAlign: \"text-align\", textTransform: \"text-transform\" } as Record<string, string>)[key];\n return property ? [`${property}:${String(value).replace(/\"/g, \"'\")}`] : [];\n });\n return css.length ? `<div style=\"${css.join(\";\")}\">${html}</div>` : html;\n}\n\nconst TOOLS: Record<string, string> = { Heading: \"heading\", Text: \"paragraph\", List: \"paragraph\", Button: \"button\", Image: \"image\", Link: \"image\", Divider: \"divider\", Menu: \"menu\", Social: \"social\", Video: \"video\", Html: \"html\" };\n\n/** An id the template gives a block, as the builder's (its element's id). */\nconst meta = (id: string | undefined, tool = \"html\"): Values => (id ? { _meta: { htmlID: id, htmlClassNames: `u_content_${tool}` } } : {});\n\nconst TEXT_STYLES = [\"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"lineHeight\", \"letterSpacing\", \"textAlign\", \"textTransform\"];\n\n/** An image's width as the builder's: its share of its place, or as wide as its own size allows. */\nfunction imageWidth(image: ResolvedNode): Values {\n const width = image.style.width;\n if (width === undefined) return { autoWidth: true, maxWidth: \"100%\" };\n if (typeof width === \"string\" && width.endsWith(\"%\")) return { autoWidth: false, maxWidth: width };\n const room = image.available ?? image.width ?? 0;\n const drawn = image.width ?? 0;\n return { autoWidth: false, maxWidth: room > 0 ? `${Math.round((drawn / room) * 10000) / 100}%` : \"100%\" };\n}\n\n/** An image's width on phones, as the builder's phone value: its share of its place there. */\nfunction phoneImage(node: Node): Values | undefined {\n const width = node.mobile?.width;\n if (width === undefined) return undefined;\n if (typeof width === \"string\" && width.endsWith(\"%\")) return width === \"100%\" ? { autoWidth: true, maxWidth: \"100%\" } : { autoWidth: false, maxWidth: width };\n return { autoWidth: false, maxWidth: length(width) };\n}\n","/**\n * A Row as a row of the builder's, its children as columns (their widths, and their share of its gap and side\n * padding, the columns' widths and padding; its border theirs, as the builder stretches them to its height), and a box\n * directly in the root or a Section as a row of its own column.\n */\nimport type { Json, Node, ResolvedNode } from \"@unlayer-internal/elements-core\";\nimport { block, columnWith, rowWith, type Block, type Row, type RowFields } from \"./design\";\nimport { hiddenOf, merge } from \"./hide\";\nimport { blockTool, type Place } from \"./tools\";\nimport { builderBorder, cssPx, cssSides, encode, type Values } from \"./values\";\n\nexport type Sides = { top: number; right: number; bottom: number; left: number };\ntype Child = { child: Node; path: string };\n\nexport const ZERO: Sides = { top: 0, right: 0, bottom: 0, left: 0 };\nexport const add = (a: Sides, b: Partial<Sides>): Sides => ({ top: a.top + (b.top ?? 0), right: a.right + (b.right ?? 0), bottom: a.bottom + (b.bottom ?? 0), left: a.left + (b.left ?? 0) });\nexport const padding = (node: { style?: Record<string, Json> }): Sides => (node.style?.padding as Sides | undefined) ?? ZERO;\nexport const gapOf = (node: ResolvedNode) => (typeof node.style.gap === \"number\" ? node.style.gap : 0);\n/** A box with a look of its own: a Column that can't fold into the blocks around it. */\nconst BOX = [\"backgroundColor\", \"border\", \"borderRadius\", \"width\", \"minWidth\", \"maxWidth\", \"height\", \"overflow\", \"justifyContent\"];\nexport const hasBox = (node: Node) => BOX.some((key) => node.style?.[key] !== undefined) || Boolean(node.hidden);\n/** A border of lines above and below only: what a Divider draws, in a row of its own (raise.ts), not a column's border. */\nexport const linesOf = (border: unknown): { top?: Json; bottom?: Json } | undefined => {\n const lines = border as Record<string, Json> | undefined;\n return lines && !lines.left && !lines.right && (lines.top || lines.bottom) ? { top: lines.top, bottom: lines.bottom } : undefined;\n};\n/** A builder row's hiding, from the node it's made of. */\nexport const hiding = (node: Node) => ({ hideOnMobile: node.hidden?.mobile || undefined, hideOnDesktop: node.hidden?.desktop || undefined });\n\n/** What a row needs from the template it's in (raise.tsx). */\nexport interface Writer {\n at(path: string): ResolvedNode;\n put<T extends { values: Values }>(made: T, values?: Values): T;\n sayLeftOut(tool: string, node: Node, path: string, fields: readonly string[]): void;\n place: Place;\n childrenOf(node: Node, path: string): Child[];\n stack(node: Node, path: string, own: ResolvedNode, around: Sides): Block[];\n}\n\n/** An id the template gives a row or a column, as the builder's. */\nexport const builderId = (id: string | undefined, htmlClassNames: string): Values => (id ? { _meta: { htmlID: id, htmlClassNames } } : {});\n\n/** A row of the builder's for a Row: each child a column, its width and its share of the gap its column's. */\nexport function rowOf({ at, put, sayLeftOut, place, childrenOf, stack }: Writer, node: Node, path: string, band: Values, outer: Sides, bandHidden: Values, arranged?: ResolvedNode): Row {\n const own = arranged ?? at(path);\n const gap = gapOf(own);\n const rowPad = add(padding(node), outer);\n const all = childrenOf(node, path);\n const n = all.length;\n if (!arranged && node.mobile?.border !== undefined) place.report.push(`${path}: the builder's row has no border on phones: left out`);\n if (!arranged) sayLeftOut(\"row\", node, path, [\"style.padding\", \"style.gap\", \"mobile.gap\", \"style.backgroundColor\", \"style.border\", \"mobile.border\", \"style.alignItems\", \"props.stackOnMobile\", ...TEXT_FOLDED]);\n const stacks = node.props?.stackOnMobile !== false;\n const rowBorder = (!arranged && linesOf(own.style.border) ? undefined : (own.style.border as Record<string, Json> | undefined)) ?? {};\n // A Row's border is its columns' in the builder (below), which fill the row and move with its alignItems.\n if (!arranged && Object.keys(rowBorder).length) {\n const around = Math.max(outer.left, outer.right);\n if (around) place.report.push(`${path}: the builder draws a Row's border on its columns, which fill the row: the ${around}px around the Row goes inside the line, so the line is as wide as the row`);\n if (own.style.alignItems === \"center\" || own.style.alignItems === \"end\") place.report.push(`${path}: the builder draws a Row's border on its columns, which alignItems moves: each part of the line is at its column's height`);\n }\n const columns = all.map(({ child, path: childPath }, i) => {\n // A child hidden on desktop takes no room there: the least share a column can have in the builder.\n const width = child.hidden?.desktop ? 0 : (at(childPath)?.width ?? 0);\n // The Row's top and bottom padding is the builder's row's; its sides and its gap, the columns' own.\n const halves: Sides = { top: 0, bottom: 0, left: i > 0 ? gap / 2 : rowPad.left, right: i < n - 1 ? gap / 2 : rowPad.right };\n const share = width + halves.left + halves.right;\n const isColumn = child.type === \"Column\";\n const style = child.style ?? {};\n // The Row's border is its columns' in the builder, which stretches them to the row's height: top and bottom on\n // each, its sides on the first and last. The column's own over it.\n const fromRow = { top: rowBorder.top, bottom: rowBorder.bottom, ...(i === 0 ? { left: rowBorder.left } : {}), ...(i === n - 1 ? { right: rowBorder.right } : {}) };\n const lines = Object.fromEntries(Object.entries({ ...fromRow, ...((isColumn ? style.border : undefined) as object) }).filter(([, line]) => line !== undefined));\n const columnPadding = isColumn ? add(padding(child), halves) : halves;\n // Where the columns stack on phones, each is as wide as the row (its sides only the Row's), the phone gap above\n // all but the first.\n const phoneGap = typeof own.mobile?.gap === \"number\" ? own.mobile.gap : gap;\n const ownPhone = isColumn ? ((child.mobile?.padding as Sides | undefined) ?? padding(child)) : ZERO;\n const phonePadding = stacks && n > 1 ? add(ownPhone, { left: rowPad.left, right: rowPad.right, top: i > 0 ? phoneGap : 0 }) : isColumn ? (child.mobile?.padding as Sides | undefined) : undefined;\n if (isColumn && !arranged) sayLeftOut(\"column\", child, childPath, [\"style.padding\", \"mobile.padding\", \"style.backgroundColor\", \"style.border\", \"mobile.border\", \"style.borderRadius\", \"style.width\", \"style.flex\", \"style.gap\", \"style.alignItems\", ...TEXT_FOLDED]);\n const columnOwn = isColumn ? at(childPath) : own;\n const contents = isColumn ? stack(withoutPadding(child), childPath, columnOwn, ZERO) : ([] as Block[]).concat(blockTool(child, childPath, own, ZERO, place));\n const element = columnWith(\n {\n padding: cssSides(columnPadding),\n backgroundColor: isColumn ? (style.backgroundColor as string | undefined) : undefined,\n border: builderBorder(lines as never),\n borderRadius: isColumn && style.borderRadius !== undefined ? (encode(\"radius\", style.borderRadius) as string) : undefined,\n },\n contents\n );\n // Its phone padding (where the columns stack, the Row's sides and gap in it) and border, as the builder's phone values.\n const phone = { ...(phonePadding && cssSides(phonePadding) !== cssSides(columnPadding) ? { padding: cssSides(phonePadding) } : {}), ...(isColumn && child.mobile?.border ? { border: builderBorder(child.mobile.border as never) } : {}) };\n return { share, element: put(element, merge(merge(isColumn ? hiddenOf(\"column\", child) : {}, isColumn ? builderId(child.id, \"u_column\") : {}), Object.keys(phone).length ? { _override: { mobile: phone } } : {})) };\n });\n const alignItems = own.style.alignItems as string | undefined;\n // The band's (a Section's background and hiding) over the Row's own.\n const fields: RowFields = {\n padding: `${cssPx(rowPad.top)} 0px ${cssPx(rowPad.bottom)} 0px`,\n noStackMobile: node.props?.stackOnMobile === false || undefined,\n columnsBackgroundColor: own.style.backgroundColor as string | undefined,\n ...hiding(node),\n ...band,\n };\n const made = rowWith(\n columns.map((c) => Math.max(1, Math.round(c.share))),\n fields,\n columns.map((c) => c.element)\n );\n const values: Values = { ...(alignItems && alignItems !== \"start\" ? { alignItems: ALIGN_ITEMS[alignItems] } : {}), ...builderId(node.id, \"u_row\") };\n return put(made, merge(merge(values, arranged ? {} : hiddenOf(\"row\", node, [\"style.border\"])), bandHidden));\n}\n\n/** A column that only keeps space: an invisible line in it, as the builder asks for something to be put in an empty one. */\nconst spacer = ({ put }: Writer) =>\n columnWith({ padding: \"0px\" }, [put(block(\"divider\"), { border: builderBorder({ top: { width: 1, style: \"solid\", color: \"transparent\" } }), width: \"100%\", textAlign: \"center\", containerPadding: \"0px\" })]);\n\n/**\n * A row of its own for a box directly in the root or a Section: one column, the box's. A builder row has no room at its\n * sides, so a painted box kept in from them (`inset`) has a column of space either side, which stay beside it on phones.\n */\nexport function boxRowOf(writer: Writer, node: Node, path: string, band: Values, outer: Sides, bandHidden: Values, inset: { left: number; right: number } = { left: 0, right: 0 }): Row {\n const { at, put, sayLeftOut, stack } = writer;\n const own = at(path);\n sayLeftOut(\"column\", node, path, [\"style.padding\", \"mobile.padding\", \"style.backgroundColor\", \"style.border\", \"mobile.border\", \"style.borderRadius\", \"style.gap\", \"style.alignItems\", ...TEXT_FOLDED]);\n const style = node.style ?? {};\n const column = columnWith(\n {\n padding: cssSides(padding(node)),\n backgroundColor: style.backgroundColor as string | undefined,\n border: builderBorder(style.border as never),\n borderRadius: style.borderRadius !== undefined ? (encode(\"radius\", style.borderRadius) as string) : undefined,\n },\n stack(withoutPadding(node), path, own, ZERO)\n );\n const { hidden: _, ...visible } = node;\n const box = put(column, merge(merge(hiddenOf(\"column\", visible as Node), builderId(node.id, \"u_column\")), phoneBox(node)));\n const fields = { padding: cssSides(outer), ...hiding(node), ...band };\n const beside = (share: number) => (share ? [{ share, element: spacer(writer) }] : []);\n const parts = [...beside(inset.left), { share: own.width ?? 0, element: box }, ...beside(inset.right)];\n return put(parts.length > 1 ? rowWith(parts.map((part) => Math.max(1, Math.round(part.share))), { ...fields, noStackMobile: true }, parts.map((part) => part.element)) : rowWith([1], fields, [box]), bandHidden);\n}\n\n/** Text styles a container passes down, which its blocks take as their own in the builder. */\nexport const TEXT_FOLDED = [\"color\", \"fontFamily\", \"fontSize\", \"fontWeight\", \"fontStyle\", \"lineHeight\", \"letterSpacing\", \"textAlign\", \"textTransform\"].map((key) => `style.${key}`);\n\n/** Elements' alignItems as the builder row's. */\nconst ALIGN_ITEMS: Record<string, string> = { start: \"flex-start\", center: \"center\", end: \"flex-end\", stretch: \"stretch\" };\n\n/** A box's phone padding and border, as its column's phone values. */\nfunction phoneBox(node: Node): Values {\n const phone = { ...(node.mobile?.padding ? { padding: cssSides(node.mobile.padding as Sides) } : {}), ...(node.mobile?.border ? { border: builderBorder(node.mobile.border as never) } : {}) };\n return Object.keys(phone).length ? { _override: { mobile: phone } } : {};\n}\n\n/** A Column's node without its padding (its column's, in the builder). */\nfunction withoutPadding(node: Node): Node {\n const { padding: _padding, ...style } = node.style ?? {};\n return { ...node, style };\n}\n","/**\n * What no tool shows (a Layer, an Svg, a Table, a box in a column, a template's own component): the new engine's own\n * markup for it, in an HTML block of the builder's. It can be moved, duplicated or deleted there, not edited; it\n * comes back as an `Html` block.\n */\nimport { renderTemplate, type Json, type Node } from \"@unlayer-internal/elements-core\";\nimport { block, type Block } from \"./design\";\nimport { withParagraphMargin } from \"./text\";\nimport { cssSides } from \"./values\";\n\ntype Sides = { top: number; right: number; bottom: number; left: number };\n\n/**\n * An HTML block of the node's own markup, drawn at its width, with `around` its place's spacing and `inherited` the\n * text styles its ancestors give it (beyond the root's).\n */\nexport function lockedHtml(node: Node, width: number, root: Node, components: unknown, around: Sides, inherited: Record<string, Json> = {}): Block {\n return { ...block(\"html\"), values: { html: renderSubtree(node, width, root, components, inherited), containerPadding: cssSides(around) } };\n}\n\n/** A node drawn on its own by the new engine, at its width, in the root's output: its HTML, with its stylesheet. */\nfunction renderSubtree(node: Node, width: number, root: Node, components: unknown, inherited: Record<string, Json>): string {\n // Drawn at its width in a page at least as wide as a root can be (a Document's block as a page's), the root's text\n // styles around it, and the text styles its ancestors give it in a Column around it.\n const drawn = Math.round(width);\n // A Document's page numbers as the builder's tokens, which a Page can hold.\n const tokens = (n: Node): Node =>\n n.type === \"PageNumber\" ? { type: \"MergeTag\", props: { name: n.props?.total ? \"page_count\" : \"page_number\" } } : n.children ? { ...n, children: n.children.map((child) => (typeof child === \"string\" ? child : tokens(child))) } : n;\n const own = tokens(node);\n const around = { ...inherited, ...(drawn < 200 ? { width: drawn } : {}) };\n // A Page's own phone width, so the block's phone styles switch where the page's do.\n const breakpoints: Record<string, Json> = root.type === \"Page\" && root.props?.breakpoints ? { breakpoints: root.props.breakpoints } : {};\n const page: Node = { type: root.type === \"Email\" ? \"Email\" : \"Page\", props: { width: Math.max(200, drawn), ...breakpoints }, style: root.style, children: [Object.keys(around).length ? { type: \"Column\", style: around, children: [own] } : own] };\n const { head, body } = renderTemplate({ root: page }, { components: components as never });\n const style = /<style>[\\s\\S]*?<\\/style>/.exec(head)?.[0] ?? \"\";\n // A page's <main> is centered by its margins: in a flex box, which the builder may draw a block in, those shrink it to its words. It fills its block.\n const filled = body.replace(/^<main style=\"/, '<main style=\"width:100%;');\n return withParagraphMargin(style + filled, \"margin-top:1em;margin-bottom:1em\");\n}\n","/**\n * A template in the new components as the builder's rows, columns and blocks (written as its design JSON by\n * design.ts), the codemod's mapping the other way. Each component becomes the tool the builder edits it with, with the\n * values that draw it as the new engine does: a Section a\n * full-width row, a Row a row of its children as columns (their shares and gap as the columns' widths and padding), a\n * box directly in the root or a Section a row of its own, content directly in the root a one-column row, a text block\n * its HTML. What a tool has no field for is a hidden property of it (hide.ts); what no tool shows (a Layer, an Svg, a\n * Table, a box nested in a column, a template's own component) is an HTML block of the new engine's own markup, and said.\n */\nimport { prepareTemplate, type Json, type Node, type ResolvedNode } from \"@unlayer-internal/elements-core\";\nimport type React from \"react\";\nimport { collectTemplate } from \"../primitives/collect\";\nimport { add, boxRowOf, builderId, gapOf, hasBox, hiding, linesOf, padding, rowOf, TEXT_FOLDED, ZERO, type Sides, type Writer } from \"./columns\";\nimport { block, columnWith, rowWith, type Block, type Body, type BodyFields, type Row } from \"./design\";\nimport { hiddenOf, leftOut, merge } from \"./hide\";\nimport { lockedHtml } from \"./locked\";\nimport { blockTool, NOT_IN_DOCUMENTS, type Place } from \"./tools\";\nimport { builderBorder, builderFont, cssPx, cssSides, type Values } from \"./values\";\n\nexport interface Raised {\n /** The template as the builder's parts, each with its hidden properties in its values. */\n body: Body | null;\n /** What the builder can't hold as it is: one line each, with where. */\n report: string[];\n}\n\ntype Child = { child: Node; path: string };\n\nconst holdsPageNumber = (node: Node): boolean => node.type === \"PageNumber\" || (node.children ?? []).some((child) => typeof child !== \"string\" && holdsPageNumber(child));\n\n/** What shows a box's edges: where these are set, space around it can't move inside it. */\nconst PAINT = [\"backgroundColor\", \"border\", \"borderRadius\"];\n\n/** What a browser gives text where nothing says otherwise. */\nconst BROWSER_TEXT: Record<string, unknown> = { fontSize: 16, fontStyle: \"normal\", letterSpacing: 0, textAlign: \"left\", textTransform: \"none\" };\n\nexport function raise(element: React.ReactElement): Raised {\n const report: string[] = [];\n const { document, diagnostics, components } = collectTemplate(element);\n if (!document || diagnostics.some((d) => d.severity === \"error\")) return { body: null, report: diagnostics.filter((d) => d.severity === \"error\").map((d) => `${d.path}: ${d.message}`) };\n const root = document.root;\n if (root.type !== \"Email\" && root.type !== \"Page\" && root.type !== \"Document\") {\n return { body: null, report: [`root: the builder edits an Email, a Page or a Document, not a ${root.type}`] };\n }\n if (holdsPageNumber(root)) report.push(\"root: a PageNumber goes to the builder as its token ({{page_number}}), which the editor's PDF prints as it is: the builder has no page numbers yet\");\n const prepared = prepareTemplate(document, { components });\n if (!prepared.resolved) return { body: null, report: prepared.diagnostics.filter((d) => d.severity === \"error\").map((d) => `${d.path}: ${d.message}`) };\n const resolvedRoot = prepared.resolved.root;\n const resolved = new Map<string, ResolvedNode>();\n const index = (node: ResolvedNode) => {\n resolved.set(node.path, node);\n for (const child of node.children) if (typeof child !== \"string\") index(child);\n };\n index(resolvedRoot);\n const at = (path: string) => resolved.get(path)!;\n\n /** A part, with its hidden properties. */\n const put = <T extends { values: Values }>(made: T, values: Values = {}): T => {\n made.values = merge(made.values, values);\n return made;\n };\n const sayLeftOut = (tool: string, node: Node, path: string, fields: readonly string[]) => {\n const left = leftOut(tool, node, fields);\n if (left.length) report.push(`${path}: the builder's ${tool} has no place for ${left.join(\", \")}: left out`);\n };\n /** A Row with a child of its own size, whose width the layout doesn't know. */\n const unsized = (node: Node, path: string) => childrenOf(node, path).some(({ child, path: childPath }) => !child.hidden?.desktop && resolved.get(childPath)?.width === null);\n const childrenOf = (node: Node, path: string): Child[] =>\n (node.children ?? []).map((child, i) => ({ child, path: `${path}.children[${i}]` })).filter((c): c is Child => typeof c.child !== \"string\");\n\n /** The text styles a node inherits from its ancestors (its parent's, as resolved) that the root's don't give it. */\n const inheritedText = (path: string): Record<string, Json> => {\n const parent = resolved.get(path.replace(/\\.children\\[\\d+\\]$/, \"\"));\n if (!parent) return {};\n const { lineHeightPx: _px, ...text } = parent.text;\n return Object.fromEntries(Object.entries(text).filter(([key, value]) => JSON.stringify(value) !== JSON.stringify(resolvedRoot.text[key as keyof typeof text]))) as Record<string, Json>;\n };\n /** The text styles markup takes from around it that it wouldn't get in the builder: the body holds the root's color, font and weight, and nothing else takes a browser's defaults' place. */\n const textAround = (path: string): Record<string, Json> => {\n const parent = resolved.get(path.replace(/\\.children\\[\\d+\\]$/, \"\"));\n if (!parent) return {};\n const { lineHeightPx: _px, ...text } = parent.text;\n const given: Record<string, unknown> = { ...BROWSER_TEXT, color: resolvedRoot.text.color, fontFamily: resolvedRoot.text.fontFamily, fontWeight: resolvedRoot.text.fontWeight };\n return Object.fromEntries(Object.entries(text).filter(([key, value]) => JSON.stringify(value) !== JSON.stringify(given[key]))) as Record<string, Json>;\n };\n const place: Place = {\n at,\n report,\n put,\n sayLeftOut,\n locked: (node, path, why, around) => {\n report.push(`${path}: ${why}: ${root.type === \"Document\" ? `it's an HTML block of its own markup in the design: ${NOT_IN_DOCUMENTS}` : \"it's an HTML block of its own markup in the builder (it can be moved, not edited)\"}`);\n const own = at(path);\n return put(lockedHtml(node, own.width ?? own.available ?? Number(resolvedRoot.width), root, components, around, inheritedText(path)));\n },\n stack: (node, path, around) => stack(node, path, at(path), around),\n textAround,\n };\n\n /** A stack's blocks, its gap above each but the first, its padding around them. */\n const stack = (node: Node, path: string, own: ResolvedNode, around: Sides): Block[] => {\n const gap = gapOf(own);\n const pad = add(padding(node), around);\n // An empty stack in it (a plain Column with nothing in it) is only space: it goes to the block after it.\n const empty = (child: Node) => child.type === \"Column\" && !hasBox(child) && !(child.children ?? []).some((c) => typeof c !== \"string\");\n const all = childrenOf(node, path);\n const children = all.filter(({ child }) => !empty(child));\n let carry = 0;\n const carried: number[] = [];\n for (const { child } of all) {\n if (empty(child)) carry += padding(child).top + padding(child).bottom;\n else {\n carried.push(carry);\n carry = 0;\n }\n }\n return children.flatMap(({ child, path: childPath }, i) => {\n const last = i === children.length - 1;\n const space: Sides = { top: (i === 0 ? pad.top : gap) + carried[i], right: pad.right, bottom: last ? pad.bottom + carry : 0, left: pad.left };\n return ([] as Block[]).concat(blockTool(child, childPath, own, space, place));\n });\n };\n\n const writer: Writer = { at, put, sayLeftOut, place, childrenOf, stack };\n const row = (node: Node, path: string, band: Values, outer: Sides, bandHidden: Values, arranged?: ResolvedNode) => rowOf(writer, node, path, band, outer, bandHidden, arranged);\n const boxRow = (node: Node, path: string, band: Values, outer: Sides, bandHidden: Values, inset?: { left: number; right: number }) => boxRowOf(writer, node, path, band, outer, bandHidden, inset);\n\n /** A one-column row of the builder's holding blocks (content directly in the root, or a Section's). */\n const oneColumn = (blocks: Child[], stackNode: ResolvedNode, band: Values, pad: Sides, bandHidden: Values, sectionHiding: Values = {}): Row => {\n const gap = gapOf(stackNode);\n const contents = blocks.flatMap(({ child, path }, i) => {\n const space: Sides = { top: i === 0 ? pad.top : gap, right: pad.right, bottom: i === blocks.length - 1 ? pad.bottom : 0, left: pad.left };\n return ([] as Block[]).concat(child.type === \"Row\" ? place.locked(child, path, \"a Row whose children take their own width (a line of links)\", space) : blockTool(child, path, stackNode, space, place));\n });\n // A run with nothing in it but space (an empty Section): its space as the row's padding.\n const empty = !contents.length;\n return put(rowWith([1], { padding: empty ? cssSides({ ...pad, left: 0, right: 0 }) : \"0px\", ...sectionHiding, ...band }, [columnWith({ padding: \"0px\" }, contents)]), bandHidden);\n };\n\n /** The root's children, or a Section's: Rows, Grids and boxes as rows of their own, runs of blocks as one-column rows. */\n const rows = (children: Child[], stackNode: ResolvedNode, band: Values, pad: Sides, section?: Node): Row[] => {\n const out: Row[] = [];\n let run: Child[] = [];\n const gap = gapOf(stackNode);\n // A Section's border, as the part of it around each of its rows; its hiding, each row's.\n const border = (section?.style?.border ?? {}) as Record<string, Json>;\n const count = Math.max(1, countRows(children));\n // Only where it's hidden: a Section shown everywhere leaves its rows' own hiding as it is.\n const sectionHiding = section ? Object.fromEntries(Object.entries(hiding(section)).filter(([, hidden]) => hidden)) : {};\n const bandHidden = (r: number): Values => {\n const lines = { left: border.left, right: border.right, ...(r === 0 ? { top: border.top } : {}), ...(r === count - 1 ? { bottom: border.bottom } : {}) };\n const own = Object.fromEntries(Object.entries(lines).filter(([, line]) => line !== undefined));\n return Object.keys(own).length ? { sectionBorder: builderBorder(own as never) } : {};\n };\n const flush = (last: boolean) => {\n if (!run.length) return;\n const top = out.length === 0 ? pad.top : gap;\n out.push(oneColumn(run, stackNode, band, { ...pad, top, bottom: last ? pad.bottom : 0 }, bandHidden(out.length), sectionHiding));\n run = [];\n };\n /** A line above or below something, a Divider in a row of its own: a column's border fills the row, and moves with its alignItems. */\n const lineRow = (line: Json | undefined, space: Sides, node: Node) => {\n if (!line) return;\n const divider = put(block(\"divider\"), { border: builderBorder({ top: line as never }), width: \"100%\", textAlign: \"center\", containerPadding: cssSides(space) });\n out.push(put(rowWith([1], { padding: \"0px\", ...hiding(node), ...band, ...sectionHiding }, [columnWith({ padding: \"0px\" }, [divider])]), bandHidden(out.length)));\n };\n children.forEach(({ child, path }, i) => {\n const last = i === children.length - 1;\n const outer = (): Sides => ({ ...pad, top: out.length === 0 ? pad.top : gap, bottom: last ? pad.bottom : 0 });\n const lines = child.type === \"Row\" || lineBox(child) ? linesOf(at(path).style.border) : undefined;\n if (lines && !(child.type === \"Row\" && unsized(child, path))) {\n flush(false);\n const o = outer();\n const within = { ...o, top: lines.top ? 0 : o.top, bottom: lines.bottom ? 0 : o.bottom };\n lineRow(lines.top, { ...o, bottom: 0 }, child);\n if (child.type === \"Row\") out.push(row(child, path, { ...band, ...sectionHiding }, within, bandHidden(out.length)));\n else {\n const { border: _border, ...style } = child.style ?? {};\n out.push(oneColumn([{ child: { ...child, style }, path }], stackNode, band, within, bandHidden(out.length), sectionHiding));\n }\n lineRow(lines.bottom, { ...o, top: 0 }, child);\n } else if (child.type === \"Column\" && !hasBox(child) && hasLayout(child)) {\n // A plain stack holding Rows: its children are rows of their own, its padding around them.\n flush(false);\n const o = outer();\n out.push(...rows(childrenOf(child, path), at(path), band, add(o, padding(child)), section));\n } else if (child.type === \"Row\" && unsized(child, path)) {\n // Children that take their own width (a line of links) have no share a builder column can hold.\n run.push({ child, path });\n } else if (child.type === \"Row\") {\n flush(false);\n out.push(row(child, path, { ...band, ...sectionHiding }, outer(), bandHidden(out.length)));\n } else if (child.type === \"Grid\") {\n // A Grid is the Column of Rows it's laid out as: each of its Rows a row of the builder's, each cell a column.\n flush(false);\n const arranged = at(path);\n const gridGap = gapOf(arranged);\n sayLeftOut(\"row\", child, path, [\"props.columns\", \"props.stackOnMobile\", \"style.gap\", \"style.rowGap\", \"style.alignItems\", ...TEXT_FOLDED]);\n // Each cell holds the Grid's child there, as the template has it.\n const items = (child.children ?? []).filter((item): item is Node => typeof item !== \"string\");\n let next = 0;\n arranged.children.forEach((gridRow, r) => {\n if (typeof gridRow === \"string\") return;\n const shape = nodeOf(gridRow);\n const cells = (shape.children ?? []).map((cell) => (typeof cell !== \"string\" && cell.children?.length ? { ...cell, children: [items[next++]] } : cell));\n const space = { ...pad, top: r === 0 ? (out.length === 0 ? pad.top : gap) : gridGap, bottom: last && r === arranged.children.length - 1 ? pad.bottom : 0 };\n out.push(row({ ...shape, children: cells }, gridRow.path, { ...band, ...sectionHiding }, space, bandHidden(out.length), gridRow));\n });\n } else if (child.type === \"Column\" && (hasBox(child) || !childrenOf(child, path).length) && !hasLayout(child)) {\n flush(false);\n const o = outer();\n // A builder row has no room at its sides: the space around a box goes into its column, where nothing shows it\n // isn't around the box. A box that's painted fills its column, so that space is columns of its own beside it.\n const painted = PAINT.some((key) => child.style?.[key] !== undefined || child.mobile?.[key] !== undefined);\n const box = painted ? child : { ...child, style: { ...child.style, padding: add(padding(child), { left: o.left, right: o.right }) } };\n out.push(boxRow(box, path, { ...band, ...sectionHiding }, { top: o.top, right: 0, bottom: o.bottom, left: 0 }, bandHidden(out.length), painted ? { left: o.left, right: o.right } : undefined));\n } else run.push({ child, path });\n });\n flush(true);\n return out;\n };\n\n const top = childrenOf(root, \"root\");\n const body: Row[] = [];\n const headers: Row[] = [];\n const footers: Row[] = [];\n let loose: Child[] = [];\n const flushLoose = () => {\n if (loose.length) body.push(...rows(loose, resolvedRoot, {}, ZERO));\n loose = [];\n };\n /** A page break of the builder's, in a row of its own. */\n const pageBreak = () => rowWith([1], { padding: \"0px\" }, [columnWith({ padding: \"0px\" }, [block(\"page_break\")])]);\n // In a Document, a page break goes where a page starts or ends (the builder breaks at each).\n let last: \"page\" | \"break\" | \"other\" | null = null;\n const breakBefore = () => {\n if (last && last !== \"break\") body.push(pageBreak());\n };\n for (const [i, { child, path }] of top.entries()) {\n if (child.type === \"Section\") {\n flushLoose();\n if (last === \"page\") breakBefore();\n last = \"other\";\n const own = at(path);\n sayLeftOut(\"row\", child, path, [\"style.backgroundColor\", \"style.padding\", \"style.border\", \"style.gap\", \"style.alignItems\", ...TEXT_FOLDED]);\n const band = own.style.backgroundColor !== undefined ? { backgroundColor: own.style.backgroundColor as string } : {};\n if (child.mobile?.border !== undefined) report.push(`${path}: the builder's row has no border on phones: left out`);\n const sectionRows = rows(childrenOf(child, path), own, band, padding(child), child);\n if (child.id && sectionRows[0]) put(sectionRows[0], builderId(child.id, \"u_row\"));\n // An empty Section (a band of space) is a row with nothing in it.\n body.push(...(sectionRows.length ? sectionRows : [oneColumn([], own, band, padding(child), {}, hiding(child))]));\n } else if (child.type === \"DocumentPage\") {\n flushLoose();\n breakBefore();\n last = \"page\";\n sayLeftOut(\"row\", child, path, [\"style.gap\", \"style.alignItems\", ...TEXT_FOLDED]);\n const pageRows = rows(childrenOf(child, path), at(path), {}, ZERO);\n body.push(...(pageRows.length ? pageRows : [oneColumn([], at(path), {}, ZERO, {})]));\n } else if (child.type === \"PageBreak\") {\n flushLoose();\n const content = top.slice(i + 1).some((c) => ![\"PageHeader\", \"PageFooter\", \"PageBreak\"].includes(c.child.type));\n if (last === null || !content) report.push(`${path}: a page break with nothing before or after it is no page in Elements, and a blank page in the builder`);\n body.push(pageBreak());\n last = \"break\";\n } else if (child.type === \"PageHeader\" || child.type === \"PageFooter\") {\n sayLeftOut(\"row\", child, path, [\"style.gap\", \"style.alignItems\", \"style.padding\", \"style.backgroundColor\", \"style.border\", ...TEXT_FOLDED]);\n const bandOf = at(path).style.backgroundColor !== undefined ? { backgroundColor: at(path).style.backgroundColor as string } : {};\n (child.type === \"PageHeader\" ? headers : footers).push(...rows(childrenOf(child, path), at(path), bandOf, padding(child), child));\n } else {\n if (last === \"page\") breakBefore();\n last = \"other\";\n loose.push({ child, path });\n }\n }\n flushLoose();\n\n const style = resolvedRoot.style;\n const text = resolvedRoot.text;\n sayLeftOut(\"body\", root, \"root\", [\n \"props.width\", \"props.previewText\", \"props.dir\", \"props.title\", \"props.size\", \"props.orientation\",\n \"style.backgroundColor\", \"style.color\", \"style.fontFamily\", \"style.fontWeight\", \"style.gap\", \"style.alignItems\", ...TEXT_FOLDED,\n ]);\n const common: BodyFields = {\n contentWidth: cssPx(Number(resolvedRoot.width)),\n textColor: text.color,\n fontFamily: builderFont(String(text.fontFamily)),\n ...(text.fontWeight !== 400 ? { fontWeight: text.fontWeight } : {}),\n ...(root.props?.dir ? { textDirection: root.props.dir as string } : {}),\n };\n // Its title, the builder's accessibility title (which its export writes as the page's <title>).\n const title = typeof root.props?.title === \"string\" && root.props.title ? { accessibilityTitle: root.props.title } : {};\n // A Document's margin: the builder has one for every side (design.ts), the template's sides kept where they differ.\n const margin = root.type === \"Document\" ? { margin: cssSides((root.props?.margin as Sides | undefined) ?? { top: 48, right: 48, bottom: 48, left: 48 }) } : {};\n // No background is none (the builder's own default is a grey).\n const bodyHidden = { ...hiddenOf(\"body\", root, [\"props.margin\"]), ...margin, ...title, backgroundColor: (style.backgroundColor as string | undefined) ?? \"\" };\n if (root.type === \"Document\") {\n const paper = { documentSize: (root.props?.size as string | undefined) ?? \"A4\", documentOrientation: (root.props?.orientation as string | undefined) ?? \"portrait\" };\n return { body: { root: root.type, fields: { ...common, ...paper }, values: bodyHidden, rows: body, headers, footers }, report };\n }\n const previewText = root.type === \"Email\" && root.props?.previewText ? { previewText: String(root.props.previewText) } : {};\n return { body: { root: root.type, fields: common, ...previewText, values: bodyHidden, rows: body }, report };\n}\n\n/** How many rows of the builder's children make (a Grid's rows each, runs of blocks one). */\nfunction countRows(children: Child[]): number {\n let count = 0;\n let run = false;\n for (const { child } of children) {\n // A line above or below it is a row of its own.\n const lines = child.type === \"Row\" || lineBox(child) ? linesOf(child.style?.border) : undefined;\n count += (lines?.top ? 1 : 0) + (lines?.bottom ? 1 : 0);\n if (lineBox(child) && lines) {\n count++;\n run = false;\n } else if (child.type === \"Column\" && !hasBox(child) && hasLayout(child)) {\n count += countRows((child.children ?? []).filter((c): c is Node => typeof c !== \"string\").map((c) => ({ child: c, path: \"\" })));\n run = false;\n } else if (child.type === \"Row\" || (child.type === \"Column\" && (hasBox(child) || !(child.children ?? []).some((c) => typeof c !== \"string\")) && !hasLayout(child))) {\n count++;\n run = false;\n } else if (child.type === \"Grid\") {\n count += Math.ceil((child.children ?? []).filter((c) => typeof c !== \"string\").length / Math.max(1, Number(child.props?.columns ?? 2)));\n run = false;\n } else if (!run) {\n count++;\n run = true;\n }\n }\n return count;\n}\n\n/** A Column whose only look is lines above or below it, around blocks a builder column can hold. */\nconst lineBox = (node: Node): boolean => {\n if (node.type !== \"Column\" || hasLayout(node) || !linesOf(node.style?.border)) return false;\n const { border: _border, ...style } = node.style ?? {};\n return !hasBox({ ...node, style });\n};\n\n/** Whether a box holds a layout a builder column can't (a Row, a Grid): it's locked instead. */\nconst hasLayout = (node: Node): boolean => (node.children ?? []).some((child) => typeof child !== \"string\" && (child.type === \"Row\" || child.type === \"Grid\" || child.type === \"Layer\" || (child.type === \"Column\" && hasLayout(child))));\n\n/** A resolved node as a template node (a Grid's arranged Rows, which the template doesn't have). */\nexport function nodeOf(node: ResolvedNode): Node {\n return {\n type: node.type,\n ...(node.id ? { id: node.id } : {}),\n props: node.props,\n style: node.style,\n ...(node.hidden ? { hidden: node.hidden } : {}),\n children: node.children.map((child) => (typeof child === \"string\" ? child : nodeOf(child))),\n };\n}\n","/**\n * The writing half of toDesign(): a template as the builder's rows, columns and blocks (raise.ts), each with its exact\n * values and hidden properties, written as the builder's design JSON (design.ts).\n */\nimport type React from \"react\";\nimport { writeParts, type Design } from \"./design\";\nimport { withFontStylesheets } from \"./fonts\";\nimport { raise } from \"./raise\";\n\nexport type { Design };\n\nexport interface DesignResult {\n /** The builder's design JSON, for loadDesign(). */\n design: Design;\n /** What the builder can't hold as it is (a block of HTML, a style left out): one line each. */\n report: string[];\n}\n\nexport function writeDesign(element: React.ReactElement): DesignResult {\n const { body, report } = raise(element);\n if (!body) throw new Error(`[Elements] This template can't go to the builder:\\n${report.join(\"\\n\")}`);\n return { design: withFontStylesheets(writeParts(body)), report };\n}\n","/**\n * The builder adapter: a template in the new components as the Unlayer builder's design JSON, and\n * a design (edited in the builder or not) back as a template. The design holds no Elements data: a style or prop a\n * tool has no field for is a hidden property of that tool (manifest.ts), kept in the design with no editor yet. What\n * the builder can't arrange comes back as the builder holds it: the same look, flatter.\n */\nimport type React from \"react\";\nimport { printTemplate, toElement } from \"./print\";\nimport { readDesign, type DisplayMode } from \"./read\";\nimport { checkTemplate } from \"./check\";\nimport { uniqueIds } from \"./ids\";\nimport { writeDesign, type Design, type DesignResult } from \"./write\";\n\nexport type { Design, DesignResult, DisplayMode };\n\n/** A template in the new components (an `<Email>`, a `<Page>` or a `<Document>`) as the builder's design JSON. */\nexport function toDesign(element: React.ReactElement): DesignResult {\n return writeDesign(element);\n}\n\nexport interface TemplateResult {\n /** The template, to render. */\n element: React.ReactElement;\n /** The template as JSX source in the new components. */\n code: string;\n /** What of the design the template can't hold, and what was left out: one line each. */\n report: string[];\n}\n\nexport interface FromDesignOptions {\n /**\n * The builder's display mode the design was made in: its root. \"email\" is an Email, \"web\" a Page, \"document\" a\n * Document. Without one, a design with a header, a footer or a page break is a Document, any other an Email.\n */\n displayMode?: DisplayMode;\n /** The name of the component in `code`. */\n name?: string;\n /**\n * Your sanitizer for a design's markup, as today's exporters take it in their config: every builder `html` block's\n * markup, and every text's (before it's read, as theirs is), goes through it. Without one, a design's markup is\n * kept as it is: give one where a design can hold untrusted content.\n */\n toSafeHtml?: (html: string) => string;\n}\n\n/** The builder's design JSON (made by toDesign() or in the builder) as a template in the new components. */\nexport function fromDesign(design: unknown, options: FromDesignOptions = {}): TemplateResult {\n const report: string[] = [];\n const root = checkTemplate(uniqueIds(readDesign(design, options.displayMode, report, options.toSafeHtml)), report);\n const code = printTemplate(root, options.name, report);\n return { element: toElement(root), code, report };\n}\n"]}
|