canvu-react 0.3.33 → 0.3.34

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/math/rect.ts","../src/scene/custom-shape.ts","../src/scene/text-svg.ts","../src/scene/shape-builders.ts","../src/plugins/tldraw/index.ts"],"names":["getStroke","op","b","s","escapeHtmlText","document","x","y","pressure"],"mappings":"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","file":"tldraw.cjs","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","/**\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, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\nconst LINE_HEIGHT_RATIO = 22 / 18;\nconst FIRST_LINE_BASELINE_RATIO = 24 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 36;\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/**\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 system-ui, sans-serif`;\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(8, fontSize * 0.35),\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 = \"#2563eb\",\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=\"system-ui,sans-serif\" 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=\"system-ui,sans-serif\" 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=\"system-ui,sans-serif\" 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 = \"#2563eb\",\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\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:2px 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:system-ui,sans-serif;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:2px 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:system-ui,sans-serif;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/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#2563eb\",\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};\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\nfunction architecturalCloudScallopCount(\n\tperimeter: number,\n\tamplitude: number,\n): number {\n\tconst targetScallopLength = Math.max(18, amplitude * 2.45);\n\tlet count = Math.max(12, Math.round(perimeter / targetScallopLength));\n\tif (count % 2 === 1) count += 1;\n\treturn count;\n}\n\ntype RoundedRectMetrics = {\n\tleft: number;\n\ttop: number;\n\tright: number;\n\tbottom: number;\n\tradius: number;\n\tcenterX: number;\n\ttopHalfLength: number;\n\thorizontalLength: number;\n\tverticalLength: number;\n\tarcLength: number;\n\tperimeter: number;\n};\n\nfunction roundedRectMetrics(\n\twidth: number,\n\theight: number,\n\tinset: number,\n\tradius: number,\n): RoundedRectMetrics {\n\tconst left = inset;\n\tconst top = inset;\n\tconst right = width - inset;\n\tconst bottom = height - inset;\n\tconst rectWidth = Math.max(0, right - left);\n\tconst rectHeight = Math.max(0, bottom - top);\n\tconst normalizedRadius = Math.max(\n\t\t0,\n\t\tMath.min(radius, rectWidth / 2, rectHeight / 2),\n\t);\n\tconst centerX = width / 2;\n\tconst topHalfLength = Math.max(0, right - normalizedRadius - centerX);\n\tconst horizontalLength = Math.max(0, rectWidth - normalizedRadius * 2);\n\tconst verticalLength = Math.max(0, rectHeight - normalizedRadius * 2);\n\tconst arcLength = normalizedRadius * (Math.PI / 2);\n\treturn {\n\t\tleft,\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tradius: normalizedRadius,\n\t\tcenterX,\n\t\ttopHalfLength,\n\t\thorizontalLength,\n\t\tverticalLength,\n\t\tarcLength,\n\t\tperimeter:\n\t\t\thorizontalLength * 2 + verticalLength * 2 + Math.PI * 2 * normalizedRadius,\n\t};\n}\n\nfunction pointOnLine(\n\tstartX: number,\n\tstartY: number,\n\tendX: number,\n\tendY: number,\n\tt: number,\n): [number, number] {\n\treturn [startX + (endX - startX) * t, startY + (endY - startY) * t];\n}\n\nfunction pointOnArc(\n\tcenterX: number,\n\tcenterY: number,\n\tradius: number,\n\tstartAngle: number,\n\tendAngle: number,\n\tt: number,\n): [number, number] {\n\tconst theta = startAngle + (endAngle - startAngle) * t;\n\treturn [centerX + Math.cos(theta) * radius, centerY + Math.sin(theta) * radius];\n}\n\nfunction pointOnRoundedRectPath(\n\tmetrics: RoundedRectMetrics,\n\tdistance: number,\n): [number, number] {\n\tif (metrics.perimeter <= 0) return [metrics.centerX, metrics.top];\n\tlet remaining =\n\t\t((distance % metrics.perimeter) + metrics.perimeter) % metrics.perimeter;\n\tconst consume = (length: number): number | null => {\n\t\tif (length <= 1e-9) return null;\n\t\tif (remaining <= length) return remaining / length;\n\t\tremaining -= length;\n\t\treturn null;\n\t};\n\n\tlet t = consume(metrics.topHalfLength);\n\tif (t != null) {\n\t\treturn pointOnLine(\n\t\t\tmetrics.centerX,\n\t\t\tmetrics.top,\n\t\t\tmetrics.right - metrics.radius,\n\t\t\tmetrics.top,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.arcLength);\n\tif (t != null) {\n\t\treturn pointOnArc(\n\t\t\tmetrics.right - metrics.radius,\n\t\t\tmetrics.top + metrics.radius,\n\t\t\tmetrics.radius,\n\t\t\t-Math.PI / 2,\n\t\t\t0,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.verticalLength);\n\tif (t != null) {\n\t\treturn pointOnLine(\n\t\t\tmetrics.right,\n\t\t\tmetrics.top + metrics.radius,\n\t\t\tmetrics.right,\n\t\t\tmetrics.bottom - metrics.radius,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.arcLength);\n\tif (t != null) {\n\t\treturn pointOnArc(\n\t\t\tmetrics.right - metrics.radius,\n\t\t\tmetrics.bottom - metrics.radius,\n\t\t\tmetrics.radius,\n\t\t\t0,\n\t\t\tMath.PI / 2,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.horizontalLength);\n\tif (t != null) {\n\t\treturn pointOnLine(\n\t\t\tmetrics.right - metrics.radius,\n\t\t\tmetrics.bottom,\n\t\t\tmetrics.left + metrics.radius,\n\t\t\tmetrics.bottom,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.arcLength);\n\tif (t != null) {\n\t\treturn pointOnArc(\n\t\t\tmetrics.left + metrics.radius,\n\t\t\tmetrics.bottom - metrics.radius,\n\t\t\tmetrics.radius,\n\t\t\tMath.PI / 2,\n\t\t\tMath.PI,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.verticalLength);\n\tif (t != null) {\n\t\treturn pointOnLine(\n\t\t\tmetrics.left,\n\t\t\tmetrics.bottom - metrics.radius,\n\t\t\tmetrics.left,\n\t\t\tmetrics.top + metrics.radius,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.arcLength);\n\tif (t != null) {\n\t\treturn pointOnArc(\n\t\t\tmetrics.left + metrics.radius,\n\t\t\tmetrics.top + metrics.radius,\n\t\t\tmetrics.radius,\n\t\t\tMath.PI,\n\t\t\tMath.PI * 1.5,\n\t\t\tt,\n\t\t);\n\t}\n\n\tt = consume(metrics.topHalfLength);\n\tif (t != null) {\n\t\treturn pointOnLine(\n\t\t\tmetrics.left + metrics.radius,\n\t\t\tmetrics.top,\n\t\t\tmetrics.centerX,\n\t\t\tmetrics.top,\n\t\t\tt,\n\t\t);\n\t}\n\n\treturn [metrics.centerX, metrics.top];\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 inset = Math.max(0.5, strokeWidth / 2);\n\tconst outerWidth = Math.max(0, w - inset * 2);\n\tconst outerHeight = Math.max(0, h - inset * 2);\n\tif (outerWidth <= 0 || outerHeight <= 0) return \"\";\n\n\tconst amplitude = Math.min(\n\t\touterWidth * 0.12,\n\t\touterHeight * 0.12,\n\t\tMath.max(5, Math.min(14, Math.min(w, h) * 0.07)),\n\t);\n\tconst radius = Math.min(\n\t\touterWidth / 2,\n\t\touterHeight / 2,\n\t\tMath.max(amplitude * 2.5, outerHeight * 0.43),\n\t);\n\tconst outer = roundedRectMetrics(w, h, inset, radius);\n\tconst inner = roundedRectMetrics(\n\t\tw,\n\t\th,\n\t\tinset + amplitude,\n\t\tMath.max(0, radius - amplitude),\n\t);\n\tconst scallopCount = architecturalCloudScallopCount(outer.perimeter, amplitude);\n\tconst [startX, startY] = pointOnRoundedRectPath(inner, 0);\n\tconst segments = [`M${svgNumber(startX)} ${svgNumber(startY)}`];\n\n\tfor (let index = 0; index < scallopCount; index += 1) {\n\t\tconst controlDistance = ((index + 0.5) / scallopCount) * outer.perimeter;\n\t\tconst endDistance = ((index + 1) / scallopCount) * inner.perimeter;\n\t\tconst [controlX, controlY] = pointOnRoundedRectPath(outer, controlDistance);\n\t\tconst [endX, endY] = pointOnRoundedRectPath(inner, endDistance);\n\t\tsegments.push(\n\t\t\t`Q${svgNumber(controlX)} ${svgNumber(controlY)} ${svgNumber(endX)} ${svgNumber(endY)}`,\n\t\t);\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 };\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\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\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />`;\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<Pick<VectorSceneItem, \"stroke\" | \"strokeWidth\" | \"strokeOpacity\">>,\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): 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\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\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\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\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, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeHtmlText(value: string): string {\n\treturn value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\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 localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst title = getString(props.title) ?? getString(props.label) ?? \"Bookmark\";\n\tconst url = getString(props.url) ?? \"URL unavailable\";\n\tconst description =\n\t\tgetString(props.description) ??\n\t\tgetString(props.hostname) ??\n\t\t\"Imported from tldraw\";\n\tconst stroke = shapeStrokeColor(shape);\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t<rect x=\"16\" y=\"16\" width=\"${formatNumber(Math.max(56, width * 0.22))}\" height=\"${formatNumber(Math.max(56, height * 0.32))}\" rx=\"12\" fill=\"${stroke}\" fill-opacity=\"0.12\" />\n\t\t<path d=\"M${formatNumber(width * 0.11)} ${formatNumber(height * 0.25)} H${formatNumber(width * 0.18)}\" stroke=\"${stroke}\" stroke-width=\"3\" stroke-linecap=\"round\" />\n\t\t${buildForeignObjectTextSvg({ x: width * 0.28, y: 16, width: width * 0.64, height: height * 0.22, text: title, fontSize: 17, color: \"#111827\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: width * 0.28, y: height * 0.24, width: width * 0.64, height: height * 0.14, text: url, fontSize: 12, color: stroke })}\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.46, width: width - 32, height: height * 0.42, text: description, fontSize: 13, color: \"#4b5563\" })}\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 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/text-svg.ts","../src/scene/shape-builders.ts","../src/plugins/tldraw/index.ts"],"names":["getStroke","op","b","s","escapeHtmlText","document","x","y","pressure"],"mappings":"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","file":"tldraw.cjs","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","/**\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, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Escape for plain text inside HTML `foreignObject` body (not attribute). */\nfunction escapeHtmlText(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n\n/** Default body font size for vector text (local SVG units). */\nexport const DEFAULT_TEXT_FONT_SIZE = 18;\nconst LINE_HEIGHT_RATIO = 22 / 18;\nconst FIRST_LINE_BASELINE_RATIO = 24 / 18;\nconst PLACEHOLDER = \"Tap to type\";\n\nconst MIN_TEXT_BOX_W = 40;\nconst MIN_TEXT_BOX_H = 36;\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/**\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 system-ui, sans-serif`;\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(8, fontSize * 0.35),\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 = \"#2563eb\",\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=\"system-ui,sans-serif\" 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=\"system-ui,sans-serif\" 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=\"system-ui,sans-serif\" 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 = \"#2563eb\",\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\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:2px 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:system-ui,sans-serif;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:2px 4px;font-size:${fontSize}px;line-height:${lh}px;font-family:system-ui,sans-serif;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/** Resolved stroke for SVG generation. */\nexport type StrokeStyle = {\n\tstroke: string;\n\tstrokeWidth: number;\n\tstrokeOpacity?: number;\n};\n\nexport const DEFAULT_STROKE_STYLE: StrokeStyle = {\n\tstroke: \"#2563eb\",\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};\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 };\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\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\treturn `<path d=\"${payload.d}\" fill=\"none\" stroke=\"${payload.stroke}\" stroke-width=\"${payload.strokeWidth}\" stroke-linecap=\"round\" stroke-linejoin=\"round\" shape-rendering=\"geometricPrecision\"${op} />`;\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<Pick<VectorSceneItem, \"stroke\" | \"strokeWidth\" | \"strokeOpacity\">>,\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): 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\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\tpathPointsLocal,\n\t\tchildrenSvg: \"\",\n\t});\n}\n\nfunction escapeSvgAttr(s: string): string {\n\treturn s.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\").replace(/</g, \"&lt;\");\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\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, \"&amp;\")\n\t\t.replace(/</g, \"&lt;\")\n\t\t.replace(/>/g, \"&gt;\")\n\t\t.replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeHtmlText(value: string): string {\n\treturn value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\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 localBounds = resolveShapeLocalBounds(snapshot, shape.id);\n\tconst width = localBounds.width;\n\tconst height = localBounds.height;\n\tconst title = getString(props.title) ?? getString(props.label) ?? \"Bookmark\";\n\tconst url = getString(props.url) ?? \"URL unavailable\";\n\tconst description =\n\t\tgetString(props.description) ??\n\t\tgetString(props.hostname) ??\n\t\t\"Imported from tldraw\";\n\tconst stroke = shapeStrokeColor(shape);\n\tconst inner = `\n\t\t<rect width=\"${formatNumber(width)}\" height=\"${formatNumber(height)}\" rx=\"16\" fill=\"#ffffff\" stroke=\"${stroke}\" stroke-width=\"1.5\" />\n\t\t<rect x=\"16\" y=\"16\" width=\"${formatNumber(Math.max(56, width * 0.22))}\" height=\"${formatNumber(Math.max(56, height * 0.32))}\" rx=\"12\" fill=\"${stroke}\" fill-opacity=\"0.12\" />\n\t\t<path d=\"M${formatNumber(width * 0.11)} ${formatNumber(height * 0.25)} H${formatNumber(width * 0.18)}\" stroke=\"${stroke}\" stroke-width=\"3\" stroke-linecap=\"round\" />\n\t\t${buildForeignObjectTextSvg({ x: width * 0.28, y: 16, width: width * 0.64, height: height * 0.22, text: title, fontSize: 17, color: \"#111827\", fontWeight: 700 })}\n\t\t${buildForeignObjectTextSvg({ x: width * 0.28, y: height * 0.24, width: width * 0.64, height: height * 0.14, text: url, fontSize: 12, color: stroke })}\n\t\t${buildForeignObjectTextSvg({ x: 16, y: height * 0.46, width: width - 32, height: height * 0.42, text: description, fontSize: 13, color: \"#4b5563\" })}\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 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"]}