canvu-react 0.4.25 → 0.4.27
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/dist/index.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +53 -25
- package/dist/native.cjs.map +1 -1
- package/dist/native.js +54 -26
- package/dist/native.js.map +1 -1
- package/dist/react.cjs +4 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +4 -3
- package/dist/react.js.map +1 -1
- package/dist/tldraw.cjs.map +1 -1
- package/dist/tldraw.js.map +1 -1
- package/package.json +1 -1
package/dist/tldraw.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/link-item.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/plugins/tldraw/index.ts"],"names":["escapeHtmlText","d","op","b","s","formatNumber","document","x","y","pressure"],"mappings":"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","file":"tldraw.js","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Width/height of the shape’s local drawing box (same as `bounds` at creation). */\nexport type CustomShapeSize = { width: number; height: number };\n\n/**\n * How to build the inner SVG (inside the item’s bounding box).\n *\n * - **`svg`**: paste-friendly markup. Use `{{w}}`, `{{h}}`, `{{width}}`, or `{{height}}` where the size should go.\n * - **`render`**: a small function when you prefer code over a string template.\n */\nexport type CreateCustomShapeContent =\n\t| {\n\t\t\t/**\n\t\t\t * SVG fragment for `<g>` contents (no outer `<svg>`). Placeholders are replaced with numeric sizes:\n\t\t\t * `{{w}}`, `{{h}}`, `{{width}}`, `{{height}}`.\n\t\t\t */\n\t\t\tsvg: string;\n\t }\n\t| {\n\t\t\t/** Returns inner SVG for the given box size (same coordinate range as `bounds`). */\n\t\t\trender: (size: CustomShapeSize) => string;\n\t };\n\n/**\n * Replaces `{{w}}`, `{{h}}`, `{{width}}`, and `{{height}}` in a string with the given dimensions.\n * Use this if you build SVG strings yourself and want the same rules as {@link createCustomShapeItem}.\n */\nexport function expandCustomShapeTemplate(\n\ttemplate: string,\n\twidth: number,\n\theight: number,\n): string {\n\treturn template\n\t\t.replace(/\\{\\{w\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{h\\}\\}/g, String(height))\n\t\t.replace(/\\{\\{width\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{height\\}\\}/g, String(height));\n}\n\nfunction resolveCustomInner(\n\tcontent: CreateCustomShapeContent,\n\tsize: CustomShapeSize,\n): string {\n\tif (\"render\" in content) {\n\t\treturn content.render(size);\n\t}\n\treturn expandCustomShapeTemplate(content.svg, size.width, size.height);\n}\n\n/**\n * Builds the scaled `<g>` wrapper used for `childrenSvg` on custom shapes that support resize.\n */\nexport function buildCustomShapeChildrenSvg(\n\tinner: string,\n\tintrinsic: CustomShapeSize,\n\tbounds: Rect,\n): string {\n\tconst b = normalizeRect(bounds);\n\tconst sx = b.width / intrinsic.width;\n\tconst sy = b.height / intrinsic.height;\n\treturn `<g transform=\"scale(${sx},${sy})\">${inner}</g>`;\n}\n\n/**\n * Creates a user-defined shape from SVG markup or a `render` callback.\n *\n * Coordinates are **local**: draw from `(0,0)` to `(width, height)` of `bounds`. The library stores an\n * intrinsic copy so resize handles (when interactive) scale the drawing uniformly.\n *\n * @example\n * ```ts\n * const star = createCustomShapeItem(createShapeId(), rect, {\n * svg: `<polygon points=\"...\" fill=\"gold\" stroke=\"#b45309\" stroke-width=\"2\" />`,\n * });\n * ```\n *\n * @example Template (good for copy-paste from design tools)\n * ```ts\n * createCustomShapeItem(id, rect, {\n * svg: `<rect width=\"{{w}}\" height=\"{{h}}\" rx=\"8\" fill=\"#e0e7ff\" stroke=\"#6366f1\" />`,\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst intrinsic: CustomShapeSize = { width: r.width, height: r.height };\n\tconst inner = resolveCustomInner(content, intrinsic);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"custom\",\n\t\tcustomIntrinsicSize: intrinsic,\n\t\tcustomInnerSvg: inner,\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { createCustomShapeItem } from \"./custom-shape\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Plugin key under which link metadata is stored on a link item's `pluginData`. */\nexport const LINK_PLUGIN_KEY = \"canvuLink\";\n\n/**\n * Metadata describing a clickable link/bookmark item.\n * `href` is required; the rest enrich the rendered card (unfurl result).\n */\nexport type CanvuLinkData = {\n\t/** Absolute URL the card points to. */\n\thref: string;\n\t/** Human readable title (falls back to the hostname). */\n\ttitle?: string;\n\t/** Short description shown under the title. */\n\tdescription?: string;\n\t/** Preview image URL (og:image). */\n\timage?: string;\n\t/** Favicon URL shown in the leading badge. */\n\tfavicon?: string;\n};\n\nconst DEFAULT_LINK_CARD_WIDTH = 360;\nconst DEFAULT_LINK_CARD_HEIGHT = 132;\nconst LINK_CARD_BORDER = \"#e2e8f0\";\nconst LINK_CARD_ACCENT = \"#2563eb\";\nconst LINK_CARD_TITLE_COLOR = \"#0f172a\";\nconst LINK_CARD_TEXT_COLOR = \"#475569\";\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst formatNumber = (value: number): string => {\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Object.is(rounded, -0) ? \"0\" : String(rounded);\n};\n\nconst escapeXmlAttribute = (value: string): string =>\n\tvalue\n\t\t.replaceAll(\"&\", \"&\")\n\t\t.replaceAll(\"<\", \"<\")\n\t\t.replaceAll(\">\", \">\")\n\t\t.replaceAll('\"', \""\")\n\t\t.replaceAll(\"'\", \"'\");\n\nconst escapeHtmlText = (value: string): string =>\n\tvalue.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n\nconst getLinkHostname = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n};\n\ntype LinkTextBand = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tfontWeight?: number;\n\tclampLines?: number;\n};\n\nconst buildLinkTextBand = (band: LinkTextBand): string => {\n\tconst lineHeight = band.fontSize * 1.3;\n\tconst weight = band.fontWeight != null ? `font-weight:${band.fontWeight};` : \"\";\n\tconst lineClampStyle = band.clampLines\n\t\t? `display:-webkit-box;-webkit-line-clamp:${band.clampLines};-webkit-box-orient:vertical;`\n\t\t: \"\";\n\treturn `<foreignObject x=\"${formatNumber(band.x)}\" y=\"${formatNumber(band.y)}\" width=\"${formatNumber(Math.max(1, band.width))}\" height=\"${formatNumber(Math.max(1, band.height))}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;font-family:system-ui,sans-serif;font-size:${formatNumber(band.fontSize)}px;line-height:${formatNumber(lineHeight)}px;color:${band.color};overflow:hidden;word-break:break-word;${lineClampStyle}${weight}\">${escapeHtmlText(band.text)}</div></foreignObject>`;\n};\n\n/**\n * Builds the inner SVG (no outer `<svg>`) for a link/bookmark card at the given box size.\n * Uses fixed pixel bands so text never overlaps regardless of the card's aspect ratio.\n */\nexport function buildLinkCardSvg(\n\twidth: number,\n\theight: number,\n\tlink: CanvuLinkData,\n): string {\n\tconst cardWidth = Math.max(1, width);\n\tconst cardHeight = Math.max(1, height);\n\tconst padding = 14;\n\tconst badgeSize = clamp(Math.min(72, cardHeight - padding * 2), 28, 96);\n\tconst textX = padding + badgeSize + 14;\n\tconst textWidth = Math.max(1, cardWidth - textX - padding);\n\tconst hostname = getLinkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\tconst description = link.description?.trim() || link.href;\n\n\tconst titleY = padding;\n\tconst titleHeight = clamp(cardHeight * 0.22, 18, 28);\n\tconst hostY = titleY + titleHeight + 2;\n\tconst hostHeight = 16;\n\tconst descY = hostY + hostHeight + 4;\n\tconst descHeight = Math.max(1, cardHeight - descY - padding);\n\n\tconst badge = link.favicon\n\t\t? `<clipPath id=\"canvu-link-badge\"><rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" /></clipPath>\n\t\t<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" fill=\"#f8fafc\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" />\n\t\t<image href=\"${escapeXmlAttribute(link.favicon)}\" x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#canvu-link-badge)\" />`\n\t\t: `<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" fill=\"${LINK_CARD_ACCENT}\" fill-opacity=\"0.1\" stroke=\"${LINK_CARD_ACCENT}\" stroke-opacity=\"0.3\" stroke-width=\"1\" />\n\t\t<g transform=\"translate(${formatNumber(padding + badgeSize / 2)},${formatNumber(padding + badgeSize / 2)})\" stroke=\"${LINK_CARD_ACCENT}\" stroke-width=\"2.4\" stroke-linecap=\"round\" fill=\"none\">\n\t\t\t<path d=\"M-9 3 a6 6 0 0 1 0 -8 l4 -4 a6 6 0 0 1 8 8 l-2 2\" />\n\t\t\t<path d=\"M9 -3 a6 6 0 0 1 0 8 l-4 4 a6 6 0 0 1 -8 -8 l2 -2\" />\n\t\t</g>`;\n\n\tconst externalIconX = cardWidth - padding - 16;\n\tconst externalIcon = `<g transform=\"translate(${formatNumber(externalIconX)},${formatNumber(padding)})\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n\t\t<path d=\"M6 1 H11 V6\" />\n\t\t<path d=\"M11 1 L4.5 7.5\" />\n\t\t<path d=\"M9 7 V10 a1 1 0 0 1 -1 1 H2 a1 1 0 0 1 -1 -1 V4 a1 1 0 0 1 1 -1 H5\" />\n\t</g>`;\n\n\treturn `\n\t\t<rect width=\"${formatNumber(cardWidth)}\" height=\"${formatNumber(cardHeight)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1.5\" />\n\t\t${badge}\n\t\t${externalIcon}\n\t\t${buildLinkTextBand({ x: textX, y: titleY, width: textWidth - 18, height: titleHeight, text: title, fontSize: 15, color: LINK_CARD_TITLE_COLOR, fontWeight: 700, clampLines: 1 })}\n\t\t${buildLinkTextBand({ x: textX, y: hostY, width: textWidth, height: hostHeight, text: hostname, fontSize: 12, color: LINK_CARD_ACCENT, clampLines: 1 })}\n\t\t${buildLinkTextBand({ x: textX, y: descY, width: textWidth, height: descHeight, text: description, fontSize: 12, color: LINK_CARD_TEXT_COLOR, clampLines: 2 })}\n\t`;\n}\n\nconst isCanvuLinkData = (value: unknown): value is CanvuLinkData => {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Record<string, unknown>;\n\treturn typeof candidate.href === \"string\" && candidate.href.length > 0;\n};\n\n/** Reads the link metadata from an item, or `null` when the item is not a link. */\nexport function getLinkData(item: VectorSceneItem): CanvuLinkData | null {\n\tconst entry = item.pluginData?.[LINK_PLUGIN_KEY];\n\treturn isCanvuLinkData(entry) ? entry : null;\n}\n\n/** True when the item carries link metadata (clickable card). */\nexport function isLinkItem(item: VectorSceneItem): boolean {\n\treturn getLinkData(item) != null;\n}\n\n/**\n * Creates a clickable link/bookmark card item ready to append to the scene.\n * The card resizes by scaling its authored SVG, like other custom shapes.\n */\nexport function createLinkItem(\n\tid: string,\n\tbounds: Rect,\n\tlink: CanvuLinkData,\n): VectorSceneItem {\n\tconst width = bounds.width || DEFAULT_LINK_CARD_WIDTH;\n\tconst height = bounds.height || DEFAULT_LINK_CARD_HEIGHT;\n\tconst item = createCustomShapeItem(\n\t\tid,\n\t\t{ ...bounds, width, height },\n\t\t{ render: (size) => buildLinkCardSvg(size.width, size.height, link) },\n\t);\n\treturn {\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t};\n}\n\n/** Default card size used when placing a new link without explicit bounds. */\nexport const DEFAULT_LINK_CARD_SIZE = {\n\twidth: DEFAULT_LINK_CARD_WIDTH,\n\theight: DEFAULT_LINK_CARD_HEIGHT,\n} as const;\n","/**\n * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n} from \"./text-svg\";\nimport type {\n\tArrowBindings,\n\tLineEndpointsLocal,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"./types\";\n\nexport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n};\n\n/**\n * While inline-editing: sync bounds to draft width/height and hide SVG so only the textarea shows text.\n */\nexport function applyTextDraftWhileEditing(\n\titem: VectorSceneItem,\n\tdraft: string,\n): VectorSceneItem {\n\tif (item.toolKind !== \"text\") return item;\n\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tif (item.textFixedBounds) {\n\t\treturn {\n\t\t\t...item,\n\t\t\ttext: draft,\n\t\t\tchildrenSvg: \"\",\n\t\t};\n\t}\n\tconst m = measureTextBoundsLocal(draft, fs);\n\treturn {\n\t\t...item,\n\t\ttext: draft,\n\t\tbounds: {\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t},\n\t\tchildrenSvg: \"\",\n\t};\n}\n\n/** Stroke dash pattern for freehand drawings. `solid` = perfect-freehand fill; `dashed` = centerline stroke with dashes. */\nexport type StrokeDash = \"solid\" | \"dashed\";\n\n/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n\tstrokeDash?: StrokeDash;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#1d1d1d\",\n\tstrokeWidth: 2,\n};\n\nconst TOOL_FREEHAND_DEFAULTS: Record<\n\t\"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tPartial<StrokeStyle>\n> = {\n\tdraw: { strokeWidth: 10 },\n\tpencil: { strokeWidth: 3 },\n\tbrush: { strokeWidth: 10 },\n\tmarker: { stroke: \"#fde047\", strokeWidth: 16, strokeOpacity: 0.5 },\n};\n\nfunction perfectFreehandOptions(\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstyle: StrokeStyle,\n\tstrokeComplete: boolean,\n\tpressureAware = false,\n): StrokeOptions {\n\tconst sw = style.strokeWidth;\n\tconst base: StrokeOptions = {\n\t\tlast: strokeComplete,\n\t\tsimulatePressure: true,\n\t};\n\tif (toolKind === \"draw\" || toolKind === \"pencil\") {\n\t\tif (pressureAware && toolKind === \"draw\") {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tsize: Math.max(2, sw * 1.05),\n\t\t\t\tthinning: 0.42,\n\t\t\t\tsmoothing: 0.78,\n\t\t\t\tstreamline: 0.62,\n\t\t\t\tsimulatePressure: true,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(2, sw * 1.18),\n\t\t\tthinning: 0.12,\n\t\t\tsmoothing: 0.85,\n\t\t\tstreamline: 0.78,\n\t\t\tsimulatePressure: true,\n\t\t};\n\t}\n\tif (toolKind === \"brush\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(4, sw * 1.22),\n\t\t\tthinning: 0.52,\n\t\t\tsmoothing: 0.64,\n\t\t\tstreamline: 0.68,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tsize: Math.max(6, sw * 1.08),\n\t\tthinning: 0.08,\n\t\tsmoothing: 0.88,\n\t\tstreamline: 0.84,\n\t\tsimulatePressure: true,\n\t};\n}\n\nexport function resolveStrokeStyle(item: VectorSceneItem): StrokeStyle {\n\treturn {\n\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\tstrokeOpacity: item.strokeOpacity,\n\t\tstrokeDash: item.strokeDash,\n\t};\n}\n\nfunction strokeOpacityAttr(style: StrokeStyle): string {\n\treturn style.strokeOpacity != null\n\t\t? ` stroke-opacity=\"${style.strokeOpacity}\"`\n\t\t: \"\";\n}\n\nfunction svgNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nconst ARCHITECTURAL_CLOUD_RADIUS = 38;\nconst ARCHITECTURAL_CLOUD_TARGET_SPACING = 50;\nconst ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO = 0.38;\nconst ARCHITECTURAL_CLOUD_ROUNDED_RADIUS = 72;\nconst ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS = 44;\nconst ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING = 98;\n\ntype CloudPoint = readonly [number, number];\n\ntype CloudPathSegment = {\n\tlength: number;\n\tpointAt: (t: number) => CloudPoint;\n};\n\nfunction architecturalCloudCenterCount(edgeLength: number, radius: number): number {\n\tconst targetSpacing = Math.min(\n\t\tARCHITECTURAL_CLOUD_TARGET_SPACING,\n\t\tMath.max(1, radius * 1.3),\n\t);\n\treturn Math.max(2, Math.round(edgeLength / targetSpacing) + 1);\n}\n\nfunction distributeRange(start: number, end: number, count: number): number[] {\n\tif (count <= 1) return [start];\n\tconst step = (end - start) / (count - 1);\n\treturn Array.from({ length: count }, (_, index) => start + step * index);\n}\n\nfunction lineCloudPathSegment(start: CloudPoint, end: CloudPoint): CloudPathSegment {\n\tconst dx = end[0] - start[0];\n\tconst dy = end[1] - start[1];\n\tconst length = Math.hypot(dx, dy);\n\treturn {\n\t\tlength,\n\t\tpointAt: (t) => [start[0] + dx * t, start[1] + dy * t],\n\t};\n}\n\nfunction ellipsePoint(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tangle: number,\n): CloudPoint {\n\treturn [centerX + Math.cos(angle) * radiusX, centerY + Math.sin(angle) * radiusY];\n}\n\nfunction approximateEllipseArcLength(\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): number {\n\tconst steps = Math.max(\n\t\t4,\n\t\tMath.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 16)),\n\t);\n\tlet length = 0;\n\tlet previous = ellipsePoint(0, 0, radiusX, radiusY, startAngle);\n\tfor (let index = 1; index <= steps; index += 1) {\n\t\tconst angle = startAngle + ((endAngle - startAngle) * index) / steps;\n\t\tconst next = ellipsePoint(0, 0, radiusX, radiusY, angle);\n\t\tlength += Math.hypot(next[0] - previous[0], next[1] - previous[1]);\n\t\tprevious = next;\n\t}\n\treturn length;\n}\n\nfunction ellipseCloudPathSegment(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): CloudPathSegment {\n\treturn {\n\t\tlength: approximateEllipseArcLength(radiusX, radiusY, startAngle, endAngle),\n\t\tpointAt: (t) =>\n\t\t\tellipsePoint(\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tradiusX,\n\t\t\t\tradiusY,\n\t\t\t\tstartAngle + (endAngle - startAngle) * t,\n\t\t\t),\n\t};\n}\n\nfunction cloudPathPerimeter(segments: CloudPathSegment[]): number {\n\tconst usableSegments = segments.filter((segment) => segment.length > 1e-9);\n\treturn usableSegments.reduce((sum, segment) => sum + segment.length, 0);\n}\n\nfunction pointOnCloudPath(\n\tsegments: CloudPathSegment[],\n\tdistance: number,\n): CloudPoint {\n\tconst perimeter = cloudPathPerimeter(segments);\n\tif (perimeter <= 0) return [0, 0];\n\n\tlet remaining = ((distance % perimeter) + perimeter) % perimeter;\n\tfor (const segment of segments) {\n\t\tif (segment.length <= 1e-9) continue;\n\t\tif (remaining <= segment.length) {\n\t\t\tconst t = remaining / segment.length;\n\t\t\treturn segment.pointAt(t);\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst fallback = segments.find((segment) => segment.length > 1e-9);\n\treturn fallback?.pointAt(0) ?? [0, 0];\n}\n\nfunction buildRoundedCapsulePathSegments(\n\twidth: number,\n\theight: number,\n\tinset: number,\n): CloudPathSegment[] {\n\tconst left = inset;\n\tconst top = inset;\n\tconst right = width - inset;\n\tconst bottom = height - inset;\n\tconst capsuleWidth = Math.max(0, right - left);\n\tconst capsuleHeight = Math.max(0, bottom - top);\n\tconst radius = Math.min(capsuleWidth, capsuleHeight) / 2;\n\tif (radius <= 0) return [];\n\n\tconst leftCenterX = left + radius;\n\tconst rightCenterX = right - radius;\n\tconst topCenterY = top + radius;\n\tconst bottomCenterY = bottom - radius;\n\n\treturn [\n\t\tlineCloudPathSegment([leftCenterX, top], [rightCenterX, top]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t-Math.PI / 2,\n\t\t\t0,\n\t\t),\n\t\tlineCloudPathSegment([right, topCenterY], [right, bottomCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t0,\n\t\t\tMath.PI / 2,\n\t\t),\n\t\tlineCloudPathSegment([rightCenterX, bottom], [leftCenterX, bottom]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI / 2,\n\t\t\tMath.PI,\n\t\t),\n\t\tlineCloudPathSegment([left, bottomCenterY], [left, topCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI,\n\t\t\tMath.PI * 1.5,\n\t\t),\n\t];\n}\n\nfunction buildRoundedArcCloudPathD(\n\tcloudWidth: number,\n\tcloudHeight: number,\n\tcenter: CloudPoint,\n): string {\n\tconst minDimension = Math.min(cloudWidth, cloudHeight);\n\tconst radius = Math.min(\n\t\tARCHITECTURAL_CLOUD_ROUNDED_RADIUS,\n\t\tMath.max(ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS, minDimension * 0.16),\n\t);\n\tconst centerPath = buildRoundedCapsulePathSegments(\n\t\tcloudWidth,\n\t\tcloudHeight,\n\t\tradius,\n\t);\n\tconst centerPerimeter = cloudPathPerimeter(centerPath);\n\tif (centerPerimeter <= 0) return \"\";\n\n\tconst lobeCount = Math.max(\n\t\t8,\n\t\tMath.round(centerPerimeter / ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING),\n\t);\n\tconst centers = Array.from({ length: lobeCount }, (_, index) =>\n\t\tpointOnCloudPath(centerPath, (centerPerimeter * index) / lobeCount),\n\t);\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudCircleIntersection(previous, point, radius, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\nfunction cloudCircleIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradius: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst midX = (a[0] + b[0]) / 2;\n\tconst midY = (a[1] + b[1]) / 2;\n\tconst dx = b[0] - a[0];\n\tconst dy = b[1] - a[1];\n\tconst distance = Math.hypot(dx, dy);\n\tif (distance <= 1e-9) return [midX, midY];\n\n\tconst halfDistance = distance / 2;\n\tconst offset = Math.sqrt(\n\t\tMath.max(0, radius * radius - halfDistance * halfDistance),\n\t);\n\tconst normalX = -dy / distance;\n\tconst normalY = dx / distance;\n\tconst first: [number, number] = [midX + normalX * offset, midY + normalY * offset];\n\tconst second: [number, number] = [\n\t\tmidX - normalX * offset,\n\t\tmidY - normalY * offset,\n\t];\n\tconst firstDistance =\n\t\t(first[0] - center[0]) * (first[0] - center[0]) +\n\t\t(first[1] - center[1]) * (first[1] - center[1]);\n\tconst secondDistance =\n\t\t(second[0] - center[0]) * (second[0] - center[0]) +\n\t\t(second[1] - center[1]) * (second[1] - center[1]);\n\treturn firstDistance >= secondDistance ? first : second;\n}\n\nfunction cloudEllipseIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradiusX: number,\n\tradiusY: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst scaleY = radiusX / radiusY;\n\tconst [x, y] = cloudCircleIntersection(\n\t\t[a[0], a[1] * scaleY],\n\t\t[b[0], b[1] * scaleY],\n\t\tradiusX,\n\t\t[center[0], center[1] * scaleY],\n\t);\n\treturn [x, y / scaleY];\n}\n\nexport function buildRectSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<rect width=\"${width}\" height=\"${height}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" rx=\"4\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildEllipseSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst rx = width / 2;\n\tconst ry = height / 2;\n\treturn `<ellipse cx=\"${rx}\" cy=\"${ry}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\n/**\n * Returns the local SVG path for a scalable architectural revision cloud.\n *\n * Use this low-level helper when you need to preview or inspect the shape without\n * creating a full scene item. Prefer {@link createArchitecturalCloudItem} when\n * adding a cloud to a `VectorSceneItem[]`, because it keeps `toolKind`, bounds,\n * stroke fields, and `childrenSvg` synchronized for editing.\n *\n * @example\n * ```ts\n * const d = buildArchitecturalCloudPathD(180, 90);\n * ```\n */\nexport function buildArchitecturalCloudPathD(\n\twidth: number,\n\theight: number,\n\tstrokeWidth = DEFAULT_STROKE_STYLE.strokeWidth,\n): string {\n\tconst w = Math.max(0, width);\n\tconst h = Math.max(0, height);\n\tif (w <= 0 || h <= 0) return \"\";\n\n\tconst padding = Math.max(0, strokeWidth * 2);\n\tconst cloudWidth = Math.max(0, w - padding);\n\tconst cloudHeight = Math.max(0, h - padding);\n\tif (cloudWidth <= 0 || cloudHeight <= 0) return \"\";\n\n\tconst radiusX = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudWidth * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tconst radiusY = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudHeight * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tif (radiusX <= 0 || radiusY <= 0) return \"\";\n\n\tconst center: CloudPoint = [cloudWidth / 2, cloudHeight / 2];\n\tconst leftCenterX = radiusX;\n\tconst rightCenterX = cloudWidth - radiusX;\n\tconst topCenterY = radiusY;\n\tconst bottomCenterY = cloudHeight - radiusY;\n\tconst horizontalCenters = distributeRange(\n\t\tleftCenterX,\n\t\trightCenterX,\n\t\tarchitecturalCloudCenterCount(Math.max(0, rightCenterX - leftCenterX), radiusX),\n\t);\n\tconst verticalCenters = distributeRange(\n\t\ttopCenterY,\n\t\tbottomCenterY,\n\t\tarchitecturalCloudCenterCount(Math.max(0, bottomCenterY - topCenterY), radiusY),\n\t);\n\tif (horizontalCenters.length > 3 && verticalCenters.length > 3) {\n\t\tconst roundedArcCloudPath = buildRoundedArcCloudPathD(\n\t\t\tcloudWidth,\n\t\t\tcloudHeight,\n\t\t\tcenter,\n\t\t);\n\t\tif (roundedArcCloudPath !== \"\") return roundedArcCloudPath;\n\t}\n\tconst rectangularCenters: CloudPoint[] = [\n\t\t...horizontalCenters.map((x) => [x, topCenterY] as const),\n\t\t...verticalCenters.slice(1).map((y) => [rightCenterX, y] as const),\n\t\t...horizontalCenters\n\t\t\t.slice(0, -1)\n\t\t\t.reverse()\n\t\t\t.map((x) => [x, bottomCenterY] as const),\n\t\t...verticalCenters\n\t\t\t.slice(1, -1)\n\t\t\t.reverse()\n\t\t\t.map((y) => [leftCenterX, y] as const),\n\t];\n\tconst centers = rectangularCenters;\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudEllipseIntersection(previous, point, radiusX, radiusY, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\n/**\n * Builds an SVG fragment for an architectural revision cloud outline.\n *\n * This is the renderer-level primitive behind the built-in `\"architectural-cloud\"`\n * tool. Prefer {@link createArchitecturalCloudItem} for app code that inserts a\n * normal editable scene item.\n */\nexport function buildArchitecturalCloudSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst d = buildArchitecturalCloudPathD(width, height, style.strokeWidth);\n\treturn `<path d=\"${d}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildLineSvg(\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${line.x2}\" y2=\"${line.y2}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\nexport type StraightArrowGeometry = {\n\tshaftEndX: number;\n\tshaftEndY: number;\n\theadTipX: number;\n\theadTipY: number;\n\theadLeftX: number;\n\theadLeftY: number;\n\theadRightX: number;\n\theadRightY: number;\n};\n\nexport function computeStraightArrowGeometry(\n\tline: LineEndpointsLocal,\n\tstrokeWidth: number,\n): StraightArrowGeometry | null {\n\tconst dx = line.x2 - line.x1;\n\tconst dy = line.y2 - line.y1;\n\tconst len = Math.hypot(dx, dy);\n\tif (len < 1e-6) return null;\n\tconst ux = dx / len;\n\tconst uy = dy / len;\n\tconst headLength = Math.min(Math.max(strokeWidth * 4.2, 12), len * 0.38);\n\tconst headAngle = Math.PI / 6;\n\tconst cos = Math.cos(headAngle);\n\tconst sin = Math.sin(headAngle);\n\tconst rx1 = ux * cos - uy * sin;\n\tconst ry1 = ux * sin + uy * cos;\n\tconst rx2 = ux * cos + uy * sin;\n\tconst ry2 = -ux * sin + uy * cos;\n\treturn {\n\t\tshaftEndX: line.x2,\n\t\tshaftEndY: line.y2,\n\t\theadTipX: line.x2,\n\t\theadTipY: line.y2,\n\t\theadLeftX: line.x2 - rx1 * headLength,\n\t\theadLeftY: line.y2 - ry1 * headLength,\n\t\theadRightX: line.x2 - rx2 * headLength,\n\t\theadRightY: line.y2 - ry2 * headLength,\n\t};\n}\n\nexport function buildArrowSvg(\n\titemId: string,\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tvoid itemId;\n\tconst geometry = computeStraightArrowGeometry(line, style.strokeWidth);\n\tif (!geometry) {\n\t\treturn buildLineSvg(line, style);\n\t}\n\tconst op = strokeOpacityAttr(style);\n\treturn `\n\t\t<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${geometry.shaftEndX}\" y2=\"${geometry.shaftEndY}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\"${op} />\n\t\t<path d=\"M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />\n\t`;\n}\n\nexport function buildDrawDotSvg(\n\tr: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst op =\n\t\tstyle.strokeOpacity != null ? ` fill-opacity=\"${style.strokeOpacity}\"` : \"\";\n\treturn `<circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"${style.stroke}\" shape-rendering=\"geometricPrecision\"${op} />`;\n}\n\n/** Structured result for React overlays; scene uses {@link buildFreehandPathSvg} string. */\nexport type FreehandSvgPayload =\n\t| {\n\t\t\tkind: \"circle\";\n\t\t\tcx: number;\n\t\t\tcy: number;\n\t\t\tr: number;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"fillPath\";\n\t\t\td: string;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"strokePath\";\n\t\t\td: string;\n\t\t\tstroke: string;\n\t\t\tstrokeWidth: number;\n\t\t\tstrokeOpacity?: number;\n\t\t\tstrokeDasharray?: string;\n\t };\n\nfunction dashArrayForDrawStroke(strokeWidth: number): string {\n\tconst dash = Math.max(strokeWidth * 1.8, 4);\n\tconst gap = Math.max(strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n\nfunction buildSmoothedCenterlinePath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst first = points[0];\n\tif (!first) return null;\n\tlet d = `M ${first.x} ${first.y}`;\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst a = points[i];\n\t\tconst b = points[i + 1];\n\t\tif (!a || !b) continue;\n\t\tconst midX = (a.x + b.x) / 2;\n\t\tconst midY = (a.y + b.y) / 2;\n\t\td += ` Q ${a.x} ${a.y} ${midX} ${midY}`;\n\t}\n\tconst last = points[points.length - 1];\n\tif (last) {\n\t\td += ` L ${last.x} ${last.y}`;\n\t}\n\treturn d;\n}\n\n/**\n * Computes freehand geometry (perfect-freehand + fallback). Used by {@link buildFreehandPathSvg}\n * and React overlays without `dangerouslySetInnerHTML`.\n */\nexport function computeFreehandSvgPayload(\n\tpathPointsLocal: readonly VectorPathPoint[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): FreehandSvgPayload | null {\n\tif (pathPointsLocal.length === 0) return null;\n\tif (pathPointsLocal.length === 1) {\n\t\tconst p = pathPointsLocal[0];\n\t\tif (!p) return null;\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr: Math.max(0.5, style.strokeWidth / 2),\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tif (\n\t\tstyle.strokeDash === \"dashed\" &&\n\t\t(toolKind === \"draw\" || toolKind === \"pencil\")\n\t) {\n\t\tconst d = buildSmoothedCenterlinePath(pathPointsLocal);\n\t\tif (!d) return null;\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t\tstrokeDasharray: dashArrayForDrawStroke(style.strokeWidth),\n\t\t};\n\t}\n\tconst hasPressure = pathPointsLocal.some(\n\t\t(p) => p.pressure != null && Number.isFinite(p.pressure),\n\t);\n\tconst input = hasPressure\n\t\t? pathPointsLocal.map(\n\t\t\t\t(p) =>\n\t\t\t\t\t[p.x, p.y, Math.min(1, Math.max(0, p.pressure ?? 0.5))] as [\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t],\n\t\t\t)\n\t\t: pathPointsLocal.map((p) => [p.x, p.y] as [number, number]);\n\tconst stroke = getStroke(\n\t\tinput,\n\t\tperfectFreehandOptions(toolKind, style, strokeComplete, hasPressure),\n\t);\n\tif (stroke.length < 3) return null;\n\tconst first = stroke[0];\n\tif (!first) return null;\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < stroke.length; i++) {\n\t\tconst a = stroke[i];\n\t\tconst b = stroke[(i + 1) % stroke.length];\n\t\tif (!a || !b) continue;\n\t\td += ` ${a[0]} ${a[1]} ${(a[0] + b[0]) / 2} ${(a[1] + b[1]) / 2}`;\n\t}\n\td += \" Z\";\n\treturn {\n\t\tkind: \"fillPath\",\n\t\td,\n\t\tfill: style.stroke,\n\t\tfillOpacity: style.strokeOpacity,\n\t};\n}\n\nfunction freehandPayloadToSvgString(payload: FreehandSvgPayload): string {\n\tif (payload.kind === \"circle\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<circle cx=\"${payload.cx}\" cy=\"${payload.cy}\" r=\"${payload.r}\" fill=\"${payload.fill}\" shape-rendering=\"geometricPrecision\"${op} />`;\n\t}\n\tif (payload.kind === \"fillPath\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<path d=\"${payload.d}\" fill=\"${payload.fill}\" fill-rule=\"nonzero\" stroke=\"none\"${op} shape-rendering=\"geometricPrecision\" />`;\n\t}\n\tconst op = strokeOpacityAttr({\n\t\tstroke: payload.stroke,\n\t\tstrokeWidth: payload.strokeWidth,\n\t\tstrokeOpacity: payload.strokeOpacity,\n\t});\n\tconst dash = payload.strokeDasharray\n\t\t? ` stroke-dasharray=\"${payload.strokeDasharray}\"`\n\t\t: \"\";\n\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op}${dash} />`;\n}\n\n/**\n * Freehand stroke in local coordinates using [perfect-freehand](https://github.com/steveruizok/perfect-freehand)\n * (filled outline, tapered caps — similar spirit to tldraw / Excalidraw ink).\n */\nexport function buildFreehandPathSvg(\n\tpathPointsLocal: readonly { x: number; y: number }[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): string {\n\tconst payload = computeFreehandSvgPayload(\n\t\tpathPointsLocal,\n\t\tstyle,\n\t\ttoolKind,\n\t\tstrokeComplete,\n\t);\n\tif (!payload) return \"\";\n\treturn freehandPayloadToSvgString(payload);\n}\n\n/**\n * Creates a new unique id for a shape (for `VectorSceneItem.id` when adding from code or API).\n */\nexport function createShapeId(): string {\n\tconst uid =\n\t\ttypeof crypto !== \"undefined\" && crypto.randomUUID\n\t\t\t? crypto.randomUUID()\n\t\t\t: String(Date.now());\n\treturn `user-shape-${uid}`;\n}\n\n/**\n * Converts line segment endpoints from **world** coordinates to **local** coordinates\n * (origin = top-left of `bounds`). Use with {@link createLineItem}.\n */\nexport function lineEndpointsToLocal(\n\tbounds: Rect,\n\tworldEndA: { x: number; y: number },\n\tworldEndB: { x: number; y: number },\n): LineEndpointsLocal {\n\tconst b = normalizeRect(bounds);\n\treturn {\n\t\tx1: worldEndA.x - b.x,\n\t\ty1: worldEndA.y - b.y,\n\t\tx2: worldEndB.x - b.x,\n\t\ty2: worldEndB.y - b.y,\n\t};\n}\n\n/**\n * Rebuilds the SVG fragment (`childrenSvg`) from geometry + stroke fields (after edits or resize).\n */\nexport function rebuildItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRectSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildEllipseSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"architectural-cloud\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildArchitecturalCloudSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst line = item.line;\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, line, style)\n\t\t\t\t: buildLineSvg(line, style);\n\t\treturn { ...item, childrenSvg };\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tif (item.textFixedBounds) {\n\t\t\tconst b = normalizeRect(item.bounds);\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: b.x,\n\t\t\t\ty: b.y,\n\t\t\t\tbounds: b,\n\t\t\t\tchildrenSvg: buildTextFixedBoundsSvg(\n\t\t\t\t\titem.text,\n\t\t\t\t\tb.width,\n\t\t\t\t\tb.height,\n\t\t\t\t\tstyle.stroke,\n\t\t\t\t\tfs,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tconst m = measureTextBoundsLocal(item.text, fs);\n\t\tconst b = normalizeRect({\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildTextSvg(item.text, b.width, b.height, style.stroke, fs),\n\t\t};\n\t}\n\tif (\n\t\t(k === \"draw\" || k === \"pencil\" || k === \"brush\" || k === \"marker\") &&\n\t\titem.pathPointsLocal &&\n\t\titem.pathPointsLocal.length > 0\n\t) {\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildFreehandPathSvg(item.pathPointsLocal, style, k),\n\t\t};\n\t}\n\tif (k === \"draw\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst r = Math.min(b.width, b.height) / 2;\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildDrawDotSvg(r, style),\n\t\t};\n\t}\n\tif (k === \"image\" && item.imageRasterHref && item.imageIntrinsicSize) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\titem.imageRasterHref,\n\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import { normalizeRect, type Rect } from \"../../math/rect\";\nimport { createCustomShapeItem } from \"../../scene/custom-shape\";\nimport {\n\tbuildLinkCardSvg,\n\ttype CanvuLinkData,\n\tLINK_PLUGIN_KEY,\n} from \"../../scene/link-item\";\nimport {\n\tbuildFreehandPathSvg,\n\tbuildTextSvg,\n\tcreateImageItem,\n\tcreateLineItem,\n\tlineEndpointsToLocal,\n\tmeasureTextBoundsLocal,\n\ttype StrokeStyle,\n} from \"../../scene/shape-builders\";\nimport type { VectorPathPoint, VectorSceneItem } from \"../../scene/types\";\nimport type {\n\tRoomSnapshot,\n\tTlAssetRecord,\n\tTlBindingRecord,\n\tTlPageRecord,\n\tTlRecord,\n\tTlShapeRecord,\n\tTlSnapshotInput,\n\tTlStoreSnapshot,\n\tTlUnknownObject,\n} from \"./types\";\n\nexport type TldrawSnapshotImportOptions = {\n\tpageId?: string;\n\tassetUrlResolver?: (\n\t\tasset: TlAssetRecord,\n\t\tshape: TlShapeRecord,\n\t) => string | undefined;\n\tonUnsupportedShape?: (shape: TlShapeRecord, reason: string) => void;\n};\n\ntype Point = {\n\tx: number;\n\ty: number;\n\tpressure?: number;\n\tindex?: string;\n};\n\ntype Matrix = {\n\ta: number;\n\tb: number;\n\tc: number;\n\td: number;\n\te: number;\n\tf: number;\n};\n\ntype NormalizedSnapshot = {\n\trecords: Map<string, TlRecord>;\n\tshapes: Map<string, TlShapeRecord>;\n\tassets: Map<string, TlAssetRecord>;\n\tbindings: Map<string, TlBindingRecord>;\n\tpages: Map<string, TlPageRecord>;\n\tselectedPageId?: string;\n\toptions: TldrawSnapshotImportOptions;\n\tlocalBoundsCache: Map<string, Rect>;\n\tworldMatrixCache: Map<string, Matrix>;\n\trootPageCache: Map<string, string | null>;\n};\n\nconst IDENTITY_MATRIX: Matrix = {\n\ta: 1,\n\tb: 0,\n\tc: 0,\n\td: 1,\n\te: 0,\n\tf: 0,\n};\n\nconst TL_COLORS: Record<string, string> = {\n\tblack: \"#1d1d1d\",\n\tgray: \"#6b7280\",\n\tgrey: \"#6b7280\",\n\t\"light-gray\": \"#9ca3af\",\n\t\"dark-gray\": \"#374151\",\n\tblue: \"#3b82f6\",\n\t\"light-blue\": \"#93c5fd\",\n\tgreen: \"#22c55e\",\n\t\"light-green\": \"#86efac\",\n\t\"dark-green\": \"#16a34a\",\n\tred: \"#ef4444\",\n\t\"light-red\": \"#fca5a5\",\n\t\"dark-red\": \"#dc2626\",\n\tviolet: \"#8b5cf6\",\n\t\"light-violet\": \"#c4b5fd\",\n\t\"dark-violet\": \"#7c3aed\",\n\tyellow: \"#eab308\",\n\torange: \"#f97316\",\n\t\"light-orange\": \"#fdba74\",\n};\n\nfunction isRecord(value: unknown): value is TlUnknownObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): TlUnknownObject | undefined {\n\treturn isRecord(value) ? value : undefined;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n\treturn Array.isArray(value) ? value : undefined;\n}\n\nfunction getString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n\treturn Math.max(0, Math.min(1, value));\n}\n\nfunction resolveColor(value: string | undefined): string {\n\tif (!value) return \"#1d1d1d\";\n\treturn TL_COLORS[value] ?? value;\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\");\n}\n\nfunction escapeHtmlText(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\nfunction formatNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nfunction multiplyMatrix(left: Matrix, right: Matrix): Matrix {\n\treturn {\n\t\ta: left.a * right.a + left.c * right.b,\n\t\tb: left.b * right.a + left.d * right.b,\n\t\tc: left.a * right.c + left.c * right.d,\n\t\td: left.b * right.c + left.d * right.d,\n\t\te: left.a * right.e + left.c * right.f + left.e,\n\t\tf: left.b * right.e + left.d * right.f + left.f,\n\t};\n}\n\nfunction translationMatrix(x: number, y: number): Matrix {\n\treturn { a: 1, b: 0, c: 0, d: 1, e: x, f: y };\n}\n\nfunction rotationMatrix(radians: number): Matrix {\n\tconst cos = Math.cos(radians);\n\tconst sin = Math.sin(radians);\n\treturn { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 };\n}\n\nfunction applyMatrix(\n\tmatrix: Matrix,\n\tpoint: { x: number; y: number },\n): { x: number; y: number } {\n\treturn {\n\t\tx: matrix.a * point.x + matrix.c * point.y + matrix.e,\n\t\ty: matrix.b * point.x + matrix.d * point.y + matrix.f,\n\t};\n}\n\nfunction matrixRotation(matrix: Matrix): number {\n\treturn Math.atan2(matrix.b, matrix.a);\n}\n\nfunction opacityToUnit(value: unknown): number {\n\tconst numeric = getNumber(value);\n\tif (numeric == null) return 1;\n\treturn numeric > 1 ? clamp01(numeric / 100) : clamp01(numeric);\n}\n\nfunction sizeToStrokePx(size: string | undefined, base = 2): number {\n\tif (size === \"s\") return base * 0.75;\n\tif (size === \"l\") return base * 1.5;\n\tif (size === \"xl\") return base * 2.25;\n\treturn base;\n}\n\nfunction sizeToFontPx(size: string | undefined): number {\n\tif (size === \"s\") return 14;\n\tif (size === \"l\") return 24;\n\tif (size === \"xl\") return 32;\n\treturn 18;\n}\n\nfunction dashArrayForStyle(\n\tdash: string | undefined,\n\tstrokeWidth: number,\n): string | undefined {\n\tif (!dash || dash === \"solid\") return undefined;\n\tif (dash === \"dotted\") {\n\t\treturn `${formatNumber(Math.max(1.25, strokeWidth))} ${formatNumber(Math.max(2.5, strokeWidth * 2.2))}`;\n\t}\n\tif (dash === \"dashed\") {\n\t\treturn `${formatNumber(Math.max(5, strokeWidth * 4))} ${formatNumber(Math.max(3, strokeWidth * 2.2))}`;\n\t}\n\tif (dash === \"draw\") {\n\t\treturn `${formatNumber(Math.max(3, strokeWidth * 2.4))} ${formatNumber(Math.max(2.4, strokeWidth * 1.6))}`;\n\t}\n\treturn dash;\n}\n\nfunction fillAttrs(fill: string | undefined, stroke: string): string {\n\tif (!fill || fill === \"none\") return 'fill=\"none\"';\n\tif (fill === \"solid\") return `fill=\"${stroke}\" fill-opacity=\"0.16\"`;\n\tif (fill === \"semi\") return `fill=\"${stroke}\" fill-opacity=\"0.1\"`;\n\tif (fill === \"pattern\") return `fill=\"${stroke}\" fill-opacity=\"0.07\"`;\n\treturn `fill=\"${resolveColor(fill)}\" fill-opacity=\"0.16\"`;\n}\n\nfunction strokeAttrs(style: {\n\tstroke: string;\n\tstrokeWidth: number;\n\tdash?: string;\n\tlineCap?: \"round\" | \"square\" | \"butt\";\n\tlineJoin?: \"round\" | \"miter\" | \"bevel\";\n}): string {\n\tconst dashArray = dashArrayForStyle(style.dash, style.strokeWidth);\n\tconst dashAttr = dashArray ? ` stroke-dasharray=\"${dashArray}\"` : \"\";\n\tconst lineCap = style.lineCap ? ` stroke-linecap=\"${style.lineCap}\"` : \"\";\n\tconst lineJoin = style.lineJoin ? ` stroke-linejoin=\"${style.lineJoin}\"` : \"\";\n\treturn `stroke=\"${style.stroke}\" stroke-width=\"${formatNumber(style.strokeWidth)}\"${dashAttr}${lineCap}${lineJoin}`;\n}\n\nfunction wrapOpacity(svg: string, opacity: number): string {\n\tif (opacity >= 0.999) return svg;\n\treturn `<g opacity=\"${formatNumber(opacity)}\">${svg}</g>`;\n}\n\nfunction buildForeignObjectTextSvg(options: {\n\tx?: number;\n\ty?: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tpadding?: number;\n\talign?: string;\n\tverticalAlign?: string;\n\tfontWeight?: number;\n\titalic?: boolean;\n\tlineHeightRatio?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n}): string {\n\tconst x = options.x ?? 0;\n\tconst y = options.y ?? 0;\n\tconst w = Math.max(1, options.width);\n\tconst h = Math.max(1, options.height);\n\tconst padding = options.padding ?? 0;\n\tconst align =\n\t\toptions.align === \"end\" || options.align === \"right\"\n\t\t\t? \"right\"\n\t\t\t: options.align === \"middle\" || options.align === \"center\"\n\t\t\t\t? \"center\"\n\t\t\t\t: \"left\";\n\tconst justify =\n\t\talign === \"right\" ? \"flex-end\" : align === \"center\" ? \"center\" : \"flex-start\";\n\tconst vertical =\n\t\toptions.verticalAlign === \"end\" || options.verticalAlign === \"bottom\"\n\t\t\t? \"flex-end\"\n\t\t\t: options.verticalAlign === \"middle\" || options.verticalAlign === \"center\"\n\t\t\t\t? \"center\"\n\t\t\t\t: \"flex-start\";\n\tconst lineHeight = options.fontSize * (options.lineHeightRatio ?? 1.25);\n\tconst weight =\n\t\toptions.fontWeight != null ? `font-weight:${options.fontWeight};` : \"\";\n\tconst fontStyle = options.italic ? \"font-style:italic;\" : \"\";\n\tconst background = options.background ? `background:${options.background};` : \"\";\n\tconst radius =\n\t\toptions.borderRadius != null\n\t\t\t? `border-radius:${formatNumber(options.borderRadius)}px;`\n\t\t\t: \"\";\n\treturn `<foreignObject x=\"${formatNumber(x)}\" y=\"${formatNumber(y)}\" width=\"${formatNumber(w)}\" height=\"${formatNumber(h)}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${formatNumber(padding)}px;display:flex;align-items:${vertical};justify-content:${justify};text-align:${align};white-space:pre-wrap;word-break:break-word;overflow:hidden;color:${options.color};font-size:${formatNumber(options.fontSize)}px;line-height:${formatNumber(lineHeight)}px;font-family:system-ui,sans-serif;${weight}${fontStyle}${background}${radius}\">${escapeHtmlText(options.text)}</div></foreignObject>`;\n}\n\nfunction richTextToPlainText(value: unknown): string {\n\tconst parts: string[] = [];\n\n\tfunction walk(node: unknown): void {\n\t\tif (typeof node === \"string\") {\n\t\t\tparts.push(node);\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(node)) {\n\t\t\tfor (const child of node) walk(child);\n\t\t\treturn;\n\t\t}\n\t\tconst record = asRecord(node);\n\t\tif (!record) return;\n\t\tconst type = getString(record.type);\n\t\tif (type === \"hardBreak\") {\n\t\t\tparts.push(\"\\n\");\n\t\t\treturn;\n\t\t}\n\t\tconst text = getString(record.text);\n\t\tif (text) parts.push(text);\n\t\tconst content = asArray(record.content);\n\t\tif (content) {\n\t\t\tconst before = parts.length;\n\t\t\tfor (const child of content) walk(child);\n\t\t\tif (\n\t\t\t\tparts.length > before &&\n\t\t\t\t(type === \"paragraph\" ||\n\t\t\t\t\ttype === \"heading\" ||\n\t\t\t\t\ttype === \"blockquote\" ||\n\t\t\t\t\ttype === \"listItem\") &&\n\t\t\t\tparts[parts.length - 1] !== \"\\n\"\n\t\t\t) {\n\t\t\t\tparts.push(\"\\n\");\n\t\t\t}\n\t\t}\n\t}\n\n\twalk(value);\n\treturn parts\n\t\t.join(\"\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd();\n}\n\nfunction extractPlainText(props: TlUnknownObject): string {\n\tconst direct = getString(props.text);\n\tif (direct != null) return direct;\n\tconst plain = getString(props.plainText);\n\tif (plain != null) return plain;\n\tconst rich = richTextToPlainText(props.richText);\n\tif (rich) return rich;\n\treturn \"\";\n}\n\nfunction numberOr(value: unknown, fallback: number): number {\n\treturn getNumber(value) ?? fallback;\n}\n\nfunction decodeBase64Bytes(base64: string): Uint8Array {\n\tif (!base64) return new Uint8Array();\n\tconst uint8ArrayCtor = Uint8Array as typeof Uint8Array & {\n\t\tfromBase64?: (value: string) => Uint8Array;\n\t};\n\tif (typeof uint8ArrayCtor.fromBase64 === \"function\") {\n\t\treturn uint8ArrayCtor.fromBase64(base64);\n\t}\n\tif (typeof atob === \"function\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let index = 0; index < binary.length; index++) {\n\t\t\tbytes[index] = binary.charCodeAt(index);\n\t\t}\n\t\treturn bytes;\n\t}\n\tconst globalBuffer = (\n\t\tglobalThis as typeof globalThis & {\n\t\t\tBuffer?: { from(input: string, encoding: string): Uint8Array };\n\t\t}\n\t).Buffer;\n\tif (globalBuffer) {\n\t\treturn new Uint8Array(globalBuffer.from(base64, \"base64\"));\n\t}\n\treturn new Uint8Array();\n}\n\nfunction float16BitsToNumber(bits: number): number {\n\tconst sign = (bits & 0x8000) !== 0 ? -1 : 1;\n\tconst exponent = (bits >> 10) & 0x1f;\n\tconst fraction = bits & 0x03ff;\n\tif (exponent === 0) {\n\t\tif (fraction === 0) return sign === -1 ? -0 : 0;\n\t\treturn sign * (fraction / 1024) * 2 ** -14;\n\t}\n\tif (exponent === 0x1f) {\n\t\treturn fraction === 0 ? sign * Infinity : Number.NaN;\n\t}\n\treturn sign * (1 + fraction / 1024) * 2 ** (exponent - 15);\n}\n\nfunction getFloat16(dataView: DataView, offset: number): number {\n\tconst native = dataView as DataView & {\n\t\tgetFloat16?: (byteOffset: number, littleEndian?: boolean) => number;\n\t};\n\tif (typeof native.getFloat16 === \"function\") {\n\t\treturn native.getFloat16(offset, true);\n\t}\n\treturn float16BitsToNumber(dataView.getUint16(offset, true));\n}\n\nfunction isUsableDecodedPoints(points: readonly Point[]): boolean {\n\treturn (\n\t\tpoints.length > 0 &&\n\t\tpoints.every(\n\t\t\t(point) =>\n\t\t\t\tNumber.isFinite(point.x) &&\n\t\t\t\tNumber.isFinite(point.y) &&\n\t\t\t\t(point.pressure == null || Number.isFinite(point.pressure)),\n\t\t)\n\t);\n}\n\nfunction decodeDrawPathAsDeltaPoints(path: string): Point[] {\n\tconst bytes = decodeBase64Bytes(path);\n\tif (bytes.length < 12 || (bytes.length - 12) % 6 !== 0) return [];\n\tconst dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\tlet x = dataView.getFloat32(0, true);\n\tlet y = dataView.getFloat32(4, true);\n\tlet z = dataView.getFloat32(8, true);\n\tconst points: Point[] = [{ x, y, pressure: clamp01(z) }];\n\tfor (let offset = 12; offset < bytes.length; offset += 6) {\n\t\tx += getFloat16(dataView, offset);\n\t\ty += getFloat16(dataView, offset + 2);\n\t\tz += getFloat16(dataView, offset + 4);\n\t\tpoints.push({ x, y, pressure: clamp01(z) });\n\t}\n\treturn isUsableDecodedPoints(points) ? points : [];\n}\n\nfunction decodeDrawPathAsLegacyPoints(path: string): Point[] {\n\tconst bytes = decodeBase64Bytes(path);\n\tif (bytes.length === 0 || bytes.length % 6 !== 0) return [];\n\tconst dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\tconst points: Point[] = [];\n\tfor (let offset = 0; offset < bytes.length; offset += 6) {\n\t\tpoints.push({\n\t\t\tx: getFloat16(dataView, offset),\n\t\t\ty: getFloat16(dataView, offset + 2),\n\t\t\tpressure: clamp01(getFloat16(dataView, offset + 4)),\n\t\t});\n\t}\n\treturn isUsableDecodedPoints(points) ? points : [];\n}\n\nfunction decodeDrawPath(path: string): Point[] {\n\tconst deltaPoints = decodeDrawPathAsDeltaPoints(path);\n\treturn deltaPoints.length > 0 ? deltaPoints : decodeDrawPathAsLegacyPoints(path);\n}\n\nfunction unwrapStoredRecord(value: unknown): TlRecord | null {\n\tconst record = asRecord(value);\n\tif (!record) return null;\n\tconst state = asRecord(record.state);\n\treturn (state ?? record) as TlRecord;\n}\n\nfunction inferPageIdFromSession(input: TlSnapshotInput): string | undefined {\n\tif (!isRecord(input) || !(\"session\" in input)) return undefined;\n\tconst session = asRecord(input.session);\n\tif (!session) return undefined;\n\tconst direct = getString(session.currentPageId) ?? getString(session.pageId);\n\tif (direct) return direct;\n\tconst pageState = asRecord(session.pageState);\n\tif (!pageState) return undefined;\n\treturn getString(pageState.pageId) ?? getString(pageState.currentPageId);\n}\n\nfunction recordsFromDocument(document: unknown): TlRecord[] {\n\tconst snapshot = asRecord(document);\n\tif (!snapshot) return [];\n\tif (isRecord(snapshot.store)) {\n\t\treturn Object.values(snapshot.store) as TlRecord[];\n\t}\n\treturn Object.values(snapshot)\n\t\t.map((value) => unwrapStoredRecord(value))\n\t\t.filter((value): value is TlRecord => value != null);\n}\n\nfunction normalizeSnapshot(\n\tinput: TlSnapshotInput,\n\toptions: TldrawSnapshotImportOptions,\n): NormalizedSnapshot {\n\tconst rawInput = asRecord(input) ?? {};\n\tlet records: TlRecord[] = [];\n\tif (Array.isArray(rawInput.documents)) {\n\t\trecords = rawInput.documents\n\t\t\t.map((value) => unwrapStoredRecord(value))\n\t\t\t.filter((value): value is TlRecord => value != null);\n\t} else if (isRecord(rawInput.store)) {\n\t\trecords = Object.values(rawInput.store) as TlRecord[];\n\t} else if (\"document\" in rawInput) {\n\t\trecords = recordsFromDocument(rawInput.document);\n\t}\n\n\tconst recordsMap = new Map<string, TlRecord>();\n\tconst shapes = new Map<string, TlShapeRecord>();\n\tconst assets = new Map<string, TlAssetRecord>();\n\tconst bindings = new Map<string, TlBindingRecord>();\n\tconst pages = new Map<string, TlPageRecord>();\n\n\tfor (const record of records) {\n\t\tconst raw = asRecord(record);\n\t\tconst id = raw ? getString(raw.id) : undefined;\n\t\tconst typeName = raw ? getString(raw.typeName) : undefined;\n\t\tif (!id || !typeName) continue;\n\t\trecordsMap.set(id, record);\n\t\tif (typeName === \"shape\") {\n\t\t\tshapes.set(id, record as TlShapeRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"asset\") {\n\t\t\tassets.set(id, record as TlAssetRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"binding\") {\n\t\t\tbindings.set(id, record as TlBindingRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"page\") {\n\t\t\tpages.set(id, record as TlPageRecord);\n\t\t}\n\t}\n\n\tconst selectedPageId =\n\t\toptions.pageId ??\n\t\tinferPageIdFromSession(input) ??\n\t\tpages.keys().next().value ??\n\t\tArray.from(shapes.values()).find((shape) => shape.parentId.startsWith(\"page:\"))\n\t\t\t?.parentId;\n\n\treturn {\n\t\trecords: recordsMap,\n\t\tshapes,\n\t\tassets,\n\t\tbindings,\n\t\tpages,\n\t\tselectedPageId,\n\t\toptions,\n\t\tlocalBoundsCache: new Map(),\n\t\tworldMatrixCache: new Map(),\n\t\trootPageCache: new Map(),\n\t};\n}\n\nfunction normalizePoint(value: unknown): Point | null {\n\tif (Array.isArray(value)) {\n\t\tconst [x, y, pressure] = value;\n\t\tconst px = getNumber(x);\n\t\tconst py = getNumber(y);\n\t\tif (px == null || py == null) return null;\n\t\treturn {\n\t\t\tx: px,\n\t\t\ty: py,\n\t\t\t...(getNumber(pressure) != null\n\t\t\t\t? { pressure: clamp01(getNumber(pressure) ?? 0.5) }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tconst record = asRecord(value);\n\tif (!record) return null;\n\tconst x = getNumber(record.x);\n\tconst y = getNumber(record.y);\n\tif (x == null || y == null) return null;\n\tconst pressure = getNumber(record.pressure) ?? getNumber(record.z);\n\treturn {\n\t\tx,\n\t\ty,\n\t\t...(pressure != null ? { pressure: clamp01(pressure) } : {}),\n\t\t...(getString(record.index) ? { index: getString(record.index) } : {}),\n\t};\n}\n\nfunction collectStrokePoints(props: TlUnknownObject): Point[] {\n\tconst segments = asArray(props.segments) ?? [];\n\tconst points: Point[] = [];\n\tconst scaleX = getNumber(props.scaleX) ?? getNumber(props.scale) ?? 1;\n\tconst scaleY = getNumber(props.scaleY) ?? getNumber(props.scale) ?? 1;\n\tfor (const segment of segments) {\n\t\tconst record = asRecord(segment);\n\t\tconst encodedPath = record ? getString(record.path) : undefined;\n\t\tconst rawPoints = record ? (asArray(record.points) ?? []) : [];\n\t\tconst segmentIsAbsolute = Boolean(encodedPath);\n\t\tconst decodedPoints =\n\t\t\trawPoints.length > 0\n\t\t\t\t? rawPoints\n\t\t\t\t\t\t.map((value) => normalizePoint(value))\n\t\t\t\t\t\t.filter((value): value is Point => value != null)\n\t\t\t\t: encodedPath\n\t\t\t\t\t? decodeDrawPath(encodedPath)\n\t\t\t\t\t: [];\n\t\tconst previous = points[points.length - 1];\n\t\tfor (let index = 0; index < decodedPoints.length; index++) {\n\t\t\tconst point = decodedPoints[index];\n\t\t\tif (!point) continue;\n\t\t\tconst scaledPoint = {\n\t\t\t\tx: point.x * scaleX,\n\t\t\t\ty: point.y * scaleY,\n\t\t\t\t...(point.pressure != null ? { pressure: point.pressure } : {}),\n\t\t\t};\n\t\t\tif (index === 0 && previous && !segmentIsAbsolute) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tx: previous.x + scaledPoint.x,\n\t\t\t\t\ty: previous.y + scaledPoint.y,\n\t\t\t\t\t...(scaledPoint.pressure != null\n\t\t\t\t\t\t? { pressure: scaledPoint.pressure }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpoints.push(scaledPoint);\n\t\t\t}\n\t\t}\n\t}\n\treturn points;\n}\n\nfunction collectLinePoints(props: TlUnknownObject): Point[] {\n\tconst pointsRecord = asRecord(props.points);\n\tif (pointsRecord) {\n\t\tconst points = Object.values(pointsRecord)\n\t\t\t.map((value) => normalizePoint(value))\n\t\t\t.filter((value): value is Point => value != null)\n\t\t\t.sort((left, right) => (left.index ?? \"\").localeCompare(right.index ?? \"\"));\n\t\tif (points.length > 0) return points;\n\t}\n\tconst arrayPoints = asArray(props.points);\n\tif (arrayPoints) {\n\t\tconst points = arrayPoints\n\t\t\t.map((value) => normalizePoint(value))\n\t\t\t.filter((value): value is Point => value != null);\n\t\tif (points.length > 0) return points;\n\t}\n\tconst start = normalizePoint(props.start);\n\tconst end = normalizePoint(props.end);\n\tif (start && end) return [start, end];\n\treturn [];\n}\n\nfunction freehandPadding(strokeWidth: number): number {\n\treturn Math.max(strokeWidth * 0.75 + 4, strokeWidth / 2 + 6);\n}\n\nfunction boundsFromPoints(points: readonly Point[], padding = 0): Rect | null {\n\tif (points.length === 0) return null;\n\tlet minX = Number.POSITIVE_INFINITY;\n\tlet minY = Number.POSITIVE_INFINITY;\n\tlet maxX = Number.NEGATIVE_INFINITY;\n\tlet maxY = Number.NEGATIVE_INFINITY;\n\tfor (const point of points) {\n\t\tminX = Math.min(minX, point.x);\n\t\tminY = Math.min(minY, point.y);\n\t\tmaxX = Math.max(maxX, point.x);\n\t\tmaxY = Math.max(maxY, point.y);\n\t}\n\treturn {\n\t\tx: minX - padding,\n\t\ty: minY - padding,\n\t\twidth: Math.max(maxX - minX + padding * 2, 1),\n\t\theight: Math.max(maxY - minY + padding * 2, 1),\n\t};\n}\n\nfunction computeArrowRoute(props: TlUnknownObject): {\n\tkind: \"line\" | \"polyline\" | \"quadratic\";\n\tpoints: Point[];\n\tcontrol?: Point;\n\tstartRef: Point;\n\tendRef: Point;\n} | null {\n\tconst start = normalizePoint(props.start);\n\tconst end = normalizePoint(props.end);\n\tif (!start || !end) return null;\n\tconst kind = getString(props.kind);\n\tconst bend = getNumber(props.bend) ?? 0;\n\tif (kind === \"elbow\") {\n\t\tconst t = Math.max(0.1, Math.min(0.9, getNumber(props.elbowMidPoint) ?? 0.5));\n\t\tconst midX = start.x + (end.x - start.x) * t;\n\t\tconst p1: Point = { x: midX, y: start.y };\n\t\tconst p2: Point = { x: midX, y: end.y };\n\t\treturn {\n\t\t\tkind: \"polyline\",\n\t\t\tpoints: [start, p1, p2, end],\n\t\t\tstartRef: p1,\n\t\t\tendRef: p2,\n\t\t};\n\t}\n\tif (kind === \"arc\" || Math.abs(bend) > 0.5) {\n\t\tconst midX = (start.x + end.x) / 2;\n\t\tconst midY = (start.y + end.y) / 2;\n\t\tconst dx = end.x - start.x;\n\t\tconst dy = end.y - start.y;\n\t\tconst length = Math.hypot(dx, dy) || 1;\n\t\tconst nx = -dy / length;\n\t\tconst ny = dx / length;\n\t\tconst control: Point = { x: midX + nx * bend, y: midY + ny * bend };\n\t\treturn {\n\t\t\tkind: \"quadratic\",\n\t\t\tpoints: [start, end],\n\t\t\tcontrol,\n\t\t\tstartRef: control,\n\t\t\tendRef: control,\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"line\",\n\t\tpoints: [start, end],\n\t\tstartRef: end,\n\t\tendRef: start,\n\t};\n}\n\nfunction defaultShapeRect(type: string, props: TlUnknownObject): Rect {\n\tconst w = getNumber(props.w);\n\tconst h = getNumber(props.h);\n\tif (type === \"image\" || type === \"video\") {\n\t\treturn { x: 0, y: 0, width: w ?? 240, height: h ?? 160 };\n\t}\n\tif (type === \"bookmark\") {\n\t\treturn { x: 0, y: 0, width: w ?? 320, height: h ?? 180 };\n\t}\n\tif (type === \"embed\") {\n\t\treturn { x: 0, y: 0, width: w ?? 360, height: h ?? 220 };\n\t}\n\tif (type === \"frame\") {\n\t\treturn { x: 0, y: 0, width: w ?? 360, height: h ?? 240 };\n\t}\n\tif (type === \"note\") {\n\t\treturn { x: 0, y: 0, width: w ?? 220, height: h ?? 180 };\n\t}\n\treturn { x: 0, y: 0, width: w ?? 120, height: h ?? 90 };\n}\n\nfunction resolveShapeLocalBounds(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n\tstack: Set<string> = new Set(),\n): Rect {\n\tconst cached = snapshot.localBoundsCache.get(shapeId);\n\tif (cached) return cached;\n\tif (stack.has(shapeId)) return { x: 0, y: 0, width: 120, height: 90 };\n\tstack.add(shapeId);\n\n\tconst shape = snapshot.shapes.get(shapeId);\n\tif (!shape) {\n\t\tstack.delete(shapeId);\n\t\treturn { x: 0, y: 0, width: 120, height: 90 };\n\t}\n\n\tconst props = asRecord(shape.props) ?? {};\n\tconst strokeWidth = sizeToStrokePx(\n\t\tgetString(props.size),\n\t\tshape.type === \"highlight\" ? 16 : 2.5,\n\t);\n\tlet bounds: Rect | null = null;\n\n\tif (shape.type === \"draw\" || shape.type === \"highlight\") {\n\t\tbounds = boundsFromPoints(\n\t\t\tcollectStrokePoints(props),\n\t\t\tfreehandPadding(strokeWidth),\n\t\t);\n\t} else if (shape.type === \"line\") {\n\t\tbounds = boundsFromPoints(\n\t\t\tcollectLinePoints(props),\n\t\t\tMath.max(6, strokeWidth * 2.5),\n\t\t);\n\t} else if (shape.type === \"arrow\") {\n\t\tconst route = computeArrowRoute(props);\n\t\tif (route) {\n\t\t\tconst routePoints = [...route.points, route.startRef, route.endRef];\n\t\t\tif (route.control) routePoints.push(route.control);\n\t\t\tbounds = boundsFromPoints(routePoints, Math.max(10, strokeWidth * 5));\n\t\t}\n\t} else if (shape.type === \"text\") {\n\t\tconst text = extractPlainText(props);\n\t\tconst fontSize =\n\t\t\tgetNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\t\tconst w = getNumber(props.w);\n\t\tconst h = getNumber(props.h);\n\t\tbounds =\n\t\t\tw != null && h != null\n\t\t\t\t? { x: 0, y: 0, width: Math.max(1, w), height: Math.max(1, h) }\n\t\t\t\t: { x: 0, y: 0, ...measureTextBoundsLocal(text, fontSize) };\n\t} else if (shape.type === \"group\") {\n\t\tconst childRects = Array.from(snapshot.shapes.values())\n\t\t\t.filter((candidate) => candidate.parentId === shape.id)\n\t\t\t.map((candidate) => {\n\t\t\t\tconst childBounds = resolveShapeLocalBounds(snapshot, candidate.id, stack);\n\t\t\t\treturn {\n\t\t\t\t\tx: candidate.x + childBounds.x,\n\t\t\t\t\ty: candidate.y + childBounds.y,\n\t\t\t\t\twidth: childBounds.width,\n\t\t\t\t\theight: childBounds.height,\n\t\t\t\t};\n\t\t\t});\n\t\tif (childRects.length > 0) {\n\t\t\tconst points: Point[] = [];\n\t\t\tfor (const rect of childRects) {\n\t\t\t\tpoints.push({ x: rect.x, y: rect.y });\n\t\t\t\tpoints.push({ x: rect.x + rect.width, y: rect.y + rect.height });\n\t\t\t}\n\t\t\tbounds = boundsFromPoints(points, 0);\n\t\t}\n\t}\n\n\tif (!bounds) {\n\t\tbounds = defaultShapeRect(shape.type, props);\n\t}\n\n\tconst normalized = normalizeRect(bounds);\n\tsnapshot.localBoundsCache.set(shapeId, normalized);\n\tstack.delete(shapeId);\n\treturn normalized;\n}\n\nfunction resolveShapeWorldMatrix(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n\tstack: Set<string> = new Set(),\n): Matrix {\n\tconst cached = snapshot.worldMatrixCache.get(shapeId);\n\tif (cached) return cached;\n\tif (stack.has(shapeId)) return IDENTITY_MATRIX;\n\tstack.add(shapeId);\n\n\tconst shape = snapshot.shapes.get(shapeId);\n\tif (!shape) {\n\t\tstack.delete(shapeId);\n\t\treturn IDENTITY_MATRIX;\n\t}\n\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shapeId, stack);\n\tconst cx = localBounds.x + localBounds.width / 2;\n\tconst cy = localBounds.y + localBounds.height / 2;\n\tconst localMatrix = multiplyMatrix(\n\t\ttranslationMatrix(shape.x, shape.y),\n\t\tmultiplyMatrix(\n\t\t\ttranslationMatrix(cx, cy),\n\t\t\tmultiplyMatrix(\n\t\t\t\trotationMatrix(shape.rotation ?? 0),\n\t\t\t\ttranslationMatrix(-cx, -cy),\n\t\t\t),\n\t\t),\n\t);\n\n\tconst parentShape = snapshot.shapes.get(shape.parentId);\n\tconst world = parentShape\n\t\t? multiplyMatrix(\n\t\t\t\tresolveShapeWorldMatrix(snapshot, parentShape.id, stack),\n\t\t\t\tlocalMatrix,\n\t\t\t)\n\t\t: localMatrix;\n\n\tsnapshot.worldMatrixCache.set(shapeId, world);\n\tstack.delete(shapeId);\n\treturn world;\n}\n\nfunction resolveRootPageId(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n): string | undefined {\n\tconst cached = snapshot.rootPageCache.get(shapeId);\n\tif (cached !== undefined) return cached ?? undefined;\n\tconst visited = new Set<string>();\n\tlet current = snapshot.shapes.get(shapeId);\n\twhile (current && !visited.has(current.id)) {\n\t\tvisited.add(current.id);\n\t\tif (\n\t\t\tsnapshot.pages.has(current.parentId) ||\n\t\t\tcurrent.parentId.startsWith(\"page:\")\n\t\t) {\n\t\t\tsnapshot.rootPageCache.set(shapeId, current.parentId);\n\t\t\treturn current.parentId;\n\t\t}\n\t\tcurrent = snapshot.shapes.get(current.parentId);\n\t}\n\tsnapshot.rootPageCache.set(shapeId, null);\n\treturn undefined;\n}\n\nfunction shouldIncludeShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): boolean {\n\tif (!snapshot.selectedPageId) return true;\n\tconst rootPageId = resolveRootPageId(snapshot, shape.id);\n\tif (!rootPageId) return snapshot.pages.size === 0;\n\treturn rootPageId === snapshot.selectedPageId;\n}\n\nfunction buildItemPlacement(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n): { x: number; y: number; bounds: Rect; rotation: number } {\n\tconst world = resolveShapeWorldMatrix(snapshot, shape.id);\n\tconst itemMatrix = multiplyMatrix(\n\t\tworld,\n\t\ttranslationMatrix(localBounds.x, localBounds.y),\n\t);\n\tconst origin = applyMatrix(itemMatrix, { x: 0, y: 0 });\n\treturn {\n\t\tx: origin.x,\n\t\ty: origin.y,\n\t\trotation: matrixRotation(itemMatrix),\n\t\tbounds: {\n\t\t\tx: origin.x,\n\t\t\ty: origin.y,\n\t\t\twidth: Math.max(1, localBounds.width),\n\t\t\theight: Math.max(1, localBounds.height),\n\t\t},\n\t};\n}\n\nfunction buildItemBase(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n): Pick<VectorSceneItem, \"id\" | \"x\" | \"y\" | \"bounds\" | \"rotation\" | \"locked\"> {\n\tconst placement = buildItemPlacement(snapshot, shape, localBounds);\n\treturn {\n\t\tid: shape.id,\n\t\tx: placement.x,\n\t\ty: placement.y,\n\t\tbounds: placement.bounds,\n\t\trotation: placement.rotation,\n\t\tlocked: shape.isLocked,\n\t};\n}\n\nfunction shapeOpacity(shape: TlShapeRecord): number {\n\tconst props = asRecord(shape.props) ?? {};\n\treturn clamp01((shape.opacity ?? 1) * opacityToUnit(props.opacity));\n}\n\nfunction shapeStrokeColor(shape: TlShapeRecord): string {\n\tconst props = asRecord(shape.props) ?? {};\n\treturn resolveColor(getString(props.color));\n}\n\nfunction createCustomImportedItem(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n\tinnerSvg: string,\n\tstyle?: Partial<Pick<VectorSceneItem, \"stroke\" | \"strokeWidth\">>,\n): VectorSceneItem {\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst custom = createCustomShapeItem(shape.id, base.bounds, { svg: innerSvg });\n\treturn {\n\t\t...custom,\n\t\t...base,\n\t\t...(style?.stroke ? { stroke: style.stroke } : {}),\n\t\t...(style?.strokeWidth != null ? { strokeWidth: style.strokeWidth } : {}),\n\t};\n}\n\nfunction polygonPath(points: readonly { x: number; y: number }[]): string {\n\tif (points.length === 0) return \"\";\n\tlet path = `M${formatNumber(points[0]?.x ?? 0)} ${formatNumber(points[0]?.y ?? 0)}`;\n\tfor (let index = 1; index < points.length; index++) {\n\t\tconst point = points[index];\n\t\tif (!point) continue;\n\t\tpath += ` L${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t}\n\treturn `${path} Z`;\n}\n\nfunction cloudPath(width: number, height: number): string {\n\tconst r = Math.min(width, height) * 0.15;\n\treturn `M${formatNumber(r)} ${formatNumber(height * 0.3)} Q0 ${formatNumber(height * 0.1)} ${formatNumber(width * 0.15)} ${formatNumber(height * 0.05)} Q${formatNumber(width * 0.3)} 0 ${formatNumber(width * 0.45)} ${formatNumber(height * 0.1)} Q${formatNumber(width * 0.7)} 0 ${formatNumber(width * 0.8)} ${formatNumber(height * 0.15)} Q${formatNumber(width)} ${formatNumber(height * 0.2)} ${formatNumber(width * 0.9)} ${formatNumber(height * 0.5)} Q${formatNumber(width)} ${formatNumber(height * 0.7)} ${formatNumber(width * 0.85)} ${formatNumber(height * 0.8)} Q${formatNumber(width * 0.7)} ${formatNumber(height)} ${formatNumber(width * 0.5)} ${formatNumber(height * 0.9)} Q${formatNumber(width * 0.3)} ${formatNumber(height)} ${formatNumber(width * 0.15)} ${formatNumber(height * 0.85)} Q0 ${formatNumber(height * 0.8)} ${formatNumber(r * 0.5)} ${formatNumber(height * 0.6)} Q0 ${formatNumber(height * 0.5)} ${formatNumber(r)} ${formatNumber(height * 0.3)} Z`;\n}\n\nfunction geoPath(geo: string, width: number, height: number): string | null {\n\tif (geo === \"diamond\" || geo === \"rhombus\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width / 2, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width / 2, y: height },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t]);\n\t}\n\tif (geo === \"triangle\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width / 2, y: 0 },\n\t\t\t{ x: width, y: height },\n\t\t\t{ x: 0, y: height },\n\t\t]);\n\t}\n\tif (geo === \"trapezoid\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width * 0.2, y: 0 },\n\t\t\t{ x: width * 0.8, y: 0 },\n\t\t\t{ x: width, y: height },\n\t\t\t{ x: 0, y: height },\n\t\t]);\n\t}\n\tif (geo === \"hexagon\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width * 0.25, y: 0 },\n\t\t\t{ x: width * 0.75, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width * 0.75, y: height },\n\t\t\t{ x: width * 0.25, y: height },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t]);\n\t}\n\tif (geo === \"star\") {\n\t\tconst cx = width / 2;\n\t\tconst cy = height / 2;\n\t\tconst rOut = Math.min(width, height) / 2;\n\t\tconst rIn = rOut * 0.45;\n\t\tconst points: { x: number; y: number }[] = [];\n\t\tfor (let index = 0; index < 5; index++) {\n\t\t\tconst outer = (index * 2 * Math.PI) / 5 - Math.PI / 2;\n\t\t\tconst inner = outer + Math.PI / 5;\n\t\t\tpoints.push({\n\t\t\t\tx: cx + rOut * Math.cos(outer),\n\t\t\t\ty: cy + rOut * Math.sin(outer),\n\t\t\t});\n\t\t\tpoints.push({ x: cx + rIn * Math.cos(inner), y: cy + rIn * Math.sin(inner) });\n\t\t}\n\t\treturn polygonPath(points);\n\t}\n\tif (geo === \"cloud\") {\n\t\treturn cloudPath(width, height);\n\t}\n\tif (geo === \"arrow-right\") {\n\t\treturn polygonPath([\n\t\t\t{ x: 0, y: height * 0.25 },\n\t\t\t{ x: width * 0.62, y: height * 0.25 },\n\t\t\t{ x: width * 0.62, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width * 0.62, y: height },\n\t\t\t{ x: width * 0.62, y: height * 0.75 },\n\t\t\t{ x: 0, y: height * 0.75 },\n\t\t]);\n\t}\n\tif (geo === \"arrow-left\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width, y: height * 0.25 },\n\t\t\t{ x: width * 0.38, y: height * 0.25 },\n\t\t\t{ x: width * 0.38, y: 0 },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t\t{ x: width * 0.38, y: height },\n\t\t\t{ x: width * 0.38, y: height * 0.75 },\n\t\t\t{ x: width, y: height * 0.75 },\n\t\t]);\n\t}\n\tif (geo === \"check-box\") {\n\t\treturn `M0 0 H${formatNumber(width)} V${formatNumber(height)} H0 Z M${formatNumber(width * 0.2)} ${formatNumber(height * 0.56)} L${formatNumber(width * 0.42)} ${formatNumber(height * 0.78)} L${formatNumber(width * 0.82)} ${formatNumber(height * 0.24)}`;\n\t}\n\tif (geo === \"x-box\") {\n\t\treturn `M0 0 H${formatNumber(width)} V${formatNumber(height)} H0 Z M${formatNumber(width * 0.22)} ${formatNumber(height * 0.22)} L${formatNumber(width * 0.78)} ${formatNumber(height * 0.78)} M${formatNumber(width * 0.78)} ${formatNumber(height * 0.22)} L${formatNumber(width * 0.22)} ${formatNumber(height * 0.78)}`;\n\t}\n\treturn null;\n}\n\nfunction renderGeoShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst geo = getString(props.geo) ?? \"rectangle\";\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst text = extractPlainText(props);\n\tconst fontSize = getNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\tconst customPath = geoPath(geo, width, height);\n\tconst shapeMarkup =\n\t\tgeo === \"ellipse\" || geo === \"oval\"\n\t\t\t? `<ellipse cx=\"${formatNumber(width / 2)}\" cy=\"${formatNumber(height / 2)}\" rx=\"${formatNumber(width / 2)}\" ry=\"${formatNumber(height / 2)}\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t: customPath\n\t\t\t\t? `<path d=\"${customPath}\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t\t: `<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"8\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\tconst textMarkup = text\n\t\t? buildForeignObjectTextSvg({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\ttext,\n\t\t\t\tfontSize,\n\t\t\t\tcolor: stroke,\n\t\t\t\tpadding: 10,\n\t\t\t\talign: getString(props.align),\n\t\t\t\tverticalAlign: getString(props.verticalAlign),\n\t\t\t})\n\t\t: \"\";\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(`${shapeMarkup}${textMarkup}`, shapeOpacity(shape)),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction renderTextShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst text = extractPlainText(props);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst fontSize = getNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\tconst hasFixedBounds = getNumber(props.w) != null && getNumber(props.h) != null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst childrenSvg = hasFixedBounds\n\t\t? wrapOpacity(\n\t\t\t\tbuildForeignObjectTextSvg({\n\t\t\t\t\twidth: localBounds.width,\n\t\t\t\t\theight: localBounds.height,\n\t\t\t\t\ttext,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tcolor: stroke,\n\t\t\t\t\tpadding: 4,\n\t\t\t\t\talign: getString(props.textAlign) ?? getString(props.align),\n\t\t\t\t\tverticalAlign: getString(props.verticalAlign),\n\t\t\t\t}),\n\t\t\t\tshapeOpacity(shape),\n\t\t\t)\n\t\t: wrapOpacity(\n\t\t\t\tbuildTextSvg(text, localBounds.width, localBounds.height, stroke, fontSize),\n\t\t\t\tshapeOpacity(shape),\n\t\t\t);\n\treturn {\n\t\t...base,\n\t\ttoolKind: \"text\",\n\t\tstroke,\n\t\ttext,\n\t\ttextFontSize: fontSize,\n\t\t...(hasFixedBounds ? { textFixedBounds: true } : {}),\n\t\tchildrenSvg,\n\t};\n}\n\nfunction renderStrokeShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst points = collectStrokePoints(props);\n\tif (points.length === 0) return null;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst toolKind = shape.type === \"highlight\" ? \"marker\" : \"draw\";\n\tconst strokeWidth =\n\t\tshape.type === \"highlight\"\n\t\t\t? sizeToStrokePx(getString(props.size), 16)\n\t\t\t: sizeToStrokePx(getString(props.size), 2.5);\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst opacity = shapeOpacity(shape) * (shape.type === \"highlight\" ? 0.45 : 1);\n\tconst pathPointsLocal: VectorPathPoint[] = points.map((point) => ({\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t\t...(point.pressure != null ? { pressure: point.pressure } : {}),\n\t}));\n\tconst style: StrokeStyle = {\n\t\tstroke,\n\t\tstrokeWidth,\n\t\t...(opacity < 0.999 ? { strokeOpacity: opacity } : {}),\n\t};\n\treturn {\n\t\t...base,\n\t\ttoolKind,\n\t\tstroke,\n\t\tstrokeWidth,\n\t\t...(style.strokeOpacity != null ? { strokeOpacity: style.strokeOpacity } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: buildFreehandPathSvg(pathPointsLocal, style, toolKind),\n\t};\n}\n\nfunction polylinePath(points: readonly Point[]): string {\n\tif (points.length === 0) return \"\";\n\tlet path = `M${formatNumber(points[0]?.x ?? 0)} ${formatNumber(points[0]?.y ?? 0)}`;\n\tfor (let index = 1; index < points.length; index++) {\n\t\tconst point = points[index];\n\t\tif (!point) continue;\n\t\tpath += ` L${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t}\n\treturn path;\n}\n\nfunction buildArrowHeadSvg(options: {\n\ttip: Point;\n\tfrom: Point;\n\ttype: string | undefined;\n\tstroke: string;\n\tstrokeWidth: number;\n}): string {\n\tconst type = options.type;\n\tif (!type || type === \"none\") return \"\";\n\tconst dx = options.tip.x - options.from.x;\n\tconst dy = options.tip.y - options.from.y;\n\tconst length = Math.hypot(dx, dy);\n\tif (length < 1e-6) return \"\";\n\tconst ux = dx / length;\n\tconst uy = dy / length;\n\tconst headLength = Math.max(10, options.strokeWidth * 4.5);\n\tconst headWidth = Math.max(7, options.strokeWidth * 3);\n\tconst bx = options.tip.x - ux * headLength;\n\tconst by = options.tip.y - uy * headLength;\n\tconst px = -uy;\n\tconst py = ux;\n\tconst left = { x: bx + px * (headWidth / 2), y: by + py * (headWidth / 2) };\n\tconst right = { x: bx - px * (headWidth / 2), y: by - py * (headWidth / 2) };\n\tif (type === \"triangle\") {\n\t\treturn `<polygon points=\"${formatNumber(options.tip.x)},${formatNumber(options.tip.y)} ${formatNumber(left.x)},${formatNumber(left.y)} ${formatNumber(right.x)},${formatNumber(right.y)}\" fill=\"${options.stroke}\" />`;\n\t}\n\tif (type === \"dot\") {\n\t\treturn `<circle cx=\"${formatNumber(options.tip.x)}\" cy=\"${formatNumber(options.tip.y)}\" r=\"${formatNumber(Math.max(3, options.strokeWidth * 1.5))}\" fill=\"${options.stroke}\" />`;\n\t}\n\tif (type === \"diamond\") {\n\t\tconst mid = {\n\t\t\tx: options.tip.x - ux * (headLength / 2),\n\t\t\ty: options.tip.y - uy * (headLength / 2),\n\t\t};\n\t\treturn `<polygon points=\"${formatNumber(options.tip.x)},${formatNumber(options.tip.y)} ${formatNumber(left.x)},${formatNumber(left.y)} ${formatNumber(mid.x - ux * (headLength / 2))},${formatNumber(mid.y - uy * (headLength / 2))} ${formatNumber(right.x)},${formatNumber(right.y)}\" fill=\"none\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linejoin=\"round\" />`;\n\t}\n\tif (type === \"bar\") {\n\t\treturn `<line x1=\"${formatNumber(left.x)}\" y1=\"${formatNumber(left.y)}\" x2=\"${formatNumber(right.x)}\" y2=\"${formatNumber(right.y)}\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linecap=\"round\" />`;\n\t}\n\treturn `<path d=\"M ${formatNumber(left.x)} ${formatNumber(left.y)} L ${formatNumber(options.tip.x)} ${formatNumber(options.tip.y)} L ${formatNumber(right.x)} ${formatNumber(right.y)}\" fill=\"none\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />`;\n}\n\nfunction renderLineShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst points = collectLinePoints(props);\n\tif (points.length < 2) return null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst opacity = shapeOpacity(shape);\n\tconst simple =\n\t\tpoints.length === 2 &&\n\t\t(getString(props.spline) == null || getString(props.spline) === \"line\") &&\n\t\t(!dash || dash === \"solid\");\n\tif (simple) {\n\t\tconst start = points[0];\n\t\tconst end = points[1];\n\t\tif (!start || !end) return null;\n\t\tconst placement = buildItemPlacement(snapshot, shape, localBounds);\n\t\tconst line = lineEndpointsToLocal(\n\t\t\tplacement.bounds,\n\t\t\t{\n\t\t\t\tx: placement.x + (start.x - localBounds.x),\n\t\t\t\ty: placement.y + (start.y - localBounds.y),\n\t\t\t},\n\t\t\t{\n\t\t\t\tx: placement.x + (end.x - localBounds.x),\n\t\t\t\ty: placement.y + (end.y - localBounds.y),\n\t\t\t},\n\t\t);\n\t\tconst item = createLineItem(shape.id, placement.bounds, line, \"line\", {\n\t\t\tstroke,\n\t\t\tstrokeWidth,\n\t\t\t...(opacity < 0.999 ? { strokeOpacity: opacity } : {}),\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\trotation: buildItemBase(snapshot, shape, localBounds).rotation,\n\t\t\tlocked: shape.isLocked,\n\t\t};\n\t}\n\tconst translated = points.map((point) => ({\n\t\t...point,\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t}));\n\tconst inner = `<path d=\"${polylinePath(translated)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, opacity),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction renderArrowShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst route = computeArrowRoute(props);\n\tif (!route) return null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst opacity = shapeOpacity(shape);\n\tconst translate = (point: Point): Point => ({\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t});\n\tconst translatedPoints = route.points.map(translate);\n\tconst translatedStartRef = translate(route.startRef);\n\tconst translatedEndRef = translate(route.endRef);\n\tconst shaft =\n\t\troute.kind === \"quadratic\" && route.control\n\t\t\t? `<path d=\"M${formatNumber(translatedPoints[0]?.x ?? 0)} ${formatNumber(translatedPoints[0]?.y ?? 0)} Q${formatNumber(route.control.x - localBounds.x)} ${formatNumber(route.control.y - localBounds.y)} ${formatNumber(translatedPoints[1]?.x ?? 0)} ${formatNumber(translatedPoints[1]?.y ?? 0)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t: `<path d=\"${polylinePath(translatedPoints)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\tconst startPoint = translatedPoints[0];\n\tconst endPoint = translatedPoints[translatedPoints.length - 1];\n\tif (!startPoint || !endPoint) return null;\n\tconst inner = `${shaft}${buildArrowHeadSvg({ tip: startPoint, from: translatedStartRef, type: getString(props.arrowheadStart), stroke, strokeWidth })}${buildArrowHeadSvg({ tip: endPoint, from: translatedEndRef, type: getString(props.arrowheadEnd), stroke, strokeWidth })}`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, opacity),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction resolveAsset(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): TlAssetRecord | undefined {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst assetId = getString(props.assetId);\n\tif (!assetId) return undefined;\n\treturn snapshot.assets.get(assetId);\n}\n\nfunction resolveAssetUrl(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tasset: TlAssetRecord | undefined,\n): string | undefined {\n\tif (!asset) return undefined;\n\tconst custom = snapshot.options.assetUrlResolver?.(asset, shape);\n\tif (custom) return custom;\n\tconst props = asRecord(asset.props) ?? {};\n\treturn getString(props.src) ?? getString(asRecord(shape.props)?.url);\n}\n\nfunction renderMissingAssetPlaceholder(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tkind: string,\n\tdetail: string,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"12\" fill=\"#f4f4f5\" stroke=\"#a1a1aa\" stroke-width=\"1.5\" stroke-dasharray=\"6 6\" />\n\t\t<path d=\"M${formatNumber(width * 0.18)} ${formatNumber(height * 0.7)} L${formatNumber(width * 0.38)} ${formatNumber(height * 0.48)} L${formatNumber(width * 0.56)} ${formatNumber(height * 0.62)} L${formatNumber(width * 0.76)} ${formatNumber(height * 0.32)} L${formatNumber(width * 0.84)} ${formatNumber(height * 0.4)} L${formatNumber(width * 0.84)} ${formatNumber(height * 0.82)} L${formatNumber(width * 0.18)} ${formatNumber(height * 0.82)} Z\" fill=\"#d4d4d8\" stroke=\"#a1a1aa\" stroke-width=\"1\" />\n\t\t<circle cx=\"${formatNumber(width * 0.34)}\" cy=\"${formatNumber(height * 0.34)}\" r=\"${formatNumber(Math.max(6, Math.min(width, height) * 0.05))}\" fill=\"#a1a1aa\" />\n\t\t${buildForeignObjectTextSvg({ x: 10, y: height * 0.04, width: width - 20, height: height * 0.28, text: kind, fontSize: 15, color: \"#18181b\", fontWeight: 700, align: \"center\", verticalAlign: \"middle\" })}\n\t\t${buildForeignObjectTextSvg({ x: 14, y: height * 0.78, width: width - 28, height: height * 0.16, text: detail, fontSize: 12, color: \"#52525b\", align: \"center\", verticalAlign: \"middle\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction renderImageShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst src = resolveAssetUrl(snapshot, shape, asset);\n\tconst shapeBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tif (!src) {\n\t\treturn renderMissingAssetPlaceholder(\n\t\t\tsnapshot,\n\t\t\tshape,\n\t\t\t\"Image asset missing\",\n\t\t\tasset ? asset.id : (getString(props.assetId) ?? \"asset unavailable\"),\n\t\t);\n\t}\n\tconst assetProps = asRecord(asset?.props) ?? {};\n\tconst intrinsicWidth =\n\t\tgetNumber(assetProps.w) ?? getNumber(props.w) ?? shapeBounds.width;\n\tconst intrinsicHeight =\n\t\tgetNumber(assetProps.h) ?? getNumber(props.h) ?? shapeBounds.height;\n\tconst base = buildItemBase(snapshot, shape, shapeBounds);\n\tconst image = createImageItem(shape.id, base.bounds, src, {\n\t\twidth: Math.max(1, intrinsicWidth),\n\t\theight: Math.max(1, intrinsicHeight),\n\t});\n\treturn {\n\t\t...image,\n\t\t...base,\n\t\tchildrenSvg: wrapOpacity(image.childrenSvg, shapeOpacity(shape)),\n\t\tlocked: shape.isLocked,\n\t\trotation: base.rotation,\n\t};\n}\n\nfunction renderVideoShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst src = resolveAssetUrl(snapshot, shape, asset);\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst label = getString(asRecord(asset?.props)?.name) ?? \"Video\";\n\tconst subtitle =\n\t\tsrc ?? getString(props.assetId) ?? \"Playback not supported in this importer\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"14\" fill=\"#18181b\" stroke=\"#3f3f46\" stroke-width=\"1.5\" />\n\t\t<rect x=\"${formatNumber(width * 0.04)}\" y=\"${formatNumber(height * 0.08)}\" width=\"${formatNumber(width * 0.92)}\" height=\"${formatNumber(height * 0.66)}\" rx=\"10\" fill=\"#27272a\" />\n\t\t<circle cx=\"${formatNumber(width * 0.5)}\" cy=\"${formatNumber(height * 0.41)}\" r=\"${formatNumber(Math.min(width, height) * 0.12)}\" fill=\"#fafafa\" fill-opacity=\"0.92\" />\n\t\t<polygon points=\"${formatNumber(width * 0.48)},${formatNumber(height * 0.35)} ${formatNumber(width * 0.48)},${formatNumber(height * 0.47)} ${formatNumber(width * 0.57)},${formatNumber(height * 0.41)}\" fill=\"#18181b\" />\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.76, width: width - 32, height: height * 0.12, text: label, fontSize: 15, color: \"#fafafa\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.88, width: width - 32, height: height * 0.08, text: subtitle, fontSize: 11, color: \"#d4d4d8\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction renderNoteShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst noteColor = resolveColor(getString(props.color) ?? \"yellow\");\n\tconst labelColor = resolveColor(getString(props.labelColor) ?? \"#18181b\");\n\tconst text = extractPlainText(props);\n\tconst fold = Math.min(width, height) * 0.14;\n\tconst fontSize =\n\t\tsizeToFontPx(getString(props.size)) + numberOr(props.fontSizeAdjustment, 0);\n\tconst inner = `\n\t\t<path d=\"M0 0 H${formatNumber(width - fold)} L${formatNumber(width)} ${formatNumber(fold)} V${formatNumber(height)} H0 Z\" fill=\"${noteColor}\" fill-opacity=\"0.22\" stroke=\"${noteColor}\" stroke-width=\"1.5\" />\n\t\t<path d=\"M${formatNumber(width - fold)} 0 V${formatNumber(fold)} H${formatNumber(width)}\" fill=\"${noteColor}\" fill-opacity=\"0.3\" stroke=\"${noteColor}\" stroke-width=\"1.5\" />\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 12, width: width - 24, height: height - 24, text, fontSize, color: labelColor, padding: 4, align: getString(props.align), verticalAlign: getString(props.verticalAlign) })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: noteColor,\n\t\t\tstrokeWidth: 1.5,\n\t\t},\n\t);\n}\n\nfunction renderBookmarkShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst assetProps = asRecord(asset?.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst href =\n\t\tgetString(props.url) ?? getString(assetProps.src) ?? getString(props.src) ?? \"\";\n\tconst title =\n\t\tgetString(assetProps.title) ??\n\t\tgetString(props.title) ??\n\t\tgetString(props.label) ??\n\t\tundefined;\n\tconst description =\n\t\tgetString(assetProps.description) ?? getString(props.description) ?? undefined;\n\tconst image = getString(assetProps.image) ?? getString(props.image) ?? undefined;\n\tconst favicon =\n\t\tgetString(assetProps.favicon) ?? getString(props.favicon) ?? undefined;\n\tconst link: CanvuLinkData = {\n\t\thref: href || \"URL unavailable\",\n\t\t...(title ? { title } : {}),\n\t\t...(description ? { description } : {}),\n\t\t...(image ? { image } : {}),\n\t\t...(favicon ? { favicon } : {}),\n\t};\n\tconst inner = buildLinkCardSvg(localBounds.width, localBounds.height, link);\n\tconst item = createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t);\n\treturn {\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t};\n}\n\nfunction renderEmbedShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst title = getString(props.title) ?? getString(props.embedTitle) ?? \"Embed\";\n\tconst url = getString(props.url) ?? getString(props.src) ?? \"Embedded content\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"16\" fill=\"#0f172a\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t<rect x=\"16\" y=\"16\" width=\"${formatNumber(width - 32)}\" height=\"${formatNumber(height * 0.62)}\" rx=\"12\" fill=\"#111827\" stroke=\"#334155\" stroke-width=\"1\" />\n\t\t<circle cx=\"${formatNumber(width * 0.14)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#ef4444\" />\n\t\t<circle cx=\"${formatNumber(width * 0.18)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#f59e0b\" />\n\t\t<circle cx=\"${formatNumber(width * 0.22)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#22c55e\" />\n\t\t${buildForeignObjectTextSvg({ x: 18, y: height * 0.72, width: width - 36, height: height * 0.11, text: title, fontSize: 16, color: \"#f8fafc\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: 18, y: height * 0.84, width: width - 36, height: height * 0.08, text: url, fontSize: 11, color: \"#cbd5e1\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke,\n\t\t\tstrokeWidth: 1.5,\n\t\t},\n\t);\n}\n\nfunction renderFrameShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst title =\n\t\t(getString(props.name) ?? getString(props.title) ?? extractPlainText(props)) ||\n\t\t\"Frame\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"14\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"2\" stroke-dasharray=\"10 6\" />\n\t\t<rect x=\"12\" y=\"10\" width=\"${formatNumber(Math.min(width - 24, Math.max(88, width * 0.34)))}\" height=\"28\" rx=\"8\" fill=\"#ffffff\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t${buildForeignObjectTextSvg({ x: 16, y: 12, width: Math.min(width - 32, Math.max(80, width * 0.3)), height: 24, text: title, fontSize: 13, color: \"#111827\", fontWeight: 700, verticalAlign: \"middle\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke,\n\t\t\tstrokeWidth: 2,\n\t\t},\n\t);\n}\n\nfunction renderAnnotationShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst radius = Math.min(width, height) / 2;\n\tconst fill =\n\t\tshape.type === \"annotationBubble\"\n\t\t\t? \"#3b82f6\"\n\t\t\t: resolveColor(getString(props.color) ?? \"#ef4444\");\n\tconst text =\n\t\tshape.type === \"label\"\n\t\t\t? extractPlainText(props)\n\t\t\t: String(getNumber(props.number) ?? \"\");\n\tconst inner = `\n\t\t<circle cx=\"${formatNumber(width / 2)}\" cy=\"${formatNumber(height / 2)}\" r=\"${formatNumber(radius)}\" fill=\"${fill}\" stroke=\"#ffffff\" stroke-width=\"2\" />\n\t\t<text x=\"${formatNumber(width / 2)}\" y=\"${formatNumber(height / 2 + 4)}\" fill=\"#ffffff\" font-size=\"10\" font-weight=\"700\" text-anchor=\"middle\" dominant-baseline=\"central\">${escapeXml(text)}</text>\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: fill,\n\t\t\tstrokeWidth: 2,\n\t\t},\n\t);\n}\n\nfunction renderUnsupportedShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\treason: string,\n): VectorSceneItem {\n\tsnapshot.options.onUnsupportedShape?.(shape, reason);\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"12\" fill=\"#fafafa\" stroke=\"#a1a1aa\" stroke-width=\"1.5\" stroke-dasharray=\"6 6\" />\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 14, width: width - 24, height: 28, text: shape.type, fontSize: 14, color: \"#111827\", fontWeight: 700, verticalAlign: \"middle\" })}\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 50, width: width - 24, height: Math.max(20, height - 62), text: reason, fontSize: 12, color: \"#52525b\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction shapeToItem(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tif (!shouldIncludeShape(snapshot, shape)) return null;\n\tif (shape.type === \"group\") return null;\n\tif (shape.type === \"geo\") return renderGeoShape(snapshot, shape);\n\tif (shape.type === \"text\") return renderTextShape(snapshot, shape);\n\tif (shape.type === \"draw\" || shape.type === \"highlight\") {\n\t\treturn renderStrokeShape(snapshot, shape);\n\t}\n\tif (shape.type === \"line\") return renderLineShape(snapshot, shape);\n\tif (shape.type === \"arrow\") return renderArrowShape(snapshot, shape);\n\tif (shape.type === \"image\") return renderImageShape(snapshot, shape);\n\tif (shape.type === \"video\") return renderVideoShape(snapshot, shape);\n\tif (shape.type === \"note\") return renderNoteShape(snapshot, shape);\n\tif (shape.type === \"bookmark\") return renderBookmarkShape(snapshot, shape);\n\tif (shape.type === \"embed\") return renderEmbedShape(snapshot, shape);\n\tif (shape.type === \"frame\") return renderFrameShape(snapshot, shape);\n\tif (shape.type === \"annotationBubble\" || shape.type === \"label\") {\n\t\treturn renderAnnotationShape(snapshot, shape);\n\t}\n\treturn renderUnsupportedShape(\n\t\tsnapshot,\n\t\tshape,\n\t\t\"Unsupported tldraw shape rendered as placeholder.\",\n\t);\n}\n\n/**\n * Converts tldraw snapshots into canvu VectorSceneItem[] ready for rendering.\n */\nexport function tldrawSnapshotToItems(\n\tinput: TlStoreSnapshot | RoomSnapshot | TlSnapshotInput,\n\toptions: TldrawSnapshotImportOptions = {},\n): VectorSceneItem[] {\n\tconst snapshot = normalizeSnapshot(input, options);\n\tconst shapes = Array.from(snapshot.shapes.values()).sort((left, right) =>\n\t\t(left.index ?? \"\").localeCompare(right.index ?? \"\"),\n\t);\n\tconst items: VectorSceneItem[] = [];\n\tfor (const shape of shapes) {\n\t\tconst item = shapeToItem(snapshot, shape);\n\t\tif (item) items.push(item);\n\t}\n\treturn items;\n}\n\n/**\n * Converts back: canvu VectorSceneItem[] → RoomSnapshot.\n * This produces a minimal RoomSnapshot that can be stored or sent to tldraw.\n * Only items with a recognized `toolKind` are included.\n *\n * Note: the reverse conversion is lossy — tldraw-specific props, asset references,\n * page/camera records, and metadata are not preserved.\n */\nexport function itemsToTldrawSnapshot(\n\titems: readonly VectorSceneItem[],\n): RoomSnapshot {\n\tconst documents: TlShapeRecord[] = [];\n\tfor (const item of items) {\n\t\tconst type = item.toolKind ?? \"draw\";\n\t\tconst props: Record<string, unknown> = {\n\t\t\tw: item.bounds.width,\n\t\t\th: item.bounds.height,\n\t\t\tcolor: item.stroke ?? \"#1d1d1d\",\n\t\t};\n\t\tif (item.strokeWidth) {\n\t\t\tprops.size = item.strokeWidth <= 1.5 ? \"s\" : item.strokeWidth >= 4 ? \"l\" : \"m\";\n\t\t}\n\t\tif (item.strokeOpacity != null) {\n\t\t\tprops.opacity = Math.round(item.strokeOpacity * 100);\n\t\t}\n\n\t\tif (type === \"rect\" || type === \"ellipse\" || type === \"architectural-cloud\") {\n\t\t\tprops.geo =\n\t\t\t\ttype === \"ellipse\"\n\t\t\t\t\t? \"ellipse\"\n\t\t\t\t\t: type === \"architectural-cloud\"\n\t\t\t\t\t\t? \"cloud\"\n\t\t\t\t\t\t: \"rectangle\";\n\t\t\tprops.fill = \"none\";\n\t\t} else if (type === \"draw\" || type === \"marker\") {\n\t\t\tprops.segments = [\n\t\t\t\t{ points: (item.pathPointsLocal ?? []).map((point) => [point.x, point.y]) },\n\t\t\t];\n\t\t} else if (type === \"text\") {\n\t\t\tprops.text = item.text ?? \"\";\n\t\t\tprops.fontSize = item.textFontSize ?? 16;\n\t\t} else if (type === \"arrow\" || type === \"line\") {\n\t\t\tprops.start = { x: item.line?.x1 ?? 0, y: item.line?.y1 ?? 0 };\n\t\t\tprops.end = { x: item.line?.x2 ?? 10, y: item.line?.y2 ?? 10 };\n\t\t\tprops.arrowheadEnd = type === \"arrow\" ? \"triangle\" : \"none\";\n\t\t} else {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdocuments.push({\n\t\t\tid: item.id,\n\t\t\ttypeName: \"shape\",\n\t\t\ttype,\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\trotation: item.rotation ?? 0,\n\t\t\tindex: \"a1\",\n\t\t\tparentId: \"page:page\",\n\t\t\topacity: item.strokeOpacity ?? 1,\n\t\t\tisLocked: item.locked ?? false,\n\t\t\tprops,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\treturn { documents, schema: { storeVersion: 1, recordVersion: 0 }, clock: 0 };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/link-item.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/plugins/tldraw/index.ts"],"names":["escapeHtmlText","d","op","b","s","formatNumber","document","x","y","pressure"],"mappings":"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","file":"tldraw.js","sourcesContent":["/**\n * Axis-aligned rectangle in 2D (world or screen space).\n */\nexport type Rect = {\n\treadonly x: number;\n\treadonly y: number;\n\treadonly width: number;\n\treadonly height: number;\n};\n\n/**\n * Returns whether two axis-aligned rectangles intersect (edges touching count).\n */\nexport function rectsIntersect(a: Rect, b: Rect): boolean {\n\treturn (\n\t\ta.x < b.x + b.width &&\n\t\ta.x + a.width > b.x &&\n\t\ta.y < b.y + b.height &&\n\t\ta.y + a.height > b.y\n\t);\n}\n\n/**\n * Normalizes a rect so width and height are non-negative.\n */\nexport function normalizeRect(r: Rect): Rect {\n\tconst x0 = r.width >= 0 ? r.x : r.x + r.width;\n\tconst y0 = r.height >= 0 ? r.y : r.y + r.height;\n\treturn {\n\t\tx: x0,\n\t\ty: y0,\n\t\twidth: Math.abs(r.width),\n\t\theight: Math.abs(r.height),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Width/height of the shape’s local drawing box (same as `bounds` at creation). */\nexport type CustomShapeSize = { width: number; height: number };\n\n/**\n * How to build the inner SVG (inside the item’s bounding box).\n *\n * - **`svg`**: paste-friendly markup. Use `{{w}}`, `{{h}}`, `{{width}}`, or `{{height}}` where the size should go.\n * - **`render`**: a small function when you prefer code over a string template.\n */\nexport type CreateCustomShapeContent =\n\t| {\n\t\t\t/**\n\t\t\t * SVG fragment for `<g>` contents (no outer `<svg>`). Placeholders are replaced with numeric sizes:\n\t\t\t * `{{w}}`, `{{h}}`, `{{width}}`, `{{height}}`.\n\t\t\t */\n\t\t\tsvg: string;\n\t }\n\t| {\n\t\t\t/** Returns inner SVG for the given box size (same coordinate range as `bounds`). */\n\t\t\trender: (size: CustomShapeSize) => string;\n\t };\n\n/**\n * Replaces `{{w}}`, `{{h}}`, `{{width}}`, and `{{height}}` in a string with the given dimensions.\n * Use this if you build SVG strings yourself and want the same rules as {@link createCustomShapeItem}.\n */\nexport function expandCustomShapeTemplate(\n\ttemplate: string,\n\twidth: number,\n\theight: number,\n): string {\n\treturn template\n\t\t.replace(/\\{\\{w\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{h\\}\\}/g, String(height))\n\t\t.replace(/\\{\\{width\\}\\}/g, String(width))\n\t\t.replace(/\\{\\{height\\}\\}/g, String(height));\n}\n\nfunction resolveCustomInner(\n\tcontent: CreateCustomShapeContent,\n\tsize: CustomShapeSize,\n): string {\n\tif (\"render\" in content) {\n\t\treturn content.render(size);\n\t}\n\treturn expandCustomShapeTemplate(content.svg, size.width, size.height);\n}\n\n/**\n * Builds the scaled `<g>` wrapper used for `childrenSvg` on custom shapes that support resize.\n */\nexport function buildCustomShapeChildrenSvg(\n\tinner: string,\n\tintrinsic: CustomShapeSize,\n\tbounds: Rect,\n): string {\n\tconst b = normalizeRect(bounds);\n\tconst sx = b.width / intrinsic.width;\n\tconst sy = b.height / intrinsic.height;\n\treturn `<g transform=\"scale(${sx},${sy})\">${inner}</g>`;\n}\n\n/**\n * Creates a user-defined shape from SVG markup or a `render` callback.\n *\n * Coordinates are **local**: draw from `(0,0)` to `(width, height)` of `bounds`. The library stores an\n * intrinsic copy so resize handles (when interactive) scale the drawing uniformly.\n *\n * @example\n * ```ts\n * const star = createCustomShapeItem(createShapeId(), rect, {\n * svg: `<polygon points=\"...\" fill=\"gold\" stroke=\"#b45309\" stroke-width=\"2\" />`,\n * });\n * ```\n *\n * @example Template (good for copy-paste from design tools)\n * ```ts\n * createCustomShapeItem(id, rect, {\n * svg: `<rect width=\"{{w}}\" height=\"{{h}}\" rx=\"8\" fill=\"#e0e7ff\" stroke=\"#6366f1\" />`,\n * });\n * ```\n */\nexport function createCustomShapeItem(\n\tid: string,\n\tbounds: Rect,\n\tcontent: CreateCustomShapeContent,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst intrinsic: CustomShapeSize = { width: r.width, height: r.height };\n\tconst inner = resolveCustomInner(content, intrinsic);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"custom\",\n\t\tcustomIntrinsicSize: intrinsic,\n\t\tcustomInnerSvg: inner,\n\t\tchildrenSvg: buildCustomShapeChildrenSvg(inner, intrinsic, r),\n\t};\n}\n","import type { Rect } from \"../math/rect\";\nimport { createCustomShapeItem } from \"./custom-shape\";\nimport type { VectorSceneItem } from \"./types\";\n\n/** Plugin key under which link metadata is stored on a link item's `pluginData`. */\nexport const LINK_PLUGIN_KEY = \"canvuLink\";\n\n/**\n * Metadata describing a clickable link/bookmark item.\n * `href` is required; the rest enrich the rendered card (unfurl result).\n */\nexport type CanvuLinkData = {\n\t/** Absolute URL the card points to. */\n\thref: string;\n\t/** Human readable title (falls back to the hostname). */\n\ttitle?: string;\n\t/** Short description shown under the title. */\n\tdescription?: string;\n\t/** Preview image URL (og:image). */\n\timage?: string;\n\t/** Favicon URL shown in the leading badge. */\n\tfavicon?: string;\n};\n\nconst DEFAULT_LINK_CARD_WIDTH = 360;\nconst DEFAULT_LINK_CARD_HEIGHT = 132;\nconst LINK_CARD_BORDER = \"#e2e8f0\";\nconst LINK_CARD_ACCENT = \"#2563eb\";\nconst LINK_CARD_TITLE_COLOR = \"#0f172a\";\nconst LINK_CARD_TEXT_COLOR = \"#475569\";\n\nconst clamp = (value: number, min: number, max: number): number =>\n\tMath.min(max, Math.max(min, value));\n\nconst formatNumber = (value: number): string => {\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Object.is(rounded, -0) ? \"0\" : String(rounded);\n};\n\nconst escapeXmlAttribute = (value: string): string =>\n\tvalue\n\t\t.replaceAll(\"&\", \"&\")\n\t\t.replaceAll(\"<\", \"<\")\n\t\t.replaceAll(\">\", \">\")\n\t\t.replaceAll('\"', \""\")\n\t\t.replaceAll(\"'\", \"'\");\n\nconst escapeHtmlText = (value: string): string =>\n\tvalue.replaceAll(\"&\", \"&\").replaceAll(\"<\", \"<\").replaceAll(\">\", \">\");\n\nconst getLinkHostname = (href: string): string => {\n\ttry {\n\t\treturn new URL(href).hostname.replace(/^www\\./, \"\");\n\t} catch {\n\t\treturn href;\n\t}\n};\n\ntype LinkTextBand = {\n\tx: number;\n\ty: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tfontWeight?: number;\n\tclampLines?: number;\n};\n\nconst buildLinkTextBand = (band: LinkTextBand): string => {\n\tconst lineHeight = band.fontSize * 1.3;\n\tconst weight = band.fontWeight != null ? `font-weight:${band.fontWeight};` : \"\";\n\tconst lineClampStyle = band.clampLines\n\t\t? `display:-webkit-box;-webkit-line-clamp:${band.clampLines};-webkit-box-orient:vertical;`\n\t\t: \"\";\n\treturn `<foreignObject x=\"${formatNumber(band.x)}\" y=\"${formatNumber(band.y)}\" width=\"${formatNumber(Math.max(1, band.width))}\" height=\"${formatNumber(Math.max(1, band.height))}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;font-family:system-ui,sans-serif;font-size:${formatNumber(band.fontSize)}px;line-height:${formatNumber(lineHeight)}px;color:${band.color};overflow:hidden;word-break:break-word;${lineClampStyle}${weight}\">${escapeHtmlText(band.text)}</div></foreignObject>`;\n};\n\n/**\n * Builds the inner SVG (no outer `<svg>`) for a link/bookmark card at the given box size.\n * Uses fixed pixel bands so text never overlaps regardless of the card's aspect ratio.\n */\nexport function buildLinkCardSvg(\n\twidth: number,\n\theight: number,\n\tlink: CanvuLinkData,\n): string {\n\tconst cardWidth = Math.max(1, width);\n\tconst cardHeight = Math.max(1, height);\n\tconst padding = 14;\n\tconst badgeSize = clamp(Math.min(72, cardHeight - padding * 2), 28, 96);\n\tconst textX = padding + badgeSize + 14;\n\tconst textWidth = Math.max(1, cardWidth - textX - padding);\n\tconst hostname = getLinkHostname(link.href);\n\tconst title = link.title?.trim() || hostname || \"Link\";\n\tconst description = link.description?.trim() || link.href;\n\n\tconst titleY = padding;\n\tconst titleHeight = clamp(cardHeight * 0.22, 18, 28);\n\tconst hostY = titleY + titleHeight + 2;\n\tconst hostHeight = 16;\n\tconst descY = hostY + hostHeight + 4;\n\tconst descHeight = Math.max(1, cardHeight - descY - padding);\n\n\tconst badge = link.favicon\n\t\t? `<clipPath id=\"canvu-link-badge\"><rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" /></clipPath>\n\t\t<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" fill=\"#f8fafc\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1\" />\n\t\t<image href=\"${escapeXmlAttribute(link.favicon)}\" x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" preserveAspectRatio=\"xMidYMid slice\" clip-path=\"url(#canvu-link-badge)\" />`\n\t\t: `<rect x=\"${formatNumber(padding)}\" y=\"${formatNumber(padding)}\" width=\"${formatNumber(badgeSize)}\" height=\"${formatNumber(badgeSize)}\" rx=\"12\" fill=\"${LINK_CARD_ACCENT}\" fill-opacity=\"0.1\" stroke=\"${LINK_CARD_ACCENT}\" stroke-opacity=\"0.3\" stroke-width=\"1\" />\n\t\t<g transform=\"translate(${formatNumber(padding + badgeSize / 2)},${formatNumber(padding + badgeSize / 2)})\" stroke=\"${LINK_CARD_ACCENT}\" stroke-width=\"2.4\" stroke-linecap=\"round\" fill=\"none\">\n\t\t\t<path d=\"M-9 3 a6 6 0 0 1 0 -8 l4 -4 a6 6 0 0 1 8 8 l-2 2\" />\n\t\t\t<path d=\"M9 -3 a6 6 0 0 1 0 8 l-4 4 a6 6 0 0 1 -8 -8 l2 -2\" />\n\t\t</g>`;\n\n\tconst externalIconX = cardWidth - padding - 16;\n\tconst externalIcon = `<g transform=\"translate(${formatNumber(externalIconX)},${formatNumber(padding)})\" stroke=\"${LINK_CARD_TEXT_COLOR}\" stroke-width=\"1.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\" fill=\"none\">\n\t\t<path d=\"M6 1 H11 V6\" />\n\t\t<path d=\"M11 1 L4.5 7.5\" />\n\t\t<path d=\"M9 7 V10 a1 1 0 0 1 -1 1 H2 a1 1 0 0 1 -1 -1 V4 a1 1 0 0 1 1 -1 H5\" />\n\t</g>`;\n\n\treturn `\n\t\t<rect width=\"${formatNumber(cardWidth)}\" height=\"${formatNumber(cardHeight)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${LINK_CARD_BORDER}\" stroke-width=\"1.5\" />\n\t\t${badge}\n\t\t${externalIcon}\n\t\t${buildLinkTextBand({ x: textX, y: titleY, width: textWidth - 18, height: titleHeight, text: title, fontSize: 15, color: LINK_CARD_TITLE_COLOR, fontWeight: 700, clampLines: 1 })}\n\t\t${buildLinkTextBand({ x: textX, y: hostY, width: textWidth, height: hostHeight, text: hostname, fontSize: 12, color: LINK_CARD_ACCENT, clampLines: 1 })}\n\t\t${buildLinkTextBand({ x: textX, y: descY, width: textWidth, height: descHeight, text: description, fontSize: 12, color: LINK_CARD_TEXT_COLOR, clampLines: 2 })}\n\t`;\n}\n\nconst isCanvuLinkData = (value: unknown): value is CanvuLinkData => {\n\tif (!value || typeof value !== \"object\") return false;\n\tconst candidate = value as Record<string, unknown>;\n\treturn typeof candidate.href === \"string\" && candidate.href.length > 0;\n};\n\n/** Reads the link metadata from an item, or `null` when the item is not a link. */\nexport function getLinkData(item: VectorSceneItem): CanvuLinkData | null {\n\tconst entry = item.pluginData?.[LINK_PLUGIN_KEY];\n\treturn isCanvuLinkData(entry) ? entry : null;\n}\n\n/** True when the item carries link metadata (clickable card). */\nexport function isLinkItem(item: VectorSceneItem): boolean {\n\treturn getLinkData(item) != null;\n}\n\n/**\n * Creates a clickable link/bookmark card item ready to append to the scene.\n * The card resizes by scaling its authored SVG, like other custom shapes.\n */\nexport function createLinkItem(\n\tid: string,\n\tbounds: Rect,\n\tlink: CanvuLinkData,\n): VectorSceneItem {\n\tconst width = bounds.width || DEFAULT_LINK_CARD_WIDTH;\n\tconst height = bounds.height || DEFAULT_LINK_CARD_HEIGHT;\n\tconst item = createCustomShapeItem(\n\t\tid,\n\t\t{ ...bounds, width, height },\n\t\t{ render: (size) => buildLinkCardSvg(size.width, size.height, link) },\n\t);\n\treturn {\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t};\n}\n\n/** Default card size used when placing a new link without explicit bounds. */\nexport const DEFAULT_LINK_CARD_SIZE = {\n\twidth: DEFAULT_LINK_CARD_WIDTH,\n\theight: DEFAULT_LINK_CARD_HEIGHT,\n} as const;\n","/**\n * Escape text for use inside SVG `<text>` / `<tspan>` (not full XML attribute context).\n */\nexport function escapeSvgTextContent(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\n/** Default font size used when the text tool creates a new text item. */\nexport const DEFAULT_TEXT_TOOL_FONT_SIZE = 28;\n/**\n * Sophisticated sans-serif used for both canvas text rendering and inline editing.\n * Inter is loaded by host apps (e.g. demo/index.html); system-ui fallback keeps the canvas\n * usable when the webfont hasn't loaded yet.\n */\nexport const TEXT_FONT_FAMILY =\n\t\"Inter, -apple-system, BlinkMacSystemFont, ui-sans-serif, system-ui, sans-serif\";\nconst LINE_HEIGHT_RATIO = 22 / 18;\n/**\n * Where the first text baseline sits, expressed in font-size units. Picked so\n * the SVG glyph and the inline-edit textarea agree visually (the textarea's\n * natural first-line baseline lands at this same y when padded by\n * {@link EDIT_TOP_PAD_RATIO}). See {@link TextEditOverlay} for the matching\n * inset.\n */\nconst FIRST_LINE_BASELINE_RATIO = 20 / 18;\n/** Textarea top inset (font-size units) that lines up with the SVG baseline. */\nexport const EDIT_TOP_PAD_RATIO = 4 / 18;\n/** Extra space below the descender so glyphs aren't clipped at the bounds. */\nconst BOTTOM_PAD_RATIO = 4 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 26;\n/** Horizontal padding in local space (matches `<text x=\"4\">`). */\nconst TEXT_PAD_X = 4;\nconst MAX_TEXT_MEASURE_CACHE_ENTRIES = 2000;\n\nlet sharedMeasureContext: CanvasRenderingContext2D | null | undefined;\nconst textMeasureCache = new Map<string, { width: number; height: number }>();\n\nfunction getSharedMeasureContext(): CanvasRenderingContext2D | null {\n\tif (sharedMeasureContext !== undefined) {\n\t\treturn sharedMeasureContext;\n\t}\n\tif (typeof document === \"undefined\") {\n\t\tsharedMeasureContext = null;\n\t\treturn sharedMeasureContext;\n\t}\n\tconst canvas = document.createElement(\"canvas\");\n\tsharedMeasureContext = canvas.getContext(\"2d\");\n\treturn sharedMeasureContext;\n}\n\nfunction textMeasureCacheKey(content: string, fontSize: number): string {\n\treturn `${fontSize}\\n${content}`;\n}\n\nfunction cacheMeasuredBounds(\n\tkey: string,\n\tbounds: { width: number; height: number },\n): void {\n\tif (textMeasureCache.size >= MAX_TEXT_MEASURE_CACHE_ENTRIES) {\n\t\ttextMeasureCache.clear();\n\t}\n\ttextMeasureCache.set(key, bounds);\n}\n\nfunction lineHeightFor(fontSize: number): number {\n\treturn fontSize * LINE_HEIGHT_RATIO;\n}\n\nfunction firstLineBaselineY(fontSize: number): number {\n\treturn fontSize * FIRST_LINE_BASELINE_RATIO;\n}\n\n/** Public version used by callers that need the same baseline as SVG rendering. */\nexport function textBaselineYFor(fontSize: number): number {\n\treturn firstLineBaselineY(fontSize);\n}\n\n/** Public version used by callers that need the same line height as SVG rendering. */\nexport function textLineHeightFor(fontSize: number): number {\n\treturn lineHeightFor(fontSize);\n}\n\n/**\n * Local width/height for a text item so bounds match rendered SVG (no fixed max width).\n * Uses canvas measureText when `document` is available; rough fallback otherwise.\n */\nexport function measureTextBoundsLocal(\n\tcontent: string,\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): {\n\twidth: number;\n\theight: number;\n} {\n\tconst cacheKey = textMeasureCacheKey(content, fontSize);\n\tconst cached = textMeasureCache.get(cacheKey);\n\tif (cached) {\n\t\treturn cached;\n\t}\n\n\tconst lh = lineHeightFor(fontSize);\n\tconst baselineY = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tconst lines = trimmed.length === 0 ? [PLACEHOLDER] : content.split(\"\\n\");\n\n\tlet maxInnerW = 0;\n\tconst ctx = getSharedMeasureContext();\n\tif (ctx) {\n\t\tctx.font = `${fontSize}px ${TEXT_FONT_FAMILY}`;\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, ctx.measureText(toMeasure).width);\n\t\t}\n\t}\n\tif (maxInnerW === 0) {\n\t\tfor (const line of lines) {\n\t\t\tconst toMeasure =\n\t\t\t\ttrimmed.length === 0 ? PLACEHOLDER : line.length === 0 ? \" \" : line;\n\t\t\tmaxInnerW = Math.max(maxInnerW, toMeasure.length * fontSize * 0.52);\n\t\t}\n\t}\n\n\tconst minW = Math.max(MIN_TEXT_BOX_W, TEXT_PAD_X * 2 + fontSize);\n\tconst width = Math.max(minW, TEXT_PAD_X * 2 + maxInnerW);\n\tconst height = Math.max(\n\t\tMIN_TEXT_BOX_H,\n\t\tbaselineY + (lines.length - 1) * lh + Math.max(4, fontSize * BOTTOM_PAD_RATIO),\n\t);\n\tconst measured = { width, height };\n\tcacheMeasuredBounds(cacheKey, measured);\n\treturn measured;\n}\n\n/**\n * Builds SVG `<text>` markup for a text box in local coordinates [0, w] × [0, h].\n * @param fillColor — Text fill (defaults to blue-gray placeholder / blue body).\n */\nexport function buildTextSvg(\n\tcontent: string,\n\t_width: number,\n\t_height: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst lh = lineHeightFor(fontSize);\n\tconst y0 = firstLineBaselineY(fontSize);\n\tconst trimmed = content.trim();\n\tif (trimmed.length === 0) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"#94a3b8\" font-style=\"italic\">${escapeSvgTextContent(PLACEHOLDER)}</text>`;\n\t}\n\n\tconst lines = content.split(\"\\n\");\n\tif (lines.length === 1) {\n\t\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${escapeSvgTextContent(lines[0] ?? \"\")}</text>`;\n\t}\n\n\tconst parts: string[] = [];\n\tfor (let i = 0; i < lines.length; i++) {\n\t\tconst line = lines[i] ?? \"\";\n\t\tif (i === 0) {\n\t\t\tparts.push(`<tspan x=\"4\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t} else {\n\t\t\tparts.push(`<tspan x=\"4\" dy=\"${lh}\">${escapeSvgTextContent(line)}</tspan>`);\n\t\t}\n\t}\n\treturn `<text x=\"4\" y=\"${y0}\" font-size=\"${fontSize}\" font-family=\"${TEXT_FONT_FAMILY}\" fill=\"${fillColor}\">${parts.join(\"\")}</text>`;\n}\n\n/**\n * Text that wraps inside a fixed rectangle (after user resize). Uses `foreignObject` + XHTML\n * so wrapping matches browser layout.\n */\nexport function buildTextFixedBoundsSvg(\n\tcontent: string,\n\twidth: number,\n\theight: number,\n\tfillColor = \"#1d1d1d\",\n\tfontSize: number = DEFAULT_TEXT_FONT_SIZE,\n): string {\n\tconst w = Math.max(1, width);\n\tconst h = Math.max(1, height);\n\tconst lh = lineHeightFor(fontSize);\n\tconst trimmed = content.trim();\n\tconst padTop = EDIT_TOP_PAD_RATIO * fontSize;\n\tif (trimmed.length === 0) {\n\t\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:#94a3b8;font-style:italic\">${escapeHtmlText(PLACEHOLDER)}</div></foreignObject>`;\n\t}\n\tconst body = escapeHtmlText(content);\n\treturn `<foreignObject width=\"${w}\" height=\"${h}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${padTop}px 4px 0 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:${TEXT_FONT_FAMILY};white-space:pre-wrap;word-wrap:break-word;overflow:hidden;color:${fillColor}\">${body}</div></foreignObject>`;\n}\n","import type { StrokeOptions } from \"perfect-freehand\";\nimport getStroke from \"perfect-freehand\";\nimport type { Rect } from \"../math/rect\";\nimport { normalizeRect } from \"../math/rect\";\nimport { buildCustomShapeChildrenSvg } from \"./custom-shape\";\nimport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n} from \"./text-svg\";\nimport type {\n\tArrowBindings,\n\tLineEndpointsLocal,\n\tVectorPathPoint,\n\tVectorSceneItem,\n} from \"./types\";\n\nexport {\n\tbuildTextFixedBoundsSvg,\n\tbuildTextSvg,\n\tDEFAULT_TEXT_FONT_SIZE,\n\tmeasureTextBoundsLocal,\n};\n\n/**\n * While inline-editing: sync bounds to draft width/height and hide SVG so only the textarea shows text.\n */\nexport function applyTextDraftWhileEditing(\n\titem: VectorSceneItem,\n\tdraft: string,\n): VectorSceneItem {\n\tif (item.toolKind !== \"text\") return item;\n\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\tif (item.textFixedBounds) {\n\t\treturn {\n\t\t\t...item,\n\t\t\ttext: draft,\n\t\t\tchildrenSvg: \"\",\n\t\t};\n\t}\n\tconst m = measureTextBoundsLocal(draft, fs);\n\treturn {\n\t\t...item,\n\t\ttext: draft,\n\t\tbounds: {\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t},\n\t\tchildrenSvg: \"\",\n\t};\n}\n\n/** Stroke dash pattern for freehand drawings. `solid` = perfect-freehand fill; `dashed` = centerline stroke with dashes. */\nexport type StrokeDash = \"solid\" | \"dashed\";\n\n/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n\tstrokeDash?: StrokeDash;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#1d1d1d\",\n\tstrokeWidth: 2,\n};\n\nconst TOOL_FREEHAND_DEFAULTS: Record<\n\t\"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tPartial<StrokeStyle>\n> = {\n\tdraw: { strokeWidth: 10 },\n\tpencil: { strokeWidth: 3 },\n\tbrush: { strokeWidth: 10 },\n\tmarker: { stroke: \"#fde047\", strokeWidth: 16, strokeOpacity: 0.5 },\n};\n\nfunction perfectFreehandOptions(\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstyle: StrokeStyle,\n\tstrokeComplete: boolean,\n\tpressureAware = false,\n): StrokeOptions {\n\tconst sw = style.strokeWidth;\n\tconst base: StrokeOptions = {\n\t\tlast: strokeComplete,\n\t\tsimulatePressure: true,\n\t};\n\tif (toolKind === \"draw\" || toolKind === \"pencil\") {\n\t\tif (pressureAware && toolKind === \"draw\") {\n\t\t\treturn {\n\t\t\t\t...base,\n\t\t\t\tsize: Math.max(2, sw * 1.05),\n\t\t\t\tthinning: 0.42,\n\t\t\t\tsmoothing: 0.78,\n\t\t\t\tstreamline: 0.62,\n\t\t\t\tsimulatePressure: true,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(2, sw * 1.18),\n\t\t\tthinning: 0.12,\n\t\t\tsmoothing: 0.85,\n\t\t\tstreamline: 0.78,\n\t\t\tsimulatePressure: true,\n\t\t};\n\t}\n\tif (toolKind === \"brush\") {\n\t\treturn {\n\t\t\t...base,\n\t\t\tsize: Math.max(4, sw * 1.22),\n\t\t\tthinning: 0.52,\n\t\t\tsmoothing: 0.64,\n\t\t\tstreamline: 0.68,\n\t\t};\n\t}\n\treturn {\n\t\t...base,\n\t\tsize: Math.max(6, sw * 1.08),\n\t\tthinning: 0.08,\n\t\tsmoothing: 0.88,\n\t\tstreamline: 0.84,\n\t\tsimulatePressure: true,\n\t};\n}\n\nexport function resolveStrokeStyle(item: VectorSceneItem): StrokeStyle {\n\treturn {\n\t\tstroke: item.stroke ?? DEFAULT_STROKE_STYLE.stroke,\n\t\tstrokeWidth: item.strokeWidth ?? DEFAULT_STROKE_STYLE.strokeWidth,\n\t\tstrokeOpacity: item.strokeOpacity,\n\t\tstrokeDash: item.strokeDash,\n\t};\n}\n\nfunction strokeOpacityAttr(style: StrokeStyle): string {\n\treturn style.strokeOpacity != null\n\t\t? ` stroke-opacity=\"${style.strokeOpacity}\"`\n\t\t: \"\";\n}\n\nfunction svgNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nconst ARCHITECTURAL_CLOUD_RADIUS = 38;\nconst ARCHITECTURAL_CLOUD_TARGET_SPACING = 50;\nconst ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO = 0.38;\nconst ARCHITECTURAL_CLOUD_ROUNDED_RADIUS = 72;\nconst ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS = 44;\nconst ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING = 98;\n\ntype CloudPoint = readonly [number, number];\n\ntype CloudPathSegment = {\n\tlength: number;\n\tpointAt: (t: number) => CloudPoint;\n};\n\nfunction architecturalCloudCenterCount(edgeLength: number, radius: number): number {\n\tconst targetSpacing = Math.min(\n\t\tARCHITECTURAL_CLOUD_TARGET_SPACING,\n\t\tMath.max(1, radius * 1.3),\n\t);\n\treturn Math.max(2, Math.round(edgeLength / targetSpacing) + 1);\n}\n\nfunction distributeRange(start: number, end: number, count: number): number[] {\n\tif (count <= 1) return [start];\n\tconst step = (end - start) / (count - 1);\n\treturn Array.from({ length: count }, (_, index) => start + step * index);\n}\n\nfunction lineCloudPathSegment(start: CloudPoint, end: CloudPoint): CloudPathSegment {\n\tconst dx = end[0] - start[0];\n\tconst dy = end[1] - start[1];\n\tconst length = Math.hypot(dx, dy);\n\treturn {\n\t\tlength,\n\t\tpointAt: (t) => [start[0] + dx * t, start[1] + dy * t],\n\t};\n}\n\nfunction ellipsePoint(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tangle: number,\n): CloudPoint {\n\treturn [centerX + Math.cos(angle) * radiusX, centerY + Math.sin(angle) * radiusY];\n}\n\nfunction approximateEllipseArcLength(\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): number {\n\tconst steps = Math.max(\n\t\t4,\n\t\tMath.ceil(Math.abs(endAngle - startAngle) / (Math.PI / 16)),\n\t);\n\tlet length = 0;\n\tlet previous = ellipsePoint(0, 0, radiusX, radiusY, startAngle);\n\tfor (let index = 1; index <= steps; index += 1) {\n\t\tconst angle = startAngle + ((endAngle - startAngle) * index) / steps;\n\t\tconst next = ellipsePoint(0, 0, radiusX, radiusY, angle);\n\t\tlength += Math.hypot(next[0] - previous[0], next[1] - previous[1]);\n\t\tprevious = next;\n\t}\n\treturn length;\n}\n\nfunction ellipseCloudPathSegment(\n\tcenterX: number,\n\tcenterY: number,\n\tradiusX: number,\n\tradiusY: number,\n\tstartAngle: number,\n\tendAngle: number,\n): CloudPathSegment {\n\treturn {\n\t\tlength: approximateEllipseArcLength(radiusX, radiusY, startAngle, endAngle),\n\t\tpointAt: (t) =>\n\t\t\tellipsePoint(\n\t\t\t\tcenterX,\n\t\t\t\tcenterY,\n\t\t\t\tradiusX,\n\t\t\t\tradiusY,\n\t\t\t\tstartAngle + (endAngle - startAngle) * t,\n\t\t\t),\n\t};\n}\n\nfunction cloudPathPerimeter(segments: CloudPathSegment[]): number {\n\tconst usableSegments = segments.filter((segment) => segment.length > 1e-9);\n\treturn usableSegments.reduce((sum, segment) => sum + segment.length, 0);\n}\n\nfunction pointOnCloudPath(\n\tsegments: CloudPathSegment[],\n\tdistance: number,\n): CloudPoint {\n\tconst perimeter = cloudPathPerimeter(segments);\n\tif (perimeter <= 0) return [0, 0];\n\n\tlet remaining = ((distance % perimeter) + perimeter) % perimeter;\n\tfor (const segment of segments) {\n\t\tif (segment.length <= 1e-9) continue;\n\t\tif (remaining <= segment.length) {\n\t\t\tconst t = remaining / segment.length;\n\t\t\treturn segment.pointAt(t);\n\t\t}\n\t\tremaining -= segment.length;\n\t}\n\n\tconst fallback = segments.find((segment) => segment.length > 1e-9);\n\treturn fallback?.pointAt(0) ?? [0, 0];\n}\n\nfunction buildRoundedCapsulePathSegments(\n\twidth: number,\n\theight: number,\n\tinset: number,\n): CloudPathSegment[] {\n\tconst left = inset;\n\tconst top = inset;\n\tconst right = width - inset;\n\tconst bottom = height - inset;\n\tconst capsuleWidth = Math.max(0, right - left);\n\tconst capsuleHeight = Math.max(0, bottom - top);\n\tconst radius = Math.min(capsuleWidth, capsuleHeight) / 2;\n\tif (radius <= 0) return [];\n\n\tconst leftCenterX = left + radius;\n\tconst rightCenterX = right - radius;\n\tconst topCenterY = top + radius;\n\tconst bottomCenterY = bottom - radius;\n\n\treturn [\n\t\tlineCloudPathSegment([leftCenterX, top], [rightCenterX, top]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t-Math.PI / 2,\n\t\t\t0,\n\t\t),\n\t\tlineCloudPathSegment([right, topCenterY], [right, bottomCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\trightCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\t0,\n\t\t\tMath.PI / 2,\n\t\t),\n\t\tlineCloudPathSegment([rightCenterX, bottom], [leftCenterX, bottom]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\tbottomCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI / 2,\n\t\t\tMath.PI,\n\t\t),\n\t\tlineCloudPathSegment([left, bottomCenterY], [left, topCenterY]),\n\t\tellipseCloudPathSegment(\n\t\t\tleftCenterX,\n\t\t\ttopCenterY,\n\t\t\tradius,\n\t\t\tradius,\n\t\t\tMath.PI,\n\t\t\tMath.PI * 1.5,\n\t\t),\n\t];\n}\n\nfunction buildRoundedArcCloudPathD(\n\tcloudWidth: number,\n\tcloudHeight: number,\n\tcenter: CloudPoint,\n): string {\n\tconst minDimension = Math.min(cloudWidth, cloudHeight);\n\tconst radius = Math.min(\n\t\tARCHITECTURAL_CLOUD_ROUNDED_RADIUS,\n\t\tMath.max(ARCHITECTURAL_CLOUD_ROUNDED_MIN_RADIUS, minDimension * 0.16),\n\t);\n\tconst centerPath = buildRoundedCapsulePathSegments(\n\t\tcloudWidth,\n\t\tcloudHeight,\n\t\tradius,\n\t);\n\tconst centerPerimeter = cloudPathPerimeter(centerPath);\n\tif (centerPerimeter <= 0) return \"\";\n\n\tconst lobeCount = Math.max(\n\t\t8,\n\t\tMath.round(centerPerimeter / ARCHITECTURAL_CLOUD_ROUNDED_TARGET_SPACING),\n\t);\n\tconst centers = Array.from({ length: lobeCount }, (_, index) =>\n\t\tpointOnCloudPath(centerPath, (centerPerimeter * index) / lobeCount),\n\t);\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudCircleIntersection(previous, point, radius, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radius)} ${svgNumber(radius)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\nfunction cloudCircleIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradius: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst midX = (a[0] + b[0]) / 2;\n\tconst midY = (a[1] + b[1]) / 2;\n\tconst dx = b[0] - a[0];\n\tconst dy = b[1] - a[1];\n\tconst distance = Math.hypot(dx, dy);\n\tif (distance <= 1e-9) return [midX, midY];\n\n\tconst halfDistance = distance / 2;\n\tconst offset = Math.sqrt(\n\t\tMath.max(0, radius * radius - halfDistance * halfDistance),\n\t);\n\tconst normalX = -dy / distance;\n\tconst normalY = dx / distance;\n\tconst first: [number, number] = [midX + normalX * offset, midY + normalY * offset];\n\tconst second: [number, number] = [\n\t\tmidX - normalX * offset,\n\t\tmidY - normalY * offset,\n\t];\n\tconst firstDistance =\n\t\t(first[0] - center[0]) * (first[0] - center[0]) +\n\t\t(first[1] - center[1]) * (first[1] - center[1]);\n\tconst secondDistance =\n\t\t(second[0] - center[0]) * (second[0] - center[0]) +\n\t\t(second[1] - center[1]) * (second[1] - center[1]);\n\treturn firstDistance >= secondDistance ? first : second;\n}\n\nfunction cloudEllipseIntersection(\n\ta: CloudPoint,\n\tb: CloudPoint,\n\tradiusX: number,\n\tradiusY: number,\n\tcenter: CloudPoint,\n): [number, number] {\n\tconst scaleY = radiusX / radiusY;\n\tconst [x, y] = cloudCircleIntersection(\n\t\t[a[0], a[1] * scaleY],\n\t\t[b[0], b[1] * scaleY],\n\t\tradiusX,\n\t\t[center[0], center[1] * scaleY],\n\t);\n\treturn [x, y / scaleY];\n}\n\nexport function buildRectSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<rect width=\"${width}\" height=\"${height}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" rx=\"4\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildEllipseSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst rx = width / 2;\n\tconst ry = height / 2;\n\treturn `<ellipse cx=\"${rx}\" cy=\"${ry}\" rx=\"${rx}\" ry=\"${ry}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\n/**\n * Returns the local SVG path for a scalable architectural revision cloud.\n *\n * Use this low-level helper when you need to preview or inspect the shape without\n * creating a full scene item. Prefer {@link createArchitecturalCloudItem} when\n * adding a cloud to a `VectorSceneItem[]`, because it keeps `toolKind`, bounds,\n * stroke fields, and `childrenSvg` synchronized for editing.\n *\n * @example\n * ```ts\n * const d = buildArchitecturalCloudPathD(180, 90);\n * ```\n */\nexport function buildArchitecturalCloudPathD(\n\twidth: number,\n\theight: number,\n\tstrokeWidth = DEFAULT_STROKE_STYLE.strokeWidth,\n): string {\n\tconst w = Math.max(0, width);\n\tconst h = Math.max(0, height);\n\tif (w <= 0 || h <= 0) return \"\";\n\n\tconst padding = Math.max(0, strokeWidth * 2);\n\tconst cloudWidth = Math.max(0, w - padding);\n\tconst cloudHeight = Math.max(0, h - padding);\n\tif (cloudWidth <= 0 || cloudHeight <= 0) return \"\";\n\n\tconst radiusX = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudWidth * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tconst radiusY = Math.min(\n\t\tARCHITECTURAL_CLOUD_RADIUS,\n\t\tcloudHeight * ARCHITECTURAL_CLOUD_FLAT_RADIUS_RATIO,\n\t);\n\tif (radiusX <= 0 || radiusY <= 0) return \"\";\n\n\tconst center: CloudPoint = [cloudWidth / 2, cloudHeight / 2];\n\tconst leftCenterX = radiusX;\n\tconst rightCenterX = cloudWidth - radiusX;\n\tconst topCenterY = radiusY;\n\tconst bottomCenterY = cloudHeight - radiusY;\n\tconst horizontalCenters = distributeRange(\n\t\tleftCenterX,\n\t\trightCenterX,\n\t\tarchitecturalCloudCenterCount(Math.max(0, rightCenterX - leftCenterX), radiusX),\n\t);\n\tconst verticalCenters = distributeRange(\n\t\ttopCenterY,\n\t\tbottomCenterY,\n\t\tarchitecturalCloudCenterCount(Math.max(0, bottomCenterY - topCenterY), radiusY),\n\t);\n\tif (horizontalCenters.length > 3 && verticalCenters.length > 3) {\n\t\tconst roundedArcCloudPath = buildRoundedArcCloudPathD(\n\t\t\tcloudWidth,\n\t\t\tcloudHeight,\n\t\t\tcenter,\n\t\t);\n\t\tif (roundedArcCloudPath !== \"\") return roundedArcCloudPath;\n\t}\n\tconst rectangularCenters: CloudPoint[] = [\n\t\t...horizontalCenters.map((x) => [x, topCenterY] as const),\n\t\t...verticalCenters.slice(1).map((y) => [rightCenterX, y] as const),\n\t\t...horizontalCenters\n\t\t\t.slice(0, -1)\n\t\t\t.reverse()\n\t\t\t.map((x) => [x, bottomCenterY] as const),\n\t\t...verticalCenters\n\t\t\t.slice(1, -1)\n\t\t\t.reverse()\n\t\t\t.map((y) => [leftCenterX, y] as const),\n\t];\n\tconst centers = rectangularCenters;\n\tconst points = centers.map((point, index) => {\n\t\tconst previous = centers[(index - 1 + centers.length) % centers.length] ?? point;\n\t\treturn cloudEllipseIntersection(previous, point, radiusX, radiusY, center);\n\t});\n\tconst [startX, startY] = points[0] ?? [0, 0];\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (const [endX, endY] of points.slice(1)) {\n\t\tsegments.push(\n\t\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\n\t}\n\tsegments.push(\n\t\t`A ${svgNumber(radiusX)} ${svgNumber(radiusY)} 0 0 1 ${svgNumber(startX)} ${svgNumber(startY)}`,\n\t);\n\n\tsegments.push(\"Z\");\n\treturn segments.join(\" \");\n}\n\n/**\n * Builds an SVG fragment for an architectural revision cloud outline.\n *\n * This is the renderer-level primitive behind the built-in `\"architectural-cloud\"`\n * tool. Prefer {@link createArchitecturalCloudItem} for app code that inserts a\n * normal editable scene item.\n */\nexport function buildArchitecturalCloudSvg(\n\twidth: number,\n\theight: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst d = buildArchitecturalCloudPathD(width, height, style.strokeWidth);\n\treturn `<path d=\"${d}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"${strokeOpacityAttr(style)} />`;\n}\n\nexport function buildLineSvg(\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\treturn `<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${line.x2}\" y2=\"${line.y2}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\"${strokeOpacityAttr(style)} />`;\n}\n\nexport type StraightArrowGeometry = {\n\tshaftEndX: number;\n\tshaftEndY: number;\n\theadTipX: number;\n\theadTipY: number;\n\theadLeftX: number;\n\theadLeftY: number;\n\theadRightX: number;\n\theadRightY: number;\n};\n\nexport function computeStraightArrowGeometry(\n\tline: LineEndpointsLocal,\n\tstrokeWidth: number,\n): StraightArrowGeometry | null {\n\tconst dx = line.x2 - line.x1;\n\tconst dy = line.y2 - line.y1;\n\tconst len = Math.hypot(dx, dy);\n\tif (len < 1e-6) return null;\n\tconst ux = dx / len;\n\tconst uy = dy / len;\n\tconst headLength = Math.min(Math.max(strokeWidth * 4.2, 12), len * 0.38);\n\tconst headAngle = Math.PI / 6;\n\tconst cos = Math.cos(headAngle);\n\tconst sin = Math.sin(headAngle);\n\tconst rx1 = ux * cos - uy * sin;\n\tconst ry1 = ux * sin + uy * cos;\n\tconst rx2 = ux * cos + uy * sin;\n\tconst ry2 = -ux * sin + uy * cos;\n\treturn {\n\t\tshaftEndX: line.x2,\n\t\tshaftEndY: line.y2,\n\t\theadTipX: line.x2,\n\t\theadTipY: line.y2,\n\t\theadLeftX: line.x2 - rx1 * headLength,\n\t\theadLeftY: line.y2 - ry1 * headLength,\n\t\theadRightX: line.x2 - rx2 * headLength,\n\t\theadRightY: line.y2 - ry2 * headLength,\n\t};\n}\n\nexport function buildArrowSvg(\n\titemId: string,\n\tline: LineEndpointsLocal,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tvoid itemId;\n\tconst geometry = computeStraightArrowGeometry(line, style.strokeWidth);\n\tif (!geometry) {\n\t\treturn buildLineSvg(line, style);\n\t}\n\tconst op = strokeOpacityAttr(style);\n\treturn `\n\t\t<line x1=\"${line.x1}\" y1=\"${line.y1}\" x2=\"${geometry.shaftEndX}\" y2=\"${geometry.shaftEndY}\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\"${op} />\n\t\t<path d=\"M ${geometry.headLeftX} ${geometry.headLeftY} L ${geometry.headTipX} ${geometry.headTipY} L ${geometry.headRightX} ${geometry.headRightY}\" fill=\"none\" stroke=\"${style.stroke}\" stroke-width=\"${style.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />\n\t`;\n}\n\nexport function buildDrawDotSvg(\n\tr: number,\n\tstyle: StrokeStyle = DEFAULT_STROKE_STYLE,\n): string {\n\tconst op =\n\t\tstyle.strokeOpacity != null ? ` fill-opacity=\"${style.strokeOpacity}\"` : \"\";\n\treturn `<circle cx=\"${r}\" cy=\"${r}\" r=\"${r}\" fill=\"${style.stroke}\" shape-rendering=\"geometricPrecision\"${op} />`;\n}\n\n/** Structured result for React overlays; scene uses {@link buildFreehandPathSvg} string. */\nexport type FreehandSvgPayload =\n\t| {\n\t\t\tkind: \"circle\";\n\t\t\tcx: number;\n\t\t\tcy: number;\n\t\t\tr: number;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"fillPath\";\n\t\t\td: string;\n\t\t\tfill: string;\n\t\t\tfillOpacity?: number;\n\t }\n\t| {\n\t\t\tkind: \"strokePath\";\n\t\t\td: string;\n\t\t\tstroke: string;\n\t\t\tstrokeWidth: number;\n\t\t\tstrokeOpacity?: number;\n\t\t\tstrokeDasharray?: string;\n\t };\n\nfunction dashArrayForDrawStroke(strokeWidth: number): string {\n\tconst dash = Math.max(strokeWidth * 1.8, 4);\n\tconst gap = Math.max(strokeWidth * 1.4, 3);\n\treturn `${dash} ${gap}`;\n}\n\nfunction buildSmoothedCenterlinePath(\n\tpoints: readonly { x: number; y: number }[],\n): string | null {\n\tif (points.length < 2) return null;\n\tconst first = points[0];\n\tif (!first) return null;\n\tlet d = `M ${first.x} ${first.y}`;\n\tfor (let i = 1; i < points.length - 1; i++) {\n\t\tconst a = points[i];\n\t\tconst b = points[i + 1];\n\t\tif (!a || !b) continue;\n\t\tconst midX = (a.x + b.x) / 2;\n\t\tconst midY = (a.y + b.y) / 2;\n\t\td += ` Q ${a.x} ${a.y} ${midX} ${midY}`;\n\t}\n\tconst last = points[points.length - 1];\n\tif (last) {\n\t\td += ` L ${last.x} ${last.y}`;\n\t}\n\treturn d;\n}\n\n/**\n * Computes freehand geometry (perfect-freehand + fallback). Used by {@link buildFreehandPathSvg}\n * and React overlays without `dangerouslySetInnerHTML`.\n */\nexport function computeFreehandSvgPayload(\n\tpathPointsLocal: readonly VectorPathPoint[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): FreehandSvgPayload | null {\n\tif (pathPointsLocal.length === 0) return null;\n\tif (pathPointsLocal.length === 1) {\n\t\tconst p = pathPointsLocal[0];\n\t\tif (!p) return null;\n\t\treturn {\n\t\t\tkind: \"circle\",\n\t\t\tcx: p.x,\n\t\t\tcy: p.y,\n\t\t\tr: Math.max(0.5, style.strokeWidth / 2),\n\t\t\tfill: style.stroke,\n\t\t\tfillOpacity: style.strokeOpacity,\n\t\t};\n\t}\n\tif (\n\t\tstyle.strokeDash === \"dashed\" &&\n\t\t(toolKind === \"draw\" || toolKind === \"pencil\")\n\t) {\n\t\tconst d = buildSmoothedCenterlinePath(pathPointsLocal);\n\t\tif (!d) return null;\n\t\treturn {\n\t\t\tkind: \"strokePath\",\n\t\t\td,\n\t\t\tstroke: style.stroke,\n\t\t\tstrokeWidth: style.strokeWidth,\n\t\t\tstrokeOpacity: style.strokeOpacity,\n\t\t\tstrokeDasharray: dashArrayForDrawStroke(style.strokeWidth),\n\t\t};\n\t}\n\tconst hasPressure = pathPointsLocal.some(\n\t\t(p) => p.pressure != null && Number.isFinite(p.pressure),\n\t);\n\tconst input = hasPressure\n\t\t? pathPointsLocal.map(\n\t\t\t\t(p) =>\n\t\t\t\t\t[p.x, p.y, Math.min(1, Math.max(0, p.pressure ?? 0.5))] as [\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t\tnumber,\n\t\t\t\t\t],\n\t\t\t)\n\t\t: pathPointsLocal.map((p) => [p.x, p.y] as [number, number]);\n\tconst stroke = getStroke(\n\t\tinput,\n\t\tperfectFreehandOptions(toolKind, style, strokeComplete, hasPressure),\n\t);\n\tif (stroke.length < 3) return null;\n\tconst first = stroke[0];\n\tif (!first) return null;\n\tlet d = `M ${first[0]} ${first[1]} Q`;\n\tfor (let i = 0; i < stroke.length; i++) {\n\t\tconst a = stroke[i];\n\t\tconst b = stroke[(i + 1) % stroke.length];\n\t\tif (!a || !b) continue;\n\t\td += ` ${a[0]} ${a[1]} ${(a[0] + b[0]) / 2} ${(a[1] + b[1]) / 2}`;\n\t}\n\td += \" Z\";\n\treturn {\n\t\tkind: \"fillPath\",\n\t\td,\n\t\tfill: style.stroke,\n\t\tfillOpacity: style.strokeOpacity,\n\t};\n}\n\nfunction freehandPayloadToSvgString(payload: FreehandSvgPayload): string {\n\tif (payload.kind === \"circle\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<circle cx=\"${payload.cx}\" cy=\"${payload.cy}\" r=\"${payload.r}\" fill=\"${payload.fill}\" shape-rendering=\"geometricPrecision\"${op} />`;\n\t}\n\tif (payload.kind === \"fillPath\") {\n\t\tconst op =\n\t\t\tpayload.fillOpacity != null ? ` fill-opacity=\"${payload.fillOpacity}\"` : \"\";\n\t\treturn `<path d=\"${payload.d}\" fill=\"${payload.fill}\" fill-rule=\"nonzero\" stroke=\"none\"${op} shape-rendering=\"geometricPrecision\" />`;\n\t}\n\tconst op = strokeOpacityAttr({\n\t\tstroke: payload.stroke,\n\t\tstrokeWidth: payload.strokeWidth,\n\t\tstrokeOpacity: payload.strokeOpacity,\n\t});\n\tconst dash = payload.strokeDasharray\n\t\t? ` stroke-dasharray=\"${payload.strokeDasharray}\"`\n\t\t: \"\";\n\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op}${dash} />`;\n}\n\n/**\n * Freehand stroke in local coordinates using [perfect-freehand](https://github.com/steveruizok/perfect-freehand)\n * (filled outline, tapered caps — similar spirit to tldraw / Excalidraw ink).\n */\nexport function buildFreehandPathSvg(\n\tpathPointsLocal: readonly { x: number; y: number }[],\n\tstyle: StrokeStyle,\n\ttoolKind: \"draw\" | \"pencil\" | \"brush\" | \"marker\",\n\tstrokeComplete = true,\n): string {\n\tconst payload = computeFreehandSvgPayload(\n\t\tpathPointsLocal,\n\t\tstyle,\n\t\ttoolKind,\n\t\tstrokeComplete,\n\t);\n\tif (!payload) return \"\";\n\treturn freehandPayloadToSvgString(payload);\n}\n\n/**\n * Creates a new unique id for a shape (for `VectorSceneItem.id` when adding from code or API).\n */\nexport function createShapeId(): string {\n\tconst uid =\n\t\ttypeof crypto !== \"undefined\" && crypto.randomUUID\n\t\t\t? crypto.randomUUID()\n\t\t\t: String(Date.now());\n\treturn `user-shape-${uid}`;\n}\n\n/**\n * Converts line segment endpoints from **world** coordinates to **local** coordinates\n * (origin = top-left of `bounds`). Use with {@link createLineItem}.\n */\nexport function lineEndpointsToLocal(\n\tbounds: Rect,\n\tworldEndA: { x: number; y: number },\n\tworldEndB: { x: number; y: number },\n): LineEndpointsLocal {\n\tconst b = normalizeRect(bounds);\n\treturn {\n\t\tx1: worldEndA.x - b.x,\n\t\ty1: worldEndA.y - b.y,\n\t\tx2: worldEndB.x - b.x,\n\t\ty2: worldEndB.y - b.y,\n\t};\n}\n\n/**\n * Rebuilds the SVG fragment (`childrenSvg`) from geometry + stroke fields (after edits or resize).\n */\nexport function rebuildItemSvg(item: VectorSceneItem): VectorSceneItem {\n\tconst style = resolveStrokeStyle(item);\n\tconst k = item.toolKind;\n\n\tif (k === \"rect\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRectSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"ellipse\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildEllipseSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif (k === \"architectural-cloud\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildArchitecturalCloudSvg(b.width, b.height, style),\n\t\t};\n\t}\n\tif ((k === \"line\" || k === \"arrow\") && item.line) {\n\t\tconst line = item.line;\n\t\tconst childrenSvg =\n\t\t\tk === \"arrow\"\n\t\t\t\t? buildArrowSvg(item.id, line, style)\n\t\t\t\t: buildLineSvg(line, style);\n\t\treturn { ...item, childrenSvg };\n\t}\n\tif (k === \"text\" && item.text !== undefined) {\n\t\tconst fs = item.textFontSize ?? DEFAULT_TEXT_FONT_SIZE;\n\t\tif (item.textFixedBounds) {\n\t\t\tconst b = normalizeRect(item.bounds);\n\t\t\treturn {\n\t\t\t\t...item,\n\t\t\t\tx: b.x,\n\t\t\t\ty: b.y,\n\t\t\t\tbounds: b,\n\t\t\t\tchildrenSvg: buildTextFixedBoundsSvg(\n\t\t\t\t\titem.text,\n\t\t\t\t\tb.width,\n\t\t\t\t\tb.height,\n\t\t\t\t\tstyle.stroke,\n\t\t\t\t\tfs,\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tconst m = measureTextBoundsLocal(item.text, fs);\n\t\tconst b = normalizeRect({\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\twidth: m.width,\n\t\t\theight: m.height,\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildTextSvg(item.text, b.width, b.height, style.stroke, fs),\n\t\t};\n\t}\n\tif (\n\t\t(k === \"draw\" || k === \"pencil\" || k === \"brush\" || k === \"marker\") &&\n\t\titem.pathPointsLocal &&\n\t\titem.pathPointsLocal.length > 0\n\t) {\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildFreehandPathSvg(item.pathPointsLocal, style, k),\n\t\t};\n\t}\n\tif (k === \"draw\") {\n\t\tconst b = normalizeRect(item.bounds);\n\t\tconst r = Math.min(b.width, b.height) / 2;\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildDrawDotSvg(r, style),\n\t\t};\n\t}\n\tif (k === \"image\" && item.imageRasterHref && item.imageIntrinsicSize) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\t\titem.imageRasterHref,\n\t\t\t\titem.imageIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\tif (k === \"custom\" && item.customIntrinsicSize && item.customInnerSvg) {\n\t\tconst b = normalizeRect(item.bounds);\n\t\treturn {\n\t\t\t...item,\n\t\t\tx: b.x,\n\t\t\ty: b.y,\n\t\t\tbounds: b,\n\t\t\tchildrenSvg: buildCustomShapeChildrenSvg(\n\t\t\t\titem.customInnerSvg,\n\t\t\t\titem.customIntrinsicSize,\n\t\t\t\tb,\n\t\t\t),\n\t\t};\n\t}\n\n\treturn item;\n}\n\n/** Updates stroke color / width / opacity and refreshes the item’s SVG. */\nexport function applyStrokeToItem(\n\titem: VectorSceneItem,\n\tpatch: Partial<\n\t\tPick<\n\t\t\tVectorSceneItem,\n\t\t\t\"stroke\" | \"strokeWidth\" | \"strokeOpacity\" | \"strokeDash\" | \"textFontSize\"\n\t\t>\n\t>,\n): VectorSceneItem {\n\treturn rebuildItemSvg({ ...item, ...patch });\n}\n\n/** Creates a rectangle shape ready to append to your scene `items` array. */\nexport function createRectangleItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"rect\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an ellipse shape. */\nexport function createEllipseItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"ellipse\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/**\n * Creates an architectural revision cloud shape.\n *\n * Use this high-level builder when adding the built-in cloud shape from code or\n * from custom integrations. It creates an editable `VectorSceneItem` with\n * `toolKind: \"architectural-cloud\"`, so resize, stroke styling, selection, and\n * serialization continue to work like the built-in rectangle and ellipse tools.\n *\n * @example\n * ```ts\n * const cloud = createArchitecturalCloudItem(createShapeId(), {\n * x: 40,\n * y: 30,\n * width: 180,\n * height: 90,\n * });\n * ```\n */\nexport function createArchitecturalCloudItem(\n\tid: string,\n\tbounds: Rect,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"architectural-cloud\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates a straight line or arrow; `line` is usually from {@link lineEndpointsToLocal}. */\nexport function createLineItem(\n\tid: string,\n\tbounds: Rect,\n\tline: LineEndpointsLocal,\n\ttoolKind: \"line\" | \"arrow\",\n\tstyle?: Partial<StrokeStyle>,\n\tarrowBind?: ArrowBindings,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind,\n\t\tline: { ...line },\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(arrowBind ? { arrowBind } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** “Draw dot” tool: a small filled circle at (`worldX`, `worldY`). */\nexport function createDrawDotItem(\n\tid: string,\n\tworldX: number,\n\tworldY: number,\n\tradius: number,\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem {\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: worldX - radius,\n\t\ty: worldY - radius,\n\t\tbounds: {\n\t\t\tx: worldX - radius,\n\t\t\ty: worldY - radius,\n\t\t\twidth: radius * 2,\n\t\t\theight: radius * 2,\n\t\t},\n\t\ttoolKind: \"draw\",\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Creates an editable text box (`stroke` is used as text fill). */\nexport function createTextItem(\n\tid: string,\n\tbounds: Rect,\n\ttext = \"\",\n\tstyle?: Partial<StrokeStyle>,\n\ttextFontSize?: number,\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst s = { ...DEFAULT_STROKE_STYLE, ...style };\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"text\",\n\t\ttext,\n\t\tstroke: s.stroke,\n\t\tstrokeWidth: s.strokeWidth,\n\t\t...(s.strokeOpacity != null ? { strokeOpacity: s.strokeOpacity } : {}),\n\t\t...(textFontSize != null ? { textFontSize } : {}),\n\t\tchildrenSvg: \"\",\n\t});\n}\n\n/** Freehand stroke from world-space points (main pen or marker highlight). */\nexport function createFreehandStrokeItem(\n\tid: string,\n\tpointsWorld: readonly VectorPathPoint[],\n\ttoolKind: \"draw\" | \"marker\",\n\tstyle?: Partial<StrokeStyle>,\n): VectorSceneItem | null {\n\tif (pointsWorld.length === 0) return null;\n\n\tconst merged: StrokeStyle = {\n\t\t...DEFAULT_STROKE_STYLE,\n\t\t...TOOL_FREEHAND_DEFAULTS[toolKind],\n\t\t...style,\n\t};\n\n\tconst sw = merged.strokeWidth;\n\t/** Filled outline extends ~size/2 past the polyline; keep generous padding to avoid clipping. */\n\tconst pad = Math.max(sw * 0.75 + 4, sw / 2 + 6);\n\tconst xs = pointsWorld.map((p) => p.x);\n\tconst ys = pointsWorld.map((p) => p.y);\n\tconst minX = Math.min(...xs);\n\tconst maxX = Math.max(...xs);\n\tconst minY = Math.min(...ys);\n\tconst maxY = Math.max(...ys);\n\n\tconst x = minX - pad;\n\tconst y = minY - pad;\n\tconst w = Math.max(maxX - minX + 2 * pad, sw);\n\tconst h = Math.max(maxY - minY + 2 * pad, sw);\n\n\tconst pathPointsLocal = pointsWorld.map((p) => ({\n\t\tx: p.x - x,\n\t\ty: p.y - y,\n\t\t...(p.pressure != null ? { pressure: p.pressure } : {}),\n\t}));\n\n\treturn rebuildItemSvg({\n\t\tid,\n\t\tx,\n\t\ty,\n\t\tbounds: { x, y, width: w, height: h },\n\t\ttoolKind,\n\t\tstroke: merged.stroke,\n\t\tstrokeWidth: merged.strokeWidth,\n\t\t...(merged.strokeOpacity != null ? { strokeOpacity: merged.strokeOpacity } : {}),\n\t\t...(merged.strokeDash != null ? { strokeDash: merged.strokeDash } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\");\n}\n\n/**\n * Builds `<g><image href=\"data:...\"/></g>` inside `bounds` from intrinsic pixel dimensions.\n * When bounds match intrinsic aspect (normal after aspect-locked resize), uses a uniform **fill** scale.\n * Otherwise uses **contain** + center for legacy or pasted rects with wrong proportion.\n */\nexport function buildRasterImageChildrenSvg(\n\tdataUrl: string,\n\tintrinsic: { width: number; height: number },\n\tbounds: Rect,\n): string {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, intrinsic.width);\n\tconst ih = Math.max(1e-6, intrinsic.height);\n\tconst href = escapeSvgAttr(dataUrl);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = iw / ih;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / iw;\n\t\treturn `<g transform=\"scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n\t}\n\tconst s = Math.min(r.width / iw, r.height / ih);\n\tconst tx = (r.width - iw * s) / 2;\n\tconst ty = (r.height - ih * s) / 2;\n\treturn `<g transform=\"translate(${tx}, ${ty}) scale(${s})\"><image href=\"${href}\" x=\"0\" y=\"0\" width=\"${iw}\" height=\"${ih}\" /></g>`;\n}\n\n/** Places a bitmap (e.g. `data:image/png;base64,...`) inside `bounds`. */\nexport function createImageItem(\n\tid: string,\n\tbounds: Rect,\n\timageRasterHref: string,\n\timageIntrinsicSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst iw = Math.max(1e-6, imageIntrinsicSize.width);\n\tconst ih = Math.max(1e-6, imageIntrinsicSize.height);\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageRasterHref,\n\t\timageIntrinsicSize: { width: iw, height: ih },\n\t\tchildrenSvg: buildRasterImageChildrenSvg(\n\t\t\timageRasterHref,\n\t\t\t{ width: iw, height: ih },\n\t\t\tr,\n\t\t),\n\t};\n}\n\n/** @internal Legacy traced path content — prefer {@link createImageItem} with a raster data URL. */\nexport function createImageFromVectorTrace(\n\tid: string,\n\tbounds: Rect,\n\timageVectorInnerSvg: string,\n\timageVectorLocalSize: { width: number; height: number },\n): VectorSceneItem {\n\tconst r = normalizeRect(bounds);\n\tconst lw = Math.max(1e-6, imageVectorLocalSize.width);\n\tconst lh = Math.max(1e-6, imageVectorLocalSize.height);\n\tconst arB = r.width / Math.max(1e-9, r.height);\n\tconst arI = lw / lh;\n\tlet childrenSvg: string;\n\tif (Math.abs(arB - arI) < 1e-3) {\n\t\tconst s = r.width / lw;\n\t\tchildrenSvg = `<g transform=\"scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t} else {\n\t\tconst s = Math.min(r.width / lw, r.height / lh);\n\t\tconst tx = (r.width - lw * s) / 2;\n\t\tconst ty = (r.height - lh * s) / 2;\n\t\tchildrenSvg = `<g transform=\"translate(${tx}, ${ty}) scale(${s})\">${imageVectorInnerSvg}</g>`;\n\t}\n\treturn {\n\t\tid,\n\t\tx: r.x,\n\t\ty: r.y,\n\t\tbounds: { ...r },\n\t\ttoolKind: \"image\",\n\t\timageVectorInnerSvg,\n\t\timageVectorLocalSize: { width: lw, height: lh },\n\t\tchildrenSvg,\n\t};\n}\n","import { normalizeRect, type Rect } from \"../../math/rect\";\nimport { createCustomShapeItem } from \"../../scene/custom-shape\";\nimport {\n\tbuildLinkCardSvg,\n\ttype CanvuLinkData,\n\tLINK_PLUGIN_KEY,\n} from \"../../scene/link-item\";\nimport {\n\tbuildFreehandPathSvg,\n\tbuildTextSvg,\n\tcreateImageItem,\n\tcreateLineItem,\n\tlineEndpointsToLocal,\n\tmeasureTextBoundsLocal,\n\ttype StrokeStyle,\n} from \"../../scene/shape-builders\";\nimport type { VectorPathPoint, VectorSceneItem } from \"../../scene/types\";\nimport type {\n\tRoomSnapshot,\n\tTlAssetRecord,\n\tTlBindingRecord,\n\tTlPageRecord,\n\tTlRecord,\n\tTlShapeRecord,\n\tTlSnapshotInput,\n\tTlStoreSnapshot,\n\tTlUnknownObject,\n} from \"./types\";\n\nexport type TldrawSnapshotImportOptions = {\n\tpageId?: string;\n\tassetUrlResolver?: (\n\t\tasset: TlAssetRecord,\n\t\tshape: TlShapeRecord,\n\t) => string | undefined;\n\tonUnsupportedShape?: (shape: TlShapeRecord, reason: string) => void;\n};\n\ntype Point = {\n\tx: number;\n\ty: number;\n\tpressure?: number;\n\tindex?: string;\n};\n\ntype Matrix = {\n\ta: number;\n\tb: number;\n\tc: number;\n\td: number;\n\te: number;\n\tf: number;\n};\n\ntype NormalizedSnapshot = {\n\trecords: Map<string, TlRecord>;\n\tshapes: Map<string, TlShapeRecord>;\n\tassets: Map<string, TlAssetRecord>;\n\tbindings: Map<string, TlBindingRecord>;\n\tpages: Map<string, TlPageRecord>;\n\tselectedPageId?: string;\n\toptions: TldrawSnapshotImportOptions;\n\tlocalBoundsCache: Map<string, Rect>;\n\tworldMatrixCache: Map<string, Matrix>;\n\trootPageCache: Map<string, string | null>;\n};\n\nconst IDENTITY_MATRIX: Matrix = {\n\ta: 1,\n\tb: 0,\n\tc: 0,\n\td: 1,\n\te: 0,\n\tf: 0,\n};\n\nconst TL_COLORS: Record<string, string> = {\n\tblack: \"#1d1d1d\",\n\tgray: \"#6b7280\",\n\tgrey: \"#6b7280\",\n\t\"light-gray\": \"#9ca3af\",\n\t\"dark-gray\": \"#374151\",\n\tblue: \"#3b82f6\",\n\t\"light-blue\": \"#93c5fd\",\n\tgreen: \"#22c55e\",\n\t\"light-green\": \"#86efac\",\n\t\"dark-green\": \"#16a34a\",\n\tred: \"#ef4444\",\n\t\"light-red\": \"#fca5a5\",\n\t\"dark-red\": \"#dc2626\",\n\tviolet: \"#8b5cf6\",\n\t\"light-violet\": \"#c4b5fd\",\n\t\"dark-violet\": \"#7c3aed\",\n\tyellow: \"#eab308\",\n\torange: \"#f97316\",\n\t\"light-orange\": \"#fdba74\",\n};\n\nfunction isRecord(value: unknown): value is TlUnknownObject {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asRecord(value: unknown): TlUnknownObject | undefined {\n\treturn isRecord(value) ? value : undefined;\n}\n\nfunction asArray(value: unknown): unknown[] | undefined {\n\treturn Array.isArray(value) ? value : undefined;\n}\n\nfunction getString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction getNumber(value: unknown): number | undefined {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction clamp01(value: number): number {\n\treturn Math.max(0, Math.min(1, value));\n}\n\nfunction resolveColor(value: string | undefined): string {\n\tif (!value) return \"#1d1d1d\";\n\treturn TL_COLORS[value] ?? value;\n}\n\nfunction escapeXml(value: string): string {\n\treturn value\n\t\t.replace(/&/g, \"&\")\n\t\t.replace(/</g, \"<\")\n\t\t.replace(/>/g, \">\")\n\t\t.replace(/\"/g, \""\");\n}\n\nfunction escapeHtmlText(value: string): string {\n\treturn value.replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\n\nfunction formatNumber(value: number): string {\n\tif (!Number.isFinite(value)) return \"0\";\n\tconst rounded = Math.round(value * 100) / 100;\n\treturn Number.isInteger(rounded) ? String(rounded) : String(rounded);\n}\n\nfunction multiplyMatrix(left: Matrix, right: Matrix): Matrix {\n\treturn {\n\t\ta: left.a * right.a + left.c * right.b,\n\t\tb: left.b * right.a + left.d * right.b,\n\t\tc: left.a * right.c + left.c * right.d,\n\t\td: left.b * right.c + left.d * right.d,\n\t\te: left.a * right.e + left.c * right.f + left.e,\n\t\tf: left.b * right.e + left.d * right.f + left.f,\n\t};\n}\n\nfunction translationMatrix(x: number, y: number): Matrix {\n\treturn { a: 1, b: 0, c: 0, d: 1, e: x, f: y };\n}\n\nfunction rotationMatrix(radians: number): Matrix {\n\tconst cos = Math.cos(radians);\n\tconst sin = Math.sin(radians);\n\treturn { a: cos, b: sin, c: -sin, d: cos, e: 0, f: 0 };\n}\n\nfunction applyMatrix(\n\tmatrix: Matrix,\n\tpoint: { x: number; y: number },\n): { x: number; y: number } {\n\treturn {\n\t\tx: matrix.a * point.x + matrix.c * point.y + matrix.e,\n\t\ty: matrix.b * point.x + matrix.d * point.y + matrix.f,\n\t};\n}\n\nfunction matrixRotation(matrix: Matrix): number {\n\treturn Math.atan2(matrix.b, matrix.a);\n}\n\nfunction opacityToUnit(value: unknown): number {\n\tconst numeric = getNumber(value);\n\tif (numeric == null) return 1;\n\treturn numeric > 1 ? clamp01(numeric / 100) : clamp01(numeric);\n}\n\nfunction sizeToStrokePx(size: string | undefined, base = 2): number {\n\tif (size === \"s\") return base * 0.75;\n\tif (size === \"l\") return base * 1.5;\n\tif (size === \"xl\") return base * 2.25;\n\treturn base;\n}\n\nfunction sizeToFontPx(size: string | undefined): number {\n\tif (size === \"s\") return 14;\n\tif (size === \"l\") return 24;\n\tif (size === \"xl\") return 32;\n\treturn 18;\n}\n\nfunction dashArrayForStyle(\n\tdash: string | undefined,\n\tstrokeWidth: number,\n): string | undefined {\n\tif (!dash || dash === \"solid\") return undefined;\n\tif (dash === \"dotted\") {\n\t\treturn `${formatNumber(Math.max(1.25, strokeWidth))} ${formatNumber(Math.max(2.5, strokeWidth * 2.2))}`;\n\t}\n\tif (dash === \"dashed\") {\n\t\treturn `${formatNumber(Math.max(5, strokeWidth * 4))} ${formatNumber(Math.max(3, strokeWidth * 2.2))}`;\n\t}\n\tif (dash === \"draw\") {\n\t\treturn `${formatNumber(Math.max(3, strokeWidth * 2.4))} ${formatNumber(Math.max(2.4, strokeWidth * 1.6))}`;\n\t}\n\treturn dash;\n}\n\nfunction fillAttrs(fill: string | undefined, stroke: string): string {\n\tif (!fill || fill === \"none\") return 'fill=\"none\"';\n\tif (fill === \"solid\") return `fill=\"${stroke}\" fill-opacity=\"0.16\"`;\n\tif (fill === \"semi\") return `fill=\"${stroke}\" fill-opacity=\"0.1\"`;\n\tif (fill === \"pattern\") return `fill=\"${stroke}\" fill-opacity=\"0.07\"`;\n\treturn `fill=\"${resolveColor(fill)}\" fill-opacity=\"0.16\"`;\n}\n\nfunction strokeAttrs(style: {\n\tstroke: string;\n\tstrokeWidth: number;\n\tdash?: string;\n\tlineCap?: \"round\" | \"square\" | \"butt\";\n\tlineJoin?: \"round\" | \"miter\" | \"bevel\";\n}): string {\n\tconst dashArray = dashArrayForStyle(style.dash, style.strokeWidth);\n\tconst dashAttr = dashArray ? ` stroke-dasharray=\"${dashArray}\"` : \"\";\n\tconst lineCap = style.lineCap ? ` stroke-linecap=\"${style.lineCap}\"` : \"\";\n\tconst lineJoin = style.lineJoin ? ` stroke-linejoin=\"${style.lineJoin}\"` : \"\";\n\treturn `stroke=\"${style.stroke}\" stroke-width=\"${formatNumber(style.strokeWidth)}\"${dashAttr}${lineCap}${lineJoin}`;\n}\n\nfunction wrapOpacity(svg: string, opacity: number): string {\n\tif (opacity >= 0.999) return svg;\n\treturn `<g opacity=\"${formatNumber(opacity)}\">${svg}</g>`;\n}\n\nfunction buildForeignObjectTextSvg(options: {\n\tx?: number;\n\ty?: number;\n\twidth: number;\n\theight: number;\n\ttext: string;\n\tfontSize: number;\n\tcolor: string;\n\tpadding?: number;\n\talign?: string;\n\tverticalAlign?: string;\n\tfontWeight?: number;\n\titalic?: boolean;\n\tlineHeightRatio?: number;\n\tbackground?: string;\n\tborderRadius?: number;\n}): string {\n\tconst x = options.x ?? 0;\n\tconst y = options.y ?? 0;\n\tconst w = Math.max(1, options.width);\n\tconst h = Math.max(1, options.height);\n\tconst padding = options.padding ?? 0;\n\tconst align =\n\t\toptions.align === \"end\" || options.align === \"right\"\n\t\t\t? \"right\"\n\t\t\t: options.align === \"middle\" || options.align === \"center\"\n\t\t\t\t? \"center\"\n\t\t\t\t: \"left\";\n\tconst justify =\n\t\talign === \"right\" ? \"flex-end\" : align === \"center\" ? \"center\" : \"flex-start\";\n\tconst vertical =\n\t\toptions.verticalAlign === \"end\" || options.verticalAlign === \"bottom\"\n\t\t\t? \"flex-end\"\n\t\t\t: options.verticalAlign === \"middle\" || options.verticalAlign === \"center\"\n\t\t\t\t? \"center\"\n\t\t\t\t: \"flex-start\";\n\tconst lineHeight = options.fontSize * (options.lineHeightRatio ?? 1.25);\n\tconst weight =\n\t\toptions.fontWeight != null ? `font-weight:${options.fontWeight};` : \"\";\n\tconst fontStyle = options.italic ? \"font-style:italic;\" : \"\";\n\tconst background = options.background ? `background:${options.background};` : \"\";\n\tconst radius =\n\t\toptions.borderRadius != null\n\t\t\t? `border-radius:${formatNumber(options.borderRadius)}px;`\n\t\t\t: \"\";\n\treturn `<foreignObject x=\"${formatNumber(x)}\" y=\"${formatNumber(y)}\" width=\"${formatNumber(w)}\" height=\"${formatNumber(h)}\"><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"box-sizing:border-box;width:100%;height:100%;margin:0;padding:${formatNumber(padding)}px;display:flex;align-items:${vertical};justify-content:${justify};text-align:${align};white-space:pre-wrap;word-break:break-word;overflow:hidden;color:${options.color};font-size:${formatNumber(options.fontSize)}px;line-height:${formatNumber(lineHeight)}px;font-family:system-ui,sans-serif;${weight}${fontStyle}${background}${radius}\">${escapeHtmlText(options.text)}</div></foreignObject>`;\n}\n\nfunction richTextToPlainText(value: unknown): string {\n\tconst parts: string[] = [];\n\n\tfunction walk(node: unknown): void {\n\t\tif (typeof node === \"string\") {\n\t\t\tparts.push(node);\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(node)) {\n\t\t\tfor (const child of node) walk(child);\n\t\t\treturn;\n\t\t}\n\t\tconst record = asRecord(node);\n\t\tif (!record) return;\n\t\tconst type = getString(record.type);\n\t\tif (type === \"hardBreak\") {\n\t\t\tparts.push(\"\\n\");\n\t\t\treturn;\n\t\t}\n\t\tconst text = getString(record.text);\n\t\tif (text) parts.push(text);\n\t\tconst content = asArray(record.content);\n\t\tif (content) {\n\t\t\tconst before = parts.length;\n\t\t\tfor (const child of content) walk(child);\n\t\t\tif (\n\t\t\t\tparts.length > before &&\n\t\t\t\t(type === \"paragraph\" ||\n\t\t\t\t\ttype === \"heading\" ||\n\t\t\t\t\ttype === \"blockquote\" ||\n\t\t\t\t\ttype === \"listItem\") &&\n\t\t\t\tparts[parts.length - 1] !== \"\\n\"\n\t\t\t) {\n\t\t\t\tparts.push(\"\\n\");\n\t\t\t}\n\t\t}\n\t}\n\n\twalk(value);\n\treturn parts\n\t\t.join(\"\")\n\t\t.replace(/\\n{3,}/g, \"\\n\\n\")\n\t\t.trimEnd();\n}\n\nfunction extractPlainText(props: TlUnknownObject): string {\n\tconst direct = getString(props.text);\n\tif (direct != null) return direct;\n\tconst plain = getString(props.plainText);\n\tif (plain != null) return plain;\n\tconst rich = richTextToPlainText(props.richText);\n\tif (rich) return rich;\n\treturn \"\";\n}\n\nfunction numberOr(value: unknown, fallback: number): number {\n\treturn getNumber(value) ?? fallback;\n}\n\nfunction decodeBase64Bytes(base64: string): Uint8Array {\n\tif (!base64) return new Uint8Array();\n\tconst uint8ArrayCtor = Uint8Array as typeof Uint8Array & {\n\t\tfromBase64?: (value: string) => Uint8Array;\n\t};\n\tif (typeof uint8ArrayCtor.fromBase64 === \"function\") {\n\t\treturn uint8ArrayCtor.fromBase64(base64);\n\t}\n\tif (typeof atob === \"function\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let index = 0; index < binary.length; index++) {\n\t\t\tbytes[index] = binary.charCodeAt(index);\n\t\t}\n\t\treturn bytes;\n\t}\n\tconst globalBuffer = (\n\t\tglobalThis as typeof globalThis & {\n\t\t\tBuffer?: { from(input: string, encoding: string): Uint8Array };\n\t\t}\n\t).Buffer;\n\tif (globalBuffer) {\n\t\treturn new Uint8Array(globalBuffer.from(base64, \"base64\"));\n\t}\n\treturn new Uint8Array();\n}\n\nfunction float16BitsToNumber(bits: number): number {\n\tconst sign = (bits & 0x8000) !== 0 ? -1 : 1;\n\tconst exponent = (bits >> 10) & 0x1f;\n\tconst fraction = bits & 0x03ff;\n\tif (exponent === 0) {\n\t\tif (fraction === 0) return sign === -1 ? -0 : 0;\n\t\treturn sign * (fraction / 1024) * 2 ** -14;\n\t}\n\tif (exponent === 0x1f) {\n\t\treturn fraction === 0 ? sign * Infinity : Number.NaN;\n\t}\n\treturn sign * (1 + fraction / 1024) * 2 ** (exponent - 15);\n}\n\nfunction getFloat16(dataView: DataView, offset: number): number {\n\tconst native = dataView as DataView & {\n\t\tgetFloat16?: (byteOffset: number, littleEndian?: boolean) => number;\n\t};\n\tif (typeof native.getFloat16 === \"function\") {\n\t\treturn native.getFloat16(offset, true);\n\t}\n\treturn float16BitsToNumber(dataView.getUint16(offset, true));\n}\n\nfunction isUsableDecodedPoints(points: readonly Point[]): boolean {\n\treturn (\n\t\tpoints.length > 0 &&\n\t\tpoints.every(\n\t\t\t(point) =>\n\t\t\t\tNumber.isFinite(point.x) &&\n\t\t\t\tNumber.isFinite(point.y) &&\n\t\t\t\t(point.pressure == null || Number.isFinite(point.pressure)),\n\t\t)\n\t);\n}\n\nfunction decodeDrawPathAsDeltaPoints(path: string): Point[] {\n\tconst bytes = decodeBase64Bytes(path);\n\tif (bytes.length < 12 || (bytes.length - 12) % 6 !== 0) return [];\n\tconst dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\tlet x = dataView.getFloat32(0, true);\n\tlet y = dataView.getFloat32(4, true);\n\tlet z = dataView.getFloat32(8, true);\n\tconst points: Point[] = [{ x, y, pressure: clamp01(z) }];\n\tfor (let offset = 12; offset < bytes.length; offset += 6) {\n\t\tx += getFloat16(dataView, offset);\n\t\ty += getFloat16(dataView, offset + 2);\n\t\tz += getFloat16(dataView, offset + 4);\n\t\tpoints.push({ x, y, pressure: clamp01(z) });\n\t}\n\treturn isUsableDecodedPoints(points) ? points : [];\n}\n\nfunction decodeDrawPathAsLegacyPoints(path: string): Point[] {\n\tconst bytes = decodeBase64Bytes(path);\n\tif (bytes.length === 0 || bytes.length % 6 !== 0) return [];\n\tconst dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n\tconst points: Point[] = [];\n\tfor (let offset = 0; offset < bytes.length; offset += 6) {\n\t\tpoints.push({\n\t\t\tx: getFloat16(dataView, offset),\n\t\t\ty: getFloat16(dataView, offset + 2),\n\t\t\tpressure: clamp01(getFloat16(dataView, offset + 4)),\n\t\t});\n\t}\n\treturn isUsableDecodedPoints(points) ? points : [];\n}\n\nfunction decodeDrawPath(path: string): Point[] {\n\tconst deltaPoints = decodeDrawPathAsDeltaPoints(path);\n\treturn deltaPoints.length > 0 ? deltaPoints : decodeDrawPathAsLegacyPoints(path);\n}\n\nfunction unwrapStoredRecord(value: unknown): TlRecord | null {\n\tconst record = asRecord(value);\n\tif (!record) return null;\n\tconst state = asRecord(record.state);\n\treturn (state ?? record) as TlRecord;\n}\n\nfunction inferPageIdFromSession(input: TlSnapshotInput): string | undefined {\n\tif (!isRecord(input) || !(\"session\" in input)) return undefined;\n\tconst session = asRecord(input.session);\n\tif (!session) return undefined;\n\tconst direct = getString(session.currentPageId) ?? getString(session.pageId);\n\tif (direct) return direct;\n\tconst pageState = asRecord(session.pageState);\n\tif (!pageState) return undefined;\n\treturn getString(pageState.pageId) ?? getString(pageState.currentPageId);\n}\n\nfunction recordsFromDocument(document: unknown): TlRecord[] {\n\tconst snapshot = asRecord(document);\n\tif (!snapshot) return [];\n\tif (isRecord(snapshot.store)) {\n\t\treturn Object.values(snapshot.store) as TlRecord[];\n\t}\n\treturn Object.values(snapshot)\n\t\t.map((value) => unwrapStoredRecord(value))\n\t\t.filter((value): value is TlRecord => value != null);\n}\n\nfunction normalizeSnapshot(\n\tinput: TlSnapshotInput,\n\toptions: TldrawSnapshotImportOptions,\n): NormalizedSnapshot {\n\tconst rawInput = asRecord(input) ?? {};\n\tlet records: TlRecord[] = [];\n\tif (Array.isArray(rawInput.documents)) {\n\t\trecords = rawInput.documents\n\t\t\t.map((value) => unwrapStoredRecord(value))\n\t\t\t.filter((value): value is TlRecord => value != null);\n\t} else if (isRecord(rawInput.store)) {\n\t\trecords = Object.values(rawInput.store) as TlRecord[];\n\t} else if (\"document\" in rawInput) {\n\t\trecords = recordsFromDocument(rawInput.document);\n\t}\n\n\tconst recordsMap = new Map<string, TlRecord>();\n\tconst shapes = new Map<string, TlShapeRecord>();\n\tconst assets = new Map<string, TlAssetRecord>();\n\tconst bindings = new Map<string, TlBindingRecord>();\n\tconst pages = new Map<string, TlPageRecord>();\n\n\tfor (const record of records) {\n\t\tconst raw = asRecord(record);\n\t\tconst id = raw ? getString(raw.id) : undefined;\n\t\tconst typeName = raw ? getString(raw.typeName) : undefined;\n\t\tif (!id || !typeName) continue;\n\t\trecordsMap.set(id, record);\n\t\tif (typeName === \"shape\") {\n\t\t\tshapes.set(id, record as TlShapeRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"asset\") {\n\t\t\tassets.set(id, record as TlAssetRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"binding\") {\n\t\t\tbindings.set(id, record as TlBindingRecord);\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeName === \"page\") {\n\t\t\tpages.set(id, record as TlPageRecord);\n\t\t}\n\t}\n\n\tconst selectedPageId =\n\t\toptions.pageId ??\n\t\tinferPageIdFromSession(input) ??\n\t\tpages.keys().next().value ??\n\t\tArray.from(shapes.values()).find((shape) => shape.parentId.startsWith(\"page:\"))\n\t\t\t?.parentId;\n\n\treturn {\n\t\trecords: recordsMap,\n\t\tshapes,\n\t\tassets,\n\t\tbindings,\n\t\tpages,\n\t\tselectedPageId,\n\t\toptions,\n\t\tlocalBoundsCache: new Map(),\n\t\tworldMatrixCache: new Map(),\n\t\trootPageCache: new Map(),\n\t};\n}\n\nfunction normalizePoint(value: unknown): Point | null {\n\tif (Array.isArray(value)) {\n\t\tconst [x, y, pressure] = value;\n\t\tconst px = getNumber(x);\n\t\tconst py = getNumber(y);\n\t\tif (px == null || py == null) return null;\n\t\treturn {\n\t\t\tx: px,\n\t\t\ty: py,\n\t\t\t...(getNumber(pressure) != null\n\t\t\t\t? { pressure: clamp01(getNumber(pressure) ?? 0.5) }\n\t\t\t\t: {}),\n\t\t};\n\t}\n\tconst record = asRecord(value);\n\tif (!record) return null;\n\tconst x = getNumber(record.x);\n\tconst y = getNumber(record.y);\n\tif (x == null || y == null) return null;\n\tconst pressure = getNumber(record.pressure) ?? getNumber(record.z);\n\treturn {\n\t\tx,\n\t\ty,\n\t\t...(pressure != null ? { pressure: clamp01(pressure) } : {}),\n\t\t...(getString(record.index) ? { index: getString(record.index) } : {}),\n\t};\n}\n\nfunction collectStrokePoints(props: TlUnknownObject): Point[] {\n\tconst segments = asArray(props.segments) ?? [];\n\tconst points: Point[] = [];\n\tconst scaleX = getNumber(props.scaleX) ?? getNumber(props.scale) ?? 1;\n\tconst scaleY = getNumber(props.scaleY) ?? getNumber(props.scale) ?? 1;\n\tfor (const segment of segments) {\n\t\tconst record = asRecord(segment);\n\t\tconst encodedPath = record ? getString(record.path) : undefined;\n\t\tconst rawPoints = record ? (asArray(record.points) ?? []) : [];\n\t\tconst segmentIsAbsolute = Boolean(encodedPath);\n\t\tconst decodedPoints =\n\t\t\trawPoints.length > 0\n\t\t\t\t? rawPoints\n\t\t\t\t\t\t.map((value) => normalizePoint(value))\n\t\t\t\t\t\t.filter((value): value is Point => value != null)\n\t\t\t\t: encodedPath\n\t\t\t\t\t? decodeDrawPath(encodedPath)\n\t\t\t\t\t: [];\n\t\tconst previous = points[points.length - 1];\n\t\tfor (let index = 0; index < decodedPoints.length; index++) {\n\t\t\tconst point = decodedPoints[index];\n\t\t\tif (!point) continue;\n\t\t\tconst scaledPoint = {\n\t\t\t\tx: point.x * scaleX,\n\t\t\t\ty: point.y * scaleY,\n\t\t\t\t...(point.pressure != null ? { pressure: point.pressure } : {}),\n\t\t\t};\n\t\t\tif (index === 0 && previous && !segmentIsAbsolute) {\n\t\t\t\tpoints.push({\n\t\t\t\t\tx: previous.x + scaledPoint.x,\n\t\t\t\t\ty: previous.y + scaledPoint.y,\n\t\t\t\t\t...(scaledPoint.pressure != null\n\t\t\t\t\t\t? { pressure: scaledPoint.pressure }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tpoints.push(scaledPoint);\n\t\t\t}\n\t\t}\n\t}\n\treturn points;\n}\n\nfunction collectLinePoints(props: TlUnknownObject): Point[] {\n\tconst pointsRecord = asRecord(props.points);\n\tif (pointsRecord) {\n\t\tconst points = Object.values(pointsRecord)\n\t\t\t.map((value) => normalizePoint(value))\n\t\t\t.filter((value): value is Point => value != null)\n\t\t\t.sort((left, right) => (left.index ?? \"\").localeCompare(right.index ?? \"\"));\n\t\tif (points.length > 0) return points;\n\t}\n\tconst arrayPoints = asArray(props.points);\n\tif (arrayPoints) {\n\t\tconst points = arrayPoints\n\t\t\t.map((value) => normalizePoint(value))\n\t\t\t.filter((value): value is Point => value != null);\n\t\tif (points.length > 0) return points;\n\t}\n\tconst start = normalizePoint(props.start);\n\tconst end = normalizePoint(props.end);\n\tif (start && end) return [start, end];\n\treturn [];\n}\n\nfunction freehandPadding(strokeWidth: number): number {\n\treturn Math.max(strokeWidth * 0.75 + 4, strokeWidth / 2 + 6);\n}\n\nfunction boundsFromPoints(points: readonly Point[], padding = 0): Rect | null {\n\tif (points.length === 0) return null;\n\tlet minX = Number.POSITIVE_INFINITY;\n\tlet minY = Number.POSITIVE_INFINITY;\n\tlet maxX = Number.NEGATIVE_INFINITY;\n\tlet maxY = Number.NEGATIVE_INFINITY;\n\tfor (const point of points) {\n\t\tminX = Math.min(minX, point.x);\n\t\tminY = Math.min(minY, point.y);\n\t\tmaxX = Math.max(maxX, point.x);\n\t\tmaxY = Math.max(maxY, point.y);\n\t}\n\treturn {\n\t\tx: minX - padding,\n\t\ty: minY - padding,\n\t\twidth: Math.max(maxX - minX + padding * 2, 1),\n\t\theight: Math.max(maxY - minY + padding * 2, 1),\n\t};\n}\n\nfunction computeArrowRoute(props: TlUnknownObject): {\n\tkind: \"line\" | \"polyline\" | \"quadratic\";\n\tpoints: Point[];\n\tcontrol?: Point;\n\tstartRef: Point;\n\tendRef: Point;\n} | null {\n\tconst start = normalizePoint(props.start);\n\tconst end = normalizePoint(props.end);\n\tif (!start || !end) return null;\n\tconst kind = getString(props.kind);\n\tconst bend = getNumber(props.bend) ?? 0;\n\tif (kind === \"elbow\") {\n\t\tconst t = Math.max(0.1, Math.min(0.9, getNumber(props.elbowMidPoint) ?? 0.5));\n\t\tconst midX = start.x + (end.x - start.x) * t;\n\t\tconst p1: Point = { x: midX, y: start.y };\n\t\tconst p2: Point = { x: midX, y: end.y };\n\t\treturn {\n\t\t\tkind: \"polyline\",\n\t\t\tpoints: [start, p1, p2, end],\n\t\t\tstartRef: p1,\n\t\t\tendRef: p2,\n\t\t};\n\t}\n\tif (kind === \"arc\" || Math.abs(bend) > 0.5) {\n\t\tconst midX = (start.x + end.x) / 2;\n\t\tconst midY = (start.y + end.y) / 2;\n\t\tconst dx = end.x - start.x;\n\t\tconst dy = end.y - start.y;\n\t\tconst length = Math.hypot(dx, dy) || 1;\n\t\tconst nx = -dy / length;\n\t\tconst ny = dx / length;\n\t\tconst control: Point = { x: midX + nx * bend, y: midY + ny * bend };\n\t\treturn {\n\t\t\tkind: \"quadratic\",\n\t\t\tpoints: [start, end],\n\t\t\tcontrol,\n\t\t\tstartRef: control,\n\t\t\tendRef: control,\n\t\t};\n\t}\n\treturn {\n\t\tkind: \"line\",\n\t\tpoints: [start, end],\n\t\tstartRef: end,\n\t\tendRef: start,\n\t};\n}\n\nfunction defaultShapeRect(type: string, props: TlUnknownObject): Rect {\n\tconst w = getNumber(props.w);\n\tconst h = getNumber(props.h);\n\tif (type === \"image\" || type === \"video\") {\n\t\treturn { x: 0, y: 0, width: w ?? 240, height: h ?? 160 };\n\t}\n\tif (type === \"bookmark\") {\n\t\treturn { x: 0, y: 0, width: w ?? 320, height: h ?? 180 };\n\t}\n\tif (type === \"embed\") {\n\t\treturn { x: 0, y: 0, width: w ?? 360, height: h ?? 220 };\n\t}\n\tif (type === \"frame\") {\n\t\treturn { x: 0, y: 0, width: w ?? 360, height: h ?? 240 };\n\t}\n\tif (type === \"note\") {\n\t\treturn { x: 0, y: 0, width: w ?? 220, height: h ?? 180 };\n\t}\n\treturn { x: 0, y: 0, width: w ?? 120, height: h ?? 90 };\n}\n\nfunction resolveShapeLocalBounds(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n\tstack: Set<string> = new Set(),\n): Rect {\n\tconst cached = snapshot.localBoundsCache.get(shapeId);\n\tif (cached) return cached;\n\tif (stack.has(shapeId)) return { x: 0, y: 0, width: 120, height: 90 };\n\tstack.add(shapeId);\n\n\tconst shape = snapshot.shapes.get(shapeId);\n\tif (!shape) {\n\t\tstack.delete(shapeId);\n\t\treturn { x: 0, y: 0, width: 120, height: 90 };\n\t}\n\n\tconst props = asRecord(shape.props) ?? {};\n\tconst strokeWidth = sizeToStrokePx(\n\t\tgetString(props.size),\n\t\tshape.type === \"highlight\" ? 16 : 2.5,\n\t);\n\tlet bounds: Rect | null = null;\n\n\tif (shape.type === \"draw\" || shape.type === \"highlight\") {\n\t\tbounds = boundsFromPoints(\n\t\t\tcollectStrokePoints(props),\n\t\t\tfreehandPadding(strokeWidth),\n\t\t);\n\t} else if (shape.type === \"line\") {\n\t\tbounds = boundsFromPoints(\n\t\t\tcollectLinePoints(props),\n\t\t\tMath.max(6, strokeWidth * 2.5),\n\t\t);\n\t} else if (shape.type === \"arrow\") {\n\t\tconst route = computeArrowRoute(props);\n\t\tif (route) {\n\t\t\tconst routePoints = [...route.points, route.startRef, route.endRef];\n\t\t\tif (route.control) routePoints.push(route.control);\n\t\t\tbounds = boundsFromPoints(routePoints, Math.max(10, strokeWidth * 5));\n\t\t}\n\t} else if (shape.type === \"text\") {\n\t\tconst text = extractPlainText(props);\n\t\tconst fontSize =\n\t\t\tgetNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\t\tconst w = getNumber(props.w);\n\t\tconst h = getNumber(props.h);\n\t\tbounds =\n\t\t\tw != null && h != null\n\t\t\t\t? { x: 0, y: 0, width: Math.max(1, w), height: Math.max(1, h) }\n\t\t\t\t: { x: 0, y: 0, ...measureTextBoundsLocal(text, fontSize) };\n\t} else if (shape.type === \"group\") {\n\t\tconst childRects = Array.from(snapshot.shapes.values())\n\t\t\t.filter((candidate) => candidate.parentId === shape.id)\n\t\t\t.map((candidate) => {\n\t\t\t\tconst childBounds = resolveShapeLocalBounds(snapshot, candidate.id, stack);\n\t\t\t\treturn {\n\t\t\t\t\tx: candidate.x + childBounds.x,\n\t\t\t\t\ty: candidate.y + childBounds.y,\n\t\t\t\t\twidth: childBounds.width,\n\t\t\t\t\theight: childBounds.height,\n\t\t\t\t};\n\t\t\t});\n\t\tif (childRects.length > 0) {\n\t\t\tconst points: Point[] = [];\n\t\t\tfor (const rect of childRects) {\n\t\t\t\tpoints.push({ x: rect.x, y: rect.y });\n\t\t\t\tpoints.push({ x: rect.x + rect.width, y: rect.y + rect.height });\n\t\t\t}\n\t\t\tbounds = boundsFromPoints(points, 0);\n\t\t}\n\t}\n\n\tif (!bounds) {\n\t\tbounds = defaultShapeRect(shape.type, props);\n\t}\n\n\tconst normalized = normalizeRect(bounds);\n\tsnapshot.localBoundsCache.set(shapeId, normalized);\n\tstack.delete(shapeId);\n\treturn normalized;\n}\n\nfunction resolveShapeWorldMatrix(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n\tstack: Set<string> = new Set(),\n): Matrix {\n\tconst cached = snapshot.worldMatrixCache.get(shapeId);\n\tif (cached) return cached;\n\tif (stack.has(shapeId)) return IDENTITY_MATRIX;\n\tstack.add(shapeId);\n\n\tconst shape = snapshot.shapes.get(shapeId);\n\tif (!shape) {\n\t\tstack.delete(shapeId);\n\t\treturn IDENTITY_MATRIX;\n\t}\n\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shapeId, stack);\n\tconst cx = localBounds.x + localBounds.width / 2;\n\tconst cy = localBounds.y + localBounds.height / 2;\n\tconst localMatrix = multiplyMatrix(\n\t\ttranslationMatrix(shape.x, shape.y),\n\t\tmultiplyMatrix(\n\t\t\ttranslationMatrix(cx, cy),\n\t\t\tmultiplyMatrix(\n\t\t\t\trotationMatrix(shape.rotation ?? 0),\n\t\t\t\ttranslationMatrix(-cx, -cy),\n\t\t\t),\n\t\t),\n\t);\n\n\tconst parentShape = snapshot.shapes.get(shape.parentId);\n\tconst world = parentShape\n\t\t? multiplyMatrix(\n\t\t\t\tresolveShapeWorldMatrix(snapshot, parentShape.id, stack),\n\t\t\t\tlocalMatrix,\n\t\t\t)\n\t\t: localMatrix;\n\n\tsnapshot.worldMatrixCache.set(shapeId, world);\n\tstack.delete(shapeId);\n\treturn world;\n}\n\nfunction resolveRootPageId(\n\tsnapshot: NormalizedSnapshot,\n\tshapeId: string,\n): string | undefined {\n\tconst cached = snapshot.rootPageCache.get(shapeId);\n\tif (cached !== undefined) return cached ?? undefined;\n\tconst visited = new Set<string>();\n\tlet current = snapshot.shapes.get(shapeId);\n\twhile (current && !visited.has(current.id)) {\n\t\tvisited.add(current.id);\n\t\tif (\n\t\t\tsnapshot.pages.has(current.parentId) ||\n\t\t\tcurrent.parentId.startsWith(\"page:\")\n\t\t) {\n\t\t\tsnapshot.rootPageCache.set(shapeId, current.parentId);\n\t\t\treturn current.parentId;\n\t\t}\n\t\tcurrent = snapshot.shapes.get(current.parentId);\n\t}\n\tsnapshot.rootPageCache.set(shapeId, null);\n\treturn undefined;\n}\n\nfunction shouldIncludeShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): boolean {\n\tif (!snapshot.selectedPageId) return true;\n\tconst rootPageId = resolveRootPageId(snapshot, shape.id);\n\tif (!rootPageId) return snapshot.pages.size === 0;\n\treturn rootPageId === snapshot.selectedPageId;\n}\n\nfunction buildItemPlacement(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n): { x: number; y: number; bounds: Rect; rotation: number } {\n\tconst world = resolveShapeWorldMatrix(snapshot, shape.id);\n\tconst itemMatrix = multiplyMatrix(\n\t\tworld,\n\t\ttranslationMatrix(localBounds.x, localBounds.y),\n\t);\n\tconst origin = applyMatrix(itemMatrix, { x: 0, y: 0 });\n\treturn {\n\t\tx: origin.x,\n\t\ty: origin.y,\n\t\trotation: matrixRotation(itemMatrix),\n\t\tbounds: {\n\t\t\tx: origin.x,\n\t\t\ty: origin.y,\n\t\t\twidth: Math.max(1, localBounds.width),\n\t\t\theight: Math.max(1, localBounds.height),\n\t\t},\n\t};\n}\n\nfunction buildItemBase(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n): Pick<VectorSceneItem, \"id\" | \"x\" | \"y\" | \"bounds\" | \"rotation\" | \"locked\"> {\n\tconst placement = buildItemPlacement(snapshot, shape, localBounds);\n\treturn {\n\t\tid: shape.id,\n\t\tx: placement.x,\n\t\ty: placement.y,\n\t\tbounds: placement.bounds,\n\t\trotation: placement.rotation,\n\t\tlocked: shape.isLocked,\n\t};\n}\n\nfunction shapeOpacity(shape: TlShapeRecord): number {\n\tconst props = asRecord(shape.props) ?? {};\n\treturn clamp01((shape.opacity ?? 1) * opacityToUnit(props.opacity));\n}\n\nfunction shapeStrokeColor(shape: TlShapeRecord): string {\n\tconst props = asRecord(shape.props) ?? {};\n\treturn resolveColor(getString(props.color));\n}\n\nfunction createCustomImportedItem(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tlocalBounds: Rect,\n\tinnerSvg: string,\n\tstyle?: Partial<Pick<VectorSceneItem, \"stroke\" | \"strokeWidth\">>,\n): VectorSceneItem {\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst custom = createCustomShapeItem(shape.id, base.bounds, { svg: innerSvg });\n\treturn {\n\t\t...custom,\n\t\t...base,\n\t\t...(style?.stroke ? { stroke: style.stroke } : {}),\n\t\t...(style?.strokeWidth != null ? { strokeWidth: style.strokeWidth } : {}),\n\t};\n}\n\nfunction polygonPath(points: readonly { x: number; y: number }[]): string {\n\tif (points.length === 0) return \"\";\n\tlet path = `M${formatNumber(points[0]?.x ?? 0)} ${formatNumber(points[0]?.y ?? 0)}`;\n\tfor (let index = 1; index < points.length; index++) {\n\t\tconst point = points[index];\n\t\tif (!point) continue;\n\t\tpath += ` L${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t}\n\treturn `${path} Z`;\n}\n\nfunction cloudPath(width: number, height: number): string {\n\tconst r = Math.min(width, height) * 0.15;\n\treturn `M${formatNumber(r)} ${formatNumber(height * 0.3)} Q0 ${formatNumber(height * 0.1)} ${formatNumber(width * 0.15)} ${formatNumber(height * 0.05)} Q${formatNumber(width * 0.3)} 0 ${formatNumber(width * 0.45)} ${formatNumber(height * 0.1)} Q${formatNumber(width * 0.7)} 0 ${formatNumber(width * 0.8)} ${formatNumber(height * 0.15)} Q${formatNumber(width)} ${formatNumber(height * 0.2)} ${formatNumber(width * 0.9)} ${formatNumber(height * 0.5)} Q${formatNumber(width)} ${formatNumber(height * 0.7)} ${formatNumber(width * 0.85)} ${formatNumber(height * 0.8)} Q${formatNumber(width * 0.7)} ${formatNumber(height)} ${formatNumber(width * 0.5)} ${formatNumber(height * 0.9)} Q${formatNumber(width * 0.3)} ${formatNumber(height)} ${formatNumber(width * 0.15)} ${formatNumber(height * 0.85)} Q0 ${formatNumber(height * 0.8)} ${formatNumber(r * 0.5)} ${formatNumber(height * 0.6)} Q0 ${formatNumber(height * 0.5)} ${formatNumber(r)} ${formatNumber(height * 0.3)} Z`;\n}\n\nfunction geoPath(geo: string, width: number, height: number): string | null {\n\tif (geo === \"diamond\" || geo === \"rhombus\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width / 2, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width / 2, y: height },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t]);\n\t}\n\tif (geo === \"triangle\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width / 2, y: 0 },\n\t\t\t{ x: width, y: height },\n\t\t\t{ x: 0, y: height },\n\t\t]);\n\t}\n\tif (geo === \"trapezoid\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width * 0.2, y: 0 },\n\t\t\t{ x: width * 0.8, y: 0 },\n\t\t\t{ x: width, y: height },\n\t\t\t{ x: 0, y: height },\n\t\t]);\n\t}\n\tif (geo === \"hexagon\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width * 0.25, y: 0 },\n\t\t\t{ x: width * 0.75, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width * 0.75, y: height },\n\t\t\t{ x: width * 0.25, y: height },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t]);\n\t}\n\tif (geo === \"star\") {\n\t\tconst cx = width / 2;\n\t\tconst cy = height / 2;\n\t\tconst rOut = Math.min(width, height) / 2;\n\t\tconst rIn = rOut * 0.45;\n\t\tconst points: { x: number; y: number }[] = [];\n\t\tfor (let index = 0; index < 5; index++) {\n\t\t\tconst outer = (index * 2 * Math.PI) / 5 - Math.PI / 2;\n\t\t\tconst inner = outer + Math.PI / 5;\n\t\t\tpoints.push({\n\t\t\t\tx: cx + rOut * Math.cos(outer),\n\t\t\t\ty: cy + rOut * Math.sin(outer),\n\t\t\t});\n\t\t\tpoints.push({ x: cx + rIn * Math.cos(inner), y: cy + rIn * Math.sin(inner) });\n\t\t}\n\t\treturn polygonPath(points);\n\t}\n\tif (geo === \"cloud\") {\n\t\treturn cloudPath(width, height);\n\t}\n\tif (geo === \"arrow-right\") {\n\t\treturn polygonPath([\n\t\t\t{ x: 0, y: height * 0.25 },\n\t\t\t{ x: width * 0.62, y: height * 0.25 },\n\t\t\t{ x: width * 0.62, y: 0 },\n\t\t\t{ x: width, y: height / 2 },\n\t\t\t{ x: width * 0.62, y: height },\n\t\t\t{ x: width * 0.62, y: height * 0.75 },\n\t\t\t{ x: 0, y: height * 0.75 },\n\t\t]);\n\t}\n\tif (geo === \"arrow-left\") {\n\t\treturn polygonPath([\n\t\t\t{ x: width, y: height * 0.25 },\n\t\t\t{ x: width * 0.38, y: height * 0.25 },\n\t\t\t{ x: width * 0.38, y: 0 },\n\t\t\t{ x: 0, y: height / 2 },\n\t\t\t{ x: width * 0.38, y: height },\n\t\t\t{ x: width * 0.38, y: height * 0.75 },\n\t\t\t{ x: width, y: height * 0.75 },\n\t\t]);\n\t}\n\tif (geo === \"check-box\") {\n\t\treturn `M0 0 H${formatNumber(width)} V${formatNumber(height)} H0 Z M${formatNumber(width * 0.2)} ${formatNumber(height * 0.56)} L${formatNumber(width * 0.42)} ${formatNumber(height * 0.78)} L${formatNumber(width * 0.82)} ${formatNumber(height * 0.24)}`;\n\t}\n\tif (geo === \"x-box\") {\n\t\treturn `M0 0 H${formatNumber(width)} V${formatNumber(height)} H0 Z M${formatNumber(width * 0.22)} ${formatNumber(height * 0.22)} L${formatNumber(width * 0.78)} ${formatNumber(height * 0.78)} M${formatNumber(width * 0.78)} ${formatNumber(height * 0.22)} L${formatNumber(width * 0.22)} ${formatNumber(height * 0.78)}`;\n\t}\n\treturn null;\n}\n\nfunction renderGeoShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst geo = getString(props.geo) ?? \"rectangle\";\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst text = extractPlainText(props);\n\tconst fontSize = getNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\tconst customPath = geoPath(geo, width, height);\n\tconst shapeMarkup =\n\t\tgeo === \"ellipse\" || geo === \"oval\"\n\t\t\t? `<ellipse cx=\"${formatNumber(width / 2)}\" cy=\"${formatNumber(height / 2)}\" rx=\"${formatNumber(width / 2)}\" ry=\"${formatNumber(height / 2)}\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t: customPath\n\t\t\t\t? `<path d=\"${customPath}\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t\t: `<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"8\" ${fillAttrs(getString(props.fill), stroke)} ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\tconst textMarkup = text\n\t\t? buildForeignObjectTextSvg({\n\t\t\t\twidth,\n\t\t\t\theight,\n\t\t\t\ttext,\n\t\t\t\tfontSize,\n\t\t\t\tcolor: stroke,\n\t\t\t\tpadding: 10,\n\t\t\t\talign: getString(props.align),\n\t\t\t\tverticalAlign: getString(props.verticalAlign),\n\t\t\t})\n\t\t: \"\";\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(`${shapeMarkup}${textMarkup}`, shapeOpacity(shape)),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction renderTextShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst text = extractPlainText(props);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst fontSize = getNumber(props.fontSize) ?? sizeToFontPx(getString(props.size));\n\tconst hasFixedBounds = getNumber(props.w) != null && getNumber(props.h) != null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst childrenSvg = hasFixedBounds\n\t\t? wrapOpacity(\n\t\t\t\tbuildForeignObjectTextSvg({\n\t\t\t\t\twidth: localBounds.width,\n\t\t\t\t\theight: localBounds.height,\n\t\t\t\t\ttext,\n\t\t\t\t\tfontSize,\n\t\t\t\t\tcolor: stroke,\n\t\t\t\t\tpadding: 4,\n\t\t\t\t\talign: getString(props.textAlign) ?? getString(props.align),\n\t\t\t\t\tverticalAlign: getString(props.verticalAlign),\n\t\t\t\t}),\n\t\t\t\tshapeOpacity(shape),\n\t\t\t)\n\t\t: wrapOpacity(\n\t\t\t\tbuildTextSvg(text, localBounds.width, localBounds.height, stroke, fontSize),\n\t\t\t\tshapeOpacity(shape),\n\t\t\t);\n\treturn {\n\t\t...base,\n\t\ttoolKind: \"text\",\n\t\tstroke,\n\t\ttext,\n\t\ttextFontSize: fontSize,\n\t\t...(hasFixedBounds ? { textFixedBounds: true } : {}),\n\t\tchildrenSvg,\n\t};\n}\n\nfunction renderStrokeShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst points = collectStrokePoints(props);\n\tif (points.length === 0) return null;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst toolKind = shape.type === \"highlight\" ? \"marker\" : \"draw\";\n\tconst strokeWidth =\n\t\tshape.type === \"highlight\"\n\t\t\t? sizeToStrokePx(getString(props.size), 16)\n\t\t\t: sizeToStrokePx(getString(props.size), 2.5);\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst base = buildItemBase(snapshot, shape, localBounds);\n\tconst opacity = shapeOpacity(shape) * (shape.type === \"highlight\" ? 0.45 : 1);\n\tconst pathPointsLocal: VectorPathPoint[] = points.map((point) => ({\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t\t...(point.pressure != null ? { pressure: point.pressure } : {}),\n\t}));\n\tconst style: StrokeStyle = {\n\t\tstroke,\n\t\tstrokeWidth,\n\t\t...(opacity < 0.999 ? { strokeOpacity: opacity } : {}),\n\t};\n\treturn {\n\t\t...base,\n\t\ttoolKind,\n\t\tstroke,\n\t\tstrokeWidth,\n\t\t...(style.strokeOpacity != null ? { strokeOpacity: style.strokeOpacity } : {}),\n\t\tpathPointsLocal,\n\t\tchildrenSvg: buildFreehandPathSvg(pathPointsLocal, style, toolKind),\n\t};\n}\n\nfunction polylinePath(points: readonly Point[]): string {\n\tif (points.length === 0) return \"\";\n\tlet path = `M${formatNumber(points[0]?.x ?? 0)} ${formatNumber(points[0]?.y ?? 0)}`;\n\tfor (let index = 1; index < points.length; index++) {\n\t\tconst point = points[index];\n\t\tif (!point) continue;\n\t\tpath += ` L${formatNumber(point.x)} ${formatNumber(point.y)}`;\n\t}\n\treturn path;\n}\n\nfunction buildArrowHeadSvg(options: {\n\ttip: Point;\n\tfrom: Point;\n\ttype: string | undefined;\n\tstroke: string;\n\tstrokeWidth: number;\n}): string {\n\tconst type = options.type;\n\tif (!type || type === \"none\") return \"\";\n\tconst dx = options.tip.x - options.from.x;\n\tconst dy = options.tip.y - options.from.y;\n\tconst length = Math.hypot(dx, dy);\n\tif (length < 1e-6) return \"\";\n\tconst ux = dx / length;\n\tconst uy = dy / length;\n\tconst headLength = Math.max(10, options.strokeWidth * 4.5);\n\tconst headWidth = Math.max(7, options.strokeWidth * 3);\n\tconst bx = options.tip.x - ux * headLength;\n\tconst by = options.tip.y - uy * headLength;\n\tconst px = -uy;\n\tconst py = ux;\n\tconst left = { x: bx + px * (headWidth / 2), y: by + py * (headWidth / 2) };\n\tconst right = { x: bx - px * (headWidth / 2), y: by - py * (headWidth / 2) };\n\tif (type === \"triangle\") {\n\t\treturn `<polygon points=\"${formatNumber(options.tip.x)},${formatNumber(options.tip.y)} ${formatNumber(left.x)},${formatNumber(left.y)} ${formatNumber(right.x)},${formatNumber(right.y)}\" fill=\"${options.stroke}\" />`;\n\t}\n\tif (type === \"dot\") {\n\t\treturn `<circle cx=\"${formatNumber(options.tip.x)}\" cy=\"${formatNumber(options.tip.y)}\" r=\"${formatNumber(Math.max(3, options.strokeWidth * 1.5))}\" fill=\"${options.stroke}\" />`;\n\t}\n\tif (type === \"diamond\") {\n\t\tconst mid = {\n\t\t\tx: options.tip.x - ux * (headLength / 2),\n\t\t\ty: options.tip.y - uy * (headLength / 2),\n\t\t};\n\t\treturn `<polygon points=\"${formatNumber(options.tip.x)},${formatNumber(options.tip.y)} ${formatNumber(left.x)},${formatNumber(left.y)} ${formatNumber(mid.x - ux * (headLength / 2))},${formatNumber(mid.y - uy * (headLength / 2))} ${formatNumber(right.x)},${formatNumber(right.y)}\" fill=\"none\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linejoin=\"round\" />`;\n\t}\n\tif (type === \"bar\") {\n\t\treturn `<line x1=\"${formatNumber(left.x)}\" y1=\"${formatNumber(left.y)}\" x2=\"${formatNumber(right.x)}\" y2=\"${formatNumber(right.y)}\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linecap=\"round\" />`;\n\t}\n\treturn `<path d=\"M ${formatNumber(left.x)} ${formatNumber(left.y)} L ${formatNumber(options.tip.x)} ${formatNumber(options.tip.y)} L ${formatNumber(right.x)} ${formatNumber(right.y)}\" fill=\"none\" stroke=\"${options.stroke}\" stroke-width=\"${formatNumber(options.strokeWidth)}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />`;\n}\n\nfunction renderLineShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst points = collectLinePoints(props);\n\tif (points.length < 2) return null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst opacity = shapeOpacity(shape);\n\tconst simple =\n\t\tpoints.length === 2 &&\n\t\t(getString(props.spline) == null || getString(props.spline) === \"line\") &&\n\t\t(!dash || dash === \"solid\");\n\tif (simple) {\n\t\tconst start = points[0];\n\t\tconst end = points[1];\n\t\tif (!start || !end) return null;\n\t\tconst placement = buildItemPlacement(snapshot, shape, localBounds);\n\t\tconst line = lineEndpointsToLocal(\n\t\t\tplacement.bounds,\n\t\t\t{\n\t\t\t\tx: placement.x + (start.x - localBounds.x),\n\t\t\t\ty: placement.y + (start.y - localBounds.y),\n\t\t\t},\n\t\t\t{\n\t\t\t\tx: placement.x + (end.x - localBounds.x),\n\t\t\t\ty: placement.y + (end.y - localBounds.y),\n\t\t\t},\n\t\t);\n\t\tconst item = createLineItem(shape.id, placement.bounds, line, \"line\", {\n\t\t\tstroke,\n\t\t\tstrokeWidth,\n\t\t\t...(opacity < 0.999 ? { strokeOpacity: opacity } : {}),\n\t\t});\n\t\treturn {\n\t\t\t...item,\n\t\t\trotation: buildItemBase(snapshot, shape, localBounds).rotation,\n\t\t\tlocked: shape.isLocked,\n\t\t};\n\t}\n\tconst translated = points.map((point) => ({\n\t\t...point,\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t}));\n\tconst inner = `<path d=\"${polylinePath(translated)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, opacity),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction renderArrowShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst route = computeArrowRoute(props);\n\tif (!route) return null;\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst stroke = shapeStrokeColor(shape);\n\tconst strokeWidth = sizeToStrokePx(getString(props.size));\n\tconst dash = getString(props.dash);\n\tconst opacity = shapeOpacity(shape);\n\tconst translate = (point: Point): Point => ({\n\t\tx: point.x - localBounds.x,\n\t\ty: point.y - localBounds.y,\n\t});\n\tconst translatedPoints = route.points.map(translate);\n\tconst translatedStartRef = translate(route.startRef);\n\tconst translatedEndRef = translate(route.endRef);\n\tconst shaft =\n\t\troute.kind === \"quadratic\" && route.control\n\t\t\t? `<path d=\"M${formatNumber(translatedPoints[0]?.x ?? 0)} ${formatNumber(translatedPoints[0]?.y ?? 0)} Q${formatNumber(route.control.x - localBounds.x)} ${formatNumber(route.control.y - localBounds.y)} ${formatNumber(translatedPoints[1]?.x ?? 0)} ${formatNumber(translatedPoints[1]?.y ?? 0)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`\n\t\t\t: `<path d=\"${polylinePath(translatedPoints)}\" fill=\"none\" ${strokeAttrs({ stroke, strokeWidth, dash, lineCap: \"round\", lineJoin: \"round\" })} />`;\n\tconst startPoint = translatedPoints[0];\n\tconst endPoint = translatedPoints[translatedPoints.length - 1];\n\tif (!startPoint || !endPoint) return null;\n\tconst inner = `${shaft}${buildArrowHeadSvg({ tip: startPoint, from: translatedStartRef, type: getString(props.arrowheadStart), stroke, strokeWidth })}${buildArrowHeadSvg({ tip: endPoint, from: translatedEndRef, type: getString(props.arrowheadEnd), stroke, strokeWidth })}`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, opacity),\n\t\t{ stroke, strokeWidth },\n\t);\n}\n\nfunction resolveAsset(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): TlAssetRecord | undefined {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst assetId = getString(props.assetId);\n\tif (!assetId) return undefined;\n\treturn snapshot.assets.get(assetId);\n}\n\nfunction resolveAssetUrl(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tasset: TlAssetRecord | undefined,\n): string | undefined {\n\tif (!asset) return undefined;\n\tconst custom = snapshot.options.assetUrlResolver?.(asset, shape);\n\tif (custom) return custom;\n\tconst props = asRecord(asset.props) ?? {};\n\treturn getString(props.src) ?? getString(asRecord(shape.props)?.url);\n}\n\nfunction renderMissingAssetPlaceholder(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\tkind: string,\n\tdetail: string,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"12\" fill=\"#f4f4f5\" stroke=\"#a1a1aa\" stroke-width=\"1.5\" stroke-dasharray=\"6 6\" />\n\t\t<path d=\"M${formatNumber(width * 0.18)} ${formatNumber(height * 0.7)} L${formatNumber(width * 0.38)} ${formatNumber(height * 0.48)} L${formatNumber(width * 0.56)} ${formatNumber(height * 0.62)} L${formatNumber(width * 0.76)} ${formatNumber(height * 0.32)} L${formatNumber(width * 0.84)} ${formatNumber(height * 0.4)} L${formatNumber(width * 0.84)} ${formatNumber(height * 0.82)} L${formatNumber(width * 0.18)} ${formatNumber(height * 0.82)} Z\" fill=\"#d4d4d8\" stroke=\"#a1a1aa\" stroke-width=\"1\" />\n\t\t<circle cx=\"${formatNumber(width * 0.34)}\" cy=\"${formatNumber(height * 0.34)}\" r=\"${formatNumber(Math.max(6, Math.min(width, height) * 0.05))}\" fill=\"#a1a1aa\" />\n\t\t${buildForeignObjectTextSvg({ x: 10, y: height * 0.04, width: width - 20, height: height * 0.28, text: kind, fontSize: 15, color: \"#18181b\", fontWeight: 700, align: \"center\", verticalAlign: \"middle\" })}\n\t\t${buildForeignObjectTextSvg({ x: 14, y: height * 0.78, width: width - 28, height: height * 0.16, text: detail, fontSize: 12, color: \"#52525b\", align: \"center\", verticalAlign: \"middle\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction renderImageShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst src = resolveAssetUrl(snapshot, shape, asset);\n\tconst shapeBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tif (!src) {\n\t\treturn renderMissingAssetPlaceholder(\n\t\t\tsnapshot,\n\t\t\tshape,\n\t\t\t\"Image asset missing\",\n\t\t\tasset ? asset.id : (getString(props.assetId) ?? \"asset unavailable\"),\n\t\t);\n\t}\n\tconst assetProps = asRecord(asset?.props) ?? {};\n\tconst intrinsicWidth =\n\t\tgetNumber(assetProps.w) ?? getNumber(props.w) ?? shapeBounds.width;\n\tconst intrinsicHeight =\n\t\tgetNumber(assetProps.h) ?? getNumber(props.h) ?? shapeBounds.height;\n\tconst base = buildItemBase(snapshot, shape, shapeBounds);\n\tconst image = createImageItem(shape.id, base.bounds, src, {\n\t\twidth: Math.max(1, intrinsicWidth),\n\t\theight: Math.max(1, intrinsicHeight),\n\t});\n\treturn {\n\t\t...image,\n\t\t...base,\n\t\tchildrenSvg: wrapOpacity(image.childrenSvg, shapeOpacity(shape)),\n\t\tlocked: shape.isLocked,\n\t\trotation: base.rotation,\n\t};\n}\n\nfunction renderVideoShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst src = resolveAssetUrl(snapshot, shape, asset);\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst label = getString(asRecord(asset?.props)?.name) ?? \"Video\";\n\tconst subtitle =\n\t\tsrc ?? getString(props.assetId) ?? \"Playback not supported in this importer\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"14\" fill=\"#18181b\" stroke=\"#3f3f46\" stroke-width=\"1.5\" />\n\t\t<rect x=\"${formatNumber(width * 0.04)}\" y=\"${formatNumber(height * 0.08)}\" width=\"${formatNumber(width * 0.92)}\" height=\"${formatNumber(height * 0.66)}\" rx=\"10\" fill=\"#27272a\" />\n\t\t<circle cx=\"${formatNumber(width * 0.5)}\" cy=\"${formatNumber(height * 0.41)}\" r=\"${formatNumber(Math.min(width, height) * 0.12)}\" fill=\"#fafafa\" fill-opacity=\"0.92\" />\n\t\t<polygon points=\"${formatNumber(width * 0.48)},${formatNumber(height * 0.35)} ${formatNumber(width * 0.48)},${formatNumber(height * 0.47)} ${formatNumber(width * 0.57)},${formatNumber(height * 0.41)}\" fill=\"#18181b\" />\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.76, width: width - 32, height: height * 0.12, text: label, fontSize: 15, color: \"#fafafa\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.88, width: width - 32, height: height * 0.08, text: subtitle, fontSize: 11, color: \"#d4d4d8\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction renderNoteShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst noteColor = resolveColor(getString(props.color) ?? \"yellow\");\n\tconst labelColor = resolveColor(getString(props.labelColor) ?? \"#18181b\");\n\tconst text = extractPlainText(props);\n\tconst fold = Math.min(width, height) * 0.14;\n\tconst fontSize =\n\t\tsizeToFontPx(getString(props.size)) + numberOr(props.fontSizeAdjustment, 0);\n\tconst inner = `\n\t\t<path d=\"M0 0 H${formatNumber(width - fold)} L${formatNumber(width)} ${formatNumber(fold)} V${formatNumber(height)} H0 Z\" fill=\"${noteColor}\" fill-opacity=\"0.22\" stroke=\"${noteColor}\" stroke-width=\"1.5\" />\n\t\t<path d=\"M${formatNumber(width - fold)} 0 V${formatNumber(fold)} H${formatNumber(width)}\" fill=\"${noteColor}\" fill-opacity=\"0.3\" stroke=\"${noteColor}\" stroke-width=\"1.5\" />\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 12, width: width - 24, height: height - 24, text, fontSize, color: labelColor, padding: 4, align: getString(props.align), verticalAlign: getString(props.verticalAlign) })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: noteColor,\n\t\t\tstrokeWidth: 1.5,\n\t\t},\n\t);\n}\n\nfunction renderBookmarkShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst asset = resolveAsset(snapshot, shape);\n\tconst assetProps = asRecord(asset?.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst href =\n\t\tgetString(props.url) ?? getString(assetProps.src) ?? getString(props.src) ?? \"\";\n\tconst title =\n\t\tgetString(assetProps.title) ??\n\t\tgetString(props.title) ??\n\t\tgetString(props.label) ??\n\t\tundefined;\n\tconst description =\n\t\tgetString(assetProps.description) ?? getString(props.description) ?? undefined;\n\tconst image = getString(assetProps.image) ?? getString(props.image) ?? undefined;\n\tconst favicon =\n\t\tgetString(assetProps.favicon) ?? getString(props.favicon) ?? undefined;\n\tconst link: CanvuLinkData = {\n\t\thref: href || \"URL unavailable\",\n\t\t...(title ? { title } : {}),\n\t\t...(description ? { description } : {}),\n\t\t...(image ? { image } : {}),\n\t\t...(favicon ? { favicon } : {}),\n\t};\n\tconst inner = buildLinkCardSvg(localBounds.width, localBounds.height, link);\n\tconst item = createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t);\n\treturn {\n\t\t...item,\n\t\tpluginData: {\n\t\t\t...(item.pluginData ?? {}),\n\t\t\t[LINK_PLUGIN_KEY]: link,\n\t\t},\n\t};\n}\n\nfunction renderEmbedShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst title = getString(props.title) ?? getString(props.embedTitle) ?? \"Embed\";\n\tconst url = getString(props.url) ?? getString(props.src) ?? \"Embedded content\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"16\" fill=\"#0f172a\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t<rect x=\"16\" y=\"16\" width=\"${formatNumber(width - 32)}\" height=\"${formatNumber(height * 0.62)}\" rx=\"12\" fill=\"#111827\" stroke=\"#334155\" stroke-width=\"1\" />\n\t\t<circle cx=\"${formatNumber(width * 0.14)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#ef4444\" />\n\t\t<circle cx=\"${formatNumber(width * 0.18)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#f59e0b\" />\n\t\t<circle cx=\"${formatNumber(width * 0.22)}\" cy=\"${formatNumber(height * 0.14)}\" r=\"5\" fill=\"#22c55e\" />\n\t\t${buildForeignObjectTextSvg({ x: 18, y: height * 0.72, width: width - 36, height: height * 0.11, text: title, fontSize: 16, color: \"#f8fafc\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: 18, y: height * 0.84, width: width - 36, height: height * 0.08, text: url, fontSize: 11, color: \"#cbd5e1\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke,\n\t\t\tstrokeWidth: 1.5,\n\t\t},\n\t);\n}\n\nfunction renderFrameShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst stroke = shapeStrokeColor(shape);\n\tconst title =\n\t\t(getString(props.name) ?? getString(props.title) ?? extractPlainText(props)) ||\n\t\t\"Frame\";\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"14\" fill=\"none\" stroke=\"${stroke}\" stroke-width=\"2\" stroke-dasharray=\"10 6\" />\n\t\t<rect x=\"12\" y=\"10\" width=\"${formatNumber(Math.min(width - 24, Math.max(88, width * 0.34)))}\" height=\"28\" rx=\"8\" fill=\"#ffffff\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t${buildForeignObjectTextSvg({ x: 16, y: 12, width: Math.min(width - 32, Math.max(80, width * 0.3)), height: 24, text: title, fontSize: 13, color: \"#111827\", fontWeight: 700, verticalAlign: \"middle\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke,\n\t\t\tstrokeWidth: 2,\n\t\t},\n\t);\n}\n\nfunction renderAnnotationShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem {\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst radius = Math.min(width, height) / 2;\n\tconst fill =\n\t\tshape.type === \"annotationBubble\"\n\t\t\t? \"#3b82f6\"\n\t\t\t: resolveColor(getString(props.color) ?? \"#ef4444\");\n\tconst text =\n\t\tshape.type === \"label\"\n\t\t\t? extractPlainText(props)\n\t\t\t: String(getNumber(props.number) ?? \"\");\n\tconst inner = `\n\t\t<circle cx=\"${formatNumber(width / 2)}\" cy=\"${formatNumber(height / 2)}\" r=\"${formatNumber(radius)}\" fill=\"${fill}\" stroke=\"#ffffff\" stroke-width=\"2\" />\n\t\t<text x=\"${formatNumber(width / 2)}\" y=\"${formatNumber(height / 2 + 4)}\" fill=\"#ffffff\" font-size=\"10\" font-weight=\"700\" text-anchor=\"middle\" dominant-baseline=\"central\">${escapeXml(text)}</text>\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: fill,\n\t\t\tstrokeWidth: 2,\n\t\t},\n\t);\n}\n\nfunction renderUnsupportedShape(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n\treason: string,\n): VectorSceneItem {\n\tsnapshot.options.onUnsupportedShape?.(shape, reason);\n\tconst props = asRecord(shape.props) ?? {};\n\tconst localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"12\" fill=\"#fafafa\" stroke=\"#a1a1aa\" stroke-width=\"1.5\" stroke-dasharray=\"6 6\" />\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 14, width: width - 24, height: 28, text: shape.type, fontSize: 14, color: \"#111827\", fontWeight: 700, verticalAlign: \"middle\" })}\n\t\t${buildForeignObjectTextSvg({ x: 12, y: 50, width: width - 24, height: Math.max(20, height - 62), text: reason, fontSize: 12, color: \"#52525b\" })}\n\t`;\n\treturn createCustomImportedItem(\n\t\tsnapshot,\n\t\tshape,\n\t\tlocalBounds,\n\t\twrapOpacity(inner, shapeOpacity(shape)),\n\t\t{\n\t\t\tstroke: shapeStrokeColor(shape),\n\t\t\tstrokeWidth: sizeToStrokePx(getString(props.size)),\n\t\t},\n\t);\n}\n\nfunction shapeToItem(\n\tsnapshot: NormalizedSnapshot,\n\tshape: TlShapeRecord,\n): VectorSceneItem | null {\n\tif (!shouldIncludeShape(snapshot, shape)) return null;\n\tif (shape.type === \"group\") return null;\n\tif (shape.type === \"geo\") return renderGeoShape(snapshot, shape);\n\tif (shape.type === \"text\") return renderTextShape(snapshot, shape);\n\tif (shape.type === \"draw\" || shape.type === \"highlight\") {\n\t\treturn renderStrokeShape(snapshot, shape);\n\t}\n\tif (shape.type === \"line\") return renderLineShape(snapshot, shape);\n\tif (shape.type === \"arrow\") return renderArrowShape(snapshot, shape);\n\tif (shape.type === \"image\") return renderImageShape(snapshot, shape);\n\tif (shape.type === \"video\") return renderVideoShape(snapshot, shape);\n\tif (shape.type === \"note\") return renderNoteShape(snapshot, shape);\n\tif (shape.type === \"bookmark\") return renderBookmarkShape(snapshot, shape);\n\tif (shape.type === \"embed\") return renderEmbedShape(snapshot, shape);\n\tif (shape.type === \"frame\") return renderFrameShape(snapshot, shape);\n\tif (shape.type === \"annotationBubble\" || shape.type === \"label\") {\n\t\treturn renderAnnotationShape(snapshot, shape);\n\t}\n\treturn renderUnsupportedShape(\n\t\tsnapshot,\n\t\tshape,\n\t\t\"Unsupported tldraw shape rendered as placeholder.\",\n\t);\n}\n\n/**\n * Converts tldraw snapshots into canvu VectorSceneItem[] ready for rendering.\n */\nexport function tldrawSnapshotToItems(\n\tinput: TlStoreSnapshot | RoomSnapshot | TlSnapshotInput,\n\toptions: TldrawSnapshotImportOptions = {},\n): VectorSceneItem[] {\n\tconst snapshot = normalizeSnapshot(input, options);\n\tconst shapes = Array.from(snapshot.shapes.values()).sort((left, right) =>\n\t\t(left.index ?? \"\").localeCompare(right.index ?? \"\"),\n\t);\n\tconst items: VectorSceneItem[] = [];\n\tfor (const shape of shapes) {\n\t\tconst item = shapeToItem(snapshot, shape);\n\t\tif (item) items.push(item);\n\t}\n\treturn items;\n}\n\n/**\n * Converts back: canvu VectorSceneItem[] → RoomSnapshot.\n * This produces a minimal RoomSnapshot that can be stored or sent to tldraw.\n * Only items with a recognized `toolKind` are included.\n *\n * Note: the reverse conversion is lossy — tldraw-specific props, asset references,\n * page/camera records, and metadata are not preserved.\n */\nexport function itemsToTldrawSnapshot(\n\titems: readonly VectorSceneItem[],\n): RoomSnapshot {\n\tconst documents: TlShapeRecord[] = [];\n\tfor (const item of items) {\n\t\tconst type = item.toolKind ?? \"draw\";\n\t\tconst props: Record<string, unknown> = {\n\t\t\tw: item.bounds.width,\n\t\t\th: item.bounds.height,\n\t\t\tcolor: item.stroke ?? \"#1d1d1d\",\n\t\t};\n\t\tif (item.strokeWidth) {\n\t\t\tprops.size = item.strokeWidth <= 1.5 ? \"s\" : item.strokeWidth >= 4 ? \"l\" : \"m\";\n\t\t}\n\t\tif (item.strokeOpacity != null) {\n\t\t\tprops.opacity = Math.round(item.strokeOpacity * 100);\n\t\t}\n\n\t\tif (type === \"rect\" || type === \"ellipse\" || type === \"architectural-cloud\") {\n\t\t\tprops.geo =\n\t\t\t\ttype === \"ellipse\"\n\t\t\t\t\t? \"ellipse\"\n\t\t\t\t\t: type === \"architectural-cloud\"\n\t\t\t\t\t\t? \"cloud\"\n\t\t\t\t\t\t: \"rectangle\";\n\t\t\tprops.fill = \"none\";\n\t\t} else if (type === \"draw\" || type === \"marker\") {\n\t\t\tprops.segments = [\n\t\t\t\t{ points: (item.pathPointsLocal ?? []).map((point) => [point.x, point.y]) },\n\t\t\t];\n\t\t} else if (type === \"text\") {\n\t\t\tprops.text = item.text ?? \"\";\n\t\t\tprops.fontSize = item.textFontSize ?? 16;\n\t\t} else if (type === \"arrow\" || type === \"line\") {\n\t\t\tprops.start = { x: item.line?.x1 ?? 0, y: item.line?.y1 ?? 0 };\n\t\t\tprops.end = { x: item.line?.x2 ?? 10, y: item.line?.y2 ?? 10 };\n\t\t\tprops.arrowheadEnd = type === \"arrow\" ? \"triangle\" : \"none\";\n\t\t} else {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdocuments.push({\n\t\t\tid: item.id,\n\t\t\ttypeName: \"shape\",\n\t\t\ttype,\n\t\t\tx: item.x,\n\t\t\ty: item.y,\n\t\t\trotation: item.rotation ?? 0,\n\t\t\tindex: \"a1\",\n\t\t\tparentId: \"page:page\",\n\t\t\topacity: item.strokeOpacity ?? 1,\n\t\t\tisLocked: item.locked ?? false,\n\t\t\tprops,\n\t\t\tmeta: {},\n\t\t});\n\t}\n\n\treturn { documents, schema: { storeVersion: 1, recordVersion: 0 }, clock: 0 };\n}\n"]}
|