@hyper-elements/react 0.0.1 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/GUIDE.md +176 -0
- package/LICENSE +21 -0
- package/README.md +369 -2
- package/REFERENCE.md +949 -0
- package/dist/builder.cjs +7956 -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 +7929 -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/pdf.cjs +1211 -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 +1209 -0
- package/dist/pdf.js.map +1 -0
- package/dist/primitives.cjs +4954 -0
- package/dist/primitives.cjs.map +1 -0
- package/dist/primitives.d.cts +6902 -0
- package/dist/primitives.d.ts +6902 -0
- package/dist/primitives.js +4883 -0
- package/dist/primitives.js.map +1 -0
- package/package.json +134 -7
- package/index.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../core/src/model.ts","../../core/src/diagnostics.ts","../../core/src/kinds.ts","../../core/src/define.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/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/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/primitives/components.tsx","../src/primitives/custom.tsx","../src/primitives/outline.ts","../src/primitives/render.ts"],"names":["length","a","read","side","shape","kind","size","text","link","item","WRITTEN","box","h","isObject","rule","raw","lineHeight","border","items","wraps","line","lines","frame","clamp","open","share","css","declarations","px","insets","sides","radius","fontFamily","write","Html","attributes","hiding","fontFaces","isNode","Table","color","render","PLACE","Button","phoneText","Column","Divider","Email","Text","Heading","fontWeight","Image","LineBreak","Link","List","marker","ListItem","blocks","MergeTag","gapOf","Row","words","ALIGN","Layer","Section","Span","TableCell","TableRow","Video","component","shown","same","fallback","TEXT_ALIGN","JUSTIFY","sized","textBlock","HtmlBlock","Page","PageNumber","Document","Canvas","TAGS","Svg","COMPONENTS","propsOf","writer","VOID","SHARED","React","current","frames","ENTITIES","NODE_KEYS","Social","Menu","Grid","PageBreak","PageHeader","PageFooter","Rect","Circle","Ellipse","Line","Polygon","Path","prop"],"mappings":"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","file":"primitives.js","sourcesContent":["/**\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\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}\n\nexport class Diagnostics {\n readonly list: Diagnostic[] = [];\n\n add(code: string, severity: Severity, message: string, path: string, nodeId?: string): void {\n this.list.push(nodeId === undefined ? { code, severity, message, path } : { code, severity, message, path, nodeId });\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): void {\n this.add(code, \"warning\", message, path, nodeId);\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. */\nexport function formatDiagnostics(diagnostics: readonly Diagnostic[]): string {\n return diagnostics.map((d) => `${d.severity} ${d.code} at ${d.path}: ${d.message}`).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 * 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 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/** 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 { 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\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 /** 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); CSS written\n * as is, which browsers show as asked; or assumed, not yet checked.\n */\nexport type SupportSource = \"outlook-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.\n */\nexport type Support =\n | { level: \"full\"; source: SupportSource }\n | { level: \"outlook\" | \"partial\" | \"none\"; shows: string; values?: readonly Json[]; when?: (value: Json, node: { props: Record<string, Json> }) => boolean; source: SupportSource };\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 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\nexport interface ComponentDefinition<P extends PropSpecs = PropSpecs, S extends StyleSpecs = StyleSpecs> {\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?: readonly (keyof S & string)[];\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 /** 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>(definition: ComponentDefinition<P, S>): ComponentDefinition<P, S> {\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 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, 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: { kind: fontWeight(), label: \"Font weight\", inherited: true, support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\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: { kind: enumOf([\"none\", \"uppercase\", \"lowercase\", \"capitalize\"]), label: \"Letter case\", inherited: true, support: { email: { level: \"full\", source: \"assumed\" }, web: css } },\n textDecoration: { kind: enumOf([\"none\", \"underline\", \"line-through\"]), label: \"Decoration\", support: { email: { level: \"full\", source: \"caniemail\" }, web: css } },\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: { kind: radius(), label: \"Corner radius\", support: { email: { level: \"outlook\", shows: \"square corners\", source: \"caniemail\" }, web: css } },\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 * 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>(\n definition: ComponentDefinition<P, S> & { expand(props: ExpandProps<P>, context: ExpandContext): unknown }\n): ComponentDefinition<P, S> {\n return { ...definition, custom: true } as ComponentDefinition<P, S>;\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 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: an image with words on it. 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 { 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\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 }), { support: WRITTEN, label: \"Language\", description: 'Its language, as a BCP 47 tag (\"en\", \"ar\").' }),\n dir: prop(enumOf([\"ltr\", \"rtl\", \"auto\"]), { support: WRITTEN, label: \"Text direction\" }),\n fonts: prop(fontFaces(), {\n support: {\n email: { level: \"partial\", shows: \"Apple Mail and iOS Mail load web fonts; Gmail and classic Outlook don't, and show the next font in each stack\", source: \"caniemail\" },\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});\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, 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 ...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: { 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 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 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 { 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}\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 type { ComponentDefinition, 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 responsive: boolean;\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(), responsive: !!rootDefinition?.responsive };\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; responsive: boolean; 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), responsive: options.responsive };\n const node = readNode(input, options.path, options.parent, context);\n return { node, diagnostics: d.list };\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. */\nfunction unknownProp(definition: ComponentDefinition, key: string): string {\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\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);\n if (props) node.props = props;\n\n const style = readStyles(input.style, definition, definition.style, `${path}.style`, id, d, \"style\", () => true);\n if (style) node.style = style;\n\n if (input.mobile !== undefined) {\n if (!context.responsive) d.error(\"mobile/not-supported\", \"Phone styles are for an Email or a Page, which have a phone width\", `${path}.mobile`, id);\n else {\n const mobile = readStyles(input.mobile, definition, definition.style, `${path}.mobile`, id, d, \"mobile\", (spec) => !!spec.mobile);\n if (mobile) node.mobile = mobile;\n }\n }\n\n if (input.hover !== undefined) {\n const allowed = new Set<string>(definition.hover ?? []);\n const hover = readStyles(input.hover, definition, definition.style, `${path}.hover`, id, d, \"hover\", (_, key) => allowed.has(key));\n if (hover) node.hover = hover;\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): 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 const parsed = spec.kind.parse(value);\n if (parsed.ok) 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 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 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: \"style\" | \"mobile\" | \"hover\",\n allowed: (spec: StyleSpecs[string], key: string) => boolean\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 (!allowed(spec, key)) {\n d.error(`${what}/not-allowed`, what === \"mobile\" ? `\"${key}\" can't be set for phones` : `\"${key}\" can't be set for hover`, `${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.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 (out.mobile && out.desktop) 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 * 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 type { ComponentDefinition } from \"./define\";\nimport { Diagnostics, type Diagnostic } from \"./diagnostics\";\nimport { isNode, type ElementsDocument, type Json, type Node } from \"./model\";\nimport { checkFragment } from \"./normalize\";\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\nexport function expandDocument(document: ElementsDocument, options?: ComponentsOption | Registry): { 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 /** 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 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 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 });\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 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, responsive, 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 [key, value] of Object.entries(node.mobile ?? {})) {\n if (registry.get(expanded.type)?.style[key]?.mobile) expanded.mobile = { [key]: value, ...expanded.mobile };\n else d.warning(\"mobile/not-shown\", `${node.type}'s ${key} on phones isn't shown: what it renders (a ${expanded.type}) has no ${key} for phones`, `${path}.mobile.${key}`, node.id);\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 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` or `hover` 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 return [name === \"phone\" ? rule(\"phone\", `&{${text}}`) : rule(\"all\", `&:hover{${text}}`, \"hover\")];\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\") {\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; class?: string | ReadonlyArray<string | undefined>; children?: Child } & {\n [attribute: string]: Attribute | StyleValue | Child | ReadonlyArray<string | undefined>;\n };\n }\n }\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 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) => !(node.hidden?.mobile && node.hidden?.desktop);\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 hover={{ 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.\n { display: width.width !== undefined ? \"block\" : \"inline-block\", padding: style.padding },\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 { ResolvedDocument, ResolvedNode } from \"../../resolve\";\nimport { Fragment, h, raw, withStylesheet, type Html } from \"../jsx\";\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\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 return component(propsOf(node, place, options));\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 component(propsOf(node, place, options));\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}\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 = {}): EmailHtml {\n const root = resolved.root;\n const sheet = new Stylesheet(options.classPrefix);\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 email = withStylesheet(sheet, () => String(Email(propsOf(root, { parent: root, fill: false, mobile: {}, inline: false, rtl: false }, options))));\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 body =\n preheader +\n `<div${attrs({ role: \"article\", \"aria-roledescription\": \"email\", \"aria-label\": title, lang, dir })}${styleAttr([[\"background-color\", background], [\"overflow-wrap\", \"break-word\"], [\"word-break\", \"break-word\"]])}>${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 html =\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)}>${body}</body></html>`;\n\n const bytes = utf8Bytes(html);\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\");\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\");\n }\n return { html, head, body, bodyStyle, diagnostics: d.list };\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`). One pass reads it for every output, for\n * what the 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 output adds what no single style or\n * prop says (email: `email/support.ts`).\n */\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport type { Json } from \"../../model\";\nimport type { ResolvedNode } from \"../../resolve\";\nimport type { Support, SupportByTarget, Target } from \"../../define\";\n\nconst isNode = (child: ResolvedNode | string): child is ResolvedNode => typeof child !== \"string\";\nconst shown = (node: ResolvedNode) => !(node.hidden?.mobile && node.hidden?.desktop);\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 report(node, \"style\", key, value, fallback, definition.style[key]?.support, target, d);\n }\n for (const [key, value] of Object.entries(node.props)) report(node, \"props\", key, value, definition.props[key]?.default as Json | undefined, definition.props[key]?.support, target, d);\n for (const child of node.children) if (isNode(child) && shown(child)) visit(child);\n };\n visit(root);\n return d.list;\n}\n\nfunction report(node: ResolvedNode, where: \"style\" | \"props\", key: string, value: Json, fallback: Json | undefined, declared: SupportByTarget | undefined, target: Target, d: Diagnostics): void {\n const rules = declared?.[target];\n if (!rules || same(value, fallback)) return;\n for (const rule of ([] as Support[]).concat(rules)) {\n if (rule.level === \"full\") continue;\n if (rule.values && !rule.values.some((v) => same(v, value))) continue;\n if (rule.when && !rule.when(value, node)) continue;\n const at = `${node.path}.${where}.${key}`;\n const asked = typeof value === \"string\" ? `${key}: \"${value}\"` : key;\n const output = target === \"web\" ? \"a page\" : target;\n if (rule.level === \"none\") d.warning(`${target}/unsupported`, `${asked} isn't possible in ${output}: ${rule.shows}`, at, node.id);\n else if (rule.level === \"partial\") d.add(`${target}/degraded`, \"info\", `${asked} on this ${node.type} in ${output}: ${rule.shows}`, at, node.id);\n else d.add(\"email/outlook-degraded\", \"info\", `${asked} on this ${node.type} in classic Outlook: ${rule.shows}`, at, node.id);\n }\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 * Size budgets are checked on the written email (index.tsx).\n */\nimport { Diagnostics, type Diagnostic } from \"../../diagnostics\";\nimport { fontStack, videoParts, type FontFace } from \"../../kinds\";\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\nexport function emailSupport(root: ResolvedNode): 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 visit = (node: ResolvedNode) => {\n structure(node, d);\n fallback(node, webFonts, d);\n for (const child of node.children) if (isNode(child) && shown(child)) visit(child);\n };\n visit(root);\n return d.list;\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 (Gmail, classic Outlook) the email client picks its own font. Add one it has: \"${stack}, Arial, sans-serif\"`,\n `${node.path}.style.fontFamily`,\n node.id\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 );\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 * 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 { 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 (node.hidden?.desktop && node.hidden?.mobile) return;\n if (node.hover && Object.keys(node.hover).length) {\n d.warning(`${output}/unsupported`, `A hover isn't possible in ${where}: nothing points at it. The ${node.type} shows its own colors`, `${node.path}.hover`, 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 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(\"phone\", `&{${css(declarationsOf(rest), true)}}`));\n const line = node.type === \"Divider\" && node.style.padding !== undefined ? \">hr\" : \"\";\n if (width !== undefined) classes.push(rule(\"phone\", `&${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(\"all\", `&:hover{${css(declarationsOf(node.hover), true)}}`, \"hover\"));\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 { 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/** Below this width a Page is on a phone. */\nexport const PAGE_PHONE_WIDTH = 480;\nconst PHONE = `@media (max-width: ${PAGE_PHONE_WIDTH}px)`;\nconst DESKTOP = `@media (min-width: ${PAGE_PHONE_WIDTH + 1}px)`;\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 stylesheet = [...fonts, sheet.css(fixed ? null : PHONE, fixed ? null : DESKTOP), 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 { 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 (child.hidden?.mobile && child.hidden?.desktop) 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\" || (child.hidden?.mobile && child.hidden?.desktop)) 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) => !(node.hidden?.mobile && node.hidden?.desktop);\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 { 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 { renderPage, type PageOptions } from \"./page\";\nimport { renderText } from \"./plain-text\";\nimport { prettyHtml } from \"./shared/pretty\";\n\nexport { renderEmail, EMAIL_PHONE_MARGIN, GMAIL_CLIP_BYTES, GMAIL_STYLE_BYTES, type EmailHtml, type EmailOptions } from \"./email\";\nexport { renderPage, PAGE_PHONE_WIDTH, 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\";\n\nexport interface RenderOptions extends PageOptions, EmailOptions {\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\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}\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 = {}): Prepared {\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 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 { resolved: null, target: null, diagnostics };\n }\n const expanded = expandDocument(checked.document, registry);\n diagnostics.push(...expanded.diagnostics);\n if (failed()) return { resolved: null, target: output.target, diagnostics };\n diagnostics.push(...checkTargetExpanded(expanded.document, output.target, registry, expanded.paths));\n if (failed()) return { resolved: null, target: output.target, diagnostics };\n const resolved = resolveExpanded(expanded.document, registry, expanded.paths);\n diagnostics.push(...resolved.diagnostics);\n const found = output.target === \"email\" ? emailSupport(resolved.root) : 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 if (root !== \"Document\") found.push(...pageNumbersOutside(resolved.root));\n diagnostics.push(...inTemplate(resolved, found));\n return { resolved: failed() ? null : resolved, target: output.target, diagnostics };\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/** A PageNumber outside a Document: a page has no number there. */\nfunction pageNumbersOutside(root: ResolvedNode): Diagnostic[] {\n const out: Diagnostic[] = [];\n const visit = (node: ResolvedNode) => {\n if (node.type === \"PageNumber\") {\n out.push({ code: \"document/page-number\", severity: \"error\", message: `A PageNumber is a page's number in a Document; this ${root.type} has no pages`, path: node.path, ...(node.id ? { nodeId: node.id } : {}) });\n }\n for (const child of node.children) if (typeof child !== \"string\") visit(child);\n };\n visit(root);\n return out;\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 = {}): { 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 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 return { html: shown(written.html), head: shown(written.head), body: shown(written.body), bodyStyle: written.bodyStyle, text, diagnostics: [...diagnostics, ...inTemplate(resolved, written.diagnostics)] };\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/** Where a node's own keys go: the rest of its JSX props are its semantic props. */\nconst NODE_KEYS = new Set([\"id\", \"style\", \"mobile\", \"hover\", \"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/** 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\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 };\n }\n const result = checkDocument({ root: top[0] }, new Registry(components));\n return { document: result.document, diagnostics: [...diagnostics, ...result.diagnostics], components };\n}\n","/**\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} 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> ? PropsInput<P> & Extras<StyleInput<S>> : never;\n\n/** What every primitive takes beside its own props. */\ninterface Extras<Style> {\n /** Stable id; one is assigned in document order when it's left out. */\n id?: string;\n style?: Style;\n /** Style on phones (in an Email or Page). */\n mobile?: Style;\n /** Style while the pointer is over it, where the component has one. */\n hover?: Style;\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> ? { [K in keyof S]?: InputOf<S[K][\"kind\"]> } : never;\ntype PropsOf<D, Style> = D extends ComponentDefinition<infer P, any> ? PropsInput<P> & Extras<Style> : 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 * Custom components: a named block made of primitives, with its own typed\n * props and editors, kept as one node in the document and expanded when it's\n * rendered.\n */\nimport type React from \"react\";\nimport {\n asset,\n boolean,\n color,\n defineCustomComponent,\n enumOf,\n fontFamily,\n fontWeight,\n formatDiagnostics,\n length,\n link,\n number,\n prop as defineProp,\n text,\n type CustomDefinition,\n type ExpandProps,\n type Kind,\n type LengthUnit,\n type OutputOf,\n type PropSpec,\n type PropSpecs,\n type PropsInput,\n} from \"@unlayer-internal/elements-core\";\nimport { collectingPrimitives, collectNodes, recordPrimitive, registerUsed } from \"./collect\";\n\ntype PropOptions<K extends Kind<any, any>, R extends boolean, D> = Omit<PropSpec<K, R>, \"kind\" | \"default\"> & { default?: D };\n\n/** A prop helper for one value kind: `required` and `default` keep their literal types, for `render`'s props. */\nfunction kindProp<K extends Kind<any, any>>(make: () => K) {\n return <const R extends boolean = false, const D extends OutputOf<K> | undefined = undefined>(options: PropOptions<K, R, D>) => defineProp(make(), options);\n}\n\n/** Props of a custom component, by value kind. */\nexport const prop = {\n text: kindProp(() => text()),\n color: kindProp(() => color()),\n image: kindProp(() => asset()),\n link: kindProp(() => link()),\n boolean: kindProp(() => boolean()),\n fontFamily: kindProp(() => fontFamily()),\n fontWeight: kindProp(() => fontWeight()),\n number: <const R extends boolean = false, const D extends number | undefined = undefined>(\n options: PropOptions<Kind<number, number>, R, D> & { min?: number; max?: number; integer?: boolean }\n ) => {\n const { min, max, integer, ...rest } = options;\n return defineProp(number({ min, max, integer }), rest);\n },\n length: <const U extends LengthUnit = \"px\", const R extends boolean = false, const D extends OutputOf<ReturnType<typeof length<U>>> | undefined = undefined>(\n options: PropOptions<ReturnType<typeof length<U>>, R, D> & { units?: readonly U[]; min?: number }\n ) => {\n const { units, min, ...rest } = options;\n return defineProp<ReturnType<typeof length<U>>, R, D>(length<U>(units, { min }), rest);\n },\n choice: <const V extends readonly (string | number)[], const R extends boolean = false, const D extends V[number] | undefined = undefined>(\n values: V,\n options: PropOptions<Kind<V[number], V[number]>, R, D>\n ) => defineProp(enumOf(values), options),\n};\n\n/** What a custom component takes in JSX: its props, and its place in a Row and its visibility. */\nexport type CustomProps<P extends PropSpecs> = PropsInput<P> & {\n id?: string;\n style?: { flex?: number | \"none\" };\n hidden?: { mobile?: boolean; desktop?: boolean };\n};\n\nexport type CustomComponent<P extends PropSpecs> = React.FC<CustomProps<P>> & { definition: CustomDefinition<P> };\n\nexport interface ComponentSpec<P extends PropSpecs> {\n /** A namespace, a dot, a capitalized name: \"acme.ProductCard\". */\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 (and it renders a Section). */\n placement?: \"block\" | \"section\";\n /**\n * The component as primitives, from its props (normalized, defaults applied). Pure: no hooks or data,\n * so it can be rendered anywhere. Returns one component.\n */\n render(props: ExpandProps<P>): React.ReactElement;\n}\n\nexport function component<const P extends PropSpecs>(spec: ComponentSpec<P>): CustomComponent<P> {\n const definition = defineCustomComponent({\n type: spec.type,\n label: spec.label,\n description: spec.description,\n props: spec.props,\n placement: spec.placement,\n expand(props, context) {\n const { nodes, components, diagnostics } = collectNodes(spec.render(props));\n for (const used of components) context.register(used);\n if (diagnostics.length) throw new Error(formatDiagnostics(diagnostics));\n return nodes.length === 1 ? nodes[0] : nodes;\n },\n });\n const Custom = (props: CustomProps<P>): React.ReactElement => {\n const collection = collectingPrimitives();\n if (!collection) {\n throw new Error(`[Elements] <${spec.type}> is part of a template: render the template with render(), not this component on its own`);\n }\n registerUsed(collection, definition);\n return recordPrimitive(collection, spec.type, props as Record<string, unknown>);\n };\n Custom.displayName = spec.type;\n return Object.assign(Custom, { definition });\n}\n","/**\n * A laid-out template as text, for an author or an agent to check its layout without reading the HTML: each block on\n * a line under what holds it, with its width on desktop and what it shows (a heading's level and words, a link's\n * URL, an image's alt text). A Row says how many sit side by side and whether they stack on phones.\n *\n * Email 600px\n * Image 120px [Acme] https://example.com/logo.png\n * Column 600px, background #ffffff\n * Heading h1 536px \"Thanks for your order, {{first_name}}\"\n * Row 536px: 2 side by side, stacked on phones\n */\nimport { linkParts, type LinkValue, type ResolvedNode } from \"@unlayer-internal/elements-core\";\n\nconst LONGEST = 80;\nconst clip = (text: string) => (text.length > LONGEST ? `${text.slice(0, LONGEST - 1)}…` : text);\nconst shown = (node: ResolvedNode) => !(node.hidden?.mobile && node.hidden?.desktop);\nconst blocks = (node: ResolvedNode) => node.children.filter((child): child is ResolvedNode => typeof child !== \"string\" && shown(child));\n\n/** The words a node shows, a merge tag as `{{name}}`, a link's URL after its words, an image as its alt text; Lists in it are lines of their own. */\nfunction words(node: ResolvedNode): string {\n return node.children\n .map((child) => {\n if (typeof child === \"string\") return child;\n if (!shown(child) || child.type === \"List\") return \"\";\n if (child.type === \"MergeTag\") return `{{${child.props.name}}}`;\n if (child.type === \"LineBreak\") return \" / \";\n if (child.type === \"Image\") return `[${child.props.alt ?? \"\"}]`;\n if (child.type === \"Link\") return `${words(child)} (${linkParts(child.props.href as LinkValue).href})`;\n return words(child);\n })\n .join(\"\")\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction describe(node: ResolvedNode): string {\n const parts: string[] = [node.type === \"DocumentPage\" ? \"Document.Page\" : node.type];\n if (node.type === \"Heading\") parts.push(`h${node.props.level}`);\n if (node.width !== null) parts.push(`${Math.round(node.width)}px`);\n const details: string[] = [];\n const children = blocks(node);\n // A Grid, a Menu and a Social are laid out as Rows (a Menu's and a Social's of Links), so they show as those.\n if (node.type === \"Row\") details.push(`${children.length} side by side${node.props.stackOnMobile === false ? \"\" : \", stacked on phones\"}`);\n if (typeof node.style.backgroundColor === \"string\") details.push(`background ${node.style.backgroundColor}`);\n if (node.hidden?.desktop) details.push(\"phones only\");\n if (node.hidden?.mobile) details.push(\"desktop only\");\n const head = `${parts.join(\" \")}${details.length ? `: ${details.join(\", \")}` : \"\"}`;\n switch (node.type) {\n case \"Image\":\n return `${head} [${node.props.alt ?? \"\"}] ${clip(String((node.props.src as { src?: string })?.src ?? node.props.src))}`;\n case \"Link\":\n case \"Button\":\n return `${head} \"${clip(words(node))}\" → ${linkParts(node.props.href as LinkValue).href}`;\n case \"Video\":\n return `${head} \"${clip(String(node.props.title ?? \"\"))}\" ${node.props.src}`;\n case \"Svg\":\n return `${head} (${children.length} shapes)`;\n default:\n return node.definition.children.text && words(node) ? `${head} \"${clip(words(node))}\"` : head;\n }\n}\n\n/** The lines of a node and what it holds, indented under it. Text and its inline parts are its line; Lists in it go under it. */\nfunction lines(node: ResolvedNode, indent: string): string[] {\n const own = `${indent}${describe(node)}`;\n if (node.type === \"Svg\") return [own];\n const under = node.definition.children.text ? blocks(node).filter((child) => child.type === \"List\") : blocks(node);\n return [own, ...under.flatMap((child) => lines(child, `${indent} `))];\n}\n\nexport function outlineOf(root: ResolvedNode): string {\n return lines(root, \"\").join(\"\\n\");\n}\n","import React from \"react\";\nimport { ElementsError, LAYOUT_VERSION, pagedSupport, prepareTemplate, renderTemplate, validateTemplate, type Diagnostic, type RenderOptions, type RenderResult, type ResolvedNode } from \"@unlayer-internal/elements-core\";\nimport { collectTemplate } from \"./collect\";\nimport { outlineOf } from \"./outline\";\n\nfunction template(element: unknown, call: string) {\n if (!React.isValidElement(element)) {\n throw new TypeError(`[Elements] ${call}() takes a template as JSX (<Email>…</Email>, <Page>…</Page>), not ${element === null ? \"null\" : typeof element}`);\n }\n return collectTemplate(element);\n}\n\n/**\n * A template rendered to the output its root says: `<Email>` to email HTML,\n * `<Page>` to web HTML (`<Document>` to print HTML or PDF and `<Canvas>` to an\n * image come with their writers). Resolves to `{ html, text, … }`;\n * rejects with an `ElementsError` listing the problems if the\n * template has errors (see `validate()`).\n */\nexport async function render(element: React.ReactElement, options: RenderOptions = {}): Promise<RenderResult> {\n const { document, diagnostics, components } = template(element, \"render\");\n if (!document || diagnostics.some((d) => d.severity === \"error\")) throw new ElementsError(diagnostics);\n const rendered = renderTemplate(document, { ...options, components });\n return { ...rendered, diagnostics: [...diagnostics, ...rendered.diagnostics] };\n}\n\nexport interface ValidationResult {\n /** No errors (there may be warnings and notes). */\n valid: boolean;\n /** Each problem: a code, how bad it is, what's wrong and what to do instead, and where (`root.children[2].style.margin`). */\n diagnostics: Diagnostic[];\n}\n\n/**\n * A template's problems, without rendering it or throwing: for editors, tests\n * and agents checking what they wrote. It goes as far as rendering does before\n * writing: custom components expanded (and their output checked), the output's\n * own checks, layout, and what the output can't do as asked (`email/…`).\n * Warnings and notes leave it valid. Only what needs the written output is\n * left to `render()`: an email's size against Gmail's limits (`email/size`,\n * `email/style-size`).\n */\nexport function validate(element: React.ReactElement): ValidationResult {\n const { document, diagnostics, components } = template(element, \"validate\");\n const all = [...diagnostics, ...(document && !diagnostics.some((d) => d.severity === \"error\") ? validateTemplate(document, { components }).diagnostics : [])];\n return { valid: !all.some((d) => d.severity === \"error\"), diagnostics: all };\n}\n\n/**\n * A template laid out, as text: each block on a line under what holds it, with its width on desktop and what it\n * shows (a heading's words, a link's URL, an image's alt text), and whether a Row stacks on phones. To check a\n * template's layout without reading its HTML. Throws an `ElementsError` listing the problems if it has errors.\n */\nexport function outline(element: React.ReactElement): string {\n const { document, diagnostics, components } = template(element, \"outline\");\n if (!document || diagnostics.some((d) => d.severity === \"error\")) throw new ElementsError(diagnostics);\n // Laying it out finds problems of its own (a composite's, an output's): those are the ones it throws.\n const prepared = prepareTemplate(document, { components });\n const root = prepared.resolved?.root;\n if (!root) throw new ElementsError([...diagnostics, ...prepared.diagnostics]);\n return outlineOf(root);\n}\n\n/**\n * A template laid out, for an entry that writes another output (`@hyper-elements/react/pdf`): its tree, every block's\n * width worked out, and what was found. What render() does before it writes HTML; `root` is null where there are\n * errors. The tree is the writers' input, not a format to store: it changes with Elements, and `layout` says which\n * format it's in (a writer refuses one it doesn't read).\n */\nexport function prepare(element: React.ReactElement): { root: ResolvedNode | null; diagnostics: Diagnostic[]; layout: number } {\n const { document, diagnostics, components } = template(element, \"prepare\");\n if (!document || diagnostics.some((d) => d.severity === \"error\")) return { root: null, diagnostics, layout: LAYOUT_VERSION };\n const prepared = prepareTemplate(document, { components });\n const root = prepared.resolved?.root ?? null;\n // A Document is prepared for its PDF and a Canvas for its image: what they can't show that the HTML can.\n const paged = root?.type === \"Document\" ? pagedSupport(root, \"pdf\") : root?.type === \"Canvas\" ? pagedSupport(root, \"image\") : [];\n return { root, diagnostics: [...diagnostics, ...prepared.diagnostics, ...paged], layout: LAYOUT_VERSION };\n}\n\nexport type { RenderOptions, RenderResult, ResolvedNode };\n"]}
|